PDA

View Full Version : Xin giúp đỡ về dsp để làm bộ PID số


ham_hoc_hoi
21-12-2008, 09:07 AM
mình đang làm bộ điều khiển PID cho động cơ 1 chiều, 2 vòng tốc độ và dòng điện, mình nghe nói dòng dspic mà cụ thể mình dùng con 30F4011 có bộ dsp tính toán rất hay, mình xem trong file dsp.h thấy có mấy hầm có PID, ko phải đấy có phải thuật toán PID số ko, ai biết chỉ cách mình sử dụng, khai báo dsp như nào, và lọi dụng nó để làm PID số.
Thanks mọi người

ham_hoc_hoi
23-12-2008, 03:47 PM
ai đã biết về cái này xin chỉ giúp mình với, cho mình hỏi thêm mình dùng 30F4011 và thạch anh 20MHz, mình khai báo như nào để có tốc độ tốt nhất. Nếu khai báo như này _FOSC(CSW_FSCM_OFF & HS); Fcy chỉ có 5 Mhz, có nhân lên dc không khi dùng thạch anh lớn hơn 10MHz

namqn
23-12-2008, 04:44 PM
... cho mình hỏi thêm mình dùng 30F4011 và thạch anh 20MHz, mình khai báo như nào để có tốc độ tốt nhất. Nếu khai báo như này _FOSC(CSW_FSCM_OFF & HS); Fcy chỉ có 5 Mhz, có nhân lên dc không khi dùng thạch anh lớn hơn 10MHz
Bộ PLL không chấp nhận tần số ngõ vào > 10 MHz. Bạn có thể chuyển sang dùng thạch anh 10 MHz và PLL x8 để có Fcy = 20 MHz, hoặc dùng thạch anh 7,3728 MHz và PLL x16 để có Fcy xấp xỉ 30 MHz.

Khi dùng PLL và thạch anh ngoài, bạn cần dùng option XT_PLL4 hay XT_PLL8 hay XT_PLL16 với _FOSC().

Thân,

ham_hoc_hoi
23-12-2008, 07:19 PM
nếu em dùng thạch anh 7,3728 Mhz và PPLx16 thì chip làm việc vẫn bình thuòng hả bác, khi ấy tốc độ xử lý của chíp đuọc tăng lên khá nhiều, ko có vấn đề j hả bác,
Em dùng thạch anh 8Mhz và PPLx16 có được ko bác, dùng 8Mhz để số cho chẵn,

namqn
23-12-2008, 07:38 PM
nếu em dùng thạch anh 7,3728 Mhz và PPLx16 thì chip làm việc vẫn bình thuòng hả bác, khi ấy tốc độ xử lý của chíp đuọc tăng lên khá nhiều, ko có vấn đề j hả bác,
Em dùng thạch anh 8Mhz và PPLx16 có được ko bác, dùng 8Mhz để số cho chẵn,
Thạch anh 8 MHz với PLL x16 là nằm ngoài spec. của Microchip, do đó nếu có sự bất thường trong hoạt động của dsPIC thì họ sẽ không chịu trách nhiệm. Tôi tin rằng nếu được làm mát tốt thì dsPIC vẫn có thể hoạt động ổn định ở tốc độ clock này, nhưng đây chỉ là ý kiến của riêng tôi.

Thân,

ham_hoc_hoi
23-12-2008, 08:09 PM
vậy để chắc ăn em dùng 7,3728MHz PLLx16, như thế này thì chip ko cần phải tản nhiệt nữa bác nhỉ

namqn
23-12-2008, 08:12 PM
vậy để chắc ăn em dùng 7,3728MHz PLLx16, như thế này thì chip ko cần phải tản nhiệt nữa bác nhỉ
Theo một số người dùng thì ở tốc độ clock này, chip sẽ khá nóng. Việc có cần tản nhiệt hay không còn tùy vào trường hợp cụ thể của bạn: môi trường làm việc, các module ngoại vi được sử dụng, ...

Thân,

ham_hoc_hoi
23-12-2008, 08:32 PM
Theo một số người dùng thì ở tốc độ clock này, chip sẽ khá nóng. Việc có cần tản nhiệt hay không còn tùy vào trường hợp cụ thể của bạn: môi trường làm việc, các module ngoại vi được sử dụng, ...

