Autor Tema: Diferencia entre usar PWM y crear tu mismo el codigo en CCS  (Leído 1906 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
Diferencia entre usar PWM y crear tu mismo el codigo en CCS
« en: 25 de Marzo de 2005, 06:39:00 »
Alguien sabe cual es la diferencia entre usar el modulo PWM para obtener un duty cicle variable para el uso de motores, o usar sentencias del CCS del tipo:

output_bit(PIN_C3,1); //donde PIN_C3 serviria para enable/disable del motor
delay_ms(x); //donde x seria el tiempo que kieras que este activo el motor (duty cicle)
output_bit(PIN_C3,0);

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Diferencia entre usar PWM y crear tu mismo el codigo en CCS
« Respuesta #1 en: 25 de Marzo de 2005, 10:16:00 »
Si usas el módulo PWM el micro puede estar haciendo otras cosas sin que la generación de la señal le ocupe el más mínimo tiempo. Con comandos CCS sólo podrás hacer eso, o tendrás que compartir los recursos del micro entre esa tarea y el resto.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: Diferencia entre usar PWM y crear tu mismo el codigo en CCS
« Respuesta #2 en: 26 de Marzo de 2005, 07:25:00 »
Nocturno me podrias decir como podria hacer por ejemplo que un motor gire a la derecha cada 2 segundos, durante un tiempo (duty cicle) de 0,5 segundos. Es que he mirado las formulas que vienen para calcular el periodo y usar el duty cicle y demas, pero no me aclaro..

Gracias de antemano.

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Diferencia entre usar PWM y crear tu mismo el codigo en CCS
« Respuesta #3 en: 26 de Marzo de 2005, 10:33:00 »
Que onda Tornar,
En la web del pana Modulay hay muy buenos ejemplos.. en especifico a tu problema estan dos excelentes ejemplos de como usar el PWM subidos por el pana pocher hechales una mirada para ver como usarlo...  http://personal.auna.com/asencio5/Ejemplos%20C/PWM/
Cuando te refieres a mover un motor, te refieres a un servo motor no?...si es asi entonces  basicamente es aplicar un "tren de pulsos  con determinada frecuencia", en base a esta se define su desplazamiento...  normalmente(dependiendo del modelo de servo leyendo su DS)  con un tren de pulsos de 1.5 ms se mueve a la posicion intermedia (90°Giño y de 1 a 2 ms  para su movimiento completo de 180°.....
Es importante que sean TREN de pulsos, ya que de lo contrario, el servo continuara despues de haber llegado al punto de desplazamiento y pudes dañarlo ya que se va al tope. Para mantenerlo en un punto solo debes de seguir aplicando el tren de pulsos a la frecuencia(que determina posicion de desplazamiento) deseada.
Aqui un ejemplo(este tambien se lo di al pana modulay para que lo subiera a el link de ejemplos de c) usando SOLO comandos ccs.... no te fijes mucho en la precision ya que es muy impreciso... pero te sirve perfectamente para entender el funcionamiento y poderle aplicar el PWM(leete los ejemplos del link que te di, son excelentes para entender el calculo y uso del PWM)
 
#include <16F88.h>
#use delay(clock=8000000)
#fuses NOWDT,NOPUT,NOMCLR,NOBROWNOUT,NOLVP,INTRC_IO /*reloj interno a 8MHZ*/
#USE FAST_IO(B)
#byte portb=6
int tiempo;

retardo(int x){for(;x!=0;--x){delay_us(9);}}/*Retraso incrementa el pulso en 10us(9us+1us del for)*/

servo(){output_bit(pin_b7,1);delay_us(995); //1ms es el estandar a 90°, fue ajustado el valor
retardo(tiempo);                            //para simulacion, menos 8 ciclos de reloj de entrada
output_bit(pin_b7,0);                       //al for=4us(8*.5us)
delay_ms(20);
}

main(){port_b_pullups (true);
portb=0;
SET_TRIS_B(27); /*SETEAMOS TODO EL PUERTO B COMO SALIDA y el RB1 como entrada para boton*/
tiempo=42;
while(1){
if (!input(pin_b0)){if (tiempo<=83)tiempo++;}/*Variar valor limitante segun el modelo*/
if (!input(pin_b1)){if (tiempo>=1) tiempo--;}
if (!input(pin_b3)){tiempo=42;}
servo();
 }
}

Si necesitas el Diseño en proteus me avisas y te lo envio.
Salu2 pana! Sonrisa