PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 08-06-2008, 10:31 AM   #1
Macintosh
Đệ tử 3 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 48
:
config module power pwm của pic 18fxx31

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

thay đổi nội dung bởi: Macintosh, 19-07-2008 lúc 12:02 PM.
Macintosh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-10-2008, 01:19 AM   #2
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
các huynh cho em hỏi.tại sao trong CCS C em khai báo như thế này thì chân bù chỉ có thể lên 1v và chân kia chỉ xuống 1v. khi mà set duty cycle= 4 lần period thì mới đầy xung được.

setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_OFF,PWM _OFF,PWM_OFF);
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1, 0,80,0, 1,0);
set_power_pwm0_duty(80);
/////////
khi set_power_pwm0_duty(320); thì mới đầy xung!!
thanks!!
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-10-2008, 08:49 PM   #3
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
biến duty là int16 hay int8 bit thế , bác ghi rõ để ae newbie như tui còn rõ , heheh

hình như pro ở BKC4 (hoặc CLC) , vì tui đọc ct của BKC4 cũng setup y như thế , đúng ko ta ?
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-10-2008, 12:25 AM   #4
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
Trích:
Nguyên văn bởi Mr.Bi View Post
biến duty là int16 hay int8 bit thế , bác ghi rõ để ae newbie như tui còn rõ , heheh

hình như pro ở BKC4 (hoặc CLC) , vì tui đọc ct của BKC4 cũng setup y như thế , đúng ko ta ?
ô!!sorry!! biến duty là int16.mình đã thử nhiều các giá trị của period.đúng là khi dùng CCS C thì duty phải lớn cỡ 4 lần period thì mới đầy xung.đây là kinh nghiệm 1 đứa bạn bảo mình.mình hỏi tại sao thì nó cũng chưa biết.
có huynh nào biết ko!! giải thích cho đệ với.hay đó là do CCS C dịch.mà nếu vậy thì thông số nào quyết định nó nhỉ!!!
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-10-2008, 01:44 AM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi cong1810 View Post
ô!!sorry!! biến duty là int16.mình đã thử nhiều các giá trị của period.đúng là khi dùng CCS C thì duty phải lớn cỡ 4 lần period thì mới đầy xung.đây là kinh nghiệm 1 đứa bạn bảo mình.mình hỏi tại sao thì nó cũng chưa biết.
có huynh nào biết ko!! giải thích cho đệ với.hay đó là do CCS C dịch.mà nếu vậy thì thông số nào quyết định nó nhỉ!!!
Clock cho bộ timer tạo chu kỳ thì được lấy từ clock thực thi lệnh (có tần số = tần số xung nhịp/4), nhưng thanh ghi xác định duty cycle lại được so sánh với số đếm của timer kết hợp với các Q-bit. Do đó, độ phân giải của duty cycle cao hơn độ phân giải của bộ đếm timer 4 lần (hay 4 đơn vị đếm của duty cycle mới bằng 1 đơn vị đếm của thanh ghi định thời gian chu kỳ). Bạn hãy xem hình 17-11 trong datasheet của PIC18F4431.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-10-2008, 09:09 PM   #6
Macintosh
Đệ tử 3 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 48
:
Trích:
Nguyên văn bởi Mr.Bi View Post
hình như pro ở BKC4 (hoặc CLC) , vì tui đọc ct của BKC4 cũng setup y như thế , đúng ko ta ?
thanks, it's me BKC4, sao bác có code của tui thế. bên CLC ko dùng 4331
me: thangbkc4@gmail.com

thay đổi nội dung bởi: Macintosh, 12-10-2008 lúc 09:18 PM.
Macintosh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-10-2008, 08:50 PM   #7
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
ah , Thắng bên C4 ! đội u chơi ổn định , trận cuối xui tí thui .
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-10-2008, 11:11 PM   #8
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
em có thêm 1 vấn đề chưa giải quyết đựoc!! làm sao mình tạo được period lớn trong PWM nhỉ! tức là em muốn tạo 1 xung có tần số thấp period =20ms chẳng hạn.do 2 thanh ghi dùng cho period chỉ có 12 bit tức là tối đa 4096 ms!em dùng thạch anh 4M!!pic 18f4431
các huynh giúp đỡ ạ!!!
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-10-2008, 12:06 AM   #9
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi cong1810 View Post
em có thêm 1 vấn đề chưa giải quyết đựoc!! làm sao mình tạo được period lớn trong PWM nhỉ! tức là em muốn tạo 1 xung có tần số thấp period =20ms chẳng hạn.do 2 thanh ghi dùng cho period chỉ có 12 bit tức là tối đa 4096 ms!em dùng thạch anh 4M!!pic 18f4431
các huynh giúp đỡ ạ!!!
Bạn dùng thêm prescale để giảm tần số xung clock đưa vào PTMR. Với thạch anh 4 MHz, tần số thấp nhất có thể đạt được là 3,8 Hz (1,9 Hz nếu dùng center-aligned), khi dùng prescale 1:64. Bạn hãy xem lại datasheet của PIC18F4431.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-10-2008, 12:14 AM   #10
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
chết thật! cám ơn anh Nam! câu hỏi của em vớ vẩn quá!!ko biết sao tự nhiên khùng khùng nghĩ đi đâu! cái công thức prescale là cho tần số mà em cứ ngỡ là cho chu kì!!
cám ơn anh!!
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-07-2009, 04:04 PM   #11
mgdaubo
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 19
:
sao mình cũng setup y như macintosh với cong1810 mà mô phỏng trên proteus nó ko phát xung gì cả. Dùng pwm của CCP thì vẫn chạy bình thường.
(Mình mô phỏng 18F4331 bằng proteus 7.5)
mgdaubo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-07-2009, 04:05 PM   #12
mgdaubo
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 19
:
Hix, pic8F4431 thì mô phỏng chạy, còn 18F4331 thì ko.

Các mode của bộ power_pwm trên dòng pic này có lợi gì khi chạy cầu H hơn là dùng pwm của bộ CCP ko nhỉ? em thấy cũng như nhau??? (xài 1 chân, chân kia bỏ)
mgdaubo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-12-2010, 12:58 AM   #13
jackhammer
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 1
:
Cho em hỏi con 18f2431, Rbo->Rb3 là 4 chân điều xung riêng biệt hay là điều xung theo từng cặp pwm0-pwm1,pwm2-pwm3. E dùng điều khiển 4 chân này để điều khiển 4 con RC-Servo độc lập liệu có được không? Thank các bác.
jackhammer vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-01-2011, 07:09 PM   #14
JumboT
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 21
:
Cái này là đk theo cặp. Nếu muốn dùng để dk 4 động c[ thì phải dùng cả 3 module cộng với 1 ccp nữa.
JumboT vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2011, 01:41 AM   #15
delta21
Đệ tử 5 túi
 
delta21's Avatar
 
Tham gia ngày: Mar 2010
Bài gửi: 95
:
Send a message via Yahoo to delta21
trong mỗi module pwm mình chỉ dùng 1 chân PWM ,chân còn lại làm I/O được không ạ ?
__________________
Chỉ sợ thiếu tiền......
delta21 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:24 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam