Activar los 6 PWM por hardware del PIC18F2431

Hola a todos.

Antes que nada gracias por pasarse por mi pregunta.

He trabajado con pics 16f84a, 16f887, 16f877 y 18f4550, en realidad no tengo mucho conocimiento de los pic y los he programado solamente en pic c (ccs), de ensamblador no se nada, con el 16f887 he trabajado los pwm del cpp1 y cpp2 mediante el timer2, pero buscando encontré el pic18f2431 que según el datasheet posee canales pwm desde el pin B0 hasta el B5, he revisado su datsheet y efectivamente ahi viene como configurar estos 6 canales, el problema es que no se como hacerlo en pic c y quisiera saber si alguien de ustedes podria ayudarme con eso, he buscado por el foro y en otros foros y no he encontrado como activar esos canales en ccs.
Por otro lado si alguien sabe de algun manual de ensamblador que me recomiende para empezar a aprender les agradeceré mucho, ya que la mayoria de las dudas que tengo siempre encuentro las soluciones pero en ensamblador :c y practicamente quedo igual u.u

De antemano muchas gracias. ...
 
en paralelo tienes mas cosas para hacer? por eso quiees hacerlo por hardware? yo cuando no tengo un micro con tales caracteristicas, suelo implementar un timer y en la interrupcion hago el control del puerto por bits... te subiria un ejemplo de un RGB con un 16F628, pero se va de tema por que esta en basic
 
bueno yo he logrado hasta 30 PWM con un 18f4550

lo hago con registros de corrimiento, esa es una idea si quieres varios PWM y se te acaban los puertos pues puedes expandir los puertos con cualquier cosa que se te ocurra multiplexores o registros de corrimiento.

en cuanto al ensamblador pues yo igual no se nada de ensamblador pero no es dificil si ya tienes practica programando un lenguaje lo unico que importa es la logica de programacion , solo que te vez limitado a nemonicos

he programado un PIC en ASM moviendo una secuencia mas aya no.
pero si programe un 6502 para un jueguito de Atari2600 y un Z80.

En conclucion puedo decir que el PIC al tener pocas instrucciones en ASM se hace muy tedioso hacer un algoritmo pues tienes que hacer uso de las banderas del CPU , en cambio en un CPU con mas instrucciones es un poco entretenido pues una instruccion hace muchas cosas.

el libro 16f84a si biene bien explicado pero pues si ya sabes algun lenguaje moderadamente bueno yo creo que el ASM es como mas no se enfocado a mover registros de interrupcion y remapear vectores
fuera de eso no lo usaria
 
buscando encontré el pic18f2431 que según el datasheet posee canales PWM desde el pin B0 hasta el B5, he revisado su datsheet y efectivamente ahí viene como configurar estos 6 canales, el problema es que no se como hacerlo en PIC C y quisiera saber si alguien de ustedes podría ayudarme con eso.
He buscado por el foro y en otros foros y no he encontrado como activar esos canales en CCS.
Aquí hay un ejemplo: Three Phase PWM Control for AC Induction Motor
Desafortunadamente no tiene diagrama, sólo está el código fuente y no encontré la página con más información.

También puedes ver los temas de ayuda de CCS PIC C Compiler.

Por ejemplo:

setup_power_pwm_pins();
setup_power_pwm();
set_power_pwm_override();
set_power_pwmX_duty();


Esas instrucciones las puedes usar como término de búsqueda en Google.

Y éste tema te puede servir: Power PWM on CCS C
Por otro lado, si alguien sabe de algún manual de ensamblador que me recomiende para empezar a aprender les agradeceré mucho, ya que la mayoría de las dudas que tengo, siempre encuentro las soluciones pero en ensamblador :c y prácticamente quedo igual u.u
Aquí en el Foro existe un tema: Lenguaje ensamblador para PIC desde 0


Dejo adjunto el archivo 3phase.txt original, para que no se pierda. (Cambiar extensión a .C)

Suerte.
 

Adjuntos

  • 3phase.txt
    29.6 KB · Visitas: 35
Última edición:
ýo tengo un ejemplo que hice para controlar 8 pwm con pic16f84 y un selector para indicar que pwm se le varia el ancho de pulso, si te interesa avisame para buscarlo!!!

el codigo lo puedes usar para cualquier pic creo por ahi recuerdo que hice un ejemplo con 30 pwm con pic877 controlado por rs232
 
Última edición:
Muchas gracias a todos por sus respuestas.

en paralelo tienes mas cosas para hacer? por eso quiees hacerlo por hardware? ...
Asi es, haré mas cosas en paralelo por eso busco hacerlo por hardware, además de querer aprender a usar esos pwm, por software ya los he hecho de hecho tengo uno funcionando actualmente para un inversos trifásico, pero quiero hacer lo mismo ahora con los pwm y a la vez llevar otros pequeños procesos.

Aquí hay un ejemplo: Three Phase PWM Control for AC Induction Motor
Desafortunadamente no tiene diagrama, sólo está el código fuente y no encontré la página con más información.

También puedes ver los temas de ayuda de CCS PIC C Compiler.

Por ejemplo:

setup_power_pwm_pins();
setup_power_pwm();
set_power_pwm_override();
set_power_pwmX_duty();


Esas instrucciones las puedes usar como término de búsqueda en Google.

Y éste tema te puede servir: Power PWM on CCS C

Aquí en el Foro existe un tema: Lenguaje ensamblador para PIC desde 0


Dejo adjunto el archivo 3phase.txt original, para que no se pierda. (Cambiar extensión a .C)

Suerte.

Muchisimas gracias D@rkbytes precisamente esto buscaba, las instrucciones no habia sabido cómo buscarlas, lo chacare y cualquier duda les estare dando lata por aca de nuevo.
Saludos!
 
Aquí hay un ejemplo: Three Phase PWM Control for AC Induction Motor
Desafortunadamente no tiene diagrama, sólo está el código fuente y no encontré la página con más información.

Para empezar compile el código que me proporcionaste e hice la simulación en proteus, en el archivo menciona los pines que utiliza por lo cual el diseño en proteus se puede hacer fácilmente, ejecute la simulación y me lleve una pequeña decepción ya que no efectúa el desfase de 120° en las salidas, por lo cual no funciona como inversor trifásico u.u adjunto mi captura de pantalla.

Analizando un poco me doy cuenta que esto se debe a que los 6 pwm trabajan con la misma configuración, lo unico que se puede variar independientemente es el ancho de pulso, y no se pueden meter "retardos" para hacer el desfase (o al menos no se como hacerlo) y esa es mi duda si saben como podria hacer o si para empezar se puede hacer algo asi:


pwm0 ____----____----____----____
pwm2 __----____----____----____--

ese efecto solo lo he logrado haciendo los pulsos por software mediante interrupciones por desbordamiento de algún timer, pero no logro hacerlo con el pwm por hardware ya que siempre, haga lo que haga, aun que espere cierto tiempo para activar el segundo pwm éste inicia en sincronía con el anterior, puedo variar los anchos de pulso, si, pero no desfasar el punto de inicio.

Otra duda es si se puede hacer que un pwm por hardware empiece en bajo en lugar de alto, me explico, usualmente el pwm inicia así:
---____---____---____--
y quiero saber si hay forma , de haberla, como se hace para que inicie así:
____---____---____---_
Aclaro que no deseo invertir el pwm porque bien podría ajustar el tiempo en alto al tiempo que quiero en bajo y a la salida del pic invertirlo, pero quiero saber si hay forma de hacerlo desde la programación.

Saludos y gracias por el apoyo de antemano.
 

Adjuntos

  • 3-fases.jpg
    3-fases.jpg
    233 KB · Visitas: 25
Última edición:
Siempre, pero siempre que quieras trabajar más de un pwm por hardware, la frecuencia es la misma y lo que podes variar es el duty de cada salida. No entiendo tu planteo.
 
Última edición por un moderador:
Mira bien el código y verás que le falta corregir algunas cosas, por ejemplo; esperar hasta que la conversión del ADC se complete.

Por lo que se puede ver, la persona que realizó ese programa, no lo hizo pensando en una simulación.
Así que, corrige los detalles que le hacen falta y realiza una prueba real.

Y me parece que sí se puede invertir la fase.
Mirate el archivo .H del PIC y ahí verás las instrucciones para el Power PWM.
 
Atrás
Arriba