![]() |
PID vận tốc với PIC!
Chào mọi người!
Hiện tại mình đang làm điều khiển PID phản hồi 2 vòng cho động cơ. Phần PID điều khiển vị trí thì đã ok. Nhưng còn PID cho vận tốc thì mình chưa làm được. Mong mọi người giúp đỡ. Không biết ai đã làm hoàn chỉnh phần code cho PIC để điều khiển PID vận tốc rồi, cho mình tham khảo với. Còn đây là code của mình. MÌnh nghĩ không biết nó bị lỗi chỗ nào nhưng khi điều khiển thì đồ thị rất xấu. (vận tốc lên xuông liên tục dạng răng cưa). Mình cảm ơn nhiều. Code:
#include <18f4550.h> |
anh co the gui chuong trinh anh thuc hien PID cho mach vong van toc va vi tri cho em voi cam on anh nhieu.em dang rat can.email vanmien1@gmail.com
|
Có cao thủ nào đã làm 1 cái đồ án hoàn chỉnh DKDC co PID rồi có thể up len cho mọi người tham khảo không
|
up up em cũng đang rất cần để tài này. chủ topic cho em xin cái của anh để tham khảo với mail của em là nhaukhongxin@gmail.com . thank thank thank!
|
code bạn viết nhìn có vẻ void chóng mặt (int8 quá ) ; hôm sau mìnhh sẽ gởi code điều khiển vận tốc = pid cho động cơ nhé , có vẽ đồ thị bằng vb luôn . code của mình viết trực quan, đồ thị vẽ đáp ứng rất đẹp.
|
code nay minh thu ok ne,
#include <16f877a.h> #fuses HS,PUT,NOWDT #device adc=10 #use delay (clock = 20000000) #use rs232(baud = 9600 , parity = n , xmit = pin_c6 , rcv = pin_c7 , bits = 9) #include <LCD_4BIT_fix.c> float e,e1,a,b,i,x; int16 value,j , vttb ; int8 c,d , tg; int8 chuyendoi(int8 gt) ; #int_timer0 void ngat() { i=get_timer1(); set_timer1(0x00); e=x-i; a = e - e1; b = (e + e1) + b; e1 = e; value = (int16)(e + b/30); c = (int8)(!(bit_test (value,15))); value = value * c ; d = (int8)((bit_test(value,11))|(bit_test(value,12))| (bit_test(value,13))|(bit_test(value,14))); value = value * (!d) + 1023 * d; set_pwm1_duty(value); } |
void main ()
{ value=0; i=0; e=0; e1=0; a=0; vttb=0; b=0; setup_adc(ADC_CLOCK_INTERNAL ); lcd_init(); //ham khoi tao LCD lcd_setposition(line_1); printf(lcd_putchar,"SET : RPM"); lcd_setposition(line_2); printf(lcd_putchar,"SPEED : 0 RPM"); setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_1,255, 1); output_e (0xf2); enable_interrupts (INT_TIMER0); enable_interrupts (GLOBAL); while(true) { j= (Read_ADC())*17/10; // so vong / phut x=(j*0.032768); lcd_setposition(line_1); printf(lcd_putchar,"SET : RPM"); LCD_PutCmd ( 0x88 ); printf(lcd_putchar,"%ld",j); vttb=(int16)(i*30.51757812); // vantoc trung binh lcd_setposition(line_2); printf(lcd_putchar,"SPEED : RPM"); LCD_PutCmd ( 0xc8 ); printf(lcd_putchar,"%ld",vttb); delay_ms (200); } } |
Múi giờ GMT. Hiện tại là 11:38 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