![]() |
|
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 |
|
![]() |
#1 | |
Trưởng lão PIC bang
|
Trích:
u = 400 + 400*sin(2*pi*(f_sw/1000)*t) Vì các giá trị của cột A chạy từ 0 đến 999, các giá trị của cột B sẽ chạy từ 400 + 400*sin(0) đến 400 + 400*sin(999*2*pi/1000), tức là vừa đúng một chu kỳ sóng sin (chú ý là sin(1000*2*pi/1000) = sin (0) = 0). 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 |
|
![]() |
![]() |
![]() |
#2 |
Đệ tử 2 túi
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
: |
![]() 1). Chương trình bác Nam sửa ở trang 1,#11, mình mô phỏng bằng proteus 7.4, code viết trong CCS 4.0.., kết quả mô phỏng chạy ra đúng như tính toán:
Tpwm=20us --> Fpwm=50KHz Tsin = 16ms --> Fsin=62,5Hz. Trong đó, mình dùng thẳng thạch anh 40MHz để tần số clock=40MHz. Mình gửi kèm file đã làm (tên file: PWM-truonglao.rar). 2). Thế nhưng khi mình điều chế sin Fsin= 50Hz: Chọn: Fpwm=20KHz hay Tpwm=50us, theo cthuc Tpwm=4*(PTPER+1)/Fosc suy ra: PTPER=49. (Thach anh Fosc = 4MHz) Sóng sin có Fsin=50Hz --> so ptu bang sin = Fpwm:Fsin=20000:50=400 phần tử. Như vậy: Tpwm = 50us Tsin = 20ms Nhưng kết quả mô phỏng được: Tpwm=50us ( tức Fpwm=20KHZ -> Fpwm đúng theo tính toán) Tsin = 40ms --> Fsin = 25Hz (--> cái này như vậy là sai mất rồi) Mình gửi kèm file đã làm các bạn xem (20KHzPWM-sin50Hz.rar). 3). Vì theo câu (2), khi mình điều chế Fsin=50Hz mà kết quả ra là 25Hz, nên mình đã đi điều chế Fsin=100Hz xem thử nó có ra tần số 50Hz ko. --> kết quả mô phỏng: điều chế Fsin=100Hz thì kết quả mô phỏng ra là 50Hz. Gửi kèm file (20KHzPWM-sin100Hz.rar). *** Mong các bạn xem và sớm giải thích giùm mình, ngày hnay mất 1 ngày mà vẫn chưa tìm ra cause. // bổ sung thông tin CCS: mình cài CCS trong ổ đĩa G, nên nếu các bạn cài CCS trong ổ C thì phải chọn lại đường dẫn file devices và drivers cho chương trình thì mới complie được đó. thay đổi nội dung bởi: truongqt, 01-05-2009 lúc 06:05 PM. Lý do: sửa vị trí trang bài viết bác Nam + bổ sung thông tin CCS |
![]() |
![]() |
![]() |
#3 |
Đệ tử 2 túi
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
: |
Bảng sin
Gửi kèm luôn file excel tính bảng sin.
Bảng sin 200 tuơng ứng Fsin=100Hz ''' 400 ''' Fsin=50Hz |
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Quảng Trị - Đà Nẵng
Bài gửi: 43
: |
Ủa sao ko thấy ai nói j zậy ta. Mọi người nghỉ lễ kĩ thế.
|
![]() |
![]() |
![]() |
#5 | |
Đệ 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
Thôi ko làm phiền các bác nữa nha. Mình nâng tần số thạch anh trong bài của mình lên 40MHz (bằng bài của anh Nam), đồng thời tính lại bảng sin cho khớp với thạch anh 40MHz này thì kết quả mô phỏng đã đúng rồi. Hi. Nhưng ko hiểu vì sao với thạch anh 4MHz thì kq mô phỏng ko đúng, với thạch anh 40MHz thì lại đúng, mà chắc ko cần quan tâm điều này làm j cho tốn calo. Hi. Sắp tới làm mạch thực rồi kiếm cái oscillo đo xem thế nào.
Chúc cả nhà vui. //PS; nhân tiện cho mình hỏi: trong datasheet 18F4431 (hình dưới) ko đưa ra việc dùng thạch anh 40MHz, ko biết mình lắp mạch với 40MHz có được ko? Trích:
thay đổi nội dung bởi: truongqt, 02-05-2009 lúc 10:36 PM. Lý do: hỏi về thạch anh |
|
![]() |
![]() |
![]() |
#6 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#7 |
Đệ 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 |
![]() |
![]() |
![]() |
#8 | |
Đệ 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. |
|
![]() |
![]() |
![]() |
|
|