![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#46 |
Đệ tử 2 túi
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
: |
pwm
2 đoạn mã sau là tuơng đuơng, nhưng khi chạy mạch thật thì không biết vì sao mà đoạn mã tạo PWM (mã 2) lại không làm việc (ko chạy hoặc chạy sai gậy ngắn mạch cầu H), còn mã 1 thì chạy bình thường?
------------Mã 1------------- Code:
#include <18f4331.h> #fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT #use delay(clock=20000000) void main() { while (1) { output_B(0B00001001); delay_us(21); output_B(0X00); delay_us(2); output_B(0B00000110); delay_us(21); output_B(0X00); delay_us(2); } } -------------Mã 2( dùng chức năng PWM)------------ Code:
#include <18f4331.h> #fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT #use delay(clock=20000000) #bit TBInt_pin = 0xfa4.4 #byte PTCON0 = 0XF7F #byte PTCON1 = 0XF7E #byte PTMRL = 0XF7D #byte PTMRH = 0XF7C #byte PTPERL = 0XF7B #byte PTPERH = 0XF7A #byte PDC0L = 0XF79 #byte PDC0H = 0XF78 #byte PDC1L = 0XF77 #byte PDC1H = 0XF76 #byte PDC2L = 0XF75 #byte PDC2H = 0XF74 #byte PDC3L = 0XF73 #byte PDC3H = 0XF72 #byte SEVTCMPL = 0XF71 #byte SEVTCMPH = 0XF70 #BYTE PWMCON0 = 0XF6F #BYTE PWMCON1 = 0XF6E #BYTE DTCON = 0XF6D #byte FLTCONFIG = 0XF6C #byte OVDCOND = 0XF6B #byte OVDCONS = 0XF6A #byte ANSEL0 = 0XFB8 void main() { setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_OFF,PWM_OFF); setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,249,0,1,30);//20KHz set_power_pwm0_duty(498); set_power_pwm2_duty(498); while (1) { if (TBINT_PIN == 1 && PTMRL >= 50) { set_power_pwm0_duty(498); set_power_pwm2_duty(498); TBINT_PIN= 0; } } } ------------------ Mong các cao nhân chỉ giùm, em cần gấp lắm. thay đổi nội dung bởi: namqn, 14-06-2009 lúc 12:17 PM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#47 |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 50
: |
Đoạn mã 1 của bạn không thể gọi là PWM đúng nghĩa, không thể hiện được ưu điểm gì của 18F4431, Tôi nghĩ bạn không nên dùng cách này cho các ứng dụng công suất.
Còn đoạn 2 thì...Tôi cũng không biết giải thích thế nào nhưng tôi từng sử dụng CCS như trên và không được, có lẽ do hàm viết sẵn của nó nhiều khi dở hơi mình không kiểm soát được nội dung. Chuyển sang dùng C18 và cấu hình cụ thể đến từng thanh ghi giúp cho chúng ta hiểu vấn đề hơn, kết quả là tôi tạo ra được PWM rất tốt. |
![]() |
![]() |
![]() |
#48 | |
Đệ tử 2 túi
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
: |
Trích:
|
|
![]() |
![]() |
![]() |
#49 |
Đệ tử 3 túi
Tham gia ngày: Oct 2006
Bài gửi: 50
: |
Bạn xem lại trang 1 có đoạn mã anh Namqn đã cho , có thể chạy trên 18F4431 và tạo được ra sin.
|
![]() |
![]() |
![]() |
#50 |
Đệ tử 3 túi
Tham gia ngày: Jul 2009
Bài gửi: 46
: |
bác nào có file HEX của chương trình namqn viết ko,cả mô hình mạch nữa.gửi cho mình với.mình cũng đagn điều chế sóng sin,nhưng dùng dspic và C30.
|
![]() |
![]() |
![]() |
#51 | |
Đệ tử 3 túi
Tham gia ngày: Jul 2009
Bài gửi: 46
: |
Trích:
thay đổi nội dung bởi: JohnnyNguyen, 20-09-2009 lúc 08:03 PM. |
|
![]() |
![]() |
![]() |
#52 | |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 1
: |
Trích:
|
|
![]() |
![]() |
![]() |
#53 |
Nhập môn đệ tử
Tham gia ngày: Sep 2008
Bài gửi: 8
: |
Anh namqn ơi. Em chuyển viết chương trình của anh sang CCS thi thay đổi tần số sóng Sin ra được. Anh chọn giá trị đỉnh có dựa trên cơ sở nao không anh hay là tuỳ mình chọn.
|
![]() |
![]() |
![]() |
#54 |
Nhập môn đệ tử
Tham gia ngày: May 2007
Bài gửi: 6
: |
bác tienminh làm ngon lành rồi thì giời thiệu cho a e đi, e cũng đang rất quan tâm đến vấn đề DC-AC như bác đã nghiên cứu
|
![]() |
![]() |
![]() |
#55 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 19
: |
Trích:
Em mới vào diễn đàn thấy các anh bàn luận hay quá. Anh có thể giải thichcs giúp em tại sao a lại chọn giá trị đỉnh là 400 được k? Anh căn cứ vào đâu để chọn như vậy? Cám ơn anh nhiều! |
|
![]() |
![]() |
![]() |
#56 | |
Trưởng lão PIC bang
|
Trích:
Module PWM của PIC có sự giới hạn đối với duty cycle khá gần 0% và 100%, do đó có thể giảm trị đỉnh xuống vài phần trăm để khắc phục. 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 |
|
![]() |
![]() |
![]() |
#57 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 19
: |
Trích:
Anh có thể giải thích cụ thể căn cứ chọn đỉnh thông qua code ví dụ a sửa cho bạn tienminh đc k? Giá trị đỉnh của tín hiệu sine ra sau cầu H và giá trị điện áp 1 chiều cấp cho cầu H và bảng sine có quan hệ như thế nào hả a? Em cám ơn anh nhiều! |
|
![]() |
![]() |
![]() |
#58 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 19
: |
Trích:
Code a sửa ở trên có đúng k vậy. Tôi thấy giá trị thanh ghi PTPER = 199 (chính là giá trị duty max) vậy mà bảng sin để cập nhật duty lại có những giá trị lớn hơn 199 rất nhiều là sao? Liệu a Nam có nhầm nhọt k nhỉ ![]() |
|
![]() |
![]() |
![]() |
#59 | |
Trưởng lão PIC bang
|
Trích:
Với PIC18, nếu PTPER = 199 thì duty cycle = 100% sẽ ứng với 4*(PTPER + 1) = 4*(199 +1) = 800. Đề nghị bạn đọc lại datasheet của PIC18. 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 |
|
![]() |
![]() |
![]() |
#60 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 19
: |
Trích:
Giá trị thanh ghi PDC có thể lớn hơn PTPER khi nào? Em thấy nó chỉ lớn hơn đc khi clock của thằng PTMR lớn hơn clock PDC (chẳng hạn PTMR có clock là Tcy thì clock của PDC phải là Tcy/n; n = 2,3...).Đúng k bác Nam? Chứ nếu cả hai thằng đều là Tcy thì k thể có chuyện giá trị thanh ghi PDC lớn hơn PTPER được đâu. |
|
![]() |
![]() |