Güneş takip sistemi projem simülasyonda çalışıyor gerçekte çalışmıyor

Başlatan egerkagan, 15 Nisan 2015, 21:30:23

egerkagan

Arkadaşlar merhaba , bitirme projesi olarak 2 eksenli güneş takip sistemi yapacağım . motor olarak 2 adet step motor kullandım . Projem proteusta çalışıyor fakat gerçekte y ekseninde hareket ettirecek motor bi türlü çalışmıyor . İşlemciden motor için pals gelmiyor . Kod ve devreyi aşağıda paylaştım . Yardımlarınızı veya varsa daha önceden bu projeyi yapan önerilerinizi bekliyorum .

Özet : Turuncu etiketli motoruma işlemciden hareket etmesi için pals gelmiyor .

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)  // 4mhz kullandım 
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)   /// ledler

int i=0,hiz=400,tol=10;
int avt,avd,avl,avr,d_xeks,d_yeks;
unsigned int16 ldr1, ldr2, ldr3, ldr4;
const int yarim_adim[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; 

void LDR_GirdiOku()
{
    delay_us(20);
    set_adc_channel(0);
    ldr1 = read_adc();

    delay_us(20);
    set_adc_channel(1);
    ldr2 = read_adc();

    delay_us(20);
    set_adc_channel(2);
    ldr3 = read_adc();

    delay_us(20);
    set_adc_channel(3);
    ldr4 = read_adc();

    delay_us(4);
    

avt = (ldr1+ldr2)/2;
avd = (ldr3+ldr4)/2;
avl = (ldr2+ldr4)/2;
avr = (ldr1+ldr3)/2;

d_xeks = avt-avd;  // alt ve üst ldrler farkı
d_yeks = avl-avr;  // sağ ve sol ldrler farkı 
    
}

void YukariMotorAdimla()
{
output_low(pin_C1);
output_low(pin_C2);
output_low(pin_C0);

output_high(pin_C3);

output_b(yarim_adim); 
delay_ms(hiz);            

         if (i==7)                
            i=-1;
         i++;        
}

void AsagiMotorAdimla()
{
output_low(pin_C1);
output_low(pin_C0);
output_low(pin_C3);

output_high(pin_C2);
if (i==0)                
            i=8;
         i--;                      
         output_b(yarim_adim); 
         delay_ms(hiz);        
}

void SolaMotorAdimla()
{
output_low(pin_C0);
output_low(pin_C2);
output_low(pin_C3);

output_high(pin_C1);
output_d(yarim_adim); 
delay_ms(hiz);            

         if (i==7)                
            i=-1;
         i++;        
}

void SagaMotorAdimla()
{
output_low(pin_C1);
output_low(pin_C2);
output_low(pin_C3);

output_high(pin_C0);
if (i==0)                
            i=8;
         i--;                      
         output_d(yarim_adim);
         
         delay_ms(hiz);        
}

void MotorYonlendir()
{
  if (-1*tol > d_xeks || d_xeks > tol)  
  {
      if ( avt > avd )
      {
      YukariMotorAdimla();
      }
      else if (avt < avd )
      {
      AsagiMotorAdimla();
      }
  }
  
  if (-1*tol > d_yeks || d_yeks > tol)
  {
      if ( avl > avr ) 
      {
      SolaMotorAdimla();
      }
      else if ( avl < avr )
      {
      SagaMotorAdimla();
      }
  }
      
}


void main ()
{
    setup_psp(PSP_DISABLED);     
    setup_timer_1(T1_DISABLED); 
    setup_timer_2(T2_DISABLED,0,1); 
    setup_CCP1(CCP_OFF);            
    setup_CCP2(CCP_OFF);            

    set_tris_a(0x0F);                        
    set_tris_b(0x00);
    set_tris_c(0x00);
    set_tris_d(0x00);
   
   output_b(0x00);
   output_c(0x00);
   output_d(0x00);
   
    setup_adc(adc_clock_div_32);       // Bu kod ADC çevrimi için frekansı belirliyor.
    // ADC Saati için sistem saati 32 ye bölünecek -> 4.000.000 / 32 = 125 kHz yaklaşık.Bizim için yeterli
    setup_adc_ports(ALL_ANALOG); 

   
while(1)
    {
         LDR_GirdiOku();
         MotorYonlendir();
    }
}








eml581