View Single Post
Old 25-12-2008, 11:52 AM   #3
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
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
Đây là khai báo của macro Q15 trong dsp.h
Code:
#define Q15(X) \
   ((X < 0.0) ? (int)(32768*(X) - 0.5) : (int)(32767*(X) + 0.5))
Q15 thực chất là biểu diễn số thực dấu chấm tĩnh ở dạng số nguyên với 1 bit dấu và 15 bit sau dấu phẩy. Thực chất công việc này quy ước với nhau rằng dấu chấm nằm ở bên trái 15 bit, còn lại dạng biểu diễn y như số nguyên.

Macro này dùng chuyển từ số thực dấu chấm động (float, double), hoặc hằng số trong khoảng từ -1 đến 1 - 2^(-15) sang Q15.

Mình ko hiểu tại sao bạn lại gọi
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
Theo như công thức kết quả của phép chuyển đổi sẽ bị tràn

Bạn nên bỏ cái Q15 đi.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]

thay đổi nội dung bởi: bien_van_khat, 25-12-2008 lúc 02:38 PM.
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn