版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 1引言3</b></p><p> 2單片機控制系統(tǒng)硬件組成3</p><p><b> 2.1微控制器3</b></p><p> 2.2電機驅(qū)動芯片4</p><p&g
2、t; 2.3按鍵輸入和顯示模塊5</p><p> 2.3.1按鍵輸入5</p><p> 2.3.2顯示模塊5</p><p> 2.4直流伺服電動機5</p><p> 3.單片機控制系統(tǒng)軟件設(shè)計5</p><p><b> 3.1主程序6</b></p>
3、<p> 3.2鍵盤處理子程序7</p><p> 4.控制系統(tǒng)原理圖及仿真7</p><p> 4.1控制系統(tǒng)方框圖7</p><p> 4.2控制系統(tǒng)電路原理圖8</p><p> 5.Simulink組件對直流伺服控制系統(tǒng)的仿真8</p><p> 5.1直流伺服電機數(shù)學(xué)模型8
4、</p><p> 5.2系統(tǒng)Simulink模型及時域特性仿真9</p><p> 5.2.1 Simulink建模及仿真9</p><p> 5.2.2單位負(fù)反饋系統(tǒng)Simulink建模及仿真10</p><p> 5.3 PID校正11</p><p> 5.3.1 PID參數(shù)的湊試法確定11
5、</p><p> 5.3.2比例控制器校正12</p><p> 5.3.3比例積分控制器校正14</p><p> 5.3.4 PID控制器校正16</p><p><b> 5.小結(jié)19</b></p><p><b> 引用文獻(xiàn)19</b><
6、/p><p><b> 1引言</b></p><p> 本設(shè)計的直流伺服電機控制系統(tǒng)是一個隨動控制系統(tǒng)。以STM32核心板為控制器,通過按鍵將設(shè)定值輸入到單片機,采用超聲波傳感器采集小車前方物體的距離,單片機對設(shè)定值與測量距離求差后輸出控制信號,雙BTN7971大電流H橋驅(qū)動伺服電機工作,進(jìn)而控制電機向著減小差值的方向轉(zhuǎn)動。同時單片機處理的數(shù)字信號通過LCD來顯示,
7、實時顯示超聲波傳感器的測量值。</p><p> 另外本設(shè)計還利用了MATLAB軟件,利用Simulink構(gòu)造直流電機控制系統(tǒng)模型,通過對各個單元部件的參數(shù)進(jìn)行設(shè)定,進(jìn)而對直流伺服電機系統(tǒng)控制進(jìn)行仿真,就其仿真結(jié)果對系統(tǒng)進(jìn)行時域分析。</p><p> 2單片機控制系統(tǒng)硬件組成</p><p> 本系統(tǒng)是由一片單片機、矩陣式鍵盤、超聲波模塊HC-SR04、顯示
8、模塊和一輛帶有直流伺服電機的車模組成,另外通過Altinum Designer軟件進(jìn)行電路設(shè)計。</p><p><b> 2.1微控制器</b></p><p> STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計的ARMCortex-M3內(nèi)核。按性能分成兩個不同的系列:STM32F103“增強型”系列和STM32F101“基本型”系列。增強型
9、系列時鐘頻率達(dá)到72MHz,是同類產(chǎn)品中性能最高的產(chǎn)品;基本型時鐘頻率為36MHz,以16位產(chǎn)品的價格得到比16位產(chǎn)品大幅提升的性能,是16位產(chǎn)品用戶的最佳選擇。兩個系列都內(nèi)置32K到128K的閃存,不同的是SRAM的最大容量和外設(shè)接口的組合。時鐘頻率72MHz時,從閃存執(zhí)行代碼,STM32功耗36mA,是32位市場上功耗最低的產(chǎn)品。</p><p> 以下是STM32系列的內(nèi)部結(jié)構(gòu)圖:</p>
10、<p><b> 2.2電機驅(qū)動芯片</b></p><p> 模塊上的EN端為H橋的使能端,需要外接5V電壓,EN不可懸空,當(dāng)EN都為高電平時電機驅(qū)動模塊開始工作,EN端為低電平時,電機驅(qū)動停止工作。</p><p> 2.3按鍵輸入和顯示模塊</p><p><b> 2.3.1按鍵輸入</b><
11、;/p><p> 采用自己設(shè)計的形如4×4矩陣式按鍵,按鍵用于設(shè)定某一數(shù)值。通過程序設(shè)置延時環(huán)節(jié)來消除按鈕的抖動問題,這樣做使矩陣式按鈕硬件連線簡單,同時按鈕的軟件設(shè)計也變的簡單。</p><p><b> 2.3.2顯示模塊</b></p><p> 系統(tǒng)采用傳統(tǒng)點陣式1602顯示器,顯示傳感器的測量值以及鍵盤的輸入設(shè)定值。<
12、;/p><p> 2.4直流伺服電動機</p><p> 直流伺服電動機在伺服系統(tǒng)中控制機械元件轉(zhuǎn)動.是一種補助馬達(dá)間接變速裝置。又稱執(zhí)行電動機,在自動控制系統(tǒng)中,用作執(zhí)行元件,把所收到的電信號轉(zhuǎn)換成電動機軸上的角位移或角速度輸出。其主要特點是,當(dāng)信號電壓為零時無自轉(zhuǎn)現(xiàn)象,轉(zhuǎn)速隨著轉(zhuǎn)矩的增加而勻速下降。其作用可使控制速度、位置精度非常準(zhǔn)確。</p><p> 直流
13、伺服電動機的結(jié)構(gòu)與直流電動機基本相同。只是為減小轉(zhuǎn)動慣量,電機做得細(xì)長一些。所不同的是電樞電阻大,機械特性軟、線性(電阻大,可弱磁起動、可直接起動)。供電方式是他勵供電,即勵磁繞組和電樞分別兩個獨立的電源供電??刂品绞桨姌锌刂坪痛艠O控制,其中改變電樞電壓U調(diào)速范圍較大,直流伺服電機常用此方法調(diào)速。</p><p> 直流伺服電動機轉(zhuǎn)速的計算公式如下:</p><p> 式中:n為轉(zhuǎn)
14、速;Φ為磁通;U為外加電壓;I、R為電樞電流和電阻;Ke為電勢系數(shù)。</p><p> 3.單片機控制系統(tǒng)軟件設(shè)計</p><p> 軟件設(shè)計采用模塊化設(shè)計,由主程序模塊和功能實現(xiàn)模塊兩大部分組成。主程序通過讀取鍵值與超聲波傳感器測量距離進(jìn)行求差,結(jié)合PID控制算法輸出至驅(qū)動模塊以達(dá)到控制電機的目的;功能實現(xiàn)模塊主要由主函數(shù)模塊、鍵盤處理子程序和屏幕顯示模塊、PID控制算法子程序等組成
15、。</p><p><b> 3.1主程序</b></p><p> 主程序首先對鍵盤和顯示模塊的程序進(jìn)行初始化,通過讀取鍵值處理后與超聲波傳感器測量距離進(jìn)行求差以達(dá)到控制電機的目的。主程序流程圖如圖3-1所示。</p><p> 圖3-1主程序流程圖</p><p> 3.2鍵盤處理子程序</p>
16、<p> 鍵盤采用程序掃描的工作方式,即在特定的程序位置段上安排鍵盤掃描程序讀取鍵盤狀態(tài)。鍵盤處理子程序的程序掃描法流程圖如圖3-2所示。</p><p> 圖3-2鍵盤處理子程序的程序掃描法流程圖</p><p> 4.控制系統(tǒng)原理圖及仿真</p><p> 4.1控制系統(tǒng)方框圖</p><p> 控制系統(tǒng)是以單片機為
17、控制器,通過鍵盤輸入設(shè)定值,經(jīng)單片機處理后送到電機驅(qū)動器,電機驅(qū)動器將收到的信號進(jìn)行放大,最終電機按照減小設(shè)定值與測量值的方式轉(zhuǎn)動。圖4-1即為控制系統(tǒng)方框圖</p><p> 圖4-1控制系統(tǒng)方框圖</p><p> 4.2控制系統(tǒng)電路原理圖</p><p> 圖4-2控制系統(tǒng)電路原理圖</p><p> 5.Simulink組件對
18、直流伺服控制系統(tǒng)的仿真</p><p> 5.1直流伺服電機數(shù)學(xué)模型</p><p> 直流伺服電機閉環(huán)系統(tǒng)結(jié)構(gòu)圖如圖5-1所示</p><p> 圖5-1直流伺服電機閉環(huán)系統(tǒng)結(jié)構(gòu)圖</p><p> 其中直流伺服電機的傳遞函數(shù)為</p><p> 5.2系統(tǒng)Simulink模型及時域特性仿真</p&g
19、t;<p> 對于單輸入單輸出系統(tǒng),在經(jīng)典控制理論中可用傳遞函數(shù)來描述系統(tǒng),獲得系統(tǒng)的動態(tài)響應(yīng)。同樣,Simulink仿真軟件也有傳遞函數(shù)模塊,可方便地描述系統(tǒng)的特性,且簡化了仿真模型。從模塊庫窗口創(chuàng)建系統(tǒng)模型如圖1所示,選信號源模塊組中的階躍信號模塊為輸入信號,以輸出模塊組中的示波器模塊作為顯示器來觀察系統(tǒng)階躍響應(yīng)。在模型窗口設(shè)置傳遞函數(shù)模塊的參數(shù)和特性,運行仿真模型,得系統(tǒng)階躍響應(yīng)曲線。</p><
20、;p> 5.2.1 Simulink建模及仿真</p><p> 圖5-2直流伺服電機開環(huán)系統(tǒng)Simulink模型</p><p> 端口Step為直流伺服電機的輸入電壓,輸出端口為驅(qū)動信號。</p><p> 圖5-3是開環(huán)系統(tǒng)的仿真結(jié)果,即開環(huán)系統(tǒng)的階躍響應(yīng)曲線,也即直流伺服電機輸入1V單位階躍電壓時。電機的轉(zhuǎn)軸輸出呈線性變化。</p>
21、<p> 圖5-3開環(huán)系統(tǒng)仿真圖</p><p> 由圖5-3響應(yīng)曲線可知,系統(tǒng)沒有在可視范圍內(nèi)達(dá)到穩(wěn)態(tài)值“1”,但從理論上分析知此系統(tǒng)屬穩(wěn)定系統(tǒng),在足夠時間內(nèi)是能夠達(dá)到穩(wěn)定狀態(tài)的。上述分析說明:系統(tǒng)的響應(yīng)速度較慢,系統(tǒng)性能較差,從而可能不具備使用價值。結(jié)果表明,該系統(tǒng)沒有達(dá)到預(yù)期的設(shè)計要求。</p><p> 5.2.2單位負(fù)反饋系統(tǒng)Simulink建模及仿真<
22、/p><p> 圖5-4是在圖5-3的基礎(chǔ)上加一個單位負(fù)反饋環(huán)節(jié),構(gòu)成直流伺服電機的單位負(fù)反饋系統(tǒng),單位負(fù)反饋系統(tǒng)Simulink模型如圖5-4所示</p><p> 圖5-4直流伺服電機單位負(fù)反饋系統(tǒng)Simulink模型</p><p> 圖5-5是單位負(fù)反饋系統(tǒng)的仿真結(jié)果</p><p> 圖5-5單位負(fù)反饋系統(tǒng)仿真圖</p&g
23、t;<p> 系統(tǒng)超調(diào):40%,調(diào)節(jié)時間:2s。由圖5-5和開環(huán)階躍響應(yīng)曲線相比較知:系統(tǒng)應(yīng)經(jīng)可以達(dá)到較快達(dá)到穩(wěn)態(tài)值。說明閉環(huán)單位負(fù)反饋系統(tǒng)對系統(tǒng)性能有很大改善。</p><p><b> 5.3 PID校正</b></p><p> 為了使系統(tǒng)能夠達(dá)到設(shè)計要求,我們可以在圖5-4前向通道上設(shè)置一個控制器構(gòu)成閉環(huán)系統(tǒng)來校正直流伺服電機。基于PID控
24、制(閉環(huán))的直流伺服電機系統(tǒng)框圖如圖5-6所示。</p><p><b> +</b></p><p><b> -</b></p><p> 圖5-6基于PID控制(閉環(huán))的直流伺服電機系統(tǒng)框圖</p><p> 其控制過程為比較超聲波傳感器的測量值與鍵盤設(shè)定值,即輸入信號,通過反饋后與系
25、統(tǒng)輸入信號進(jìn)行比較,得到偏差信號。偏差信號作為PID控制器的輸入信號根據(jù)設(shè)定的PID控制規(guī)律計算后輸出信號U,作為控制量輸入給直流電機,從而實現(xiàn)整個直流電機調(diào)速系統(tǒng)的閉環(huán)負(fù)反饋PID控制。</p><p> 5.3.1 PID參數(shù)的湊試法確定</p><p> 增大比例系數(shù)Kp系統(tǒng)響應(yīng)有利于減小靜差,但是過大會增大超調(diào),并產(chǎn)生震蕩,使穩(wěn)定性變壞。增大Ti可以減小超調(diào),減小震蕩,是系統(tǒng)更
26、穩(wěn)定,但靜差消除變慢。增大微分Td有利于加快系統(tǒng)響應(yīng)時間,使超調(diào)減小,穩(wěn)定性增加,但對擾動的抑制能力減弱,對擾動有較敏感的響應(yīng)。</p><p> 在湊試時,對參數(shù)實行下述先比例,后積分,再微分的整定步驟。</p><p> (1)首先只整定比例部分。即將比例部分由小變大,并觀察相應(yīng)的系統(tǒng)響應(yīng),直到得到反應(yīng)快,超調(diào)小的響應(yīng)曲線。如果系統(tǒng)沒有靜差或靜差已小到允許范圍內(nèi),那么只需用比例控制
27、器即可,最優(yōu)比例系數(shù)可由此確定。</p><p> (2)如果在比例調(diào)節(jié)的基礎(chǔ)下系統(tǒng)的靜差不能滿足設(shè)計要求,則須加入積分環(huán)節(jié)。整定時首先置積分時間Ti為一較大值,并將經(jīng)第一步整定得到的比例系數(shù)略微縮小,然后減小積分時間,并在保持系統(tǒng)良好動態(tài)性能的情況下,靜差得到消除。在此過程中,可根據(jù)響應(yīng)曲線的好壞反復(fù)改變比例系數(shù)與積分時間,以期得到滿意的控制過程與整定參數(shù)。</p><p> (3)
28、若使用比例積分控制器消除了靜差,但動態(tài)過程經(jīng)反復(fù)調(diào)整仍不能滿意,則可加入微分環(huán)節(jié),構(gòu)成比例積分微分控制器。在整定時,可先置微分時間Td為零。在第二步整定的基礎(chǔ)上,增大Td,同時相應(yīng)的改變比例系數(shù)和積分時間,逐步湊試,以獲得滿意的調(diào)節(jié)效果和控制參數(shù)。</p><p> 5.3.2比例控制器校正</p><p> 比例控制系統(tǒng)Simulink模型及仿真</p><p&g
29、t; 圖5-7 比例控制系統(tǒng)Simulink模型</p><p><b> Kp=1時仿真圖</b></p><p><b> Kp=3時</b></p><p><b> Kp=5時仿真圖</b></p><p> 由以上三個比例控制的仿真圖可知,增大比例系數(shù)KP一
30、般系統(tǒng)響應(yīng)利于減小靜差,但是過大會增大超調(diào),并產(chǎn)生震蕩,使穩(wěn)定性變壞。</p><p> 5.3.3比例積分控制器校正</p><p> 積分控制的作用是只要系統(tǒng)存在誤差,積分控制作用就不斷地積累,輸出控制量以消除誤差,因而,只要有足夠的時間,積分控制將能完全消除誤差。在比例環(huán)節(jié)基礎(chǔ)上加入積分環(huán)節(jié),只要參數(shù)設(shè)置合適就能完全消除系統(tǒng)偏差。</p><p> 比例
31、積分控制系統(tǒng)Simulink模型</p><p> 圖5-8 比例積分控制系統(tǒng)Simulink模型</p><p> Kp=1、Ki=1時仿真圖</p><p> Kp=1、Ki=3時仿真圖</p><p> Kp=5、Ki=3時仿真圖</p><p> 由以上三個比例積分控制的仿真圖可知,增大TI有減小超調(diào)
32、,減小震蕩,使系統(tǒng)更穩(wěn)定,但靜差消除變慢。PI控制參數(shù)設(shè)置適當(dāng)可使系統(tǒng)靜差為零。經(jīng)多次試湊,選KI=1.</p><p> 5.3.4 PID控制器校正</p><p> 比例積分作用雖能是系統(tǒng)誤差為零,但系統(tǒng)動態(tài)性能不能得到滿足。積分作用太強可能會使系統(tǒng)出現(xiàn)震蕩。微分控制具有超前控制能力,可抑制最大動態(tài)偏差,改善系統(tǒng)動態(tài)性能,提高系統(tǒng)的穩(wěn)定性。為此,在PI作用基礎(chǔ)上引入微分控制,構(gòu)成
33、PID控制器,以使系統(tǒng)滿足穩(wěn)、準(zhǔn)、快的要求。</p><p> PID控制控制系統(tǒng)Simulink模型如圖</p><p> 圖5-9 PID控制系統(tǒng)Simulink模型</p><p> Kp=1、Ki=1、Kd=0.1時仿真圖</p><p> 和PI控制閉環(huán)響應(yīng)曲線相比較可知:系統(tǒng)響應(yīng)時間變短,超調(diào)變小,但仍不符合要求;<
34、/p><p> Kp=5、Ki=1、Kd=0.1時仿真圖</p><p> 與KP=1、KI=1、KD=0.1時的仿真圖相比,系統(tǒng)超調(diào)和調(diào)節(jié)時間都變小,仍然不符合要求,繼續(xù)校正。需加大Kp及Ki。</p><p> Kp=12、Ki=1、Kd=0.5時仿真圖</p><p> 由上曲線知此時系統(tǒng)有微量的超調(diào),進(jìn)一步加大Ki時超調(diào)為零。&l
35、t;/p><p> Kp=12、Ki=1、Kd=0.9時仿真圖</p><p> 經(jīng)過多次校正參數(shù),此時當(dāng)Kp=12、Ki=1、Kd=0.9時系統(tǒng)超調(diào)量為0,穩(wěn)態(tài)誤差為0,性能滿足設(shè)計要求,穩(wěn)定、準(zhǔn)確、快速得到了完滿的統(tǒng)一。</p><p><b> 5.小結(jié)</b></p><p> 控制系統(tǒng)特點是以單片機為控制器
36、,通過鍵盤輸入設(shè)定值,使得系統(tǒng)消除測量值與實際值的偏差方便快捷。但在proteus中沒能實現(xiàn)閉環(huán)系統(tǒng)的PID控制。此缺點通過軟件彌補,在MATLAB軟件中的SIMULINK中進(jìn)行了直流伺服電機的開環(huán)控制系統(tǒng)仿真,單位閉環(huán)控制系統(tǒng)仿真,閉環(huán)PI控制系統(tǒng)仿真,閉環(huán)PD控制仿真,閉環(huán)PID控制仿真能夠更好的測試和控制系統(tǒng)的性能,從而為系統(tǒng)設(shè)計提供了更準(zhǔn)確的性能指標(biāo)。</p><p><b> 參考文獻(xiàn)<
37、;/b></p><p> [1]李正軍.計算機控制系統(tǒng).北京:機械工業(yè)出版社,2010.6</p><p> [2]周荷琴等.微型計算機原理及接口技術(shù)[M].合肥:中國科技大學(xué)出版社,2008.6</p><p> [3]張毅剛等.單片機原理與應(yīng)用設(shè)計[M].北京:電子工業(yè)出版社</p><p> [4]計算機控制技術(shù)實驗指導(dǎo)
38、書</p><p><b> 部分程序如下:</b></p><p> #include "stm32f10x.h" </p><p> #include "user_Config.h" </p><p>
39、 #include "TFT28.h" </p><p> #include "GUI.h"</p><p> #include <stdio.h></p><p> #include "key.h"</p><p> #include &
40、lt;math.h></p><p> int overflow=0; </p><p> #define module_interval 25 </p><p> #define object_distance 100.0 </p><p> void NVIC_Configuration(void);</p>
41、;<p> void TIM_Configuration(void);</p><p> void GPIO_Configuration(void);</p><p> void RCC_Configuration(void);</p><p> float Sensor_using(void);</p><p> v
42、oid delay(void);</p><p> unsigned long lastTime;</p><p> double Input, Output, Setpoint,dErr;</p><p> double errSum, lastErr;</p><p> unsigned int Device_code;
43、 </p><p> GPIO_InitTypeDef GPIO_InitStructure;//定義一個結(jié)構(gòu)變量,用于初始化GPIO</p><p> ErrorStatus HSEStartUpStatus;</p><p> void Delay(vu32 nCount)</p><p><b>
44、{</b></p><p> for(; nCount != 0; nCount--);</p><p><b> }</b></p><p> void delay_ms(unsigned int nCount)</p><p><b> {</b></p>&l
45、t;p> int i,j; </p><p> for(i=0;i<nCount;i++) </p&g
46、t;<p><b> {</b></p><p> for(j=0;j<0x3000;j++);</p><p><b> }</b></p><p><b> }</b></p><p> void RCC_Configuration(void)
47、</p><p><b> {</b></p><p> RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);</p><p> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |</p>
48、<p> RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);</p><p><b> }</b></p><p> void GPIO_Config(void)</p><p><b> {</b></p><p> RC
49、C_APB2PeriphClockCmd(RCC_GPIO_TFT, ENABLE); </p><p> GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN|DS5_PIN|DS6_PIN|DS7_PIN|DS8_PIN;</p><p><b> //工作在輸出模式</b><
50、;/p><p> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO¹¤×÷ÔÚÊä³öģʽ</p><p> GPIO_InitStructure.GPIO_Speed = GPI
51、O_Speed_10MHz;</p><p> GPIO_Init(GPIO_TFT_DATA, &GPIO_InitStructure); </p><p> RCC_APB2PeriphClockCmd(RCC_GPIO_CTRA, ENABLE); </p><p> GPIO_InitStructure.GPIO_Pin = G
52、PIO_Pin_0 | GPIO_Pin_1; //使用PA0、PA1</p><p> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;</p><p> GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;</p><p> GPIO_Init(GPIO_
53、CTRA, &GPIO_InitStructure); </p><p> RCC_APB2PeriphClockCmd(RCC_GPIO_CTRB, ENABLE); </p><p> GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_8 ; //使
54、用PB0.1.2.8</p><p> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;</p><p> GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;</p><p> GPIO_Init(GPIO_CTRB, &GPIO_InitStruc
55、ture); </p><p> GPIO_ResetBits(GPIO_CTRB,GPIO_Pin_8);</p><p><b> }</b></p><p> void NVIC_Configuration(void)</p><p><b> {</b></p&g
56、t;<p> NVIC_InitTypeDef NVIC_InitStructure;</p><p> NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;</p><p> NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;</p><p&g
57、t; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;</p><p> NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;</p><p> NVIC_Init(&NVIC_InitStructure);</p><p><b> }</
58、b></p><p> void TIM_Configuration(void)</p><p><b> {</b></p><p> TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;</p><p> RCC_APB1PeriphClockCmd(RCC_
59、APB1Periph_TIM2, ENABLE);</p><p> TIM_DeInit(TIM2);</p><p> TIM_TimeBaseStructure.TIM_Period=10000;</p><p> TIM_TimeBaseStructure.TIM_Prescaler=0;</p><p> TIM_TimeB
60、aseStructure.TIM_ClockDivision=TIM_CKD_DIV1;</p><p> TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;</p><p> TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);</p><p>
61、 TIM_PrescalerConfig(TIM3,359,TIM_PSCReloadMode_Immediate);</p><p> TIM_ARRPreloadConfig(TIM3, DISABLE);</p><p> TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);</p><p> TIM_Cmd(TIM3, DI
62、SABLE);</p><p><b> }</b></p><p> void delay(void)</p><p><b> {</b></p><p><b> u32 i;</b></p><p><b> i=3000;&
63、lt;/b></p><p> while(i--);</p><p><b> }</b></p><p> //超聲波傳感器模塊</p><p> float Sensor_using(void)</p><p><b> {</b></p>
64、<p> float distance=0;</p><p> u16 TIM=0;</p><p> GPIO_SetBits(GPIOC,GPIO_Pin_12);</p><p><b> delay();</b></p><p> GPIO_ResetBits(GPIOC,GPIO_Pin_
65、12);</p><p> TIM_Cmd(TIM3, ENABLE);</p><p> while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11) && overflow==0);</p><p> TIM3->CNT=0;</p><p> while(GPIO_Read
66、InputDataBit(GPIOC,GPIO_Pin_11) && overflow==0);</p><p> TIM_Cmd(TIM3, DISABLE);</p><p> if(overflow!=0)</p><p><b> {</b></p><p> overflow=0;<
67、;/p><p> return 0.0;</p><p><b> }</b></p><p> TIM=TIM_GetCounter(TIM2);</p><p> distance=(float)sqrt((TIM/20.0*17)*(TIM/20.0*17)-module_interval*module_int
68、erval/4.0)+12.0; </p><p> return(distance);</p><p><b> }</b></p><p> void TIM3_PWM_Init(u16 arr,u16 psc)//PWM output</p><p><b> { </b></
69、p><p> GPIO_InitTypeDef GPIO_InitStructure;</p><p> TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;</p><p> TIM_OCInitTypeDef TIM_OCInitStructure;</p><p> RCC_APB1Per
70、iphClockCmd(RCC_APB1Periph_TIM3, ENABLE);</p><p> RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); </p><p> GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
71、 </p><p><b> //啟用定時器三</b></p><p> GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9
72、; </p><p> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; </p><p> GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;</p><p> GPIO_Init(GPIOC, &GPIO_InitStructure);</p>
73、;<p> GPIO_ResetBits(GPIOC,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);</p><p> TIM_TimeBaseStructure.TIM_Period = arr; </p><p> TIM_TimeBaseStructure.TIM_Prescaler =psc; </p
74、><p> TIM_TimeBaseStructure.TIM_ClockDivision = 0; </p><p> TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; </p><p> TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
75、 </p><p> TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; </p><p> TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; </p><p> TIM_OCInitStructure.TIM_Pulse = 0; <
76、;/p><p> TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; </p><p> TIM_OC1Init(TIM3, &TIM_OCInitStructure); </p><p> TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
77、 </p><p> TIM_OC2Init(TIM3, &TIM_OCInitStructure); </p><p> TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); </p><p> TIM_OC3Init(TIM3, &TIM_OCInitStructure); </p&
78、gt;<p> TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); </p><p> TIM_OC4Init(TIM3, &TIM_OCInitStructure); </p><p> TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); </p>
79、<p> TIM_ARRPreloadConfig(TIM3, ENABLE); </p><p> TIM_Cmd(TIM3, ENABLE); </p><p><b> }</b></p><p> Compute(double kp,double ki,double kd)//PID control</p&
80、gt;<p><b> {</b></p><p> double dErr;</p><p> unsigned long now;</p><p> double timeChange = (double)(now - lastTime);</p><p> double error = Se
81、tpoint - Input;</p><p> errSum += (error * timeChange);</p><p> dErr = (error - lastErr)/timeChange;</p><p> Output = kp * error + ki * errSum + kd * dErr;</p><p>
82、lastErr = error;</p><p> lastTime = now;</p><p><b> }</b></p><p> int main(void)</p><p><b> {</b></p><p> float result=0;</
83、p><p><b> int x;</b></p><p> RCC_Configuration;//系統(tǒng)時鐘初始化</p><p> NVIC_Configuration();//中斷初始化</p><p> TIM_Configuration();//定時器初始化</p><p> GP
84、IO_Config();</p><p> Device_code=0x9320; </p><p> TFT_Initial(); </p><p> LED_Init();</p><p> KEY_Init();</p><p>
85、 Compute(2.3,3.5,4.7);</p><p> while(1) </p><p><b> {</b></p><p> CLR_Screen(Black); </p><p> LCD_Put
86、String24(35,40,"the set length: ",Yellow,Black); </p><p> delay_ms(1000); </p><p> result=Sensor_using();</p><p> if(result>=object_distance)</p>
87、<p><b> {</b></p><p> GPIO_SetBits(GPIOC,GPIO_Pin_6);</p><p> GPIO_ResetBits(GPIOC,GPIO_Pin_7);</p><p><b> }</b></p><p> else if (re
88、sult<object_distance && result!=0.0)</p><p><b> {</b></p><p> GPIO_SetBits(GPIOC,GPIO_Pin_7);</p><p> GPIO_ResetBits(GPIOC,GPIO_Pin_6);</p><p>
89、;<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> GPIO_ResetBits(GPIOC,GPIO_Pin_6);</p><p> GPIO_ResetBits(GPIOC,GPIO_Pin
90、_7);</p><p><b> }</b></p><p> x=KEY_Scan(); //¼üÅÌÏÔʾ³ÌÐò</p><p><b> switch(x)</b></p>
91、<p><b> {</b></p><p><b> case 0:</b></p><p> // LED0=0;</p><p> printf("D\n");</p><p><b> break;</b></p&
92、gt;<p><b> case 1:</b></p><p> printf("C\n");</p><p><b> break;</b></p><p><b> case 2:</b></p><p> printf(&quo
93、t;B\n");</p><p><b> break;</b></p><p><b> case 3:</b></p><p> printf("A\n");</p><p><b> break;</b></p><
94、;p><b> case 4:</b></p><p> printf("#\n");</p><p><b> break;</b></p><p><b> case 5:</b></p><p> printf("9\n&qu
95、ot;);</p><p><b> break;</b></p><p><b> case 6:</b></p><p> printf("6\n");</p><p><b> break;</b></p><p>&l
96、t;b> case 7:</b></p><p> printf("3\n");</p><p><b> break;</b></p><p><b> case 8:</b></p><p> printf("0\n");<
97、;/p><p><b> break;</b></p><p><b> case 9:</b></p><p> printf("8\n");</p><p><b> break;</b></p><p><
98、b> case 10:</b></p><p> printf("5\n");</p><p><b> break;</b></p><p><b> case 11:</b></p><p> printf("2\n");
99、</p><p><b> break;</b></p><p><b> case 12:</b></p><p> printf("*\n");</p><p><b> break;</b></p><p><
100、;b> case 13:</b></p><p> printf("7\n");</p><p><b> break;</b></p><p><b> case 14:</b></p><p> printf("4\n")
101、;</p><p><b> break;</b></p><p><b> case 15:</b></p><p> printf("1\n");</p><p><b> break;</b></p><p><b
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機控制課程設(shè)計報告--基于單片機的直流伺服電機速度控制系統(tǒng)
- 計算機控制系統(tǒng)、過程控制系統(tǒng)課程設(shè)計
- 計算機控制課程設(shè)計---水位控制系統(tǒng)
- 計算機控制系統(tǒng)課程設(shè)計--- 最少拍控制系統(tǒng)設(shè)計
- 計算機控制系統(tǒng)課程設(shè)計報告
- 計算機控制系統(tǒng)課程設(shè)計報告
- 計算機控制系統(tǒng)課程設(shè)計---多點溫控采暖控制系統(tǒng)
- 計算機控制系統(tǒng)最小拍控制課程設(shè)計
- 計算機控制課程設(shè)計---達(dá)林算法計算機控制系統(tǒng)設(shè)計
- 溫度控制系統(tǒng)計算機控制課程設(shè)計
- 計算機控制系統(tǒng)課程設(shè)計--最小拍控制設(shè)計
- 微機控制技術(shù)(計算機控制技術(shù))課程設(shè)計——步進(jìn)電機控制系統(tǒng)設(shè)計
- 計算機控制技術(shù)課程設(shè)計-計算機控制技術(shù)及工程應(yīng)用步進(jìn)電機控制系統(tǒng)
- 計算機控制系統(tǒng)課程設(shè)計--液位控制監(jiān)控系統(tǒng)
- 計算機控制課程設(shè)計--啤酒發(fā)酵計算機溫度控制系統(tǒng)設(shè)計
- 直流電機轉(zhuǎn)速計算機控制系統(tǒng)設(shè)計
- 計算機控制系統(tǒng)
- 溫度控制系統(tǒng)設(shè)計-計算機控制技術(shù)課程設(shè)計
- 計算機控制課程設(shè)計--智能路燈控制系統(tǒng)的設(shè)計
- 溫度控制系統(tǒng)設(shè)計——計算機控制技術(shù)課程設(shè)計
評論
0/150
提交評論