Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

PWM SORUNU

Başlatan ECHO, 30 Kasım 2013, 11:37:14

ECHO

Arkadaşlar selam. timer1 den okudugum yükselen kenar darbelerini 3 örnekle okuyup ortalamasını aldıkdan sonra 0-250 aralıgında pwm duty ile 4-20ma bilgiye çevirerek motor driverı sürüyorum.Driver bağlı değilken herşey normal 4-20ma çıkış alıyorum ama driver bağlandığı zaman o an ki değeri neyse (o an 8 ma çıkış veriyosa) pwm kilitleniyor ve okudugum frekans değişsede pwm çıkışı değişmiyor yardımcı olabilirseniz şimdiden teşekkürler




#include <16F88.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOPUT                    //No Power Up Timer
#FUSES XT                     //Internal RC Osc
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES IESO                     //Internal External Switch Over mode enabled

#use delay(clock=4000000)

//#use rs232(baud=19200,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8,stop=1) //SERI HABERLESME
#use fast_io(a) //PORT KULLANIMINI AC
#use fast_io(b)  // PORT KULLANIMI AC

int16 value=0,al=0,ort=0;    
int8 i;
double j;
void oku()
{

     for(i=0;i<3;i++)
     {
      value=0;
      setup_timer_1(t1_external | T1_DIV_BY_1); 
      set_timer1(200);                               //TIMERIN SAYMAYA BASLAMA DEGERI "0"
      delay_ms(10);                                //10MS GECIKME                 
      setup_timer_1(T1_DISABLED); //ZAMANLAYICIYI KAPAT
      value=get_timer1();   //GECEN SUREÇDE KI YUKSELEN KENAR DARBE SAYISINI DEGISKENE AT
      value=(int16)value;
      al=al+value;
     
      if(i==2)
      {
       ort=al/3;
       ort=3100-ort;
       ort=(int16)ort;
           
      }
     
     }
     
     
}


     



void main()       //ANA PROGRAM
{
  
   setup_ccp1(CCP_PWM); //PWM KURULUMU
   setup_timer_2(T2_DIV_BY_4,250,1);   
   set_pwm1_duty(0);
   setup_comparator(NC_NC_NC_NC); 
   set_tris_b(0b11000000);
   output_b(0x00);
   while(1)
   { 
     
      oku();
      delay_ms(50);
      set_pwm1_duty(ort);
      delay_ms(10);
     
     
  
   }
}