基于STM32的直流電機PID調(diào)速系統(tǒng)設計_第1頁
基于STM32的直流電機PID調(diào)速系統(tǒng)設計_第2頁
基于STM32的直流電機PID調(diào)速系統(tǒng)設計_第3頁
基于STM32的直流電機PID調(diào)速系統(tǒng)設計_第4頁
基于STM32的直流電機PID調(diào)速系統(tǒng)設計_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上電氣控制技術(shù)研究生課程設計報告題 目 基于STM32的直流電機PID調(diào)速系統(tǒng) 學 院 機械與汽車工程學院 專業(yè)班級 車輛工程 學 號 0 學生姓名 李躍軒 指導教師 康 敏 完成日期 2017年01月03日 目錄專心-專注-專業(yè)1.緒論本文主要研究了利用STM32系列單片機,通過PWM方式控制直流電機調(diào)速的方法。PWM控制技術(shù)以其控制簡單、靈活和動態(tài)響應好的優(yōu)點而成為電力電子技術(shù)最廣泛應用的控制方式,也是人們研究的熱點。由于當今科學技術(shù)的發(fā)展已經(jīng)沒有了學科之間的界限,結(jié)合現(xiàn)代控制理論思想或?qū)崿F(xiàn)無諧振軟開關(guān)技術(shù)將會成為PWM控制技術(shù)發(fā)展的主要方向之一。本文就是利用這種控

2、制方式來改變電壓的占空比實現(xiàn)直流電機速度的控制。采用的芯片組成了PWM信號的發(fā)生系,然后通過L298N放大來驅(qū)動電機。利用光電編碼盤器測得電機速度,然后反饋給單片機,在內(nèi)部進行PID運算,輸出控制量完成閉環(huán)控制,實現(xiàn)電機的調(diào)速控制。2.設計方案根據(jù)系統(tǒng)設計的任務和要求,設計系統(tǒng)方框圖如圖1所示。圖中控制器模塊為系統(tǒng)的核心部件,鍵盤和顯示器用來實現(xiàn)人機交互功能,其中通過鍵盤將速度參數(shù)輸入到單片機中,并且通過控制器顯示到顯示器上。在運行過程中控制器產(chǎn)生PWM脈沖送到電機驅(qū)動電路中,經(jīng)過放大后控制直流電機轉(zhuǎn)速,同時利用速度檢測模塊將當前轉(zhuǎn)速反饋到控制器中,控制器經(jīng)過數(shù)字PID運算后改變PWM脈沖的占

3、空比,實現(xiàn)電機轉(zhuǎn)速實時控制的目的。圖1 系統(tǒng)方案框圖3系統(tǒng)硬件電路設計3.1整體電路設計單片機直流調(diào)速系統(tǒng)可實現(xiàn)對直流電動機的平滑調(diào)速。PWM是通過控制固定電壓的直流電源開關(guān)頻率,從而改變負載兩端的電壓,進而達到控制要求的一種電壓調(diào)整方法。在PWM驅(qū)動控制的調(diào)整系統(tǒng)中,按一個固定的頻率來接通和斷開電源,并根據(jù)需要改變一個周期內(nèi)“接通”和“斷開”時間的長短。通過改變直流電機電樞上電壓的“占空比”來改變平均電壓的大小,從而控制電動機的轉(zhuǎn)速。因此,PWM又被稱為“開關(guān)驅(qū)動裝置”。本系統(tǒng)以STM32單片機為核心,通過單片機控制,C語言編程實現(xiàn)對直流電機的平滑調(diào)速。本直流電機調(diào)速系統(tǒng)以單片機系統(tǒng)為依托,

4、根據(jù)PWM調(diào)速的基本原理,以直流電機電樞上電壓的占空比來改變平均電壓的大小,從而控制電動機的轉(zhuǎn)速為依據(jù),實現(xiàn)對直流電動機的平滑調(diào)速,并通過單片機控制速度的變化。本文所研究的直流電機調(diào)速系統(tǒng)主要是由硬件和軟件兩大部分組成。硬件部分是前提,是整個系統(tǒng)執(zhí)行的基礎,它主要為軟件提供程序運行的平臺。而軟件部分,是對硬件端口所體現(xiàn)的信號,加以采集、分析、處理,最終實現(xiàn)控制器所要實現(xiàn)的各項功能,達到控制器自動對電機速度的有效控制。本系統(tǒng)硬件資源分配見圖2所示。采用STM32F103單片機作為核心器件,轉(zhuǎn)速檢測模塊作為電機轉(zhuǎn)速測量裝置,通過STM32F103的PA1(A相)將電脈沖信號送入單片機處理,L298

5、作為直流電機的驅(qū)動模塊,利用320×240TFTLCD顯示器和3個獨立按鍵作為人機接口。圖2 系統(tǒng)電路連接及硬件資源分配圖3.2最小單片機系統(tǒng)設計STM32F103ZETT6作為MCU,該芯片是STM32F103里面配置非常強大的了,它擁有的資源包括:64KB SRAM、512KB FLASH、2個基本定時器、4個通用定時器、2個高級定時器、2個DMA控制器(共12個通道)、3個SPI、2個IIC、5個串口、1個USB、1個CAN、3個12位ADC、1個12位DAC、1個SDIO接口、1個FSMC接口以及112個通用IO口。該芯片的配置十分強悍,并且還帶外部總線(FSMC)可以用來外

6、擴SRAM和連接LCD等,通過FSMC驅(qū)動LCD,可以顯著提高LCD的刷屏速度,是STM32F1家族常用型號里面,最高配置的芯片了。3.2.1STM32F103復位電路STM32F103的復位電路如圖3所示: 圖3 復位電路圖因為STM32是低電平復位的,所以我們設計的電路也是低電平復位的,這里的R3和C12構(gòu)成了上電復位電路。同時,開發(fā)板把TFT_LCD的復位引腳也接在RESET上,這樣這個復位按鈕不僅可以用來復位MCU,還可以復位LCD。3.2.2電源電路STM32F103板載的電源供電部分,其原理圖如圖4所示:圖4 電源電路圖中,總共有3個穩(wěn)壓芯片:U12/U13/U15,DC_IN用于

7、外部直流電源輸入,范圍是DC624V,輸入電壓經(jīng)過U13 DC-DC芯片轉(zhuǎn)換為5V電源輸出,其中D4是防反接二極管,避免外部直流電源極性搞錯的時候,燒壞開發(fā)板。K2為開發(fā)板的總電源開關(guān),F(xiàn)1為1000ma自恢復保險絲,用于保護USB。U12為3.3V穩(wěn)壓芯片,給開發(fā)板提供3.3V電源,而U15則是1.8V穩(wěn)壓芯片,供VS1053的CVDD使用。3.3電機驅(qū)動電路設計驅(qū)動模塊是控制器與執(zhí)行器之間的橋梁,在本系統(tǒng)中單片機的I/O口不能直接驅(qū)動電機,只有引入電機驅(qū)動模塊才能保證電機按照控制要求運行,在這里選用L298N電機驅(qū)動芯片驅(qū)動電機,該芯片是由四個大功率晶體管組成的H橋電路構(gòu)成,四個晶體管分為

8、兩組,交替導通和截止,用單片機控制達林頓管使之工作在開關(guān)狀態(tài),通過調(diào)整輸入脈沖的占空比,調(diào)整電動機轉(zhuǎn)速。其中輸出腳(SENSEA和SENSEB)用來連接電流檢測電阻,Vss接邏輯控制的電源。Vs為電機驅(qū)動電源。IN1-IN4輸入引腳為標準TTL 邏輯電平信號,用來控制H橋的開與關(guān)即實現(xiàn)電機的正反轉(zhuǎn),ENA、ENB引腳則為使能控制端,用來輸入PWM信號實現(xiàn)電機調(diào)速。其電路如圖5所示,利用兩個光電耦合器將單片機的I/O與驅(qū)動電路進行隔離,保證電路安全可靠。這樣單片機產(chǎn)生的PWM脈沖控制L298N的選通端,使電機在PWM脈沖的控制下正常運行,其中四個二極管對芯片起保護作用。圖5 電機驅(qū)動電路3.4光

9、電碼盤編碼器電路設計在本系統(tǒng)中由于要將電機本次采樣的速度與上次采樣的速度進行比較,通過偏差進行PID運算,因此速度采集電路是整個系統(tǒng)不可缺少的部分。本次設計中應用了比較常見的光電測速方法來實現(xiàn),其具體做法是將電機軸上固定一圓盤,且其邊緣上有N個等分凹槽如圖6所示,在圓盤的一側(cè)固定一個發(fā)光二極管,其位置對準凹槽處,在另一側(cè)和發(fā)光二極光平行的位置上固定一光敏三極管,如果電動機轉(zhuǎn)到凹槽處時,發(fā)光二極管通過縫隙將光照射到光敏三極管上,三極管導通,反之三極管截止,電路如圖7所示,從圖中可以得出電機每轉(zhuǎn)一圈在PA3的輸出端就會產(chǎn)生N個低電平。這樣就可根據(jù)低電平的數(shù)量來計算電機此時轉(zhuǎn)速了。例如當電機以一定的

10、轉(zhuǎn)速運行時,PA3將輸出如圖7所示的脈沖,若知道一段時間t內(nèi)傳感器輸出的低脈沖數(shù)為n,則可求出電機轉(zhuǎn)速。 圖6 電機速度采集方案 圖7 傳感器輸出脈沖波形3.5 顯示電路設計根據(jù)設計要求要對電機的轉(zhuǎn)速進行讀取,因此在電路中加入顯示模塊是很有必要的。在系統(tǒng)運行過程中需要顯示的數(shù)據(jù)比較多,而且需要漢字顯示,在這里選用320×240液晶顯示器比較適合,它是一種圖形點陣液晶顯示器,主要由行驅(qū)動器/列驅(qū)動器及320×240全點陣液晶顯示器組成,可完成漢字顯示。TFTLCD模塊采用16位的并方式與外部連接,之所以不采用8位的方式,是因為彩屏的數(shù)據(jù)量比較大,如果用8位數(shù)據(jù)線,就會比16位

11、方式慢一倍以上,我們當然希望速度越快越好,所以我們選擇16位的接口。3.6按鍵電路設計根據(jù)設計需求,本系統(tǒng)中使用了3個獨立按鍵用以實現(xiàn)對電機轉(zhuǎn)速的設定以及復位功能。鍵盤操作說明:在系統(tǒng)開始運行時,320×240TFTLCD將顯示開機界面,按KEY_2增加速度,按KEY_3減少速度,按KEY_RESET鍵是復位,使程序回到初始狀態(tài)。4.系統(tǒng)軟件設計4.1 PID算法本系統(tǒng)設計的核心算法為PID算法,它根據(jù)本次采樣的數(shù)據(jù)與設定值進行比較得出偏差,對偏差進行P、I、D運算最終利用運算結(jié)果控制PWM脈沖的占空比來實現(xiàn)對加在電機兩端電壓的調(diào)節(jié),進而控制電機轉(zhuǎn)速。其運算公式為: (1)如何選擇控

12、制算法的參數(shù),要根據(jù)具體過程的要求來考慮。一般來說,要求被控過程是穩(wěn)定的,能迅速和準確地跟蹤給定值的變化,超調(diào)量小,在不同干擾下系統(tǒng)輸出應能保持在給定值,操作變量不宜過大,在系統(tǒng)和環(huán)境參數(shù)發(fā)生變化時控制應保持穩(wěn)定。顯然,要同時滿足上述各項要求是很困難的,必須根據(jù)具體過程的要求,滿足主要方面,并兼顧其它方面。PID調(diào)節(jié)器是一種線性調(diào)節(jié)器,它根據(jù)給定值與實際輸出值構(gòu)成的控制偏差: = (2)將偏差的比例、積分、微分通過線性組合構(gòu)成控制量,對控制對象進行控制,故稱為PID調(diào)節(jié)器。在實際應用中,常根據(jù)對象的特征和控制要求,將P、I、D基本控制規(guī)律進行適當組合,以達到對被控對象進行有效控制的目的。例如,

13、P調(diào)節(jié)器,PI調(diào)節(jié)器,PID調(diào)節(jié)器等。模擬PID調(diào)節(jié)器的控制規(guī)律為 (3)式中,為比例系數(shù),為積分時間常數(shù),為微分時間常數(shù)。簡單的說,PID調(diào)節(jié)器各校正環(huán)節(jié)的作用是:(1)比例環(huán)節(jié):即時成比例地反應控制系統(tǒng)的偏差信號,偏差一旦產(chǎn)生,調(diào)節(jié)器立即產(chǎn)生控制作用以減少偏差;(2)積分環(huán)節(jié):主要用于消除靜差,提高系統(tǒng)的無差度。積分作用的強弱取決于積分時間常數(shù),越大,積分作用越弱,反之則越強;(3)微分環(huán)節(jié):能反映偏差信號的變化趨勢(變化速率),并能在偏差信號的值變得太大之前,在系統(tǒng)中引入一個有效的早期修正信號,從而加快系統(tǒng)的動作速度,減少調(diào)節(jié)時間。4.2電機速度采集算法本系統(tǒng)中電機速度采集是一個非常重要

14、的部分,它的精度直接影響到整個控制的精度。在設計中采用了光電傳感器做為測速裝置,其計算公式為: v= r/min (3)式中,速度v的誤差主要是由圓盤邊緣上的凹槽數(shù)的多少決定的,為了減少系統(tǒng)誤差應盡量提高凹槽的數(shù)量,在本次設計中取凹槽數(shù)N為260,采樣時間t為10ms。5.系統(tǒng)調(diào)試5.1 軟件調(diào)試在程序編寫的過程中,出現(xiàn)了很多問題,包括鍵盤掃描處理、PWM信號發(fā)生電路的控制、以及單片機控制直流電機的轉(zhuǎn)動方向等問題,雖然問題不是很大,但是也讓我研究了好長時間,在解決這些問題的時候,我不斷向老師和同學請教,希望能通過大家一塊的努力把軟件編寫的更完整,讓系統(tǒng)的功能更完備。經(jīng)過多天的努力探索,也經(jīng)過老

15、師的指導,大部分問題都已經(jīng)解決,就是程序還是不能實現(xiàn)應該實現(xiàn)的功能,這讓我很著急。后來經(jīng)過一點一點的調(diào)試,并認真總結(jié),發(fā)現(xiàn)了問題其實在編寫中斷處理程序時出現(xiàn)了錯誤,修改后即可實現(xiàn)直流電機調(diào)速的目的??偨Y(jié)這次軟件調(diào)試,讓我認識到了做軟件調(diào)試的基本方法與流程:(1)認真檢查源代碼,看是否有文字或語法錯誤(2)逐段子程序進行設計,找出錯誤出現(xiàn)的部分,重點排查(3)找到合適的方法,仔細檢查程序,分步調(diào)試直到運行成功5.2 為了確定系統(tǒng)與設計要求的符合程度,需要進行系統(tǒng)測試與分析,下面以PID調(diào)節(jié)器為例,具體說明經(jīng)驗法的整定步驟:讓調(diào)節(jié)器參數(shù)積分系數(shù)=0,實際微分系數(shù)=0,控制系統(tǒng)投入閉環(huán)運行,由小到大

16、改變比例系數(shù),讓擾動信號作階躍變化,觀察控制過程,直到獲得滿意的控制過程為止。取比例系數(shù)為當前的值乘以5,由小到大增加積分系數(shù),同樣讓擾動信號作階躍變化,直至求得滿意的控制過程。積分系數(shù)保持不變,改變比例系數(shù),觀察控制過程有無改善,如有改善則繼續(xù)調(diào)整,直到滿意為止。否則,將原比例系數(shù)增大一些,調(diào)整積分系數(shù),力求改善控制過程。如此反復,直到找到滿意的比例系數(shù)和積分系數(shù)為止。引入適當?shù)膶嶋H微分系數(shù)和實際微分時間,此時可適當增大比例系數(shù)和積分系數(shù)。和前述步驟相同,微分時間的整定也需反復調(diào)整,直到控制過程滿意為止。根據(jù)上訴方法,通過觀察得出該系統(tǒng)比較合適的P、I、D三者的參數(shù)值為: =5, =0.00

17、105, =0。6.總結(jié)與展望這一段時間過的無比的充實,每天都在忙碌著,查閱資料,翻看文檔,了解相關(guān)的知識,每一個設計細節(jié)都要仔細的考慮,每一個環(huán)節(jié)都要查閱相關(guān)的資料,爭取做到完美。在這個系統(tǒng)中以前學的很多東西現(xiàn)在都用上了,數(shù)碼管的移位顯示等等都是在以前學習的基礎上慢慢調(diào)試出來的,所以在寫這篇論文的時候又讓我對以前的知識進行了一次回顧,對知識又有了新的認識!真是受益匪淺!通過本次課程設計,我學到了許多了東西,知道光靠書本上的東西是不夠的,需額外去查資料。無論是在硬件、軟件還是設計思路上,我都遇到了不少的問題,在克服困難的過程中,我學到了許多。知道了PID算法的應用,以前總覺得PID就是像做數(shù)學

18、一樣,不知道實際應用。通過本次設計,讓我很好的鍛煉了理論與具體項目、課題相結(jié)合開發(fā)、設計產(chǎn)品的能力。既讓我們懂得了怎樣把理論應用于實際,又讓我們懂得了在實踐中遇到的問題怎樣用理論去解決。附錄一 部分程序源程序<Main.c>#include "stm32f10x.h"#include "delay.h"#include "exti.h"#include "lcd.h"#include "text.h"#include <DCMotor_PWM.h>#include <

19、;PID_Controller.h>float WishSpeedMax=360;float WishSpeedMin=0;float WishSpeed;extern float U_Out2;u8 WishSpeedChar11;u8 RealSpeedChar11;int main(void)SystemInit();delay_init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);EXTI_Config();PID_ParameterReckon();Tim3_Init();DCMotor_Init(); DCMotor_

20、Out(U_Out0);WishSpeed=200; POINT_COLOR=BLUE;BACK_COLOR=WHITE; LCD_Init();LCD_Clear(WHITE);LCD_ShowString(30,50,"Wished Speed",POINT_COLOR);WishSpeedLCDShow();LCD_ShowString(30,90,"Real Speed",POINT_COLOR);while(1)Add_PID_Control();PID_Controller.c#include <PID_Controller.h>

21、#include <DCMotor_PWM.h>extern float WishSpeed;extern float RealSpeed;float U_OutMAX=1000;/Õ¼¿Õ±È100%float U_OutMIN=0;float Kp;float Ki;float Kd;float Error3;float U_Out2;float U_Add;void PID_ParameterReckon(void)Kp=5;Ki=0.00105;Kd=0; U_Out0=0.0;Error2=0.0;Error1=

22、0.0;Error0=0.0;void Add_PID_Control(void)Error2=WishSpeed-RealSpeed;if(Error2>(-0.05*WishSpeed)&&(Error2<(0.05*WishSpeed)Error2=0;U_Add=Kp*(Error2-Error1)+Ki*Error2+Kd*(Error2-2*Error1+Error0);U_Out1=U_Add+U_Out0;if(U_Out1>U_OutMAX)U_Out1=U_OutMAX;if(U_Out1<U_OutMIN)U_Out1=U_OutM

23、IN;DCMotor_Out(int16_t)(U_Out1); U_Out0=U_Out1;Error0=Error1;Error1=Error2;Dcmotor_PWM.c#include <DCMotor_PWM.h>#include "delay.h"extern float U_Out2;int InPWM_HzNew;int InPWM_HzOld;int16_t OutPWM;static void Tim2_Init(void)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitType

24、Def TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructure.TIM_Period=1000-1; TIM_TimeBaseStructure.TIM_Prescaler=4-1; TIM_TimeBaseStructure.TIM_ClockDivision=0; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseS

25、tructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=0; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC4Init(TIM2,&TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);

26、 TIM_ARRPreloadConfig(TIM2,ENABLE); TIM_Cmd(TIM2,ENABLE); static void Tim5_Init(void)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); RCC_AP

27、B2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_0);TIM_TimeBaseStructure.TIM_Period=65536-1; TIM_Ti

28、meBaseStructure.TIM_Prescaler=72-1; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising

29、;TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;TIM_ICInitStructure.TIM_ICFilter=0;TIM_ICInit(TIM5,&TIM_ICInitStructure);NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);TIM_ITConfig(TIM5,TIM_IT_CC2,ENABLE);TIM_Cmd(TIM5,ENABLE);void Tim3_Init(void)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論