Trích:
Nguyên văn bởi lequocbao
khi set cpp1 và cpp2 là pwm thì mình cần làm như sau:
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2 (mode, period, postscale);
set_pwm1_duty(value);
set_pwm2_duty(value);
vd:
setup_timer_2(T2_DIV_BY_1,127,1);//cycle time=(1/20000000)*4*1*(127+1)=25.6us.
khi muốn động cơ chạy với 50% tốc độ thì:
set_pwm1_duty(250);//duty 50%=12.53us=250*1/20000000;
nhưng động cơ vẫn chạy ào ào như lúc kích trực tiếp không hiểu tại sao nữa?
|
Bạn đọc kỹ lại hướng dẫn của CCS C cho hàm set_pwm1_duty(). Nếu giá trị thiết lập duty cycle là 8-bit (là trường hợp hiện có của bạn), nó sẽ được dịch trái 2 bit để tạo ra giá trị 10-bit. Do đó, giá trị thiết lập bằng 250 sẽ dẫn đến duty cycle = 100 %. Với thiết lập của bạn như trên, duty cycle = 50 % sẽ ứng với giá trị thiết lập là 64.
Thân,