PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Thực hành (http://www.picvietnam.com/forum/forumdisplay.php?f=20)
-   -   Tìm người làm bài tập thực hành: Bộ ĐK PID động cơ DC (http://www.picvietnam.com/forum/showthread.php?t=485)

jean 20-04-2008 06:29 PM

Trích:

Nguyên văn bởi bluepine (Post 8644)
Code:

#include <16f877a.h>
#fuses HS,NOPROTECT,NOWDT,NOBROWNOUT
#use delay (clock = 20000000)
// Giao tiep vi dieu khien
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8) // Giao tiep RS232

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include<ctype.h>


#byte PR2 = 0x92

int16 e2;
int16 e1;
///////////////////////////////////////////////////////

int16 v_set = 350;

/////////////////////////////////////////////////////////
int16 v_cur;
int16 e_sum;
int16 e_del;
int16 flag_timer0;


//////////////////// cac thong so pid ban co the thay doi cho
//////////////////// phu hop voi dong co cua ban
unsigned long kp =2.5;
unsigned long ki = 0.0092;
unsigned long kd = 0;
////////////////////////////////////////////////////////////

int16 i = 1 ;
int16 pw_duty;
int16 counted_round_value;
int16 temp_timer0;
int16 temp_timer1;
int16 update_counted_round_value;

//#byte TMR0 = 0x01 //timer0 REGISTER
//#byte TMR1_L = 0X0E
//#byte TMR1_H = 0X0F

#define START_VALUE_TIMER0 5 //tri khoi tao ban dau cua timer0 5, so xung dem duoc moi khi ngat la 255 - 5
#define START_VALUE_TIMER1 5535 //tri khoi tao ban dau cua timer1 65536-5536=60000


#INT_TIMER0 // ngat timer0 tang bien len 1
void TIMER0_int()
{

set_timer0(START_VALUE_TIMER0);
i++;

///////////// ban sai cho nay

if(i==60 ){

temp_timer1 = get_timer1();
set_timer1(START_VALUE_TIMER1);
i=0;

v_cur =  2*(temp_timer1 - START_VALUE_TIMER1);

flag_timer0 = 1;
}

}

#INT_TIMER1  /// thuc hien khi ngat timer 1
void timer1_int(){
set_timer1(START_VALUE_TIMER1);


}

void init_timer0()
{

setup_timer_0(RTCC_INTERNAL | RTCC_DIV_16); // moi lan tran timer0 tuong ung 250*16*1/5 us = 0.8ms,chu ky lay mau=0.8*60=48ms


setup_timer_1(T1_EXTERNAL | T1_DIV_BY_2); //  he so chia la 2 moi lan tran timer0 , khoi tao lai luon gia tri dem xung timer1

enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);

}

void init_PWM(int16 frequency){

setup_ccp1(CCP_PWM); // initiate PWM
PR2 = 20000000/4/frequency - 1; // set PWM period

setup_timer_2(T2_DIV_BY_1,255,1); // initiate time 2 The cycle time will be (1/clock)*4*t2div*(period+1)
// (1/20000000)*4*1*(255+1) = 51.2 us( will over flow every 51.2 us, will intrup every 51.2 uS or 19.5 khz;

}

void cal_pid(){

long temp_kp;
long temp_ki;
long temp_kd;
e2 = v_set - v_cur;
e_sum += e2;
e_del = e2 - e1;
e1 = e2;

temp_kp = kp*e2;
temp_ki = ki*e_sum;
temp_kd = kd*e_del;
pw_duty +=temp_kp;

if (pw_duty <1000)
pw_duty += temp_ki;
if (pw_duty <1000)
pw_duty += temp_kd;
if (pw_duty <256) // vi khi pw_duty <256 thi PWM chi dieu rong xung 8 bit / //chu khong phai 10 bit,
pw_duty = 256;
if (pw_duty >1000) // bao hoa
pw_duty = 1000;

printf(" \t%ld", v_cur); // truyen toc do xung ve may tinh hien thi tren Hyperterminal
}

void main()
{
int8 timer0_value;

init_timer0();
init_PWM(19500);
//set_pwm1_duty(500);
while(true){
if (flag_timer0 ==1){
flag_timer0 = 0;
cal_pid();
set_pwm1_duty(pw_duty);
}
}
}

tôi có gửi cho bạn đoạn code để bạn so sánh
thân,

theo tôi biết thì trong ccs c, nếu 1 biến khai báo là int16 thì mặc định biến đó là biến không dấu. tuy nhiên, sai số e1, e2 lại là số có dấu. Như vậy đoạn code ở trên có hợp lý không?
unsigned long ki = 0.0092. nếu khai báo như thế này thì ki là số nguyên phải không? Nếu vậy thì ki ở đây sẽ bằng 0. Không biết tôi có sai chỗ nào không. Các bạn góp ý nhé :D

namqn 21-04-2008 12:52 AM

Hai vấn đề bạn jean thảo luận đều đúng.

Nếu không dùng directive #TYPE signed để định nghĩa lại kiểu mặc định là signed thì các khai báo int16 đều được CCS C hiểu ngầm là số không dấu => có vấn đề, vì sai số nên được biểu diễn bằng số có dấu.

kd, ki đều dùng kiểu số thực khi đặt giá trị, nhưng lại khai báo là unsigned long. Có 2 khả năng xảy ra, CCS C sẽ chuyển kiểu biểu thức thành kiểu của biến (có vấn đề) hay chuyển kiểu của biến thành float để có thể chứa giá trị của biểu thức (không có vấn đề). Tôi không dùng CCS C nên không thể đánh giá được. Nhờ các bạn khác có sử dụng CCS C đánh giá vấn đề này.

Nói chung, không nên để trình biên dịch làm chủ chúng ta, mà chúng ta nên làm chủ trình biên dịch, tức là hiểu rõ phải viết code C ra sao để có được kết quả mong muốn. Nếu chưa hiểu được trình biên dịch sẽ dịch code đang đặt nghi vấn ra sao, tại sao chúng ta không viết code thử nghiệm, biên dịch nó, và đánh giá kết quả bằng việc mô phỏng/thử nghiệm.

Thân,

kstn 05-05-2008 07:29 PM

cầu h dùng ir2101
 
1 Attachment(s)
Xin các cao thủ chỉ giúp xem mạch cầu h này có vấn đề gì không, cách chọn CV1,CV2 như thế nào

namqn 05-05-2008 08:25 PM

Trích:

Nguyên văn bởi kstn (Post 15981)
Xin các cao thủ chỉ giúp xem mạch cầu h này có vấn đề gì không, cách chọn CV1,CV2 như thế nào

Các mạch đệm BJT của bạn làm giảm tác dụng của mạch bootstrap, dẫn đến các MOSFET phía cao sẽ không dẫn bão hòa. Cụm R, C, D có lẽ không cần thiết. Sơ đồ ứng dụng đã có trong datasheet của IR2101.

Giá trị CV2 có thể chọn là 1 uF, dùng tụ tantalum 16 V (hoặc 25 V), đặt càng gần IR2101 càng tốt.

Thân,

kstn 07-05-2008 12:52 AM

Hỏi Về Cầu H Ir2101
 
Nhân tiện xin hỏi nếu làm cầu h bằng ir2101 thì chất lượng có cao không vì con này kích dòng hơi nhỏ (0.3A). Nếu thay BYV79E bằng n5819 thì có sao kô vì byv79e khá mắc. Cầu h này có thể chạy 20khz được không (nếu bỏ các bộ đệm BJT).
chúc thắng lợi!

namqn 07-05-2008 02:37 AM

Trích:

Nguyên văn bởi kstn (Post 16009)
Nhân tiện xin hỏi nếu làm cầu h bằng ir2101 thì chất lượng có cao không vì con này kích dòng hơi nhỏ (0.3A). Nếu thay BYV79E bằng n5819 thì có sao kô vì byv79e khá mắc. Cầu h này có thể chạy 20khz được không (nếu bỏ các bộ đệm BJT).
chúc thắng lợi!

Dòng kích nhỏ vẫn có thể kích tốt cho các MOSFET/IGBT có điện dung ngõ vào nhỏ (thường là các linh kiện có điện áp định mức thấp).

Có thể dùng 1N5819 để thay cho BYV79E, tuy nhiên điện áp của rail nguồn của cầu H không nên vượt quá 40 V (tốt nhất là không vượt quá 35 V).

Cầu H này có thể chạy tốt ở tần số 20 kHz.

Thân,

ranhcon 09-05-2008 12:57 AM

các anh cho em hỏi nếu dùng LM393 để nâng điện áp PWM 5v lên 12V rồi đưa vào IR2101 mà không cần dùng opto có được không, như vậy chắc là sẽ nâng được tần số PWM lên phải không ạ

namqn 09-05-2008 01:06 AM

Trích:

Nguyên văn bởi ranhcon (Post 16062)
các anh cho em hỏi nếu dùng LM393 để nâng điện áp PWM 5v lên 12V rồi đưa vào IR2101 mà không cần dùng opto có được không, như vậy chắc là sẽ nâng được tần số PWM lên phải không ạ

IR2101 chấp nhận ngõ vào mức 5 V như là logic '1', tại sao cần phải nâng điện áp đó lên 12 V?

Việc dùng optocoupler hay không là tùy người thiết kế. Câu trả lời cho câu hỏi của bạn là được: bạn có thể nối thẳng tín hiệu logic đến ngõ vào của IR2101, không cần qua optocoupler.

Tất nhiên khi không có optocoupler thì giới hạn tần số do đáp ứng chậm của optocoupler sẽ không còn. Nói vậy không có nghĩa là muốn nâng tần số lên bao nhiêu cũng được, vì còn nhiều yếu tố ràng buộc khác.

Thân,

dangtq84 09-05-2008 11:31 AM

Các bác giúp em với
 
1 Attachment(s)
Em có sơ đồ mạch trong file đỉnh kèm. Em muốn điều khiển tốc độ 4 động cơ dùng 2 con slave Pic 16f876a và dùng L298.

ranhcon 09-05-2008 05:49 PM

cảm ơn anh, em cứ tưởng phải đúng 12v mới được, em cũng muốn ghép qua lm393 để cách li luôn giữa mạch pwm và mosfet vì lm393 có dạng open drain mà

bigtitan 09-05-2008 11:39 PM

Trích:

Nguyên văn bởi sphinx (Post 3627)

2. Phương pháp điều khiển.
Phương pháp điều khiển tốt nhất là sử dụng cấu trúc vòng phân cấp. với 3 vòng điều khiển.

- Vòng điều khiển dòng (điều khiển momen) là vòng điều khiển trong cùng có động học nhanh nhất, yêu cầu chu kì đk nhỏ nhất (cỡ 100us-400us).
- Vòng điều khiển vận tốc đứng thứ 2 với chu kì gấp 1 số nguyên lần vòng thứ nhất (thường là 10 lần)
- Vòng điều khiển vị trí là vong ngoài cùng, yêu cẫu chu kì điều khiển lớn nhất và cũng gấp 1 số nguyên lần vòng đk vận tốc.

Chu kì trích mẫu của các vòng là khác nhau nhưng chúng tỉ lệ với nhau. Chu kì này sẽ quyết định hàm truyền rời rạc của đối tượng trong vòng điều khiển.

Vòng điều khiển dòng có thể sử dụng khâu điều chỉnh Dead-beat (tối ưu cấu trúc).
Vòng điều khiển vận tốc có thể dùng thiết kế tối ưu module số (tối ưu tham số)
Vòng điều khiển vị trí tương tự vòng điều khiển vận tốc.

Mấy bác cho em hỏi cái này.Về đk động cơ, ta có thể tìm hiểu lý thuyết chán chê, xây dựng mô hình matlab, nhưng khi làm thực tế chỉ cần xuất PWM để đk vận tốc hoặc vị trí.
Vậy còn dòng, đk làm chi, và như thế nào.vận tốc hay vị trí có thể làm thông qua encoder.Dòng thì sao.Em coi các bài hướng dẫn mô hình( tut trên dieukhien.net) thì thấy làm phần dòng,nhưng thực tế thì ko biết áp dụng như thế nào.Các bác giúp dùm..

bigtitan 09-05-2008 11:43 PM

http://www.dieukhien.net/vn/index.php?arid=1090

namqn 09-05-2008 11:57 PM

Trích:

Nguyên văn bởi bigtitan (Post 16084)

Có vẻ như chỉ có thành viên của diễn đàn đó mới xem được bài viết.

Thân,

bigtitan 10-05-2008 04:08 PM

đại khái là mô hình trên Mfile và simulink, đk dòng và số vòng quay như mong muốn.
Nhưng em ko hiểu mình đk dòng làm gì khi đk số vòng quay và vị trí, thực hiện 3 vòng như bác sphinx nói trên trong khi với PIC chỉ cần đọc encoder, tính sai số, viết hàm PID thế là có số vòng hay vị trí mong muốn.

bigtitan 14-05-2008 01:18 AM

Có lẽ như bác nam nói, mọi người đã hoàn thành cả rồi.

Greenmouse 06-06-2008 03:56 PM

Tôi đang làm đồ án về PID dùng để điều khiển nhiệt độ lò nhiệt, thiết bị sử dụng là màn hình HMI có tên là ST402 của hãng Pro-face. Nhưng cái khó là phải viết Script cho PID. Có gì mong anh em chỉ giáo! Cảm ơn nhiều!

tungtuantu 03-07-2008 07:39 PM

các bác ơi, vậy là cái đề án này vẫn còn đang dở dang ah, đã có ai làm thành công chưa ah, các bác post lên cho newmember bọn em học hỏi với

tungtuantu 07-07-2008 10:09 PM

bác F chủ trì vụ này sao ko cho bọn em thêm ý kiến j thế, em đọc hết 28 trang rồi mà vẫn thấy dự án bỏ ngỏ, đến thời điểm này là 2 năm rồi mà chưa thấy có một bài báo cáo hoàn chỉnh, hay 1 bạn nào đó thông báo đã làm chạy thành công.
Khẩn mong bác F cho thêm ý kiến, nếu có bác post luôn bài báo cáo thì tốt quá

Thân

manhha2799 07-07-2008 11:16 PM

Vấn đến này đã giải quyết rồi mà, bạn đọc kỹ lại các trang và xem trang 20,21,22.

tungtuantu 08-07-2008 08:54 AM

em đã xem các trang đó rồi, nhưng mọi nguòi chưa ai chạy đuọc hoàn chỉnh cả, mà cũng ko co post bài kiểu như báo cáo lên, các sơ đò mạch, thuật toán.... Rất mong anh chủ trì vụ này tổng kết lại cho bọn em với,

tungtuantu 09-07-2008 03:43 PM

anh F ơi cho bọn em chút ý kiến đi, bọn e đang mong a từng ngày 1

tuanhunghp298 13-07-2008 01:35 PM

HD để tài
 
Trích:

Nguyên văn bởi tungtuantu (Post 17235)
các bác ơi, vậy là cái đề án này vẫn còn đang dở dang ah, đã có ai làm thành công chưa ah, các bác post lên cho newmember bọn em học hỏi với

em tự làm đi, anh chỉ có thể hướng dẫn sơ bộ thôi

manhha2799 27-07-2008 05:28 PM

Các bác cho em hỏi ý nghĩa những dòng sau(copy trong code mấy bài trên ):
1) v_set = 350; v_set là tốc độ động cơ tính bằng xung hay là tính bằng vòng/phút hay tính bằng gì?
2) Các thông số Kp,Ki,Kd lấy ở đâu?
unsigned long kp =2.5;
unsigned long ki = 0.0092;
unsigned long kd = 0;
3) Giải thích giùm em đoạn code sau:
void cal_pid()
{
e2 = v_set - v_cur;
e_sum += e2;
e_del = e2 - e1;
e1 = e2;
temp_kp = kp*e2;
temp_ki = ki*e_sum;
temp_kd = kd*e_del;
pw_duty +=temp_kp;
if (pw_duty <1000)
pw_duty += temp_ki;
if (pw_duty <1000)
pw_duty += temp_kd;
if (pw_duty <256) // vi khi pw_duty <256 thi PWM chi dieu rong xung 8 bit / //chu khong phai 10 bit,
pw_duty = 256;
if (pw_duty >1000) // bao hoa
pw_duty = 1000;
printf(" \t%ld", v_cur); // truyen toc do xung ve may tinh hien thi tren Hyperterminal
}

vleminh 06-10-2008 04:54 PM

em muốn tham gia quá.nhưng không biết đăng kí thế nào đây! với lại em mới vào học pic gần đây nên còn gà lắm.mong các bác giúp đỡ.

vleminh 06-10-2008 04:58 PM

chà! vừa pót thì lại sai rum. mong các mod bỏ qua. em muốn tham gia thí nghiêm mà bác F đưa ra.nhưng không biết đăng kí thế nào đây! với lại mới học pic nên còn gà lắm mong các bác chỉ giáo. em rất muốn tham gia.

longphi_batbai 13-10-2008 10:44 PM

em cũng muốn tham gia nhưng thấy mình hơi muộn hơn mọi người, ko biết bây giờ tham gia có đuợc ko vậy bác F? em cũng đang cố gắng xem lại các trang cũ để bắt kịp mọi người, nếu có thể tham gia được,khi nào có mô hình em sẽ post lên để cùng a e trong diễn đàn cùng trao đổi

ilove HUT 15-10-2008 10:00 AM

Trời đất
Như vậy thì còn j tốt bằng hả anh.Em cũng đang làm một đề tài về robot cứu nạn .Nếu em muốn tham gia thì có được không hả anh.Em phải làm những gì để có thể tham gia được ,mong anh chỉ bảo. Cảm ơn anh nhìu nhìu nhé

