tinnhan247
28-02-2013, 01:11 AM
Chào các bác, em đang viết code để điều khiển động cơ bruchless dùng qua ESC và pic18f4431.
Tần số 50Hz, đồ rộng xung ra là 1-2 ms, chu kì là 20ms.
ĐK từ xa phát tín hiệu từ bé đến lớn ( ga ), RX nhận tín hiệu, em đọc adc từ RX vào PIC
Đây là code của em:
#Include <18F4431.h>
#Device *=16 ADC=10
#FUSES NOWDT //No Watch Dog timer
#FUSES HS //High speed Osc( >4mhz)
#FUSES NOPUT //No Power up Timer
#FUSES NOPROTECT
#FUSES NOLVP
#Use delay(clock=20000000)
#byte portb=0x06
#Include <math.h>
//////////////////////////////////
Void main()
{
Int16 VarADC,VarDuty;
Setup_adc(ADC_CLOCK_INTERNAL);
Setup_adc_ports(1);
Set_ADC_channel(0);
Setup_power_pwm_pins(PWM_BOTH_ON,PWM_OFF, PWM_OFF, PWM_OFF);
Setup_power_pwm(PWM_CLOCK_DIV_128|PWM_FREE_RUN,1,0 ,3124,0,1,0);
Delay_us(20);
While (TRUE)
{
VarADC =Read_adc(ADC_START_AND_READ);
VarDuty = VarADC*22;
Set_power_pwm0_duty(VarDuty);
Set_power_pwm_override(1,false,0);
}
}
Em thắc mắc ở 2 chỗ là hàm Setup_power_pwm(PWM_CLOCK_DIV_128|PWM_FREE_RUN,1,0 ,3124,0,1,0);
và công thức tính toán của em VarDuty = VarADC*x (x là số tỷ lệ thích hợp)
giờ em muốn xung PWM vào ESC có tần số 50 Hz, độ rộng từ 1-2ms chu kì 20s thì thông số phải thế nào ạ, em ko hiểu cách tính toán của các hàm này. Em cảm ơn nhiều ạ.
Tần số 50Hz, đồ rộng xung ra là 1-2 ms, chu kì là 20ms.
ĐK từ xa phát tín hiệu từ bé đến lớn ( ga ), RX nhận tín hiệu, em đọc adc từ RX vào PIC
Đây là code của em:
#Include <18F4431.h>
#Device *=16 ADC=10
#FUSES NOWDT //No Watch Dog timer
#FUSES HS //High speed Osc( >4mhz)
#FUSES NOPUT //No Power up Timer
#FUSES NOPROTECT
#FUSES NOLVP
#Use delay(clock=20000000)
#byte portb=0x06
#Include <math.h>
//////////////////////////////////
Void main()
{
Int16 VarADC,VarDuty;
Setup_adc(ADC_CLOCK_INTERNAL);
Setup_adc_ports(1);
Set_ADC_channel(0);
Setup_power_pwm_pins(PWM_BOTH_ON,PWM_OFF, PWM_OFF, PWM_OFF);
Setup_power_pwm(PWM_CLOCK_DIV_128|PWM_FREE_RUN,1,0 ,3124,0,1,0);
Delay_us(20);
While (TRUE)
{
VarADC =Read_adc(ADC_START_AND_READ);
VarDuty = VarADC*22;
Set_power_pwm0_duty(VarDuty);
Set_power_pwm_override(1,false,0);
}
}
Em thắc mắc ở 2 chỗ là hàm Setup_power_pwm(PWM_CLOCK_DIV_128|PWM_FREE_RUN,1,0 ,3124,0,1,0);
và công thức tính toán của em VarDuty = VarADC*x (x là số tỷ lệ thích hợp)
giờ em muốn xung PWM vào ESC có tần số 50 Hz, độ rộng từ 1-2ms chu kì 20s thì thông số phải thế nào ạ, em ko hiểu cách tính toán của các hàm này. Em cảm ơn nhiều ạ.