PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 30-12-2008, 10:36 PM   #1
ham_hoc_hoi
Đệ 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
ham_hoc_hoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-12-2008, 10:55 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi ham_hoc_hoi View Post
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
Bạn xem presentation sau về cách sử dụng MPLAB SIM:
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-12-2008, 04:25 PM   #3
ham_hoc_hoi
Đệ 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
ham_hoc_hoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-12-2008, 05:52 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi ham_hoc_hoi View Post
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
Bạn đang muốn làm điều không thể. Theo bảng 2.2 của tài liệu "dsPIC30F Family Reference Manual", hay mục 4.11.1 của tài liệu "dsPIC30F/33F Programmer's Reference Manual", phạm vi biểu diễn dữ liệu của số Q15 là từ -1.0 đến 0.999969482.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-01-2009, 10:11 PM   #5
ham_hoc_hoi
Đệ 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
ham_hoc_hoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-01-2009, 11:40 PM   #6
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi ham_hoc_hoi View Post
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
Chuyển một số float có trị tuyệt đối > 1 sang số fractional không làm được điều kỳ diệu là nhét một số có trị tuyệt đối > 1 vào một biến fractional dùng format Q15. Nói cách khác, dù bạn dùng format nào thì con số được biểu diễn vẫn phải mang giá trị đó.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2009, 09:06 AM   #7
ham_hoc_hoi
Đệ tử 1 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 25
:
Trích:
Nguyên văn bởi namqn View Post
Chuyển một số float có trị tuyệt đối > 1 sang số fractional không làm được điều kỳ diệu là nhét một số có trị tuyệt đối > 1 vào một biến fractional dùng format Q15. Nói cách khác, dù bạn dùng format nào thì con số được biểu diễn vẫn phải mang giá trị đó.

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,
Nói như bác thì cái hàm PID của C30 viết ra chỉ ứng với các hệ số nhỏ hon 1 hả bác, các đại luọng khác còn quy đổi về dạng tuong đối dduowcj, còn các hệ số bản thân nó cũng ko có đơn vị thì làm sao quy đổi dc.
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
ham_hoc_hoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2009, 07:06 PM   #8
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi ham_hoc_hoi View Post
Nói như bác thì cái hàm PID của C30 viết ra chỉ ứng với các hệ số nhỏ hon 1 hả bác, các đại luọng khác còn quy đổi về dạng tuong đối dduowcj, còn các hệ số bản thân nó cũng ko có đơn vị thì làm sao quy đổi dc.
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
Nếu bạn tính toán trong hệ đơn vị tương đối (đặc biệt theo cách mà code mẫu của Microchip đã dùng) thì các biến điều khiển cũng thường có tầm trị giữa -1 và 1, do đó các hệ số của bộ điều khiển PID cũng thường có thể biểu diễn bằng Q15. Sao bạn không thử tính toán cho một ví dụ cụ thể mà cứ giả thiết rằng cần dùng các hệ số có tầm trị vượt khả năng của Q15?

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-01-2009, 10:30 PM   #9
ham_hoc_hoi
Đệ 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];
}
ham_hoc_hoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2009, 09:36 AM   #10
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi namqn View Post
Bạn xem presentation sau về cách sử dụng MPLAB SIM:
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,
bac namqn pót lai tai liêu này cho em với được ko? em tải kô được?
cảm ơn bác nhiều lắm!
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-02-2009, 09:27 PM   #11
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi conglong View Post
bac namqn pót lai tai liêu này cho em với được ko? em tải kô được?
cảm ơn bác nhiều lắm!
Tôi gặp trục trặc trong việc upload tập tin này lên diễn đàn, bạn thử download từ đây xem có khá hơn so với từ trang web của Microchip hay không:
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:45 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam