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)

buoiit 05-02-2008 10:36 PM

Chào tất cả các anh, em muốn làm một cái mô hình điều khiển PID động cơ DC như các anh đã làm hiện tại em đã làm xong phần mô hình và mạch cầu H dùng IR2110 như anh namqn đã post lên, em đã đọc tất cả các bài viết trong luồng này nhưng vẩn có một số thắc mắc mong các anh chỉ giáo:
+ Cái động cơ em mua của đức tra cataloge như hình
http://i270.photobucket.com/albums/j...iit/dongco.jpg
có phải cái động cơ này encorder có số xung /vong là 1000 không ? (nó ghi 1000 lmp/umdr vì là tiếng đức nên em pó tay)
+ Em muốn cho động cơ chỉ chạy theo 1 chiều cố định thì em sẽ nối chân Pwm ở vi điều khiển vào Q1 và Q4; và Q2,Q3, hai chân Shutdown ở 2 con IR2110 em nối GND làm như vậy có được không?

Xin mời các anh xem mô hình của em
http://i270.photobucket.com/albums/j...Picture079.jpg
http://i270.photobucket.com/albums/j...Picture078.jpg
http://i270.photobucket.com/albums/j...Picture081.jpg
http://i270.photobucket.com/albums/j...Picture082.jpg

namqn 06-02-2008 01:47 AM

Trích:

Nguyên văn bởi buoiit (Post 14251)
Chào tất cả các anh, em muốn làm một cái mô hình điều khiển PID động cơ DC như các anh đã làm hiện tại em đã làm xong phần mô hình và mạch cầu H dùng IR2110 như anh namqn đã post lên, em đã đọc tất cả các bài viết trong luồng này nhưng vẩn có một số thắc mắc mong các anh chỉ giáo:
+ Cái động cơ em mua của đức tra cataloge như hình
http://i270.photobucket.com/albums/j...iit/dongco.jpg
có phải cái động cơ này encorder có số xung /vong là 1000 không ? (nó ghi 1000 lmp/umdr vì là tiếng đức nên em pó tay)
+ Em muốn cho động cơ chỉ chạy theo 1 chiều cố định thì em sẽ nối chân Pwm ở vi điều khiển vào Q1 và Q4; và Q2,Q3, hai chân Shutdown ở 2 con IR2110 em nối GND làm như vậy có được không?

Xin mời các anh xem mô hình của em
http://i270.photobucket.com/albums/j...Picture079.jpg
http://i270.photobucket.com/albums/j...Picture078.jpg
http://i270.photobucket.com/albums/j...Picture081.jpg
http://i270.photobucket.com/albums/j...Picture082.jpg

+ Có lẽ 1000 imp/umdr là 1000 xung/vòng rồi, vì với encoder thì còn thông tin gì khác ngoài độ phân giải đâu.

+ Bạn không cho biết sơ đồ của bạn ra sao thì làm sao biết Q1 đến Q4 là những linh kiện gì. Tôi đã post lên vài sơ đồ trong luồng này, làm sao biết được bạn dùng sơ đồ nào.

Thân,

buoiit 06-02-2008 10:40 AM

chào anh namqn em làm cái mạch cầu H theo sơ đồ nguyên lý anh post ở #281 trong luồng này, vây em muốn cho động cơ chỉ chạy theo 1 chiều cố định thì em sẽ nối chân Pwm ở vi điều khiển vào Q1 và Q4; và Q2,Q3, hai chân Shutdown ở 2 con IR2110 em nối GND làm như vậy có được không?

namqn 07-02-2008 05:24 PM

1 Attachment(s)
Trích:

Nguyên văn bởi buoiit (Post 14254)
chào anh namqn em làm cái mạch cầu H theo sơ đồ nguyên lý anh post ở #281 trong luồng này, vây em muốn cho động cơ chỉ chạy theo 1 chiều cố định thì em sẽ nối chân Pwm ở vi điều khiển vào Q1 và Q4; và Q2,Q3, hai chân Shutdown ở 2 con IR2110 em nối GND làm như vậy có được không?

Giả sử động cơ quay theo chiều thuận khi dòng điện đi vào động cơ từ trái sang phải (nhìn trên sơ đồ).

Để động cơ quay theo chiều thuận:
- Q3 ngắt (off) thường trực, Q4 đóng (on) thường trực
- Q1 và Q2 có tín hiệu PWM ngược nhau

Để động cơ quay theo chiều ngược:
- Q1 ngắt (off) thường trực, Q2 đóng (on) thường trực
- Q3 và Q4 có tín hiệu PWM ngược nhau

Nếu không dùng chân Shutdown thì có thể nối đến GND.

Nếu bạn không có nhu cầu đảo chiều thì không cần sử dụng cầu H, chỉ cần dùng mạch truyền động đơn giản đính kèm dưới đây.

Thân,

dvnccbmacbt 19-02-2008 01:19 PM

Trích:

Nguyên văn bởi scentoflove (Post 3757)
Biết ai ko mechatronic, he he làm interface xấu quá. Interface nè

dao động liên tục
http://i71.photobucket.com/albums/i1...an/p4i0d02.jpg
dao động tắt dần
http://i71.photobucket.com/albums/i1...pan/p3i0d0.jpg
vọt lố
http://i71.photobucket.com/albums/i1...pan/p2i0d0.jpg
vọt lố sau đó tiến tới set point
http://i71.photobucket.com/albums/i1...pan/p1i0d0.jpg

Cái nét cuối đồ thị là do soft thêm vào ko phải đáp ứng động cơ. làm cho mình xài nên mọi người đừng chê nha buồn lắm đó.


Có bác nào làm phần giao tiếp vói máy tính dùng Matlab qua cổng Com chưa ạ? Em đang học giao tiếp với máy dùng Matlab nên muốn tham khảo cách viết. Có thể post code lên được không ạ? Mong mọi người giúp đỡ.

namqn: bạn tham khảo bên box dành cho lập trình cổng COM và LPT, bên đó có một số luồng liên quan đến giao tiếp với cổng COM bằng MATLAB. Bạn đã hỏi ở đó về vấn đề này rồi thì không nên post ở những luồng không liên quan.

tuyenqs 15-04-2008 12:11 AM

đề tài này giờ bỏ trống hả các Bác?

namqn: đề tài này đã kết thúc, đã có nhiều người thực hành, và đã báo cáo kết quả, bạn đọc lại luồng này nhé.

phanyen 17-04-2008 02:00 AM

nghe nói e cũng khoái lăm , vì e cung đang lam bài tập lớn với nội dung như trên nhưng không làm phần cứng . nếu được làm thì hay biết mấy . bác nào biết nhiều nhiều chỉ em với
thân ái !

phanyen 17-04-2008 02:01 AM

liên hệ với em theo địa chỉ này nè ! nguyenson8486@yahoo.com or Mr.son84@gmail.com

phanyen 17-04-2008 02:09 AM

chào các bác !
e cũng đang làm bài tập lớn về phần này . nếu được tham gia thì hay biết mấy ! cùng nhau làm các bác nhe !
Mr.son84@gmail.com

phanyen 17-04-2008 11:39 PM

em cũng muốn tham gia . anh F giúp em nhé !
địa chỉ của e nè : nguyễn thành sơn
148/8b đường ung văn khiêm - bình thạnh

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!


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

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