|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
25-12-2008, 02:08 PM | #4 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
Em đã bỏ Q15 đi mà kết quả vẫn thế
đoặn này của mình là như thế này Code:
fooPID.controlReference = Q15(ADCBUF0 >> 1) ; // controlReference la dai luong dat // O day la toc do dc dat tu bien tro dieu chinh toc do thong qua bo ADC fooPID.measuredOutput = Q15(POSCNT * 0x0003) ; // measuredOutput dai luong do ve em tính toán thế này: Giá trị đặt từ 0 đến 504 ưng với tốc độ từ 0 đến 20 vong/s ứng với từ 0 đến 168 xung/10ms vậy là số xung đọc về từ encoder sau 10ms (thời gian trich mẫu = 10ms) , phải nhân với 504/168 = 3 là POSCNT*3 (đây cũng là giá trị nguyên). Có phải bây h em cần chuyển ADCBUF0 >> 1 và POSCNT*3 thành số frac, sau kết quả tính toán ở hàm PID(&fooPID); thì được kết quả fooPID.controlOutput là số frac khi đó để đưa vào PDC1 thì mình phải chuyển lại fooPID.controlOutput từ frac sang int hả bác. Nếu đúng như thế thì bác có thể chỉ cho em cách chuyển từ int sang frac và ngc lại đuọc ko. hay ở đây có 1 cách giải quyết khác. Mong các bác giúp thằng em với |
|
|