版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機控制系統實踐直流電機速度控制組員: 班級:研1308授課教師:徐洪澤電子信息工程學院 日期:2013-11-24目錄1、整體設計12、硬件搭建過程3一、單片機最小系統3二、RS232串口模塊3一、電機驅動模塊4四、測速模塊5五、上位機顯示與控制73、閉環(huán)系統的PID控制實現8一、控制算法8二、PID參數的整合84、問題探討與實驗總結9一、問題探討9二、實驗總結95、附錄:總體程序10一、程序流程說明10二、源代碼10三、實物圖201、 整體設計本系統旨在實現直流電機的速度閉環(huán)控制。微控制器接受上位機和測速機構的速度信號,以其偏差作為PID控制算法的輸入,同時用微控制器產生H橋所需的PWM
2、控制信號,PWM的占空比為微控制器PID控制算法的輸出。通過控制PWM的占空比來控制電機電樞電壓,從而達到控制電機轉速的目的。圖1.直流電機速度控制系統框圖圖中:r期望轉速; b轉速測量值; e期望轉速與實際轉速偏差; n轉速輸出值。直流電機轉速為:本系統采用對電樞電壓進行控制的電樞控制法,而電樞電壓的控制采用開關驅動方式,即使驅動電機的半導體功率器件工作在開關狀態(tài),通過脈寬調制PWM來控制電動機電樞電壓,實現調速。在Altium Designer summer 09中畫出直流電機速度控制系統的詳細設計原理如下圖所示。微控制器采用STC89C52RC單片機,單片機和上位PC機通過RS232進行
3、通信,通過單片機的外部中斷對編碼器輸出脈沖進行計數、單片機的P0.0和P0.1口輸出PWM波形信號。外部中斷INT1對光電編碼器脈沖計數,單片機在一定時間間隔內即可計算出電機的轉速。當電機的實際速度小于目標速度時,LED0指示電機加速;當大于目標速度時,LED1指示電機減速。圖2.直流電機速度控制系統詳細設計圖2、 硬件搭建過程一、單片機最小系統功能介紹:1支持STC51系列與AT51系列單片機(DIP40),或通過其它轉接座支持其它型號單片機;28路水晶藍LED可作流水燈實驗;32個中斷按鍵(INT0與INT1)和1個復位按鍵;41個電位分壓器可供調節(jié)輸出參考電壓51個標準ISP下載接口,用
4、于下載AT單片機程序,及供電;61個USB-TTL接口,用于下載STC單片機,及供電;732個IO口以排針形式引出,方便外部使用;8留有3組電源排針輸出,方便外部配件取電,或向板子供電;9板載12MHz優(yōu)質晶振及P0口全部上拉4.7K電阻,板上標準復位電路;10使用DIP40鎖緊座方便取放芯片;二、RS232串口模塊本文設計的控制系統與上位機串口通信部分采用了PL2303HX模塊實現。主要功能是將實時的速度數據傳送到上位機顯示;接受上位機發(fā)送到單片機的控制信息,包括PID的三個參數Kp,Ki,Kp和電機轉向。PL2303HX采用28腳貼片SOIC封裝,工作頻率為12MHZ,符合USB 1.1通
5、信協議,可以直接將USB信號轉換成串口信號,波特率從751228800,有22種波特率可以選擇,并支持5、6、7、8、16共5種數據比特位,是一款相當不錯的USB轉串口芯片。PL2303模塊可以方便地利用杜邦免焊接連接線接入電路,只要插接3根線,一根串口入、一根串口出、一根地線。需要注意的是STC89C52 單片機下載模式接線如下:(只需要連接3根線)USB轉TTL小板 TX 連接 單片機P3.0 (RX)USB轉TTL小板 RX 連接 單片機P3.1 (TX)USB轉TTL小板 GND 連接 單片機GND一、電機驅動模塊本系統采用的電機驅動模塊為L9110S雙路直流電機驅動板,實物如下圖所示
6、。L9110是為控制和驅動電機設計的兩通道推挽式功率放大專用集成電路器件,將分立電 路集成在單片IC之中,使外圍器件成本降低,整機可靠性提高。該芯片有兩個TTL/CMOS 兼容電平的輸入,具有良好的抗干擾性;兩個輸出端能直接驅動電機的正反向運動及剎車,它具有較大的電流驅動能力,每通道能通過750800mA的持續(xù)電流,峰值電流能力可達1.52.0A;同時它具有較低的輸出飽和壓降;內置的鉗位二極管能釋放感性負載的反向沖擊電流,使它在驅動繼電器、直流電機、步進電機或開關功率管的使用上安全可靠。L9110被廣泛應用于保險柜、玩具汽車的電機驅動、步進電機驅動和開關功率管等電路上。電路內部功能框圖:圖3.
7、 L9110電路內部功能框圖具有如下特點:n 低靜態(tài)工作電流;n 寬電源電壓范圍:2.5V-12V;n 每通道具有800mA連續(xù)電流輸出能力;n 較低的飽和壓降;n 輸出具有正轉、反轉、高阻和剎車四種狀態(tài);n TTL/CMOS 輸出電平兼容,可直接連CPU;n 輸出內置鉗位二極管,適用于感性負載;n 控制和驅動集成于單片IC之中;n 具備管腳高壓保護功能;n 工作溫度:-20-80。應用電路圖:圖4. L9110驅動電機應用電路圖四、測速模塊本系統采用精度達到888線的AB相編碼器。通過旋轉的光柵盤和光耦產生可識別方向的計數脈沖信號。以下是該編碼器的相關介紹:編碼器型號為Agilent Q98
8、43,888線碼盤保證了測速精度,也就是電機轉一圈輸出888個脈沖,芯片上已集成了脈沖整形觸發(fā)電路,輸出的是矩形波,用示波器檢測相當穩(wěn)定,直接單片機IO口,由于分辨率很高,對單片機的處理能力和程序編寫水平提出較高要求。以下是直流電機實測參數以供參考:電機線圈電阻6.6歐,阻轉電流=電壓/電阻。測試得到參數表如下:電壓 空載電流輸出轉速(減速后,單位rpm)3V 60mA 706V 70mA 14012V 80mA 280編碼器3.5V時耗電實測20ma(實測3.3V-5V都正常工作,方波規(guī)范,但隨著電壓的提高工作電流會增加,5V時工作電流40ma),加電后編碼器發(fā)出暗紅色的光(亮度很低),AB
9、相輸出就可以知道電機的轉動方向。五、上位機顯示與控制上位機實現通過串口向單片機發(fā)送控制數據、處理單片機回送數據、顯示轉數值和速度-時間曲線,便于觀察控制系統的性能指標。其界面如下。主界面:速度顯示PID參數設置菜單: 繪圖設置菜單: 使用說明:(1)主界面:首先,保證本直流電機控制系統的串口模塊已連接上位PC機。打開本軟件,從設備管理器中,查看串口模塊連接的com口號,選擇對應的com口進行連接。成功連接后,點擊開始采集,即可采集單片機發(fā)送的速度數據并實時顯示收到的數據。同時,可以s使用滑動條來調節(jié)目標速度。(2)PID參數設置菜單:點擊PID參數設置菜單,即可PID對三個控制參數Kp,Ki,
10、Kd設置,點擊確定,設置完畢。這時,需要點擊發(fā)送控制信息,單片機接收到修改后的控制信息進行調整??刂菩畔⒉捎?個byte的格式,其報文協議為:Kp兩個字節(jié),Ki兩個字節(jié),Kd兩個字節(jié),速度兩個字節(jié)。(3)繪圖設置菜單:為了讓使用界面更加友好,加入了繪圖設置的功能。3、 閉環(huán)系統的PID控制實現一、控制算法單片機軟件實現接收上位機指令,以期望速度和測量機構采集的測量速度的偏差信號作為PID算法的輸入信號,經過PID控制后改變其輸出的PWM信號的占空比,輸出PWM信號,從而實現使電機的實際轉速趨近于期望轉速。實驗采用位置式PID控制算法,算法流程為: 式中:二、PID參數的整合這里最重要的是PID
11、參數的整合過程和辦法,PID 控制器參數選擇的方法很多,例如:試湊法、臨界比例度法、擴充臨界比例度法等。但是,對于PID 控制而言,參數的選擇始終是一件非常煩雜的工作,需要經過不斷的調整才能得到較為滿意的控制效果。依據調研和經驗,一般PID 參數確定的步驟如下:(1) 確定比例系數Kp確定比例系數Kp時,首先去掉PID 的積分項和微分項,可以令Ti=0、Td=0,使之成為純比例調節(jié)。輸入設定為系統允許輸出最大值的6070,比例系數Kp由0 開始逐漸增大,直至系統出現振蕩;再反過來,從此時的比例系數Kp逐漸減小,直至系統振蕩消失。記錄此時的比例系數Kp,設定PID的比例系數Kp為當前值的6070
12、。(2) 確定積分時間常數Ti比例系數Kp確定之后,設定一個較大的積分時間常數Ti,然后逐漸減小Ti,直至系統出現振蕩,然后再反過來,逐漸增大Ti,直至系統振蕩消失。記錄此時的Ti,設定PID 的積分時間常數Ti 為當前值的150180。(3) 確定微分時間常數Td微分時間常數Td一般不用設定,為0即可,此時PID調節(jié)轉換為PI調節(jié)。如果需要設定,則與確定Kp的方法相同,取不振蕩時其值的30。最后,對PID參數進行微調,直到滿足性能要求。4、 問題探討與實驗總結一、問題探討(1) 調速電機PWM的頻率選擇此問題在我們小組涉及直流電機驅動時就遇到了,可翻閱了很多資料,都沒有給一個完美的答復,我覺
13、得應該根據電機的特性來選擇PWM 的頻率。這與機械的固有震動頻率有關,另外與電機特性有關,不過一般情況是頻率如果太低會導致電機抖動或者有嘯叫聲,或者致使交流成分太多,導致驅動橋中的功率管發(fā)熱。PWM的頻率的選擇和所用電機感抗和所需的速度響應時間有很大的關系,如果電機轉速比較高,感抗比較小,可以使用比較高的頻率。一般最好不要超過20K,因為一般IGBT最高20K的開關頻率。而MOS 的開關頻率比較高,但是過高的頻率就需要專用的驅動電路,不然MOS工作在放大區(qū)的時間比較長。如果電機轉速比較低,感抗比較大,而且又是在做伺服,那開關頻率就需要低一點。(2) PID控制輸出量如何控制執(zhí)行器?本系統的直流
14、電機是采用合適頻率的PWM來驅動的,脈沖的周期時間是一定的。對于速度的控制是采用脈寬調制的原理,即電機的速度取決于PWM的占空比,也就是說PID算法是研究一種控制脈寬的方法,使得電機速度能即快又穩(wěn)地穩(wěn)定在目標速度上。我們采用的方法是利用PID輸出控制量u與PWM占空比線性對應的關系進行控制,并在u達到或小到一定程度后,進行占空比飽和處理。最終,達到了對直流電機速度較好的控制。二、實驗總結5、附錄:總體程序一、程序流程說明單片機資源分配與作用:定時器T0: 根據frequency設置,產生該頻率的PWM來驅動電機。脈沖周期時間不變,通過改變高電平與周期時間之比來調整占空比。定時器T1:作為串口通
15、信中波特率發(fā)生器,工作在方式1。以全雙工方式工作,為串口發(fā)送速度數據和接收控制信息提供時鐘。定時器T2:每經過一定時間間隔,計算一次電機當前速度。將數據寫入串口緩沖區(qū)等待發(fā)送。查詢接收數據緩沖區(qū)是否有控制信息,如果有,則接收數據。 外部中斷INT0,INT1:計數光電傳感器產生的脈沖。二、源代碼整體程序有兩個部分組成:文件project_motor_control.c和文件sio.c,并附上了詳細的文檔說明,方便理解程序的思路,簡單易懂。project_motor_control.c中程序的功能主要是電機的速度測量,產生PWM驅動電機,和閉環(huán)PID的控制。而sio.c中程序的功能則是發(fā)送和接收
16、數據,將速度信息發(fā)送到上位機處理顯示,以反映電機速度控制系統的控制性能;同時可以接收PC人機接口設置的控制信息。project_motor_control.c具體程序如下:#include <reg52.h>#include <string.h>#include <stdio.h>#include <math.h>#include <intrins.h> /Keil外部函數庫包含文件,_nop_函數在此庫中#include <sio.h> /串口通信函數包含文件#include <config.h>#defin
17、e uchar unsigned char#define uint unsigned int/*電機接口*/sbit PHASE_A = P32; /外部中斷INT0 粉紅sbit PHASE_B = P33; /外部中斷INT1 綠色sbit pwm1 = P00; /電機驅動接口,當Motordirection=1時,pwm1=1,pwm2=0,電機正轉;反之,電機反轉 sbit pwm2 = P01;sbit ledup= P20; /加速燈指示sbit leddown = P27; /減速燈指示/*電機調速參數*/uint frequency = 500; /電機驅動PWM頻率,單位H
18、zuint speed = 0; /電機實時速度,單位rmpuint Motordirection = 1; /電機轉向uint Dutycycle = 50; /電機驅動PWM的占空比,范圍10-90long int countA = 0; /A相脈沖計數long int countB = 0; /B相脈沖計數/*調速PID參數*/uint Kp = 1,Ki = 1,Kd = 0; uint n = 0,count = 0;uint f,Tspeed = 238; /期望速度,單位rmpuint count0=0,count1=0,count2=0; /編碼器脈沖計數簡易濾波char pa
19、rameter_set = 0;uchar a8;float boundarydown = 120.0;float boundaryup = 125.0;/*X毫秒延時函數*/void delay1ms(void) uint j; for(j = 0;j <= 120;j+) _nop_();void delayXms(uint ms)uint k;for(k = 0;k <ms ;k+) delay1ms(); /*定時器中斷初始化函數*/void T0_Init()EA = 0;TMOD &= 0xf0; /定時器0,工作方式1 TMOD |= 0x01;TH0 = (
20、65536 - (XTAL/(12*100) * Dutycycle/frequency)/256;/初使加載50毫秒TL0 = (65536 - (XTAL/(12*100) * Dutycycle/frequency)%256;PT0= 0;/定時器中斷優(yōu)先級ET0 = 1; /開定時器中斷TR0 = 1; /啟動T0if(Motordirection = 1) pwm1 = 1; pwm2 = 0;else pwm1 = 0; pwm2 = 1;void T2_Init() /50ms定時RCAP2H = (65536-46080)/256; /重裝模式RCAP2L = (65536-4
21、6080)%256; ET2 = 1;TR2 = 1; /啟動T2 /*外部中斷初使化函數*/void INT_Init()IT1 = 1; /設置外部中斷1為下降沿觸發(fā) EX1 = 1;/開外部中斷1PX1 = 0;EX0 = 0;PX0 = 0; EA = 1;/開總中斷/*外部中斷函數*/void my_INT1(void) interrupt 2countB = countB+; /每中斷一次變量加1/*定時器中斷函數*/void Timer0(void) interrupt 1 /定時器0中斷 計算電機轉速uint t,nt;TR0 = 0;t =(65536 - (XTAL/(12
22、*100) * Dutycycle/frequency);nt =(65536 - (XTAL/(12*100) * (100-Dutycycle)/frequency);if (Motordirection = 1) /電機正轉 pwm2 = 0;if(pwm1 = 1) TH0 = nt/256 ; /重裝 TL0 = nt%256;pwm1 = 0;elseTH0 = t/256 ; /重裝 TL0 = t%256;pwm1 = 1;else /電機反轉 pwm1 = 0;if(pwm2 = 1) TH0 = nt/256 ; /重裝 TL0 = nt%256;pwm2 = 0;else
23、TH0 = t/256 ; /重裝 TL0 = t%256;pwm2 = 1;TR0 = 1;/*PID函數部分*/ typedef struct PID int SetPoint; / 設定目標 Desired Value int Proportion; / 比例常數 Proportional Const int Integral; / 積分常數 Integral Const int Derivative; / 微分常數 Derivative Const int LastError; / Error-1(上一次誤差) int PrevError; / Error-2(上上次誤差) int S
24、umError; / Sums of Errors PID;PID sPID;int PIDCalc( PID *pp, double NextPoint ) int dError,Error; Error = pp->SetPoint - NextPoint; / 偏差 pp->SumError += Error; / 積分 dError = pp->LastError - pp->PrevError; / 當前微分 pp->PrevError = pp->LastError; /把上一次誤差賦給上上次誤差 pp->LastError = Error
25、; /當前誤差賦給上一次誤差 return (pp->Proportion * Error / 比例項 + pp->Integral * pp->SumError / 積分項 + pp->Derivative * dError / 微分項 );void PIDInit (PID *pp) memset ( pp,0,sizeof(PID);uint sensor (void) / Dummy Sensor Function return speed;void actuator (int rDelta) / Dummy Actuator Function if(rDelt
26、a <= -boundarydown)Dutycycle=10; else if(rDelta >= boundaryup) Dutycycle=90; elseDutycycle = (uint)(80*(rDelta+boundarydown)/(boundarydown+boundaryup)+10); delayXms(40);void Timer2(void) interrupt 5 TF2 = 0; /定時器2的中斷標志要軟件清0n = n+1; /n+if (n = 4) /定時1秒(x個50ms為0.05*x秒)20*50ms=1count2 = count1; c
27、ount1 = count0;count0 = countB;countB = (count0 + count1 + count2)/3;speed = countB * 60 * 5 / 888; /電機rpm,每分鐘轉速countB = 0; /外部中斷1中斷次數歸零 n = 0;if(parameter_set = 1)a0 = com_getchar();a1 = com_getchar();a2 = com_getchar();a3 = com_getchar();a4 = com_getchar();a5 = com_getchar();a6 = com_getchar();a7
28、= com_getchar();Kp = (a0<<8)|a1)/10;Ki = (a2<<8)|a3)/10;Kd = (a4<<8)|a5)/10;Tspeed = (a6<<8)|a7;sPID.Proportion = Kp; / Set PID Coefficients(KP,KI,KD系數設定) sPID.Integral = Ki; sPID.Derivative = Kd; sPID.SetPoint = Tspeed; parameter_set = 0;com_putchar(speed/256); /每X秒向上位機發(fā)送速度數
29、據com_putchar(speed%256); /*主函數*/void main() int rOut; / PID Response (Output)uint rIn; / PID Feedback (Input)PIDInit ( &sPID ); / Initialize Structure sPID.Proportion = Kp; / Set PID Coefficients(KP,KI,KD系數設定) sPID.Integral = Ki; sPID.Derivative = Kd; sPID.SetPoint = Tspeed; / Set PID Setpoint T
30、0_Init(); /定時器T0初使化 question:定時器初始化com_initialize(); /初始化串口通信T2_Init(); /定時器T2初使化INT_Init(); /外部中斷初使化while(1) rIn = sensor (); / Read Input rOut = PIDCalc ( &sPID,rIn ); / Perform PID Integrationactuator ( rOut ); / Effect Needed Changes sio.c具體程序如下:/*-SIO.C: Serial Communication Routines.Copyri
31、ght 1995-2002 KEIL Software, Inc.-*/#include <reg52.h>#include <string.h>#include "sio.h"#include "config.h"/*-Notes:The length of the receive and transmit buffers must be a power of 2.Each buffer has a next_in and a next_out index.If next_in = next_out, the buffer is
32、 empty.(next_in - next_out) % buffer_size = the number of characters in the buffer.-*/*-*/static void com_isr (void) interrupt 4/*-Received data interrupt.-*/if (RI != 0) RI = 0; if (r_in - r_out) & (RBUF_SIZE-1) = 0) rbuf r_in & (RBUF_SIZE-1) = SBUF; / r_in+;if(r_in - r_out)=(RBUF_SIZE-1)pa
33、rameter_set=1; /可以進行電機目標參數設置 /*-Transmitted data interrupt.-*/if (TI != 0) TI = 0; if (t_in != t_out) /tbuf沒有發(fā)送完 SBUF = tbuf t_out & (TBUF_SIZE-1); t_out+; ti_restart = 0; else ti_restart = 1;/ tbuf發(fā)送完了,再次發(fā)送tbuf /*-*/#pragma disablevoid com_initialize (void)/*-Setup TIMER1 to generate the proper
34、 baud rate.-*/com_baudrate (9600);/*-Clear com buffer indexes.-*/t_in = 0;t_out = 0;r_in = 0;r_out = 0;/*-Setup serial port registers.-*/SM0 = 0; SM1 = 1; /* serial port MODE 1 */SM2 = 0;REN = 1; /* enable serial receiver */RI = 0; /* clear receiver interrupt */TI = 0; /* clear transmit interrupt */ti_restart = 1;ES = 1; /* enable serial interrupts */PS = 1; /* set serial interrupts to low priority */*-*/#pragma disablevoid com_baudrate ( unsigned baudrate)/*-Clear transmit interrupt and buffer.-*/TI = 0; /* clear transmit interrupt */t_in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024旅游景點開發(fā)與保護合同
- 2024某保險公司與某企業(yè)之間的2024年度員工團險合同
- 2025年度智能物流配送中心承包合同范本2篇
- 2024年雇傭責任免除協議版B版
- 不動產企業(yè)股權轉讓細化合同2024版版B版
- 2024年某商業(yè)大廈建筑模板專業(yè)分包合同一
- 2025年度高端教育機構合作辦學合同3篇 - 副本
- 2024版房屋租賃合同(商業(yè)用途)
- 2025年度太陽能玻璃組件供應與安裝一體化服務合同2篇
- 2025年生態(tài)葡萄種植基地采購合同示范文本3篇
- DL-T 1476-2023 電力安全工器具預防性試驗規(guī)程
- 通信安全員ABC證報名考試題庫及答案
- 開放系統10861《理工英語(4)》期末機考真題及答案(第103套)
- 思想道德與法治測試三考試附有答案
- 《中華民族大團結》(初中)-第7課-共同創(chuàng)造科學成就-教案
- 醫(yī)療耗材銷售工作計劃
- 《短視頻拍攝與制作》課件-3短視頻拍攝的三大技巧
- 《城鎮(zhèn)燃氣設施運行、維護和搶修安全技術規(guī)程?CJJ+51-2016》詳細解讀
- 太空艙民宿可行性研究報告
- 新《植物生產與環(huán)境》考試題庫大全-中(多選題匯總)
- 手部安全防護培訓參考課件
評論
0/150
提交評論