版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 本文主要設(shè)計一個基于單片機的直流電機 PWM 控制系統(tǒng)。PWM 控制提高了調(diào)速 范圍,提高了調(diào)速精度,改善了快速性能、功率和功率因數(shù)。系統(tǒng)在設(shè)計中被控對象采用 5V 的直流電機,以 MCS-51 單片機為控制核心,采用 LCD12864 液晶作為顯示元件,進行軟硬件的設(shè)計。硬件電路由 protel 設(shè)計制作,主要設(shè)計了液晶顯示電
2、路、鍵盤控制電路、復(fù)位電路、測速電路和驅(qū)動電路。軟件設(shè)計在 Keil 開發(fā)平臺用 C 語言編寫,程序采用模塊化設(shè)計方案,包括液初始化程序、晶顯示程序、鍵盤控制程序。 本系統(tǒng) PWM 控制直流電機采用調(diào)壓調(diào)速的方法,整體設(shè)計包括軟件和硬件兩個部 分。通過利用單片機產(chǎn)生 PWM 控制信號控制直流電機,詳細介紹脈寬調(diào)制 ( PWM) 控 制原理,直流電機的工作原理和數(shù)學(xué)模型以及用 H型橋電路基本原理設(shè)計的驅(qū)動電路。 通過硬件電路的模擬
3、情況,說明系統(tǒng)運行正常,各個功能模塊實現(xiàn)是可行的,控制精度 比較高,能夠滿足系統(tǒng)的基本要求。</p><p> 關(guān)鍵詞: 單片機;PWM;直流電機;L298N;</p><p><b> 目錄</b></p><p><b> 一、 設(shè)計任務(wù)5</b></p><p><b>
4、 二、 設(shè)計方案5</b></p><p><b> 1、 任務(wù)分析5</b></p><p><b> 2、 方案設(shè)計6</b></p><p> 3、 方案流程圖6</p><p> 三、 系統(tǒng)硬件設(shè)計7</p><p> 1、 STC12
5、最小系統(tǒng)7</p><p> ?。?) STC12C5A60S2芯片7</p><p> ?。?) 系統(tǒng)時鐘電路11</p><p> ?。?) 復(fù)位電路11</p><p> ?。?) 最小系統(tǒng)原理圖12</p><p> 2、 電機模塊12</p><p> 3、 L298N
6、模塊13</p><p> 4、 測速模塊15</p><p> 5、 測壓模塊16</p><p> 6、 液晶模塊17</p><p> 7、 按鍵模塊19</p><p> 8、 燈光信號模塊20</p><p> 四、 系統(tǒng)軟件設(shè)計21</p>&
7、lt;p> 1、 軟件流程圖21</p><p> 2、 PWM程序設(shè)計22</p><p> 3、 測壓程序設(shè)計22</p><p> 4、 測速程序設(shè)計23</p><p> ?。?)1S定時程序23</p><p> (2) 光電開關(guān)信號采樣程序23</p><p&
8、gt; ?。?) 電機速度計算程序23</p><p> 5、 液晶驅(qū)動程序設(shè)計24</p><p> 6、 菜單程序設(shè)計25</p><p> 7、 按鍵程序設(shè)計27</p><p> 8、 電機反電動勢系數(shù)計算程序28</p><p> 9、 電機力矩系數(shù)計算程序29</p>&
9、lt;p> 10、 逼近算法控制程序29</p><p> 11、 比例控制程序29</p><p> 12、 PID控制程序30</p><p> 五、直流調(diào)速系統(tǒng)動態(tài)數(shù)學(xué)模型的建立32</p><p><b> 六、調(diào)速數(shù)據(jù)36</b></p><p> 1、 比例
10、調(diào)速數(shù)據(jù)36</p><p> 2、 PID調(diào)速數(shù)據(jù)37</p><p> 3、 逼近算法調(diào)速數(shù)據(jù)37</p><p> 4、 反電動勢系數(shù)和電機力矩系數(shù)數(shù)據(jù)38</p><p><b> 七、心得體會38</b></p><p><b> 參考文獻40</b
11、></p><p> 附錄一 硬件原理圖41</p><p> 附錄二 硬件PCB圖42</p><p> 附錄三 程序清單43</p><p><b> 設(shè)計任務(wù)</b></p><p> 本課題設(shè)計主要的目的是為了能夠準確及時的控制直流電動機的正轉(zhuǎn)、反轉(zhuǎn)、停止、加速
12、和減速功能可以準確調(diào)節(jié)控制直流電機的轉(zhuǎn)速。同時,本設(shè)計可以自動測量計算直流電機的反電動勢系數(shù)以及馬達的力矩系數(shù)。直流電機的轉(zhuǎn)速控制分別采用三種可選擇的調(diào)速方案:逼近算法調(diào)速、比例控制調(diào)速和PID控制調(diào)速。本系統(tǒng)采取了菜單式選擇界面,方便了使用者對系統(tǒng)各項功能的使用與選擇,同時加入了大量圖片設(shè)計和動畫效果,使人機交流界面更加人性化。</p><p><b> 設(shè)計方案</b></p&g
13、t;<p><b> 任務(wù)分析</b></p><p> 本設(shè)計要求中央控制芯片具有定時計數(shù)的功能,一定的程序存儲空間,還要有足夠的IO外接端口。由于本設(shè)計以LCD12864作為人機交流的顯示界面,所以要求中央控制芯片具有一定的電流驅(qū)動能力。LCD、電機控制信號、LED指示燈、獨立按鈕,電壓采集這些都需要占用大量IO接口,所以要求中央控制芯片要有足夠多的外部接口以滿足需要。
14、本設(shè)計將采用菜單界面設(shè)計方面,涉及大量圖片和文字,所以要求控制芯片要有足夠大的內(nèi)存空間。大量變量標志將實現(xiàn)各項菜單的切換,所以要求控制芯片要有足夠的RAM空間來存儲臨時變量。</p><p> 本設(shè)計要求能準確控制電機的轉(zhuǎn)向以及轉(zhuǎn)速,所以要求電機的控制芯片就有較強的調(diào)速控制功能以及轉(zhuǎn)向控制功能。</p><p> 本設(shè)計要求所采用的的直流電機轉(zhuǎn)速具有一定的可調(diào)空間以及足夠的靈敏度。&l
15、t;/p><p> 本設(shè)計涉及直流電機轉(zhuǎn)速的采集,電機輸出電壓的測量,所以要求本系統(tǒng)具有測量電機轉(zhuǎn)速和采集電壓的功能。</p><p><b> 方案設(shè)計</b></p><p> 由于STC12c5a60s2單片機具有1280B的RAM,60KROM,P0-P4數(shù)量眾多的IO口,高達20MA的電流驅(qū)動能力和1T的運行速度,具有片上PWM模塊
16、和ADC模塊,滿足本課題的設(shè)計要求,所以本設(shè)計采用STC12c5a60s2芯片作為中央主控芯片。</p><p> 帶41線碼盤測速碼盤日本三美直流電機轉(zhuǎn)速可調(diào)范圍寬,響應(yīng)迅速,并且?guī)в袑ι涫焦怆婇_關(guān)測速模塊,只需接上相應(yīng)的信號放大電路就可以被單片機所識別。所以本系統(tǒng)采用了帶41線碼盤測速碼盤日本三美直流電機。</p><p> 本系統(tǒng)采用了LCD12864作為人機交流界面,滿足了控制
17、項目多,控制信息多,顯示信息完整等要求。</p><p><b> 方案流程圖</b></p><p><b> 系統(tǒng)硬件設(shè)計</b></p><p><b> STC12最小系統(tǒng)</b></p><p> STC12C5A60S2芯片</p><p
18、> STC12C5A60S2不但和8051指令、管腳完全兼容,而且速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),針對電機控制,強干擾場合,其片內(nèi)的具有大容量程序存儲器60K FLASH ROM,用戶可以用電的方式瞬間擦除、改寫。STC系列單片機支持串口程序燒寫,對開發(fā)設(shè)備的要求很低,開發(fā)時間也大大縮短。以下是STC12C5A60S2的功能:</p><
19、;p> 1.增強型8051 CPU,1T,單時鐘/機器周期,指令代碼完全兼容傳統(tǒng)8051; 2.工作電壓:STC12C5A60S2系列工作電壓:5.5V-3.3V(5V單片機)STC12LE5A60S2系列工作電壓:3.6V-2.2V(3V單片機); </p><p> 3.工作頻率范圍:0 - 35MHz,相當于普通8051的 0~420MH
20、z; </p><p> 4.用戶應(yīng)用程序空間8K /16K / 20K / 32K / 40K</p><p> / 48K/ 52K / 60K / 62K字節(jié); </p><p> 5.片上集成1280字節(jié)
21、RAM; </p><p> 6.通用I/O口(36/40/44個),復(fù)位后為:準雙向口/弱上拉(普通8051傳統(tǒng)I/O口),可設(shè)置成四種模式:準雙向口/弱上拉,推挽/強上拉,僅為輸入/高阻,開漏,每個I/O口驅(qū)動能力均可達到20mA,但整個芯片最大不要超過55Ma; </p><p> 7. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器
22、,無需專用仿真器 可通過串口(P3.0/P3.1)直接下載用戶程序,數(shù)秒即可完成一片; </p><p> 8.有EEPROM功能(STC12C5A62S2/AD/PWM無內(nèi)部EEPROM);</p><p><b> 9. 看門狗; </b></p><p> 10.內(nèi)部集成MAX81
23、0專用復(fù)位電路(外部晶體12M以下時,復(fù)位腳可直接1K電阻到地); </p><p> 11.外部掉電檢測電路:在P4.6口有一個低壓門檻比較器,5V單片機為1.32V,誤差為+/-5%,3.3V單片機為1.30V,誤差為+/-3%; </p><p> 12.時鐘源:外部高精度晶體/時鐘,內(nèi)部R/C振蕩器(溫漂為+/-5%到+/-10%以內(nèi)) 1用戶在下
24、載用戶程序時,可選擇是使用內(nèi)部R/C振蕩器還是外部晶體/時鐘,常溫下內(nèi)部R/C振蕩器頻率為:5.0V單片機為:11MHz~15.5MHz,3.3V單片機為:8MHz~12MHz,精度要求不高時,可選擇使用內(nèi)部時鐘,但因為有制造誤差和溫漂,以實際測試為準; </p><p> 13.共4個16位定時器 兩個與傳統(tǒng)8051兼容的定時器/計數(shù)器,16位定時器T0和T1,沒有
25、定時器2,但有獨立波特率發(fā)生器 做串行通訊的波特率發(fā)生器 再加上2路PCA模塊可再實現(xiàn)2個16位定時器; </p><p> 14. 2個時鐘輸出口,可由T0的溢出在P3.4/T0輸出時鐘,可由T1的溢出在P3.5/T1輸出時鐘; </p><p> 15.外部中斷I/O口7路,傳統(tǒng)的下降
26、沿中斷或低電平觸發(fā)中斷,并新增支持上升沿中斷的PCA模塊, Power Down模式可由外部中斷喚醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通過寄存器設(shè)置到P4.2 ), CCP1/P1.4 (也可通過寄存器設(shè)置到P4.3); </p><p> 16.
27、 PWM(2路)/PCA(可編程計數(shù)器陣列,2路)</p><p> ——也可用來當2路D/A使用 </p><p> ——也可用來再實現(xiàn)2個定時器 </p><p> ——也可用來再實現(xiàn)2個外部中斷(上升沿中斷/下降沿中斷均可分別或同時支持); </p><p> A/D轉(zhuǎn)換, 10位精度ADC,共8路,轉(zhuǎn)換速度可達25
28、0K/S(每秒鐘25萬次)</p><p> 18.通用全雙工異步串行口(UART),由STC12</p><p> 系列是高速的8051,可再用定時器或PCA軟件實現(xiàn)多 串口; </p><p> 19. STC12C5A60S2系列有雙串口,后綴有S2標志 的才有雙串口,RxD2/P1.2(可通過寄存器設(shè)置到P4.2
29、), TxD2/P1.3(可通過寄存器設(shè)置到P4.3); </p><p> 20.工作溫度范圍:-40 - +85℃(工業(yè)級) / 0 - 75 ℃(商 業(yè)級)21.封裝:PDIP-40,LQFP-44,LQFP-48 I/O 口不夠時,可用2到3根普通I/O口線外接 74HC164/165/595(均可級聯(lián))來擴展I/
30、O口, 還可用 A/D做按鍵掃描來節(jié)省I/O口,或用雙CPU,三線通信, 還多了串口。</p><p> STC12C5A60S2的引腳如圖1所示</p><p> 圖1 STC12c5a60s2引腳圖</p><p><b> 系統(tǒng)時鐘電路</b></p><p> 本系統(tǒng)采用
31、11.0592MKZ的外部石英晶振作為單片機的時鐘脈沖輸入。電路圖如圖2所示。</p><p><b> 圖2 時鐘電路</b></p><p><b> 復(fù)位電路</b></p><p> 本系統(tǒng)采用的是上電復(fù)位方式。如圖3所示。</p><p><b> 圖3 復(fù)位電路<
32、/b></p><p><b> 最小系統(tǒng)原理圖</b></p><p> 最小系統(tǒng)包括系統(tǒng)時鐘電路,復(fù)位電路、單片機芯片引腳借口,保證了單片機能夠正常的工作。如圖4所示.</p><p> 圖4 STC12最小系統(tǒng)</p><p><b> 電機模塊</b></p>&
33、lt;p> 直流電機是指能將直流電能轉(zhuǎn)換成機械能(直流電動機)或?qū)C械能轉(zhuǎn)換成直流電能(直流發(fā)電機)的旋轉(zhuǎn)電機。它是能實現(xiàn)直流電能和機械能互相轉(zhuǎn)換的電機。當它作電動機運行時是直流電動機,將電能轉(zhuǎn)換為機械能;作發(fā)電機運行時是直流發(fā)電機,將機械能轉(zhuǎn)換為電能。本系統(tǒng)采用帶41線碼盤測速碼盤日本三美直流電機。其實物圖如圖5所示。</p><p><b> 圖5 電機</b></p&g
34、t;<p><b> L298N模塊</b></p><p> 圖10 ADC的結(jié)構(gòu)</p><p><b> 液晶模塊</b></p><p> 本系統(tǒng)設(shè)計了6個獨立按鍵,低電平有效。分別用作主菜單按鍵、電機正轉(zhuǎn)按鍵/菜單向上按鍵、電機反轉(zhuǎn)按鍵/菜單向下按鍵、電機加速按鍵/菜單加按鍵、電機減速按鍵/
35、菜單減按鍵,電機停止按鍵/菜單確定鍵。其電路原理圖如圖12所示。</p><p><b> 圖12 按鍵電路圖</b></p><p><b> 燈光信號模塊</b></p><p> 本系統(tǒng)采用三個發(fā)光二級管作為電機運行狀態(tài)提示燈。分別表示電機正轉(zhuǎn)提示燈、電機反轉(zhuǎn)提示燈、電機停止提示燈。其電路原理圖如圖13所示。&
36、lt;/p><p> 圖13 LED電路圖</p><p><b> 系統(tǒng)軟件設(shè)計</b></p><p><b> 軟件流程圖</b></p><p><b> 器高8位</b></p><p> ADC_RESL=0; //清零轉(zhuǎn)換結(jié)果寄存器低
37、2位</p><p> ADC_CONTR=0x80;//開啟AD電源</p><p> Delay(2);//等待1ms,讓AD電源穩(wěn)定</p><p> 讀取相關(guān)通道的電壓數(shù)據(jù):U16 AD_get(U8 channel);</p><p> 轉(zhuǎn)化電壓數(shù)據(jù):float AD_work(U8 channel);</p>
38、<p><b> 測速程序設(shè)計</b></p><p> 本系統(tǒng)開去外部中斷0來計算對射式光電開關(guān)輸入單片機的高電平次數(shù),采用定時器0以1秒的頻率計算電機一分鐘的轉(zhuǎn)速,并采用平均法減小誤差。</p><p><b> ?。?)1S定時程序</b></p><p> TMOD=0x21;//設(shè)置定時器0為工
39、作方式1</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256; //計算初值并將其寫入TH0、TL0</p><p> EA=1;//開總中斷</p><p> ET0=1;//開T0中斷允許位</p><p> TR0=1; //
40、啟動</p><p> 光電開關(guān)信號采樣程序</p><p> void int0() interrupt 0</p><p><b> {</b></p><p> ExinNum++;</p><p><b> }</b></p><p>
41、;<b> 電機速度計算程序</b></p><p> SpeedV[SpeedVnum]=(int)(ExinNum*60.0/41.0);</p><p> for(i=0;i<5;i++)</p><p> speedvel+=SpeedV[i];</p><p> CurrentSpeed=spe
42、edvel/5;</p><p><b> 液晶驅(qū)動程序設(shè)計</b></p><p> LCD12864驅(qū)動除了集成基本的讀寫函數(shù)、空閑檢測等基本函數(shù)外,本系統(tǒng)還字符輸出、圖形繪制、畫點、畫直線、畫圓等方便于界面顯示的功能函數(shù),并且采取了多個函數(shù)實現(xiàn)參數(shù)化,這有利于在其他文件中進行調(diào)用,傳入不同參數(shù)可以出現(xiàn)不同效果。</p><p> 在
43、這些功能函數(shù)中,運用了大量的數(shù)學(xué)算法,在畫任意直線中,我們采用了Bresenham算法進行坐標點的計算,在畫圓形圖片的功能函數(shù)中,則運用了數(shù)學(xué)上的正八邊形確定一個圓的方法。</p><p> 在其他清屏函數(shù)、反白函數(shù)、畫框函數(shù)等效果功能函數(shù)里,我們大量采用子函數(shù)包含運用,大大提高了代碼的利用率,介紹了代碼的重復(fù)編寫。</p><p><b> 液晶驅(qū)動函數(shù):</b>
44、;</p><p> void Lcd2Init(void);</p><p> void Lcd2TextOut(uchar x,uchar y,uchar *adata);</p><p> void Lcd2DrawPoint(uchar x,uchar y,uchar color);</p><p> void Lcd2Dr
45、awRowLine(uchar x0,uchar y0,uchar x1,uchar color);</p><p> void Lcd2DrawCollumLine(uchar x0,uchar y0,uchar y1,uchar color);</p><p> void Lcd2DrawAnyLine(uchar x0,uchar y0,uchar x1,uchar y1,uch
46、ar color);</p><p> void Lcd2DrawUpImg(uchar *img); //</p><p> void Lcd2DrawDownImg(uchar *img);//</p><p> void Lcd2DrawFullImg(uchar *img);//</p><p> void Lcd2Draw
47、HalfPic(uchar x,uchar y,uchar PicW,uchar PicH,uchar *Pic);</p><p> void Lcd2DelayMs(uint n);</p><p> void Lcd2CheckBusy(void);</p><p> void Lcd2ClrGDRAM(void);</p><p&g
48、t; void Lcd2Clear(void);</p><p> uchar Lcd2ReadData(void);</p><p> void Lcd2WriteCom(uchar cmd);</p><p> void Lcd2WriteData(uchar adata);</p><p> void LcdShowNum(u
49、char x,uchar y,char n);</p><p> void Lcd2ShowNums(uchar x,uchar y,uint num);</p><p> void Lcd2ShowVin(uchar x,uchar y,uint num);</p><p> void Lcd2ShowCe(uchar x,uchar y,uint num)
50、;</p><p> void Lcd2ShowSureNum(uchar x,uchar y,int num);</p><p> void LcdShowChar(uchar x,uchar y,uchar* english,uchar count);</p><p> void LcdDrawCircle(uchar x0,uchar y0,uchar
51、r,uchar colour);</p><p> void LcdInverse(int low);</p><p> void Lcd2Sleep(uchar Flage);</p><p> ut);flage=5;}}</p><p><b> //Key6</b></p><p&g
52、t; if(KeyEnter==0){Delay(10);</p><p> if(KeyEnter==0){while(!KeyEnter);flage=6;}}</p><p> return flage;}</p><p> 電機反電動勢系數(shù)計算程序</p><p> float CalutCe(float Vin,int S
53、peed)</p><p> {float M_Ce,Iin;</p><p> Iin=(Vin-Speed*KCO)/MOTOR_RES;</p><p> M_Ce=(Vin-Iin*MOTOR_RES)/(float)Speed;</p><p> return M_Ce;}</p><p> 電機力
54、矩系數(shù)計算程序</p><p> float CalutMc(float Vin,int Speed)</p><p> {float M_mc,Iin;</p><p> Iin=(Vin-Speed*KCO)/MOTOR_RES;</p><p> M_mc=9550.0*Iin*Iin/(float)Speed;</p&g
55、t;<p> return M_mc;}</p><p><b> 逼近算法控制程序</b></p><p> 采用微調(diào)PWM的占空比不斷改變電機的轉(zhuǎn)速,使其逐步接近設(shè)定的轉(zhuǎn)速。</p><p> void SpeedAdjust(void)</p><p> if(CurrentCap>1
56、.0)CurrentCap=0.85;</p><p> if(CurrentCap<0.40)CurrentCap=0.45; if(MotorStatue==FORWARD_RUN)PwmCap(CurrentCap,PWM0_ENABLE);else if(MotorStatue==ROLLBACK_RUN)PwmCap(CurrentCap,PWM1_ENABLE);</p>
57、;<p> else {} } }}</p><p><b> PID控制程序</b></p><p> PID(比例-積分-微分)控制器作為最早實用化的控制器已有70多年歷史,現(xiàn)在仍然是應(yīng)用最廣泛的工業(yè)控制器。PID控制器簡單易懂,使用中不需精確的系統(tǒng)模型等先決條件,因而成為應(yīng)用最為廣泛的控制器。</p><p><
58、b> 態(tài)數(shù)學(xué)模型的建立</b></p><p> 轉(zhuǎn)速反饋直流調(diào)速系統(tǒng)的功率主電路是電力電子變換器和直流電動機,其中PWM控制器和變換器的近似傳遞函數(shù)如下:</p><p><b> ?。?-1)</b></p><p> 他勵直流電動機在額定勵磁下的等效電路如下:</p><p><b&g
59、t; 圖(5-1)</b></p><p> 假定主電路電流連續(xù),動態(tài)電壓方程為:</p><p><b> ?。?-2)</b></p><p> 忽略粘性摩擦及彈性轉(zhuǎn)矩,電動機軸上的動力學(xué)方程式為</p><p><b> ?。?-3)</b></p><p
60、> 式中 ——包括電動機空載轉(zhuǎn)矩在內(nèi)的負載轉(zhuǎn)矩;</p><p> ——電力拖動裝置折算到電動機軸上的飛輪慣量;</p><p> 額定勵磁下的感應(yīng)電動勢和電磁轉(zhuǎn)矩分別為</p><p><b> (5-4)</b></p><p><b> ?。?-5)</b></p>
61、<p> 式中 ——電動機額定勵磁下的轉(zhuǎn)矩系數(shù)(), </p><p><b> ?。?-5)</b></p><p> 再定義下列時間常數(shù):</p><p> ——電樞回路電磁時間常數(shù)(s),</p><p> ??; (5-6)</p><p> ——電力拖動
62、系統(tǒng)機電時間常數(shù)(s),</p><p><b> ?。?-7)</b></p><p> 代入(5-2)和(5-3)式中,并考慮到(5-4)和(5-5)式,整理得</p><p><b> ?。?-8)</b></p><p><b> (5-9)</b></p&g
63、t;<p> 式中 ——負載電流(A), (5-10)</p><p> 在零初始條件下,取等式兩側(cè)的拉普拉斯變換,得到電壓和電流間的傳遞函數(shù)為</p><p><b> (5-11)</b></p><p><b> 動態(tài)結(jié)構(gòu)圖為</b></p><p><b
64、> 圖(5-2)</b></p><p> 電流與電動勢間的傳遞函數(shù)為</p><p><b> ?。?-12)</b></p><p><b> 動態(tài)結(jié)構(gòu)圖為</b></p><p><b> 圖(5-3)</b></p><p&
65、gt; 將圖 (5-2)和圖(5-3)合并,考慮到 ,即得額定勵磁下的直流電動機的動態(tài)結(jié)構(gòu)圖</p><p><b> 圖(5-4)</b></p><p> 將擾動量 的綜合點移前,進行等效變換,得直流電動機的動態(tài)結(jié)構(gòu)框圖的變換</p><p><b> 圖(5-5)</b></p><p&
66、gt; 考慮到系統(tǒng)中的比例放大器和測速反饋環(huán)節(jié),它們的響應(yīng)都可以認為是瞬時的,因此它們的傳遞函數(shù)如下</p><p> 放大器: (5-13)</p><p> 測速反饋: (5-14)</p><p> 綜合上面,可得轉(zhuǎn)速反饋控制直流調(diào)速系統(tǒng)的動態(tài)結(jié)構(gòu)框圖如下</p><p&g
67、t;<b> 圖(5-6)</b></p><p><b> 其開環(huán)傳遞函數(shù)是</b></p><p><b> (5-15)</b></p><p> 設(shè) =0,從給定輸入作用上看,閉環(huán)傳遞函數(shù)是</p><p><b> ?。?-16)</b>
68、</p><p><b> 六、調(diào)速數(shù)據(jù)</b></p><p><b> 比例調(diào)速數(shù)據(jù)</b></p><p> 設(shè)置轉(zhuǎn)速:1000R/MIN</p><p><b> PID調(diào)速數(shù)據(jù)</b></p><p> 設(shè)置轉(zhuǎn)速:1000R/MIN&
69、lt;/p><p><b> 1035</b></p><p><b> 逼近算法調(diào)速數(shù)據(jù)</b></p><p> 設(shè)置轉(zhuǎn)速:1000R/MIN</p><p> 反電動勢系數(shù)和電機力矩系數(shù)數(shù)據(jù)</p><p><b> 七、心得體會</b>&l
70、t;/p><p> 經(jīng)過兩周的課程設(shè)計,有很多新的感受和體會。這次采用的STC12C5A60S2單片機,程序存儲空間達到了60KB,如此龐大的存儲空間給了我們在程序上盡情發(fā)揮的空間。所以這次液晶顯示屏采用了LCD12864,并且大量引用了圖片對界面進行裝飾。特別是在屏幕刷屏上,我們下了很大功夫。為了避免頻繁刷屏造成的閃爍現(xiàn)象,我們采用了局部區(qū)域更新的方法,這是我們更加深入的了解LCD12864的驅(qū)動原理,特別是在屏
71、幕上隨意畫圖的技術(shù)上。</p><p> 當然,在這次課程設(shè)計中也出現(xiàn)了不少問題。隨著我們編寫的程序越來越大,最終我們的程序接近20KB,于是對文件的組織,變量的應(yīng)用,以及編程的結(jié)構(gòu)都提出了很大的挑戰(zhàn)。于是我們采取了模塊化編程解決了多文件系統(tǒng)問題,在變量用于多個文件的問題上,我們采取了頭文件聲明全局變量的方法。</p><p> 這次課程設(shè)計,既是對以往所學(xué)的單片機編程知識和電力拖動自
72、動控制系統(tǒng)的一次總結(jié),也是一次考驗!</p><p><b> 參考文獻</b></p><p> [1] 李慶亮. C語言程序設(shè)計實用教程. 機械工業(yè)出版社</p><p> [2] 王新穎. 單片機原理及應(yīng)用設(shè)計. 北京大學(xué)出版社</p><p> [3] 陳伯時. 電力拖動自動控制系統(tǒng)——運動控制系統(tǒng)機械工
73、業(yè)出版社</p><p> [4] 王兆安. 電力電子技術(shù). 機械工業(yè)出版社</p><p> [5] 胡學(xué)鋼. 數(shù)據(jù)結(jié)構(gòu)算法設(shè)計指導(dǎo). 北京:清華大學(xué)出版社</p><p> [6] 馬全喜. 電子元器件與電子實習(xí). 北京:機械工業(yè)出版社</p><p> [7] 曾曉宏. 數(shù)字電子技術(shù). 北京:機械工業(yè)出版社</p>
74、<p> [8] 江曉安 模擬機電子技術(shù). 西安電子科技大學(xué)出版社</p><p> [9] 江 力. 單片機原理與應(yīng)用設(shè)計. 北京:清華大學(xué)出版社</p><p> [10] 王新穎. 電力電子技術(shù). 北京:中國鐵道出版社</p><p> [11] 王志良. 電力電子新器件及其應(yīng)用技術(shù). 國防工業(yè)出版社</p><p&g
75、t; 附錄一 硬件原理圖</p><p> 附錄二 硬件PCB圖</p><p><b> 附錄三 程序清單</b></p><p> #include "Common.h"</p><p> #include "PwmLib.h"</p><p
76、> #include "Lcd12864Library.h"</p><p> #include "ItLib.h"</p><p> #include "Menu.h"</p><p> double ExinNum;</p><p> int KeyFlage;&
77、lt;/p><p> int miao_one;</p><p> int Timer_Pic;</p><p> int SpeedV[5]={2000,2000,2000,2000,2000};</p><p> int SpeedVnum;</p><p> int MainMenu;//菜單頁標志 0-
78、</p><p> int MenuInfo;//菜單頁的菜單項標志 0-</p><p> int MotorStatue;</p><p> int BufMotorStatue;</p><p> int OldMotorStatue;</p><p> float CurrentCap;</p
79、><p> float BufCap;</p><p> U16 CurrentSpeed;</p><p> U16 OldSpeed;</p><p> U16 SetSpeed;</p><p> U16 BufSetSpeed;</p><p> int CapStep;//占空
80、比加減步伐大小</p><p> U16 SpeedStep;//轉(zhuǎn)速加減步伐大小</p><p> int PIDEnable;//PID開關(guān)標志</p><p> int BufPIDEnable;</p><p> int PicStep;//繪圖曲線步伐</p><p> float Kp,Ki,Kd
81、;</p><p> int Speed_Error;</p><p> int Pre_Error;</p><p> int Two_Error;</p><p> int Old_Error;</p><p> float P_Kp;</p><p> int TimeSure
82、;</p><p> int SureStatue;</p><p> void ValueInit(void);</p><p> int KeysCan(void);</p><p> void OnKeys(void);</p><p> void PID(void);</p><p
83、> void P_Com(void);</p><p> void SpeedAdjust(void);</p><p> void main()</p><p><b> {</b></p><p> ValueInit();P4M0 &=0xf7;P4M1 &=0xf7;</p&
84、gt;<p> ItInit();PwnInit();Lcd2Init();</p><p> Menu_Main(MenuInfo);MotorRun(FORWARD_RUN,CurrentCap);LedGo=0;while(1)</p><p> {OnKeys();}}</p><p> void ValueInit(void)&l
85、t;/p><p> {KeyFlage=0;ExinNum=0;miao_one=0;MotorStatue=FORWARD_RUN;OldMotorStatue=FORWARD_RUN;CurrentCap=0.75;CurrentSpeed=0;OldSpeed=0;SetSpeed=1000;MainMenu=MENU_MAIN;</p><p> MenuInfo=0;CapSte
86、p=1;SpeedStep=50;</p><p> PicStep=200;PIDEnable=0;Timer_Pic=0;Speed_Error=50;</p><p> Kp=0.005;Ki=0.50;Kd=0.0025;P_Kp=0.50;</p><p> Old_Error=20;Pre_Error=20;SpeedVnum=0;BufPIDE
87、nable=PIDEnable;BufSetSpeed=SetSpeed;ureStatue=0;}</p><p> void PID(void)</p><p> { Speed_Error=SetSpeed-CurrentSpeed;Pre_Error=Old_Error Old_Error=Speed_Error;Two_Error=Speed_Error-Pre_Error
88、;</p><p> if(MotorStatue==FORWARD_RUN)PwmCap(CurrentCap,PWM0_ENABLE);if(Speed_Error!=0)</p><p> { if(MotorStatue==FORWARD_RUN) CurrentCap=ReadPwm(PWM0_ENABLE)+(Kp*(float)Pre_Error+Ki*(float)
89、Speed_Error+Kd*(float)Two_Error)/10000.0;</p><p> else if(MotorStatue==ROLLBACK_RUN) CurrentCap=ReadPwm(PWM1_ENABLE)+(P_Kp*(float)Speed_Error)/10000.0; else{</p><p> CurrentCap=ReadPwm(PWM0_
90、ENABLE)+(P_Kp*(float)Speed_Error)/10000.0;}if(CurrentCap>1.0)CurrentCap=0.9;</p><p> if(CurrentCap<0.40)CurrentCap=0.37; if(MotorStatue==FORWARD_RUN)PwmCap(CurrentCap,PWM0_ENABLE); else if(MotorS
91、tatue==ROLLBACK_RUN)PwmCap(CurrentCap,PWM1_ENABLE);else {} }}</p><p> void P_Com(void)</p><p> {Speed_Error=SetSpeed-CurrentSpeed;if(MotorStatue!=STOP_RUN){if(Speed_Error!=0){ if(MotorStatue==
92、FORWARD_RUN) CurrentCap=ReadPwm(PWM0_ENABLE)+(P_Kp*(float)Speed_Error)/10000.0; else if(MotorStatue==ROLLBACK_RUN) CurrentCap=ReadPwm(PWM1_ENABLE)+(P_Kp*(float)Speed_Error)/10000.0;else {CurrentCap=ReadPwm(PWM0_ENABLE)
93、+(P_Kp*(float)Speed_Error)/10000.0;}if(CurrentCap>1.0)CurrentCap=0.85;</p><p> if(CurrentCap<0.40)CurrentCap=0.45; if(MotorStatue==FORWARD_RUN)PwmCap(CurrentCap,PWM0_ENABLE); else if(MotorStatue=
94、=ROLLBACK_RUN)PwmCap(CurrentCap,PWM1_ENABLE);else {}}}}</p><p> void SpeedAdjust(void)</p><p> {float SpeedAjtSiep=0.01;Speed_Error=SetSpeed-CurrentSpeed;</p><p> if(Speed_Error
95、>0){ CurrentCap+=SpeedAjtSiep;}</p><p> else {CurrentCap-=SpeedAjtSiep; }if(CurrentCap>1.0)CurrentCap=0.85;if(CurrentCap<0.40)CurrentCap=0.45; if(MotorStatue==FORWARD_RUN)PwmCap(CurrentCap,PWM0_EN
96、ABLE);else PwmCap(CurrentCap,PWM1_ENABLE);}</p><p> int KeysCan(void)</p><p> {int flage=0;if(KeyMenu==0){Delay(10);</p><p> if(KeyMenu==0){while(!KeyMenu);flage=1;}}</p>
97、<p> if(KeyGo==0){Delay(10);if(KeyGo==0)</p><p> {while(!KeyGo);flage=2;}}</p><p> if(KeyBack==0){Delay(10);if(KeyBack==0){while(!KeyBack);flage=3;}}</p><p> if(KeyAdd==0
98、){Delay(10);if(KeyAdd==0)</p><p> {while(!KeyAdd);flage=4;}}</p><p> if(KeyCut==0){Delay(10);if(KeyCut==0)</p><p> {while(!KeyCut);flage=5;}}</p><p> if(KeyEnter==0
99、)</p><p> {Delay(10);if(KeyEnter==0){while(!KeyEnter);flage=6;}</p><p> }return flage;}</p><p> void OnKeys(void)</p><p> {float v,ce,mc;int i;</p><p>
100、 KeyFlage=KeysCan();if(KeyFlage==1)</p><p> {if(MainMenu!=MENU_MAIN)</p><p> {MenuInfo=0;MainMenu=MENU_MAIN;</p><p> Timer_Pic=0;TimeSure=0;</p><p> SureStatue=0;E
101、S=0;</p><p> Menu_Main(MenuInfo);}}</p><p> if(KeyFlage==2)//Go</p><p> {if(MainMenu==MENU_MAIN)</p><p> {if(MenuInfo<3){</p><p> SetMainMenuInfo(
102、MenuInfo,0);</p><p> MenuInfo++;SetMainMenuInfo(MenuInfo,1);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>
103、<p> if(MenuInfo==3)Menu_Main1(MenuInfo);</p><p> else SetMainMenuInfo(MenuInfo-4,0);</p><p> MenuInfo++;</p><p> if(MenuInfo==8)</p><p><b> {</b&g
104、t;</p><p> MenuInfo=0;</p><p> Menu_Main(MenuInfo); }</p><p><b> else</b></p><p> SetMainMenuInfo(MenuInfo-4,1);}}</p><p> else if(MainMen
105、u==MENU_MOTORCTORL)//MENU_MOTORCTORL菜單下功能</p><p><b> {</b></p><p> if(MotorStatue!=FORWARD_RUN)</p><p><b> {</b></p><p> EnablePwm(PWM_CLO
106、SE);</p><p> Delay(250);Delay(250);</p><p> CurrentCap=ReadPwm(PWM0_ENABLE);</p><p> MotorStatue=FORWARD_RUN;</p><p> MotorRun(FORWARD_RUN,CurrentCap);</p>&
107、lt;p><b> LedGo=0;</b></p><p> LedBack=1;</p><p> LedStop=1;</p><p> ChangeRun(FORWARD_RUN);}}</p><p> else if(MainMenu==MENU_SYSSET)</p><
108、p><b> {</b></p><p> ChangeSysSetSelect(MenuInfo,0);</p><p> MenuInfo++;</p><p> if(MenuInfo==3)MenuInfo=0;</p><p> ChangeSysSetSelect(MenuInfo,1);&l
109、t;/p><p><b> }</b></p><p> else if(MainMenu==MENU_SPEEDCOMMODE)</p><p><b> {</b></p><p> if(SureStatue==0){</p><p> ChangeAdjustM
110、odeSelect(MenuInfo,0);</p><p> MenuInfo++;</p><p> if(MenuInfo==2)MenuInfo=0; </p><p> ChangeAdjustModeSelect(MenuInfo,1);}}</p><p><b> else{}}</b></
111、p><p> if(KeyFlage==3)//Back</p><p><b> {</b></p><p> if(MainMenu==MENU_MAIN)</p><p><b> {</b></p><p> if(MenuInfo>0&&
112、;MenuInfo<4)</p><p> {SetMainMenuInfo(MenuInfo,0);</p><p> //if(MenuInfo==0)MenuInfo=4;</p><p> MenuInfo--;</p><p> SetMainMenuInfo(MenuInfo,1);}</p><
113、p><b> else</b></p><p> {if(MenuInfo==0)</p><p> {MenuInfo=7;Menu_Main1(MenuInfo);}</p><p> else if(MenuInfo==4)</p><p> {MenuInfo=3;Menu_Main(MenuIn
114、fo);}</p><p><b> else</b></p><p> {SetMainMenuInfo(MenuInfo-4,0);</p><p> MenuInfo--;</p><p> SetMainMenuInfo(MenuInfo-4,1);}}}</p><p> el
115、se if(MainMenu==MENU_MOTORCTORL)//MENU_MOTORCTORL菜單下功能</p><p> {if(MotorStatue!=ROLLBACK_RUN)</p><p><b> {</b></p><p> EnablePwm(PWM_CLOSE);</p><p> D
116、elay(250);Delay(250);</p><p> CurrentCap=ReadPwm(PWM1_ENABLE);</p><p> MotorStatue=ROLLBACK_RUN;</p><p> MotorRun(ROLLBACK_RUN,CurrentCap);</p><p><b> LedGo=1
117、;</b></p><p> LedBack=0;</p><p> LedStop=1;</p><p> ChangeRun(ROLLBACK_RUN);}}</p><p> else if(MainMenu==MENU_SYSSET)</p><p> {ChangeSysSetSelec
118、t(MenuInfo,0);</p><p> if(MenuInfo==0)MenuInfo=3;</p><p> MenuInfo--;</p><p> ChangeSysSetSelect(MenuInfo,1);}</p><p> else if(MainMenu==MENU_SPEEDCOMMODE)</p>
119、;<p> {if(SureStatue==0)</p><p> {ChangeAdjustModeSelect(MenuInfo,0);</p><p> if(MenuInfo==0)MenuInfo=2;</p><p> MenuInfo--; </p><p> ChangeAdjustModeSelect
120、(MenuInfo,1);}}</p><p><b> els{}}</b></p><p> if(KeyFlage==4)//Add</p><p><b> {</b></p><p> if(MainMenu==MENU_MOTORCTORL)</p><p&g
121、t; {if(MotorStatue==FORWARD_RUN)PwmCapAdd(10,PWM0_ENABLE);else PwmCapAdd(10,PWM1_ENABLE);}</p><p> else if(MainMenu==MENU_PWMCTROL)</p><p><b> {</b></p><p> if(Motor
122、Statue==FORWARD_RUN)PwmCap(CurrentCap,PWM0_ENABLE);</p><p> BufCap+=((float)CapStep/100.0);</p><p> if(BufCap>1.0)BufCap=0.01;</p><p> if(MotorStatue==FORWARD_RUN)PwmCap(Curre
123、ntCap,PWM0_ENABLE);</p><p> ChangeSetPwm(BufCap);}</p><p> else if(MainMenu==MENU_SPEEDCTROL)</p><p><b> {</b></p><p> SetSpeed+=SpeedStep;</p>&
124、lt;p> if(CurrentCap>2500)CurrentCap=0;</p><p> ChangeSpeedComSet(SetSpeed);</p><p><b> }</b></p><p> else if(MainMenu==MENU_SYSSET)</p><p><b&g
125、t; {</b></p><p> if(MenuInfo==0)</p><p> {CapStep++;</p><p> if(CapStep>100)CapStep=0;</p><p> ChangeSysSetCap(CapStep);</p><p><b> }&
126、lt;/b></p><p> else if(MenuInfo==1)</p><p><b> {</b></p><p> SpeedStep++;</p><p> if(SpeedStep==200)SpeedStep=1;</p><p> ChangeSysSetSp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力拖動自動控制系統(tǒng)課程設(shè)計-直流電機雙閉環(huán)調(diào)速系統(tǒng)設(shè)計
- 單片機微型直流電機控制系統(tǒng)課程設(shè)計
- 單片機微型直流電機控制系統(tǒng)課程設(shè)計
- 基于單片機的直流電機pwm調(diào)速控制系統(tǒng)設(shè)計
- 單片機課程設(shè)計--微型直流電機控制系統(tǒng)設(shè)計
- 單片機課程設(shè)計---基于單片機直流電機測速及其控制系統(tǒng)
- 課程設(shè)計--基于單片機的直流電機位置控制系統(tǒng)設(shè)計
- 電機與拖動控制課程設(shè)計--直流電機調(diào)速控制系統(tǒng)設(shè)計
- ats單片機直流電機pwm控制系統(tǒng)大學(xué)課題論文
- 直流電機課程設(shè)計--直流電機控制系統(tǒng)設(shè)計
- 電力拖動自動控制系統(tǒng)課程設(shè)計
- 基于51單片機課程設(shè)計報告--小直流電機調(diào)速控制系統(tǒng)
- 畢業(yè)論文:基于單片機的直流電機pwm調(diào)速控制系統(tǒng)設(shè)計
- 電力拖動自動控制系統(tǒng)課程設(shè)計
- 單片機課程設(shè)計------基于89c51單片機的直流電機控制系統(tǒng)設(shè)計
- 基于pwm技術(shù)的直流電機控制系統(tǒng)
- 運動控制課程設(shè)計--電力拖動自動控制系統(tǒng)
- 基于單片機的直流電機控制系統(tǒng)設(shè)計開題報告
- 自動控制原理課程設(shè)計--直流電機轉(zhuǎn)速控制系統(tǒng)的動態(tài)校正
- 電力拖動自動控制系統(tǒng)課程設(shè)計(3)
評論
0/150
提交評論