trongtin1988 08-12-2008 10:07 AM

có bác nào có tài liệu liên quan tới mạch cầu H thì giúp với.thanks các bác nhiều nhiều

nmhai 08-12-2008 11:02 AM

Trích:

Nguyên văn bởi trongtin1988 (Post 21225)
có bác nào có tài liệu liên quan tới mạch cầu H thì giúp với.thanks các bác nhiều nhiều

Bạn có thể tham khảo bài viết về mạch cầu H tại đây http://forum.suno.vn/showthread.php?p=824#post824

cau7_sd 08-02-2009 12:25 AM

Chủ đề này đang rất hay sao ko thấy các bác thảo luận nữa vậy? Tui đang cố học pic để có thể tự làm một bộ, mong các bác thảo luận tiếp để anh em còn học hỏi chứ!

manhha2799 08-02-2009 08:26 AM

Cái chủ đề này xong lâu rồi bạn ơi. Cố gắng xem lại mà làm. Mình thấy có đủ hết rồi đó.

longphi_batbai 25-02-2009 12:53 PM

3 Attachment(s)
em mới thiết kế mạch điều khiển động cơ mà không biết có hoạt động ổnko, mong các cao thủ góp ý giùm e,thanks every body

namqn 25-02-2009 05:38 PM

Trích:

Nguyên văn bởi longphi_batbai (Post 22965)
em mới thiết kế mạch điều khiển động cơ mà không biết có hoạt động ổnko, mong các cao thủ góp ý giùm e,thanks every body

Bạn chưa nối chân 4, 5 của L293 vào GND của mạch. Nguồn 5 V của bạn hơi thừa phần đệm dòng, vì dòng tiêu thụ không lớn lắm. Nguồn 24 V là nguồn động lực, cấp cho động cơ, không nhất thiết phải ổn áp kiểu tuyến tính. Có lẽ bạn đánh nhầm, nhưng 15 V ngõ vào sẽ không bao giờ cho bạn 24 V ở ngõ ra của 7824.

Thân,

mhily07 26-02-2009 07:10 PM

em chào anh Hiệp , em đang học lớp CĐT do thầy Chung Tấn Lâm phụ trách . sáng nay anh đã đứng lớp dạy tụi em đó . em rất muốn tham gia chương trình mà anh đã đề ra này . anh cho em đăng ký với nhé . em có 1 cái động cơ servo 400 xung /vòng rùi . em đang đăng kí mua PIC 16f887 mà anh giới thiệu hồi sáng đó , còn mạch nạp thì em dự định sẽ tự làm thông qua tìm hiểu trên PVN (có rất nhiù nên em chưa biết chọn loại mạch nạp nào , anh có thể cho em ý kiến ko ạ ? ) . em đang tìm hiểu về Matlab và giải thuật PID . còn về mạch điều khiển thì em đang xoắn óc đây ạ , chưa đâu vào đâu hết (em chỉ mới tìm hiểu hk này thôi ) . mong các anh chỉ dạy thêm ạ .

mhily07 26-02-2009 07:22 PM

em chào anh Hiệp , em đang học lớp CĐT do thầy Chung Tấn Lâm phụ trách . sáng nay anh đã đứng lớp dạy tụi em đó . em rất muốn tham gia chương trình mà anh đã đề ra này . anh cho em đăng ký với nhé . em có 1 cái động cơ servo 400 xung /vòng rùi . em đang đăng kí mua PIC 16f887 mà anh giới thiệu hồi sáng đó , còn mạch nạp thì em dự định sẽ tự làm thông qua tìm hiểu trên PVN (có rất nhiù nên em chưa biết chọn loại mạch nạp nào , anh có thể cho em ý kiến ko ạ ? ) . em đang tìm hiểu về Matlab và giải thuật PID . còn về mạch điều khiển thì em đang xoắn óc đây ạ , chưa đâu vào đâu hết (em chỉ mới tìm hiểu hk này thôi ) . mong các anh chỉ dạy thêm ạ .

gà mờ 21-03-2009 09:48 AM

Chào mọi người không biết luông này còn hoạt động không nhỉ,em đang rất cần bộ thông số của động cơ Nisca nhãn hiệu NF5475E . Em tìm trên trang web của Nisca nhưng thông số nó cho chỉ có momen xoắn , hệ số mômen km,chứ chẳng thấy J,b,La,Ra đâu cả . Bác nào có cho em xin với
Thanks!

