İsis servo motor orta konum sorunu

Başlatan ziyaretci, 14 Mart 2014, 22:36:16

ziyaretci

Merhaba,

4Mhz lik bir sistemde;

SETUP_TIMER_2(T2_DIV_BY_16,255,1);  oranını  kullanıyorum.

Orta nokta için 1.5ms ;
Hz = 1 / 0.0015
      = 666.6666667Hz ()

      pwm freq = (1Mhz)/(PR2+1)*(prescaler)
666.6666667 = (1Mhz) / (x * 16)
                   x  =(1Mhz) / (666.6666667 * 16)
                       = 93.75

1.5ms için PR 2 değeri 93.75 olarak bulduk.

set_pwm1_duty(93.75);  yapıyorum ama orta nokta olmuyor.

Yazdığım kod aşağıda, pwm ile uygulamalarıma daha yeni başladım. Bir yerde hatamı yapıyorum bilmiyorum. Pic enerjilendiğinde servo -90 sol dönüyor.

#include <16f877.h>
#use delay (clock=4M)
#fuses XT,nowdt,NOPROTECT,NOBROWNOUT,NOPUT,NOLVP,NOCPD,nowrt,nodebug,nocpd

signed int i=93.75;

 
Void sola_don(){
if(i>=62.5){
set_pwm1_duty(i);
i--;}else i=93.75;
}
 
 Void saga_don(){
if(i<=125){
set_pwm1_duty(i);
i++;
 }else i=93.75;
}
 
Void main(){
setup_psp(psp_disabled);
setup_timer_1(t1_disabled);
setup_adc_ports(no_analogs);
setup_ccp2(ccp_off);
setup_adc(ADC_off);
setup_adc_ports(NO_ANALOGS);

SETUP_TIMER_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
output_c(0x00);

For(;;){
 
 if(input(pin_e0)){while(input(pin_e0)); saga_don();}
 if(input(pin_e1)){while(input(pin_e1)); sola_don();}

 }
}