Thân,
Bác nói thế thì em dùng thach anh 8MHz PLLx8, Fcy = 16 MHz, tốc độ như này chắc đủ xử lý để em làm PID só bác nhỉ, mà với tốc độ này thì chip sẽ ko bị nóng và lam việc ổn định hả bác
Bác cho em hỏi thêm số fractional có dải từ đâu đến đâu ah, và định dạng số fractional Q(15) là như nào hả bác, số này có dải từ đâu đến đâu và có khác j so với số fractional ko ah.

Mong bác giúp đỡ chỉ bảo em
Thank bác

LeDuc
27-12-2008, 11:30 PM
Bác nói thế thì em dùng thach anh 8MHz PLLx8, Fcy = 16 MHz, tốc độ như này chắc đủ xử lý để em làm PID só bác nhỉ, mà với tốc độ này thì chip sẽ ko bị nóng và lam việc ổn định hả bác
Bác cho em hỏi thêm số fractional có dải từ đâu đến đâu ah, và định dạng số fractional Q(15) là như nào hả bác, số này có dải từ đâu đến đâu và có khác j so với số fractional ko ah.

Mong bác giúp đỡ chỉ bảo em
Thank bác

Mình dùng con 18f2331 thach anh 4M , PLLx4 .Động cơ mình sử dụng 100w 24v . Driver của mình sử dụng nửa cầu H ghép lại .--> PID tương đối ổn .
Kô biết bạn áp dụng PID cho cái gì ?

ham_hoc_hoi
28-12-2008, 11:21 AM
mình cũng ap dụng PID để dk động cơ 53W, 38V, bạn có thể send cho mình phần code để tham khảo dc ko. Thanks bạn nhièu

mtuankct
03-03-2009, 07:33 PM
bác nên dùng luôn thư viện PID của C30 nó có viết sãn hàm PID cho bác rồi mà
bác có thể tham khảo code sau:
khai báo biến cho hàm PID

tPID fooPID;
fractional abcCoefficient[3] __attribute__ ((section (".xbss, bss, xmemory")));
fractional controlHistory[3] __attribute__ ((section (".ybss, bss, ymemory")));
fractional kCoeffs[] = {0,0,0};


khởi tạo cho PID

void PID_Init(void){
fooPID.abcCoefficients = &abcCoefficient[0]; /*Set up pointer to derived coefficients */
fooPID.controlHistory = &controlHistory[0]; /*Set up pointer to controller history samples */
PIDInit(&fooPID); /*Clear the controler history and the controller output */
kCoeffs[0] = Q15(0.1); // Kp
kCoeffs[1] = Q15(0.07); // Ki
kCoeffs[2] = Q15(0.00); // Kd
PIDCoeffCalc(&kCoeffs[0], &fooPID); /*Derive the a,b, & c coefficients from the Kp, Ki & Kd */
fooPID.controlReference = Q15(1) ; /*Set the Reference Input for your controller */
fooPID.measuredOutput = Q15(0) ;
}

sau đó dùng một timer để tạo ra chu kỳ gọi hàm PID, tính toán lại giá trị đo sau đó gọi hàm PID để xử lý

fooPID.measuredOutput = Q15(v_calculate(data)/(float)80);
PID(&fooPID);
duty = (unsigned int)(Fract2Float(fooPID.controlOutput) * PTPER *2);

uydanh
04-03-2009, 12:02 AM
Bác cho em hỏi thêm số fractional có dải từ đâu đến đâu ah, và định dạng số fractional Q(15) là như nào hả bác, số này có dải từ đâu đến đâu và có khác j so với số fractional ko ah.


Bạn tìm tài liệu dsPIC30F Programmers Referece Manual ( search google là ra liền) và đọc ở trang 64 của tài liệu này thì sẽ hiểu số fractional là như thế nào. Khá chin tiết và dễ hiểu.

MTAPIC
11-05-2009, 05:14 PM
em hỏi hơi lạc một chút, nhưng em đang làm PID trên một con VĐK 32bít, cụ thể là trên FPGA, nhúng lõi VĐK, nên cũng mới lắm, đk động cơ, bám vị trí mà mệt quá, ai có thể giúp em chút xíu về điều này không?