quinta-feira, 27 de maio de 2010

0
Software PWM no CCS Compiler

Para aqueles que usam o CCS compiler, como eu, aqui vai uma função facilmente implementavel para a geração de PWM via software, ela foi criada por mim, ela controla servos que funcionam de 500ms(0°) a 2500ms(180°) de periodo, isso é perfeitamente ajustavel na própria função, somente testado, e muito, com PIC 16F628A.



Função Software PWM (controla_servo)
struct   matriz_servo
   {
      long  pos_atual;
      int   saida;
      int   led;
   }servo1;

//Função que controla o servo
short controla_servo(struct matriz_servo *servo_con,long posicao_des)
{
   long tempo_pos;
   long tempo_comp_18ms;
   int i,precisao_servo;
   if (posicao_des>pos_max)
      return 0;
   precisao_servo=abs(((signed long) ((servo_con->pos_atual)-posicao_des))/2);
   servo_con->pos_atual=posicao_des;
   if (servo_con->led!=0)
       output_high(servo_con->led);
   tempo_comp_18ms=(18000-(servo_con->pos_atual));
   tempo_pos=(500+10*(servo_con->pos_atual));            //Modifique aqui se o seu servo começa em outro período.
   disable_interrupts(GLOBAL);
   for (i=0;i<=precisao_servo;i++)
      {
         output_high(servo_con->saida);
         delay_us(tempo_pos);
         output_low(servo_con->saida);
         delay_us(tempo_comp_18ms);
      }
   if (servo_con->led!=0)
       output_low(servo_con->led);
   enable_interrupts(GLOBAL);
   return 1;
}

//Inicializações
   servo1.saida=servo1_pin; //Lembre se de definir o pino com #define servo1_pin RXx
   servo2.saida=servo2_pin;
#ifdef    led_servo1
   servo1.led=led_servo1;
#else
    servo1.led=0;
    servo2.led=0;
#endif
   servo1.pos_atual=100;
   controla_servo(&servo1,0); //Nunca se esqueça que servo1 é um ponteiro, entao eu passo somente o ender.
/*Isto é feito porque o tamanho do pulso, é dado em função de posição desejada menos a anterior, entao como quero que ele va para 0, digo que ele estava em 100 para gerar uma diferença e o servo mover */


0 comentários:

Postar um comentário

Por favor, dê as suas sugestões

Etiquetas