Macintosh
08-06-2008, 10:31 AM
một vài kinh nghiệm PWM với chức năng POWER PWM của PIC18FXX31 muốn chia sẻ:
Các khoảng Period ,Duty Cycle, được tích hợp sẵn trong khối PPWM của PIC18F4431, người sủ dụng chỉ việc thiết lập các thông số này và sử dụng.
Với Period ,được thiết lập sao cho tần số hoạt động của động cơ nằm trong khoảng 10kHz-20kHz ,nằm ngoài khoảng này động cơ sẽ phát ra tiêng khó chịu.
4 module PWM của PIC 18F4431 nằm rải rác các chân RB0-RB5,RD6-RD7. Lưu ý,Module 1 gồm 2 chân output là PWM0-PWM1,Module 2 gồm 2 chân output là PWM2-PWM3,…
Module 4 gồm 2 chân output là PWM6-PWM7,thích hợp với việc điều khiển động cơ bằng cầu H,dùng 2 chân để kích 2 nửa cầu.Tuy nhiên cầu H có giá thành đắt và khó thiết kế hơn,so với sử dụng 01 FET+01 Relay.(FET để đóng ngắt,Relay để đảo chiều).Trên mạch của tôi sử dụng phương án thứ 2.ngĩa là với 1 module PWM ta chỉ sử dụng 1 chân,và đó là các chân số lẻ(PWM 1,3,5,7),các chân xuất PWM lẻ là RB1,RB3,RB4,RD7,ta nối các chân này đến FET Driver .
Và cách thiết lập trên CCS là:
setup_power_pwm_pins(PWM_ODD_ON, // module1
PWM_ODD_ON, // module2
PWM_ODD_ON, // module3
PWM_ODD_ON); // module4
Thiết lập các thông số hoạt động:
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,
1, //postscale, not used
0, //initial PTMR
80, //**************PTPER9à liên quan tới Period
0, //compare special event, not used
1, //postscale compare special event, not used
0); //dead_time
set_power_pwm_override(1, false, 0); //overide ?,see datasheet
set_power_pwm_override(3, false, 0);
set_power_pwm_override(5, false, 0);
set_power_pwm_override(7, false, 0);
Cuối cùng để điều khiển tốc độ motor ta chỉ cần thay đổi biến duty cho mỗi Motor:
set_power_pwm0_duty(duty0); //motor1
set_power_pwm2_duty(duty1); //motor2
set_power_pwm4_duty(duty2); //motor3
set_power_pwm6_duty(duty3); //motor4
Các bạn cứ thiết lập như tôi, chắc chắn sẽ chạy, còn lại ,xem datasheet Pic18f4331,4431,2331,2431
PS:nếu đầu vào Driver Fet của bạn tích cực mức LOW thì nhớ thêm HPOL_LOW trong FUSES khi đó
set_power_pwm0_duty(0); à dc dừng
set_power_pwm0_duty(duty) // duty != 0 :dc chạy
Các khoảng Period ,Duty Cycle, được tích hợp sẵn trong khối PPWM của PIC18F4431, người sủ dụng chỉ việc thiết lập các thông số này và sử dụng.
Với Period ,được thiết lập sao cho tần số hoạt động của động cơ nằm trong khoảng 10kHz-20kHz ,nằm ngoài khoảng này động cơ sẽ phát ra tiêng khó chịu.
4 module PWM của PIC 18F4431 nằm rải rác các chân RB0-RB5,RD6-RD7. Lưu ý,Module 1 gồm 2 chân output là PWM0-PWM1,Module 2 gồm 2 chân output là PWM2-PWM3,…
Module 4 gồm 2 chân output là PWM6-PWM7,thích hợp với việc điều khiển động cơ bằng cầu H,dùng 2 chân để kích 2 nửa cầu.Tuy nhiên cầu H có giá thành đắt và khó thiết kế hơn,so với sử dụng 01 FET+01 Relay.(FET để đóng ngắt,Relay để đảo chiều).Trên mạch của tôi sử dụng phương án thứ 2.ngĩa là với 1 module PWM ta chỉ sử dụng 1 chân,và đó là các chân số lẻ(PWM 1,3,5,7),các chân xuất PWM lẻ là RB1,RB3,RB4,RD7,ta nối các chân này đến FET Driver .
Và cách thiết lập trên CCS là:
setup_power_pwm_pins(PWM_ODD_ON, // module1
PWM_ODD_ON, // module2
PWM_ODD_ON, // module3
PWM_ODD_ON); // module4
Thiết lập các thông số hoạt động:
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,
1, //postscale, not used
0, //initial PTMR
80, //**************PTPER9à liên quan tới Period
0, //compare special event, not used
1, //postscale compare special event, not used
0); //dead_time
set_power_pwm_override(1, false, 0); //overide ?,see datasheet
set_power_pwm_override(3, false, 0);
set_power_pwm_override(5, false, 0);
set_power_pwm_override(7, false, 0);
Cuối cùng để điều khiển tốc độ motor ta chỉ cần thay đổi biến duty cho mỗi Motor:
set_power_pwm0_duty(duty0); //motor1
set_power_pwm2_duty(duty1); //motor2
set_power_pwm4_duty(duty2); //motor3
set_power_pwm6_duty(duty3); //motor4
Các bạn cứ thiết lập như tôi, chắc chắn sẽ chạy, còn lại ,xem datasheet Pic18f4331,4431,2331,2431
PS:nếu đầu vào Driver Fet của bạn tích cực mức LOW thì nhớ thêm HPOL_LOW trong FUSES khi đó
set_power_pwm0_duty(0); à dc dừng
set_power_pwm0_duty(duty) // duty != 0 :dc chạy