![]() |
Trích:
Trong ví dụ 5-1 của tôi, việc thiết lập postscale khiến cho 1 PWM Special Event Trigger được tạo ra sau mỗi 16 chu kỳ PWM, để kích hoạt việc chuyển đổi A/D. Về câu hỏi liên quan đến duty cycle, bạn xem hình 14-4 trong datasheet của dsPIC30F2010. Thân, |
Trích:
Em dùng biến trở chỉnh điện áp tại chân RB0(AN0) là 1V thì theo lí thuyết , khi đó giá trị mình thu được tại thanh ghi ADCBUF0 là: 1x(2^10 - 1) / 5 = 204.6 hay là 11001101B sau lệnh dịch bit qua phải và gắn vào giá trị này vào PDC1 thì PDC1 = 102, mà duty_cycle = 2 * PDC1 / PTPER, mà ở đây PTPER = Fcy/Fpwm - 1 , với Fcy= 10Mhz ( do em dung thạch anh ngoài 10Mhz với PLL_4), Fpwm = 40Khz => PTPER = 249 Vậy duty_cycle = 2 * 102 / 249 = 0.8193 = 81.93 %, do đó khi dùng VOM để đo trên chân PWML ( RE0 ) thì điện áp DC phải là : (1 - 0.8193 ) * 5V = 0.9035 V. Mà em đo thực tế lại là : 3.1 V !!!! Em hiểu như vậy có đúng không Thầy , hay lỗi do đâu thầy ? Em cảm ơn . Trân trọng !. |
Trích:
Với PWM timer chạy ở chế độ free-running (như trong ví dụ của tôi đã thiết lập), công thức tính duty cycle như sau: duty_cycle = PDCx/((PTPER + 1)*2) Do đó, với các thông số mà bạn đã thiết lập, bạn sẽ có duty cycle của chân PWM1H là 102/((249 + 1)*2) = 20.4 %, và duty cycle của chân PWM1L sẽ là 100 - 20.4 = 79.6 %, tương ứng với khoảng 4 V, nếu hoàn toàn không có dead time. Có lẽ kết quả chuyển đổi A/D là khác với giá trị 204 hay 205 đang dùng để tính toán ở đây. Thân, |
Trong dsPic30 farmily reference ... ở phần PWM có nói cách thiết lập chế độ hoạt động của PWM thông qua các bits PTMOD<1:0> ở thanh ghi PTCON là:
" PTMOD<1:0>: PWM Time Base Mode Select bits 11 = PWM time base operates in a continuous up/down mode with interrupts for double PWM updates 10 = PWM time base operates in a continuous up/down counting mode 01 = PWM time base operates in single event mode 00 = PWM time base operates in a free running mode " Thầy Nam hoặc anh em nào trong diễn đàn hiểu rõ về các MOD hoạt động này ảnh hưởng như thế nào tơi PWM như công thức tính duty_cycle .... chỉ cho mình với ? Cảm ơn nhiều ! Trân trọng !. |
Trích:
Duty_cycle là khoảng phần trăm thời gian HIGHT trong một chu kỳ đối với chân PWMxH , còn đối với PWMxL thì dutycycle lại là khoảng phần trăm thời gian LOW (với giả sử deadtime = 0) KHI TA ĐANG DÙNG pwm Ở MODE complementary , còn PWM ở MODE independence thì duty_cycle cũng là khoảng phần trăm thời gian HIGHT trong một chu kỳ đối với chân PWMxL hay chân PWMxH (tùy vào chân nào được set). Tại em đo thực tế thấy như vậy, Trân trọng !. |
Display Duty_cycle of PWM on PC by using UART and ADC comunication
1 Attachment(s)
Đây là project mình làm sau khi đọc 2 TUTO của Thầy Nam (namnq) là UART và PWM - ADC , ở đây mình kết hợp 3 module này lại với nhau để hiện thị thông số của PWM (duty_cycle) lên PC sau khoảng thời gian 1ms , và duty_cycle được điều khiển bởi điện áp tại chân RB0 thông qua biến trở, các bạn tham khảo nha, có gì thì cùng trao đổi, Project này đã chạy thực tế rồi (mình dùng dsPic30f2010 nhưng con này không khác con 30f4012 gì cả).
Trân trọng !. |
anh Nam ơi, xem hộ em lỗi này là sao ạ :
c:\program files\microchip\mplab c30\bin\pic30-coff-ld.exe Error: A heap is required, but has not been specified Link step failed. em đã có đủ những tập tin cần thiết rồi mà nó vẫn báo vậy. |
Trích:
http://www.picvietnam.com/forum/showthread.php?p=2663 Thân, |
Em đang làm việc với con dspic30f4011. Em đang làm 1 bài toán là đo nhiệt độ rồi hiển thị lên lcd. anh có thể nói cho em về phần xử lí số liệu lấy ra từ module ADC để đưa lên LCD để hiển thị nhiệt độ ko anh ? Em dùng lm35 đó.
|
Trích:
Nguyên tắc chung: bạn xác định dải nhiệt độ cần đo, xác định dải điện áp ra tương ứng và xử lý để nó tận dụng dải điện áp analog mà PIC/dsPIC có thể đọc. Từ đó, xác định công thức chuyển đổi từ kết quả A/D và nhiệt độ thực. Việc còn lại chỉ là đưa chuỗi ký tự ra LCD. Thân, |
Đây chỉ là 1 phần trong đề tài của em. Dải nhiệt độ của em cần đo là từ 0-100 độ C.Em xem trên datasheet của lm35 thấy khoảng điện áp ra tương ứng la-1000mV cho khoảng nhiệt độ từ 0-100 độ C.Phần hiển thị lên LCD thì em làm rồi, nhờ anh xem phần xử lý số liệu hộ em mới. Thank anh nhiều nhiều
|
Trích:
Trân trọng !. |
Đây là code của em, đo nhiệt độ đưa vào RB8 rồi hiển thị ra LCD, nhưng sao dòng 2 chỉ hiện ra là 0. Em không biết là sai chỗ nào, hic
Code:
#include <p30f4011.h> |
Trước khi dùng kết quả chuyển đổi A/D, bạn đặt một giá trị đã biết vào biến ADCVoltage để xem lệnh gọi hàm LCD_WriteString() thứ hai của bạn chạy có ổn không. Nếu ổn thì bạn xem lại phần đọc tín hiệu analog, vì bạn chưa có kết quả chuyển đổi A/D hợp lý.
Thân, |
Em đã đặt 1 biến vào ADCVoltage để thử rồi, chạy tốt anh ạ.
|
Múi giờ GMT. Hiện tại là 12:33 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam