![]() |
|
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 |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
xin chỉ em cách dùng MPLAB SIM
Bác nào cho em hỏi, cách dùng MPLAB SIM để xem kết quả của 1 phép tính trong dspic như nào ah, vi dụ
int a,b,c; a = 0x00FC; b = 0x012A; c = a*b; mình muốn xem kết quả của C bằng bao nhiêu thì vào đâu ah, nếu khai báo số a,b,c là các số fractional thì cách mô phỏng có khác ko ah |
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
http://techtrain.microchip.com/webse...SIM_111908.pdf Phần bạn vừa hỏi được trả lời ở mục Watchpoints. Việc mô phỏng không phụ thuộc vào việc biến được khai báo ra sao, và bạn có thể xem một biến ở format bất kỳ do bạn chọn. 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 |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
bác namqn cho em hỏi với nhé, em làm theo cái vi dụ PID của C30 các hế số Ki, Kp, Kd của nó là các số Q15 nhỏ hơn 1, vậy bây h em muốn khai báo là các số lơn hơn 1 thì phải làm thế nào hả bác, ví dụ như 1,5 ; 3,4 ; 5,2 ...
Mong bác trả lời giúp em |
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
Các số Q15 thường được dùng khi bạn tính toán trong hệ đơn vị tương đối (per unit). Để sử dụng hệ đơn vị tương đối, trước hết bạn sẽ chuyển đổi các đại lượng tuyệt đối thành các giá trị trong hệ đơn vị tương đối. Sau khi tính toán xong, bạn có thể chuyển đổi các kết quả trong hệ đơn vị tương đối thành các giá trị tuyệt đối. Bạn nên đọc thêm về vấn đề này. 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 |
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
nếu em khai báo các số lớn hơn 1 là số float , sau đó dùng hàm chuyển từ float sang frac, rồi tính toán với các số frac đo, sau đó dc kết quả lại chuyển ngc lại từ frac sang float như thế có dc ko bác, em thấy 2 hàm này tốn nhiều chu kì máy quá, vậy có cách nào tuong tự mà tối ưu hơn bác, mình có thẻ dùng MPLAB SIM để xem 1 lệnh tốn bao nhiêu chu kì máy dc ko bác, và dùng như nào ah.
Thanks bác |
![]() |
![]() |
![]() |
#6 | |
Trưởng lão PIC bang
|
Trích:
Bạn xem mục "Measuring routine execution time with the stopwatch" trong presentation trên để biết cách xác định thời gian thực thi của một lệnh. Nên dùng breakpoint ngay trước lệnh cần đo, rồi dùng Stopwatch. 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ử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
Trích:
Vậy để có dc các hệ số lơn hơn 1 thì em phải khai báo là float hả bác |
|
![]() |
![]() |
![]() |
#8 | |
Trưởng lão PIC bang
|
Trích:
Trong trường hợp cần dùng các hệ số vượt khả năng của Q15, bạn có thể tự viết giải thuật điều khiển PID với các tính toán được hiện thực trong hệ đơn vị tuyệt đối, và dùng các biến float. 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 |
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 25
: |
em viết đoặn mã cho PID như thế này, bác góp ý cho em có được ko nhé, em dùng công thức sai phân lùi để chuyển sang pt số
Code:
/Khai bao cac bien toan cuc cho xu lý PID float u[2]; //u[1] là gia tri dau ra bo PID thoi diem hien tai, dc dua vao gia tri PDC1 de thay doi gia tri % duty cycle //u[0] là gia tri dau ra bo PID thoi diem truoc do int e[3]; //e[2] gia tri sai lech toc do tai thoi diem dang xet ( e[2] = toc do dat - toc do do dc tu encoder) float A0,A1,A2; float PID_P = 7, PID_I =1.3, PID_D =2.7; //cac he so Kp, Ki, Kd //Chuong trinh khoi tao thong so PID //------------------------------------------------------------------------------ void PID_init(void) { u[0] =0; u[1] =0; e[0] =0; e[1] =0; e[2] =0; A0 = PID_P + PID_I + PID_D; A1 = -PID_P - 2*PID_D; A2 = PID_D; } //Chuong trinh xu ly ngat Timer 2 sau 10ms //chu ki trich mau 10ms de tinh toan PID //------------------------------------------------------------------------------ void __attribute__((__interrupt__)) _T2Interrupt(void) { e[2] = (ADCBUF0 >> 1) - (POSCNT*3 ); //e[2] gia tri sai lech toc do tai thoi diem dang xet //e[2] = toc do dat - toc do do dc tu encoder // toc do dat = ADCBUF0 >>1 (giá tri chuyen doi ADC bien tro dieu chinh toc do, lay 9 bit) // toc do do dc tu encoder = POSCNT * 3 POSCNT = 0; //u[n] = u[n-1] + A0*e[n] +A1*e[n-1] +A2*e[n-2] u[1] = u[0] + e[2]*A0 + e[1]*A1 + e[0]*A2; if (u[1] > 511) //Gioi han tren { u[1] = 511;} if (u[1]<0) //Gioi han duoi { u[1] = 0;} u[0] = u[1]; e[0] = e[1]; e[1] = e[2]; PDC1 = u[1]; } |
![]() |
![]() |
![]() |
#10 | |
Đệ tử 4 túi
Tham gia ngày: Jan 2008
Bài gửi: 68
: |
Trích:
cảm ơn bác nhiều lắm! |
|
![]() |
![]() |
![]() |
#11 | |
Trưởng lão PIC bang
|
Trích:
http://www.4shared.com/file/88780857...IM_111908.html 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 |
|
![]() |
![]() |
![]() |
|
|