Motor kontrolünde sorun

Başlatan myprayer14, 18 Haziran 2016, 02:12:54

myprayer14

Motor  devir yönü kontrol devresinde şöyle bir sorun var. Motoru programla sağa ve sola hareket ettirebiliyorum. Ama ilk enerjiyi verir vermez motor bir yönde dönmeye başlıyor. Bunu engelleyemedim neyden kaynaklanıyor anlayamadım. İkinci sorun ise motoru bir başka butonla durdurmaya çalıştığımda  yani  sürücünün  sürücüde ki high side'ları 1 yaptığımda motor durmamakla beraber, diğer yön butonlarından birine basıp yön değiştirdikten sonra diğer yöne dönmek isteyip butona bastığımda motor duruyor. Çok absürd bir durum gibi duruyor. Yardımcı olur musunuz ? Kodlar şöyle ccs'te;


#include <18F2520.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay (clock=4000000)

int i=50;

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   setup_oscillator(OSC_4MHZ);
   
   
   set_tris_a(0x1F);   // RA0 ve RA1 pinleri giriş
   set_tris_b(0x00);
   set_tris_c(0x00);   // portc komple çıkış.
   output_b(0x00);
   output_c(0x00);
  set_pwm1_duty(0);
  set_pwm2_duty(0);
   setup_ccp1(CCP_PWM);  // CCP1 birimi PWM çıkışı için ayarlandı
   setup_ccp2(CCP_PWM);  // CCP2 birimi PWM çıkışı için ayarlandı
   
   setup_timer_2(T2_DIV_BY_1,100,1);

   
       while(1) {       
         if(input(pin_a3)){
         
            delay_ms(25);
            set_pwm1_duty(0);
            output_low(pin_c3);
         
            delay_ms(100);
            set_pwm2_duty(i);
            output_high(pin_c4) ;
           
            while(input(pin_a3));
         }
         delay_ms(825);
         if(input(pin_a4)){
         
            delay_ms(25);
            set_pwm2_duty(0);
            output_low(pin_c4);
            delay_ms(100);
           
            output_high(pin_c3) ;
            set_pwm1_duty(i);   
            delay_ms(825);
           
            while(input(pin_a4));
         }   
         if(input(pin_a2)){
         
            delay_ms(25);
            output_high(pin_c3);
            output_high(pin_c4) ;
           
            set_pwm1_duty(0);
            set_pwm2_duty(0);
           
           
            while(input(pin_a2));
         }
       
         
         }
         
}
         


Devre şeması lazımsa onu da paylaşırım.

İlyas KAYA

Tek bir if içine diğer buton kontrollerini  de yazmışsınız. Yani a2 ye basılı olmadışı sürece diğer butonlar bir ise yaramıyor. Her ıf satırını main de ayrı yapın. Başlangıçta neden çıkış veriyor anlamadim ama donanımsal olabilir. Ayrıca ana döngüye 50ms gibi bir bekleme ekleyin aksi takdirde tasma meydana gelebilir.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Powered by EzPortal