gà mờ 26-03-2009 10:51 AM

Luồng này kết thúc rùi sao các bác? Một kết thúc rất là "vietnam" mình :D : Lúc mới bắt đầu các bác giới thiệu đề tài rất hoành tráng bao nhiêu dự định,vơí những mục đích và tham vong lớn lao vậy mà kết thúc chỉ thế này thôi sao không có nổi một cái báo cáo thậm chí tối thiểu là cái kết luận đề tài xem là đã làm đc những gì ,mức độ thành công của đề tài đến đâu(hay các bác làm được thì giữ lại làm bí kíp cho mình luôn hi...:d) . Em đã kiểm tra lại một lượt từ đầu tới cuối luồng thì thấy có mỗi nhóm bác bluepine là đi gần tới cùng (phải chăng vì cái động cơ của bác đó có datasheet nên có được đủ các thông số?) em nói vậy vì thấy với các loại động cơ của các nhóm khác không có đây đủ thông số thì đều không có kết quả cuối cùng (chẳng hạn như nhóm của bác tinhthanthep em thấy tắt ngóm từ phần làm pid...). Em nghe nói phương pháp Ziegler – Nichols 2 không cần đến hàm truyền vẫn tính được các hệ số pid (trích nội dung:Thay bộ điều khiển PID trong hệ kín bằng bộ khuếch đại. Sau đó tăng hệ số khuếch đại tới giá trị tới hạn kth để hệ kín ở chế độ biên giới ổn định, tức là có dạng dao động điều hòa . Xác định chu kỳ Tth của dao động sau do suy ra các hệ số kp,ki,kd) không biết phương pháp này thế nào nhỉ . các bác cao thủ còn tâm huyết với đề tài này xin chỉ giáo cho em với
thanks

mgdaubo 31-03-2009 02:38 AM

Cho em hỏi: biểu thức toán học của PID là
Code:

U(t) = Kp*e(t) + Ki*tich_phan(e(t)) + Kd*vi_phan(e(t)) ;    (1)
Vậy sao lại biến đổi ra biểu thức PID rời rạc điều khiển động cơ là:
Code:

duty = duty + Kp*e2 + Ki*e_sum + Kd*e_del;    (2)
Theo em nghĩ thì phải là "duty = Kp*e2 + Ki*e_sum + Kd*e_del;" mới đúng chứ??? (không phải là cộng dồn duty lên...)

Em có làm thử theo công thức thứ (2) mà mới để Kp = 1; Ki = Kd = 0; mà động cơ đã vọt lố, giao động mạnh rồi, phải dùng tay ghì bánh xe lại (tải rất lớn) thì động cơ mới đỡ giao động ???

Mecha 31-03-2009 07:16 AM

http://i13.photobucket.com/albums/a2...screte_PID.jpg

Trên đây là công thức tính PID (cấu trúc song song) rời rạc đã được đề cập đến trong rất nhiều sách.

Kp, Ti, Td: thông số của PID
Ts: chu kỳ trích mẫu


<code>

// sense: đọc dữ liệu từ sensor
ek = ref – pv; // pv = present value

// calculate & anti-windup limits
uk = theo công thức;

if ( uk > ukmax )
uk = ukmax;
else if ( uk < ukmin )
uk = ukmin;

// update biến trạng thái
ek-2 = ek-1;
ek-1 = ek;
uk-2 = uk-1;
uk-1 = uk;

// actuate: ghi dữ liệu ra actuator
outPortUk.data()->Set(uk); // ví dụ 1 lệnh gửi dữ liệu ra output port

</code>

Chú ý tuần tự thực hiện nên là: sense(), calculate(), update(), actuate().

Astrom and Wittenmark có đề xuất là “writing first”, khi đó tuần tự thực hiện sẽ là actuate(), sense(), calculate(), update(). Tuy nhiên trong vấn đề này mỗi người có một quan điểm khác nhau.

sandro_bk 31-03-2009 10:36 AM

Cái PID này người ta đã làm từ rất rất lâu rồi,cái thread này cũng đã tạo ra từ rất lâu mà đến nay cũng chỉ kết thúc ở công thức PID,thật đáng thất vọng,
có điều khi làm lý thuyết là 1 chuyện,thực nghiệm là 1 chuyện,mô phỏng chạy rất ok nhưng thực nghiệm thì lại ko có thông số động cơ?vậy là cuối cùng cũng phải mò mấy hệ số KP,Ki,Kd,


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam