久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 18761|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)的直流伺服電機(jī)控制系統(tǒng)設(shè)計(jì)論文

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:367315 發(fā)表于 2018-7-9 17:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這是一個(gè)直流伺服電機(jī)控制系統(tǒng)設(shè)計(jì)  有代碼  大師搭建出來仿真有問題 大家?guī)兔纯?br />
電子信息與電氣工程系
課程設(shè)計(jì)報(bào)告

設(shè)計(jì)題目:    直流伺服電機(jī)控制系統(tǒng)設(shè)計(jì)     
系    別:電子信息與電氣工程系
年級(jí)專業(yè):
學(xué)    號(hào):
學(xué)生姓名:
      
自動(dòng)化專業(yè)《計(jì)算機(jī)控制技術(shù)》課程設(shè)計(jì)任務(wù)書
論文
題目
直流伺服電機(jī)控制系統(tǒng)設(shè)計(jì)
設(shè)計(jì)類型

導(dǎo)師姓名
丁健
干開峰
主要內(nèi)容及目標(biāo)
設(shè)計(jì)對(duì)象是直流伺服電機(jī)實(shí)驗(yàn)臺(tái),設(shè)計(jì)一個(gè)計(jì)算機(jī)控制的直流伺服電機(jī)控制系統(tǒng)。由測量元件(位移傳感器)對(duì)被控制對(duì)象(電機(jī))的被控參數(shù)(位移)進(jìn)行測量,由變換發(fā)送單元(A/D轉(zhuǎn)換器)將被控參數(shù)變成一定形式的信號(hào) ,送給控制器CPU,控制器將測量信號(hào)(實(shí)際位移量)與給定信號(hào)(位移量)進(jìn)行比較,若有誤差則按預(yù)定的控制規(guī)律產(chǎn)生一控制信號(hào)驅(qū)動(dòng)執(zhí)行機(jī)構(gòu)(伺服電機(jī)控制電源)工作,使被控參數(shù)(實(shí)際位移量)與給定信號(hào)(位移量)保持一致。其電機(jī)位置隨動(dòng)系統(tǒng):
其中: =1.8,=0.035,=0.15,K =100,控制算法選用數(shù)字PID控制。
設(shè)計(jì)條件
  • PC機(jī)一臺(tái),教學(xué)實(shí)驗(yàn)箱一臺(tái);

計(jì)劃學(xué)生數(shù)及任務(wù)
3人
(1):明確課題功能。
(2):把復(fù)雜問題分解為若干模塊,確定各模塊處理方法,畫出流程圖。
(3):存儲(chǔ)器資源分配
(4):編制程序,根據(jù)流程圖來編制源程序
(5):對(duì)程序進(jìn)行匯編,調(diào)試和修改,直到程序運(yùn)行結(jié)果正確為止。
計(jì)劃設(shè)計(jì)進(jìn)程
  • 總體方案設(shè)計(jì)
  • 控制系統(tǒng)的建模和數(shù)字控制器設(shè)計(jì)
  • 硬件的設(shè)計(jì)和實(shí)現(xiàn)
  • 選擇計(jì)算機(jī)字長(選用 51內(nèi)核的單片機(jī))
  • 設(shè)計(jì)支持計(jì)算機(jī)工作的外圍電路(EPROMRAMI/O端口、鍵盤、顯示接口電路等)
  • 設(shè)計(jì)輸入信號(hào)接口電路;
  • 設(shè)計(jì)輸出控制電路;
  • 其它相關(guān)電路的設(shè)計(jì)或方案(電源、通信等)
  • 軟件設(shè)計(jì)
  • 分配系統(tǒng)資源,編寫系統(tǒng)初始化和主程序模塊框圖;
  • 編寫A/D轉(zhuǎn)換和位置檢測子程序框圖;
  • 編寫控制程序和D/A轉(zhuǎn)換控制子程序模塊框圖;
  • 其它程序模塊(顯示與鍵盤等處理程序)框圖。
五、編寫課程設(shè)計(jì)說明書,繪制完整的系統(tǒng)電路圖(A3幅面)。
參考文獻(xiàn)
1.于海生 計(jì)算機(jī)控制技術(shù)[M] 北京:機(jī)械工業(yè)出版社,2007.6
2、周荷琴等 微型計(jì)算機(jī)原理及接口技術(shù)[M]合肥:中國科技大學(xué)出版社,2008.6   
3、李剛民等 單片機(jī)原理及應(yīng)用技術(shù)[M]北京:高等教育出版社
4、樓然苗  51系列單片機(jī)設(shè)計(jì)實(shí)例[M]北京:北京航空航天大學(xué)出版社
5、計(jì)算機(jī)控制技術(shù)實(shí)驗(yàn)指導(dǎo)書
摘要
隨著集成電路技術(shù)的飛速發(fā)展,微控制器在伺服控制系統(tǒng)普遍應(yīng)用,這種數(shù)字伺服系統(tǒng)的性能可以大大超過模擬伺服系統(tǒng)。數(shù)字伺服系統(tǒng)可以實(shí)現(xiàn)高精度的位置控制、速度跟蹤,可以隨意地改變控制方式。單片機(jī)和DSP在伺服電機(jī)控制中得到了廣泛地應(yīng)用,用單片機(jī)作為控制器的數(shù)字伺服控制系統(tǒng),有體積小、可靠性高、經(jīng)濟(jì)性好等明顯優(yōu)點(diǎn)。。本設(shè)計(jì)研究的直流伺服電機(jī)控制系統(tǒng)即以單片機(jī)作為核心部件,主要是單片機(jī)為控制核心通過軟硬件結(jié)合的方式對(duì)直流伺服電機(jī)轉(zhuǎn)速實(shí)現(xiàn)開環(huán)控制。
對(duì)于伺服電機(jī)的閉環(huán)控制,采用PID控制,利用MATLAB軟件對(duì)單位階躍輸入響應(yīng)的PID校正動(dòng)態(tài)模擬仿真,研究PID控制作用以及PID各參數(shù)值對(duì)控制系統(tǒng)的影響,通過試湊法得到最佳PID參數(shù)。同時(shí)能更深度地掌握在 自動(dòng)控制領(lǐng)域應(yīng)用極為廣泛的MATLAB軟件。
目   錄
1.引言
2.單片機(jī)控制系統(tǒng)硬件組成
2.1 微控制器
2.2 DAC0808轉(zhuǎn)換器
2.3運(yùn)算放大器
2.4按鍵輸入和顯示模塊
2.4.1 按鍵輸入
2.4.2 顯示模塊
2.5 直流伺服電動(dòng)機(jī)
3.單片機(jī)控制系統(tǒng)軟件設(shè)計(jì)
3.1主程序
3.2鍵盤處理子程序
4.控制系統(tǒng)原理圖及仿真
4.1控制系統(tǒng)方框圖
4.2控制系統(tǒng)電路原理圖
4.3 Proteus仿真結(jié)果
5.Simulink組件對(duì)直流伺服控制系統(tǒng)的仿真
5.1 MATLAB與Simulink簡介
5.1.1 MATLAB簡介
5.1.2 Simulink簡介
5.2 直流伺服電機(jī)數(shù)學(xué)模型
5.3 系統(tǒng)Simulink模型及時(shí)域特性仿真
5.3.1 開環(huán)系統(tǒng)Simulink模型及仿真
5.3.2 單位負(fù)反饋系統(tǒng)Simulink模型及仿真
5.4 PID校正
5.4.1 PID參數(shù)的湊試法確定
5.4.2 比例控制器校正
5.4.3 比例積分控制器校正
5.4.4 PID控制器校正
6.小結(jié)
參考文獻(xiàn)
附錄
1.引言
本設(shè)計(jì)的單片機(jī)控制直流伺服電機(jī)系統(tǒng)是一個(gè)開環(huán)的自動(dòng)控制系統(tǒng)控制系統(tǒng)。是以單片機(jī)為控制器, 通過按鈕設(shè)置設(shè)定值輸入到單片機(jī),單片機(jī)對(duì)輸入信號(hào)處理后輸出控制信號(hào),經(jīng)D/A轉(zhuǎn)換器DAC0808轉(zhuǎn)換后把數(shù)字信號(hào)轉(zhuǎn)變?yōu)槟M電壓,再經(jīng)放大器放大后,去控制伺服電機(jī)工作,進(jìn)而控制電機(jī)向著預(yù)定的轉(zhuǎn)速轉(zhuǎn)動(dòng)。同時(shí)單片機(jī)處理的數(shù)字信號(hào)通過LCD來顯示,實(shí)時(shí)顯示單片機(jī)的轉(zhuǎn)速值。
另外本設(shè)計(jì)還利用了MATLAB軟件,利用 Simulink構(gòu)造直流電機(jī)控制系統(tǒng)模型,通過對(duì)各個(gè)單元部件的參數(shù)進(jìn)行設(shè)定,進(jìn)而對(duì)直流伺服電機(jī)系統(tǒng)控制進(jìn)行仿真,就其仿真功能對(duì)系統(tǒng)進(jìn)行時(shí)域分析。
2.單片機(jī)控制系統(tǒng)硬件組成
本系統(tǒng)是由一片單片機(jī)、矩陣式鍵盤,DAC0808轉(zhuǎn)換器、運(yùn)算放大器、顯示模塊和一臺(tái)直流伺服電機(jī)組成,另外通過Proteus7.4軟件進(jìn)行仿真。
2.1 微控制器
選用AT89C52單片機(jī)。 AT89C52是51系列單片機(jī)的一個(gè)型號(hào),它是ATMEL公司生產(chǎn)的。
  AT89C52是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,功能強(qiáng)大的AT89C52單片機(jī)可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場合。
  AT89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,2個(gè)讀寫口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,但不可以在線編程(S系列的才支持在線編程)。其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲(chǔ)器可有效地降低開發(fā)成本。
  AT89C52有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
主要功能特性:
(1)兼容MCS51指令系統(tǒng),8k可反復(fù)擦寫(>1000次)Flash ROM
(2)32個(gè)雙向I/O口,256x8bit內(nèi)部RAM
(3)3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷,時(shí)鐘頻率0-24MHz
(4)2個(gè)串行中斷,可編程UART串行通道
(5)2個(gè)外部中斷源,共6個(gè)中斷源
(6)2個(gè)讀寫中斷口線,3級(jí)加密位
(7)低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能
圖2-1 AT89C52
2.2 DAC0808轉(zhuǎn)換器
設(shè)計(jì)中采用的芯片是DAC0808,它是一個(gè)8位DAC。圖2是DAC0808典型應(yīng)用電路。圖2-1中輸出的模擬量是一個(gè)正電壓,當(dāng)需要負(fù)電壓時(shí),在DAC的第4引腳直接接一個(gè)3KΩ左右的電阻即可。DAC的第4引腳的電流總是流入的,其最大值為1.992mA。當(dāng)外接一個(gè)3KΩ的負(fù)載電阻RL時(shí),輸出的電壓是通過RL上所加的電壓,最大的電壓為-3KΩ×1.922mA ≈-6V(當(dāng)所有位輸入都是高電平的時(shí)候),與實(shí)驗(yàn)中的數(shù)據(jù)相符合。需要指出的是,負(fù)載電阻的大小會(huì)影響轉(zhuǎn)換時(shí)間,當(dāng)負(fù)載電阻為2.5KΩ的時(shí)候,在最壞的情況下,會(huì)使轉(zhuǎn)換時(shí)間增加1.2μs。

圖2-2  DAC0808典型應(yīng)用電路
2.3運(yùn)算放大器
把D/A轉(zhuǎn)換器的電流輸出轉(zhuǎn)換為電壓輸出,同時(shí)也是把微小的電流信號(hào)放大為較大的電壓信號(hào),以驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)。
2.4按鍵輸入和顯示模塊2.4.1 按鍵輸入
采用自己設(shè)計(jì)的形如3×4矩陣式按鈕,按鈕用于設(shè)定某一數(shù)值,即電機(jī)轉(zhuǎn)速值。通過
程序設(shè)置延時(shí)環(huán)節(jié)來消除按鈕的抖動(dòng)問題,這樣做使矩陣式按鈕硬件連線簡單,同時(shí)按鈕的軟件設(shè)計(jì)也不復(fù)雜。
2.4.2 顯示模塊
系統(tǒng)采用點(diǎn)陣式液晶顯示器,顯示電機(jī)的當(dāng)前轉(zhuǎn)速值,通過軟件設(shè)計(jì)使得連線簡單。
2.5 直流伺服電動(dòng)機(jī)
直流伺服電動(dòng)機(jī)在伺服系統(tǒng)中控制機(jī)械元件運(yùn)轉(zhuǎn)的發(fā)動(dòng)機(jī).是一種補(bǔ)助馬達(dá)間接變速裝置。又稱執(zhí)行電動(dòng)機(jī),在自動(dòng)控制系統(tǒng)中,用作執(zhí)行元件,把所收到的電信號(hào)轉(zhuǎn)換成電動(dòng)機(jī)軸上的角位移或角速度輸出。其主要特點(diǎn)是,當(dāng)信號(hào)電壓為零時(shí)無自轉(zhuǎn)現(xiàn)象,轉(zhuǎn)速隨著轉(zhuǎn)矩的增加而勻速下降。其作用可使控制速度,位置精度非常準(zhǔn)確。
直流伺服電動(dòng)機(jī)的結(jié)構(gòu)與直流電動(dòng)機(jī)基本相同。只是為減小轉(zhuǎn)動(dòng)慣量,電機(jī)做得細(xì)長一些。所不同的是電樞電阻大,機(jī)械特性軟、線性(電阻大,可弱磁起動(dòng)、可直接起動(dòng))。供電方式是他勵(lì)供電,即勵(lì)磁繞組和電樞分別兩個(gè)獨(dú)立的電源供電。控制方式有.電樞控制和磁極控制,其中改變電樞電壓U調(diào)速范圍較大,直流伺服電機(jī)常用此方法調(diào)速
直流伺服電動(dòng)機(jī) 轉(zhuǎn)速的計(jì)算公式如下:
式中:n為轉(zhuǎn)速;Φ為磁通;U為外加電壓;I、R為電樞電流和電阻;Ke為電勢系數(shù)。
3.單片機(jī)控制系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)采用模塊化設(shè)計(jì),由主程序模塊和功能實(shí)現(xiàn)模塊兩大部分組成。主程序通過讀取鍵值處理后送到D/A轉(zhuǎn)換以達(dá)到控制電機(jī)的目的;功能實(shí)現(xiàn)模塊主要由主函數(shù)模塊、鍵盤處理子程序和D/A轉(zhuǎn)換子程序等組成。
3.1主程序
主程序首先對(duì)鍵盤和顯示模塊的程序進(jìn)行初始化,通過讀取鍵值處理后送到D/A轉(zhuǎn)換以達(dá)到控制電機(jī)的目的。主程序流程圖如圖2-1所示。
圖2-1 主程序流程圖
3.2鍵盤處理子程序
鍵盤采用程序掃描的工作方式,即在特定的程序位置段上安排鍵盤掃描程序讀取鍵盤狀態(tài)。鍵盤處理子程序的程序掃描法流程圖如圖2-2所示。
圖2-2 鍵盤處理子程序的程序掃描法流程圖
4.控制系統(tǒng)原理圖及仿真4.1控制系統(tǒng)方框圖
控制系統(tǒng)是以單片機(jī)為控制器 ,通過鍵盤設(shè)置輸入轉(zhuǎn)速值,經(jīng)單片機(jī)處理后送到D/A轉(zhuǎn)換器,模擬信號(hào)經(jīng)功率放大后驅(qū)動(dòng)電機(jī),最終電機(jī)以設(shè)定的轉(zhuǎn)速值穩(wěn)定旋轉(zhuǎn)。圖4-1即為控制系統(tǒng)方框圖
圖4-1  控制系統(tǒng)方框圖
4.2控制系統(tǒng)電路原理圖
圖4-2  控制系統(tǒng)電路原理圖
4.3 Proteus仿真結(jié)果
圖4-3 Proteus仿真圖
利用Proteus 7.4a進(jìn)行仿真,當(dāng)通過鍵盤選擇某一數(shù)值時(shí),電機(jī)轉(zhuǎn)速即為相應(yīng)的設(shè)定值,并在仿真電路圖中電機(jī)下方顯示電機(jī)對(duì)應(yīng)轉(zhuǎn)速值的變化及最終穩(wěn)定值。圖4-3中仿真圖是當(dāng)通過按鍵設(shè)定值為158時(shí),電機(jī)下方液晶顯示器即顯示158,表明電機(jī)轉(zhuǎn)速為158 r/min。經(jīng)多次仿真分析,某些時(shí)候與鍵盤輸入值相比較得知當(dāng)電機(jī)響應(yīng)輸入值時(shí)有很小的穩(wěn)態(tài)誤差存在,原因是沒有加入反饋環(huán)節(jié)。以下利用MATLAB仿真軟件研究PID反饋控制對(duì)直流伺服電機(jī)控制系統(tǒng)的作用。
5.Simulink組件對(duì)直流伺服控制系統(tǒng)的仿真5.1 MATLAB與Simulink簡介5.1.1 MATLAB簡介
MATLAB軟件推出并應(yīng)用到自動(dòng)控制領(lǐng)域后,極大地改善了自動(dòng)控制系統(tǒng)的動(dòng)態(tài)仿真和性能分析環(huán)境。MATLAB(Matrix Laboratory,矩陣實(shí)驗(yàn)室)是一個(gè)適用于科學(xué)計(jì)算和工程應(yīng)用的數(shù)學(xué)軟件系統(tǒng)。自1982年由Mathworks軟件公司推出后,經(jīng)二十多年的發(fā)展,現(xiàn)已是IEEE
組織認(rèn)可的最優(yōu)化的科技應(yīng)用軟件,成為大學(xué)教學(xué)和科研中最常用的工具。掌握了MATLAB的應(yīng)用,對(duì)直流伺服電機(jī)控制效果的改善,肯定有著意想不到的幫助。該軟件具有以下特點(diǎn):
(1)數(shù)值運(yùn)算功能強(qiáng)大;
(2)編程環(huán)境簡單;
(3)數(shù)據(jù)可視化功能強(qiáng);
(4)豐富的程序工具箱;
(5)可擴(kuò)展性能強(qiáng)等。
5.1.2 Simulink簡介
Simulink是MATLAB軟件的擴(kuò)展,它是實(shí)現(xiàn)動(dòng)態(tài)系統(tǒng)建模和仿真的一個(gè)軟件包,他與MATLAB語言的主要區(qū)別在于,其與用戶的交互接口是基于Windows模型化圖形輸入,使得用戶可以把更多的精力投入到系統(tǒng)模型的構(gòu)建,而非編程上。
使用Simulink進(jìn)行仿真一般分為兩步:用戶首先需要在仿真模型編輯窗口中搭建好自己的仿真模型,設(shè)置好具體模型參數(shù)和仿真參數(shù),然后就可以開始仿真,Simulink將根據(jù)用戶搭建的模型,模擬系統(tǒng)在用戶設(shè)定條件下的具體行為。下面將以直流伺服電機(jī)的自動(dòng)控制為例,演示MATLAB中Simulink仿真的應(yīng)用。
5.2 直流伺服電機(jī)數(shù)學(xué)模型
直流伺服電機(jī)開環(huán)系統(tǒng)結(jié)構(gòu)圖如圖圖5-1所示
  
圖5-1  直流伺服電機(jī)開環(huán)系統(tǒng)結(jié)構(gòu)圖
其中直流伺服電機(jī)的傳遞函數(shù)為
5.3 系統(tǒng)Simulink模型及時(shí)域特性仿真
對(duì)于單輸入單輸出系統(tǒng),在經(jīng)典控制理論中可用傳遞函數(shù)來描述系統(tǒng), 獲得系統(tǒng)的動(dòng)態(tài)響應(yīng)。同樣,S仿真軟件也有傳遞函數(shù)模塊,可方便地描述系統(tǒng)的特性,且簡化了仿真模型。從模塊庫窗口創(chuàng)建系統(tǒng)模型如圖1所示,選信號(hào)源模塊組中的階躍信號(hào)模塊為輸入信號(hào),以輸出模塊組中的示波器模塊作為顯示器來觀察系統(tǒng)階躍響應(yīng)。在模型窗口設(shè)置傳遞函數(shù)模塊的參數(shù)和特性,運(yùn)行仿真模型,得系統(tǒng)階躍響應(yīng)曲線。
5.3.1 開環(huán)系統(tǒng)Simulink模型及仿真
圖5-2  直流伺服電機(jī)開環(huán)系統(tǒng)Simulink模型
端口Step為直流伺服電機(jī)的輸入電壓,輸出端口為電機(jī)轉(zhuǎn)速。
圖5-3是開環(huán)系統(tǒng)的仿真結(jié)果,即開環(huán)系統(tǒng)的階躍響應(yīng)曲線,也即直流伺服電機(jī)輸入1V單位階躍電壓時(shí)。電機(jī)的轉(zhuǎn)軸輸出呈線性變化。
圖5-3  開環(huán)系統(tǒng)仿真圖
由圖5-3響應(yīng)曲線可知,系統(tǒng)沒有在可視范圍內(nèi)達(dá)到穩(wěn)態(tài)值“1”,但從理論上分析知此系統(tǒng)屬穩(wěn)定系統(tǒng),在足夠時(shí)間內(nèi)是能夠達(dá)到穩(wěn)定狀態(tài)的。上述分析說明:系統(tǒng)的響應(yīng)速度較慢,系統(tǒng)性能較差,從而可能不具備使用價(jià)值。這個(gè)分析結(jié)果表明,該系統(tǒng)沒有達(dá)到預(yù)期的設(shè)計(jì)要求。
5.3.2 單位負(fù)反饋系統(tǒng)Simulink模型及仿真
圖5-4是在圖5-3的基礎(chǔ)上加一個(gè)單位負(fù)反饋環(huán)節(jié),構(gòu)成直流伺服電機(jī)的單位負(fù)反饋系統(tǒng),單位負(fù)反饋系統(tǒng)Simulink模型如圖5-4所示
圖5-4 直流伺服電機(jī)單位負(fù)反饋系統(tǒng)Simulink模型
圖5-5是單位負(fù)反饋系統(tǒng)的仿真結(jié)果
圖5-5 單位負(fù)反饋系統(tǒng)仿真圖
系統(tǒng)超調(diào):40%,調(diào)節(jié)時(shí)間:2 s。由圖5-5和開環(huán)階躍響應(yīng)曲線相比較知:系統(tǒng)應(yīng)經(jīng)可以達(dá)到較快達(dá)到穩(wěn)態(tài)值。說明閉環(huán)單位負(fù)反饋系統(tǒng)對(duì)系統(tǒng)性能有很大改善。
5.4 PID校正
為了使系統(tǒng)能夠達(dá)到設(shè)計(jì)要求,我們可以在圖5-4前向通道上設(shè)置一個(gè)控制器構(gòu)成閉環(huán)系統(tǒng)來校正直流伺服電機(jī)。基于PID控制(閉環(huán))的直流伺服電機(jī)系統(tǒng)框圖如圖5-6所示。
圖5-6  基于PID控制(閉環(huán))的直流伺服電機(jī)系統(tǒng)框圖
其控制過程為由測速發(fā)電機(jī)輸出電壓得到直流電機(jī)輸出量,即轉(zhuǎn)速,通過轉(zhuǎn)速反饋后與系統(tǒng)輸入信號(hào)進(jìn)行比較,得到偏差信號(hào)。偏差信號(hào)作為PID控制器的輸入信號(hào)根據(jù)設(shè)定的PID控制規(guī)律計(jì)算后輸出信號(hào)U,作為控制量輸入給直流電機(jī),從而實(shí)現(xiàn)整個(gè)直流電機(jī)調(diào)速系統(tǒng)的閉環(huán)負(fù)反饋PID控制。
5.4.1 PID參數(shù)的湊試法確定
增大比例系數(shù)KP一般系統(tǒng)響應(yīng)利于減小靜差,但是過大會(huì)增大超調(diào),并產(chǎn)生震蕩,是穩(wěn)定性變壞。增大TI有減小超調(diào),減小震蕩,是系統(tǒng)更穩(wěn)定,但靜差消除變慢。增大微分TD利于加快系統(tǒng)響應(yīng)時(shí)間,使超調(diào)減小,穩(wěn)定性增加,但對(duì)擾動(dòng)的抑制能力減弱,對(duì)擾動(dòng)有較敏感的響應(yīng)。
在湊試時(shí),對(duì)參數(shù)實(shí)行下述先比例,后積分,再微分的整定步驟。
(1)首先只整定比例部分。即將比例部分由小變大,并觀察相應(yīng)的系統(tǒng)響應(yīng),直到得到反應(yīng)快,超調(diào)小的響應(yīng)曲線。如果系統(tǒng)沒有靜差或靜差已小到允許范圍內(nèi),并且響應(yīng)曲線已屬滿意,那么只需用比例控制器即可,最優(yōu)比例系數(shù)可由此確定。
(2)如果在比例調(diào)節(jié)的基礎(chǔ)下系統(tǒng)的靜差不能滿足設(shè)計(jì)要求,則須加入積分環(huán)節(jié)。整定時(shí)首先置積分時(shí)間T1為一較大值,并將經(jīng)第一步整定得到的比例系數(shù)略微縮小,然后減小積分時(shí)間,并在保持系統(tǒng)良好動(dòng)態(tài)性能的情況下,靜差得到消除。在此過程中,可根據(jù)響應(yīng)曲線的好壞反復(fù)改變比例系數(shù)與積分時(shí)間,以期得到滿意的控制過程與整定參數(shù)。
(3)若使用比例積分控制器消除了靜差,但動(dòng)態(tài)過程經(jīng)反復(fù)調(diào)整仍不能滿意,則可加入微分環(huán)節(jié),構(gòu)成比例積分微分控制器。在整定時(shí),可先置微分時(shí)間Td為零。在第二步整定的基礎(chǔ)上,增大Td,同時(shí)相應(yīng)的改變比例系數(shù)和積分時(shí)間,逐步湊試,以獲得滿意的調(diào)節(jié)效果和控制參數(shù)。
5.4.2 比例控制器校正
為能要求系統(tǒng)在特別短的時(shí)間內(nèi)達(dá)到設(shè)定的轉(zhuǎn)速值,比例增益K 應(yīng)盡可能大,以提高比例作用的強(qiáng)度,但必須同時(shí)考慮系統(tǒng)的穩(wěn)定性。采用單純的比例控制,其調(diào)整時(shí)間和超調(diào)量是一對(duì)矛盾,無法同時(shí)滿足:要縮短調(diào)整時(shí)間,K 要加大;而K 加大,超調(diào)量也同時(shí)加大了。經(jīng)過多次參數(shù)選擇,當(dāng)K。=10時(shí),階躍響應(yīng)曲線較為理想,呈現(xiàn)接近0.75衰減率的振蕩過程。
比例控制系統(tǒng)Simulink模型及仿真
圖5-7 比例控制系統(tǒng)Simulink模型
Kp=1時(shí)仿真圖
Kp=3時(shí)仿真圖
Kp=5時(shí)仿真圖
由以上三個(gè)比例控制的仿真圖可知,增大比例系數(shù)KP一般系統(tǒng)響應(yīng)利于減小靜差,但是過大會(huì)增大超調(diào),并產(chǎn)生震蕩,是穩(wěn)定性變壞。
5.4.3 比例積分控制器校正
積分控制的作用是只要系統(tǒng)存在誤差,積分控制作用就不斷地積累,輸出控制量以消除誤差,因而,只要有足夠的時(shí)間,積分控制將能完全消除誤差。在比例環(huán)節(jié)基礎(chǔ)上加入積分環(huán)節(jié),只要參數(shù)設(shè)置合適就能完全消除系統(tǒng)偏差。
比例積分控制系統(tǒng)Simulink模型
圖5-8 比例積分控制系統(tǒng)Simulink模型
Kp=1、Ki=1時(shí)仿真圖
Kp=1、Ki=3時(shí)仿真圖
Kp=5、Ki=3時(shí)仿真圖
由以上三個(gè)比例積分控制的仿真圖可知,增大TI有減小超調(diào),減小震蕩,使系統(tǒng)更穩(wěn)定,但靜差消除變慢。PI控制參數(shù)設(shè)置適當(dāng)可使系統(tǒng)靜差為零。經(jīng)多次試湊,選KI=1.
5.4.4 PID控制器校正
比例積分作用雖能是系統(tǒng)誤差為零,但系統(tǒng)動(dòng)態(tài)性能不能得到滿足。積分作用太強(qiáng)可能會(huì)使系統(tǒng)出現(xiàn)震蕩。微分控制具有超前控制能力,可抑制最大動(dòng)態(tài)偏差,改善系統(tǒng)動(dòng)態(tài)性能,提高系統(tǒng)的穩(wěn)定性。為此,在PI作用基礎(chǔ)上引入微分控制,構(gòu)成PID控制器,以使系統(tǒng)滿足穩(wěn)、準(zhǔn)、快的要求。
PID控制控制系統(tǒng)Simulink模型如圖
圖5-9 PID控制系統(tǒng)Simulink模型
Kp=1、Ki=1、Kd=0.1時(shí)仿真圖
和PI控制閉環(huán)響應(yīng)曲線相比較可知:系統(tǒng)響應(yīng)時(shí)間變短,超調(diào)變小,但仍不符合要求;
Kp=5、Ki=1、Kd=0.1時(shí)仿真圖
與KP=1、KI=1、KD=0.1時(shí)的仿真圖相比,系統(tǒng)超調(diào)和調(diào)節(jié)時(shí)間都變小,仍然不符合要求,繼續(xù)校正。需加大Kp及Ki。
Kp=12、Ki=1、Kd=0.5時(shí)仿真圖
由上曲線知此時(shí)系統(tǒng)有微量的超調(diào),進(jìn)一步加大Ki時(shí)超調(diào)為零。
Kp=12、Ki=1、Kd=0.9時(shí)仿真圖
經(jīng)過多次校正參數(shù),此時(shí)當(dāng) Kp=12、Ki=1、Kd=0.9時(shí)系統(tǒng)超調(diào)量為0,穩(wěn)態(tài)誤差為0,性能滿足設(shè)計(jì)要求,穩(wěn)定、準(zhǔn)確、快速得到了完滿的統(tǒng)一。
6.小結(jié)
控制系統(tǒng)特點(diǎn)是以單片機(jī)為控制器 ,通過鍵盤設(shè)置輸入轉(zhuǎn)速值,使得電機(jī)的轉(zhuǎn)速設(shè)置方便快捷,另外又通過軟件實(shí)現(xiàn)系統(tǒng)轉(zhuǎn)速設(shè)置范圍的保護(hù)。
    但在proteus中沒能實(shí)現(xiàn)閉環(huán)系統(tǒng)的PID控制。此缺點(diǎn)通過軟件彌補(bǔ),在MATLAB軟件中的SIMULINK中進(jìn)行了直流伺服電機(jī)的開環(huán)控制系統(tǒng)仿真,單位閉環(huán)控制系統(tǒng)仿真,閉環(huán)PI控制系統(tǒng)仿真,閉環(huán)PD控制仿真,閉環(huán)PID控制仿真能夠更好的測試和控制系統(tǒng)的性能,從而為設(shè)計(jì)事物提供了更準(zhǔn)確的性能指標(biāo)。

  1. #include "reg52.h"
  2. //#include "absacc.h"
  3. //#include "stdio.h"
  4. //#include "math.h"
  5. //#include "string.h"
  6. #define unchar unsigned char
  7. #define unint unsigned int
  8. void wdata(unchar dat);//write data function
  9. void wcom(unchar com);//write command function
  10. void delay(unchar t);//delay function
  11. sbit rw=P3^1;//rw
  12. sbit rs=P3^0;//rs
  13. sbit en=P3^2;//en
  14. #define MAX_LEN 16    // 數(shù)據(jù)最大長度
  15. #define count_M1 50000
  16. #define H_0 (65536-count_M1)/256
  17. #define L_0 (65536-count_M1)%256
  18. unchar code tab2[]={0x31,0x32,0x33,0x41,0x34,0x35,0x36,0x42,0x37,0x38,0x39,
  19.                     0x43,0x0e,0x30,0x0f,0x44};      //鍵盤求值表
  20. unchar code tab3[]={"Target Value:  "};
  21. unchar code tab4[]={" "};
  22. unchar code tab6[]={" input ERR "};
  23. unchar serial_data[MAX_LEN],serial_len=0,sure_flag=0;

  24. void wdata(unchar dat);//write data function
  25. void wcom(unchar com);//write command function
  26. void delay(unchar t);//delay function
  27. void keyscan(void);//鍵盤操作程序
  28. unchar scankey(void);//鍵盤求值程序
  29. void chushi(void);//初始化程序
  30. //void init_serial(void);//串口初始化
  31. //void uart_serial(void);//串口主程序
  32. void lcd_write(void);//液晶顯示待發(fā)送指令
  33. unchar jisuan(void);//計(jì)算結(jié)果為十進(jìn)制
  34. unint freq = 0;//頻率變量
  35. sfr16 DPTR=0x82;//申明DPTR
  36. char times=0;//計(jì)算T0中斷次數(shù)
  37. //delay function
  38. //P0=0x00;
  39. //中斷初始化
  40. void init_interrup(void)
  41.               {
  42.                 IE=0x8a;//啟用T0,T1中斷
  43.                 TMOD=0x51;//T1為計(jì)數(shù)器,T2為定時(shí)器,都采用mode1
  44.                 TH0=H_0;
  45.                 TL0=L_0;
  46.                 TH1=0;
  47.                 TL1=0;
  48.                 TR0=1;
  49.                 TR1=1;            
  50.               }
  51. void delay(unchar t)
  52.      {
  53.      unchar a,b;
  54.      for(a=0;a<t;a++)
  55.      for(b=0;b<128;b++);
  56.      }
  57. //The function for write data to LCD screen
  58. void wdata(unchar dat)
  59.      {
  60.        P1=dat;
  61.        rs=1;
  62.        rw=0;
  63.        en=0;
  64.        delay(6);
  65.        en=1;
  66.      }
  67. //The function for write command to LCD screen
  68. void wcom(unchar com)
  69.      {
  70.      P1=com;
  71.      rs=0;
  72.      rw=0;
  73.      en=0;
  74.      delay(6);
  75.      en=1;
  76.      }
  77. //初始程序
  78. void chushi(void)
  79.      {
  80.               unchar i;
  81.      wcom(0x01);
  82.      wcom(0x38);
  83.      wcom(0x0c);
  84.      wcom(0x06);
  85.               delay(4);
  86.               wcom(0x80);
  87.               delay(4);
  88.      for(i=0;i<17;i++)
  89.          {
  90.          wdata(tab3[i]);
  91.          }
  92.      wcom(0xc0);
  93.      delay(2);
  94.      }
  95. //鍵盤求值程序
  96. unchar scankey(void)
  97.    {
  98.      unchar temp,c,d;
  99.               P2=0x0f;
  100.               temp=P2;
  101.      temp=temp&0x0f;//屏蔽高四位,取列值
  102.      temp=~(temp|0xf0);//將temp中的內(nèi)容與0xf0進(jìn)行相加,最后求反可得到是那列按下
  103.      if(temp==1)
  104.          c=0;//P2.0位低電平
  105.      else if(temp==2)
  106.          c=1;//P2.1位低電平
  107.      else if(temp==4)
  108.          c=2;//P2.2位低電平
  109.      else if(temp==8)
  110.          c=3;//P2.3位低電平
  111.      else
  112.          c=0;//否則給返回值C=0
  113.      P2=0xf0;//給P2的行為高電平,以來判斷是高四為的那位為低電平
  114.      delay(1);
  115.      temp=P2;
  116.      temp=temp&0xf0;//屏蔽低四位
  117.      temp=~((temp>>4)|0xf0);//將temp中的高四位向右移動(dòng)4位,與0xf0相加,最后求反可以得到是那行按下
  118.      if(temp==1)
  119.         c=c+0;//將行P2.4的值加上列的值
  120.      else if(temp==2)
  121.         c=c+4;//將行P2.5的值加上列的值
  122.      else if(temp==4)
  123.         c=c+8;//將行P2.6的值加上列的值
  124.      else if(temp==8)
  125.         c=c+12;//將行P2.7的值加上列的值
  126.      else
  127.         c=0;
  128.               d=tab2[c];
  129.     return (d);//最后返回行加列的值
  130.    }

  131. //lcd_write function
  132. void lcd_write(void)
  133.     {
  134.               unchar write_0,write_1,jian_zhi[MAX_LEN];
  135.               for(write_0=0;write_0<MAX_LEN;write_0++)
  136.                     {
  137.                                serial_data[write_0]=0;
  138.                               }   //清空發(fā)送緩沖數(shù)組
  139.               wcom(0x0f);   // 將光標(biāo)置在oxc0處
  140.               serial_len=0;
  141.               delay(2);
  142.               while(1)     
  143.                 {
  144.               write_1=0xc0;   //光標(biāo)地址
  145.               wcom(write_1);
  146.               for(write_0=0;write_0<MAX_LEN; )   //輸入指令  最大為MAX_LEN
  147.                     {
  148.                        wcom(write_1);
  149.            P2=0x0f;                      //等待鍵盤值
  150.                                while((P2&0x0f)==0x0f);
  151.                                jian_zhi[write_0]=scankey();
  152.                                delay(1);
  153.                                P2=0x0f;
  154.                                while((P2&0x0f)!=0x0f);       //等待按鍵放松
  155.                                             if(jian_zhi[write_0]==0x0e)   //當(dāng)按一下取消鍵時(shí) 清空所有發(fā)送緩沖數(shù)組,
  156.                                         {                      //當(dāng)連續(xù)按下兩次時(shí)則取消本次通訊,退出
  157.                                                           if(write_0==0)
  158.                                                               goto write_out;
  159.                                                           else if(write_0>=1)
  160.                                                               {
  161.                                                                         write_1-=1;
  162.                                                                         wcom(write_1);
  163.                                                                         write_0-=1;
  164.                                                                         wdata(tab4[0]);
  165.                                                                         serial_data[write_0]=0;
  166.                                                                         serial_len--;
  167.                                                                         }
  168.                                                         }
  169.                                             else if(jian_zhi[write_0]==0x0f)      //確定發(fā)送的指令
  170.                                                {
  171.                                                           if(serial_len==3)
  172.                                                                       {if(serial_data[0]<2)
  173.                                                                                     sure_flag++;
  174.                                                                       else if(serial_data[0]>2);
  175.                                                                       else
  176.                                                                           {
  177.                                                                             if(serial_data[1]<5)
  178.                                                                                       sure_flag++;
  179.                                                                                       else if(serial_data[1]>5);
  180.                                                                                       else
  181.                                                                                         {
  182.                                                                                                     if(serial_data[2]<6)
  183.                                                                                                     sure_flag++;
  184.                                                                                                     else ;
  185.                                                                                                   }
  186.                                                                           }
  187.                                                                         }
  188.                                                           else
  189.                                                                       sure_flag++;                      //確定的標(biāo)志位
  190.                                                         goto write_out;                      //退出本次輸入指令
  191.                                                         }
  192.                                             else
  193.                                                {
  194.                                                         wdata(jian_zhi[write_0]);
  195.                                                         if(jian_zhi[write_0]<=0x39)
  196.                                                              serial_data[write_0]=jian_zhi[write_0]-0x30;
  197.                                                         else
  198.                                                              serial_data[write_0]=jian_zhi[write_0]-0x37;
  199.                                                         write_1++;
  200.                                                         write_0++;
  201.                                                         serial_len++;
  202.                                                         }
  203.                     }
  204.                  }
  205.     write_out :
  206.                          delay(1);
  207.     }
  208. //合并數(shù)組
  209. void serial_and(void)
  210.     {
  211.               unchar and0,and1,and2=0;
  212.               and1=serial_len/2;
  213.               for(and0=0;and0<and1;and0++)
  214.                   {
  215.                             serial_data[and0]=(serial_data[and0+and2++]<<4)|serial_data[and0+and2];
  216.                             }
  217.               }                           
  218. //鍵盤操作
  219. void keyscan(void)
  220.    {
  221.      unchar ks_0,ks_1;
  222.      delay(2);//延時(shí)去抖動(dòng)
  223.               P2=0x0f;
  224.      if((P2&0x0f)!=0x0f)//延時(shí)后在判斷一次,去除抖動(dòng)影響
  225.                   {
  226.                             ks_0=scankey(); //求鍵盤值
  227.                             P2=0x0f;
  228.                             while((P2&0x0f)!=0x0f);  //等待放松
  229.         while(ks_0==0x41)
  230.                                  {
  231.                                           switch(ks_0)
  232.                                               {
  233.                                              case 0x41 :
  234.                                                        {
  235.                                                                                     chushi();
  236.                                                                                     lcd_write();   //調(diào)用寫指令程序
  237.                                                                            if((sure_flag==1)&&(serial_len<=3)&&(jisuan()<256))
  238. //發(fā)送指令的條為確認(rèn)發(fā)送標(biāo)志sure_flag=1&&本次發(fā)送指令的個(gè)數(shù)erial_len=6
  239.                                                 {
  240.                                        sure_flag=0;  //清除確定標(biāo)志
  241.                                                                                                   //serial_and();//合并數(shù)組
  242.                                                                                     //              serial_len/=2;
  243.                                                 // uart_serial();//調(diào)用發(fā)送指令程序
  244.                                                                                     //              P0=serial_data[0];
  245.                                                                                                   P0=jisuan();
  246.                                                                                     //              P0=255;
  247.                                                                                                   }
  248.                                                                                       else
  249.                                                                                           {
  250.                                                                                           wcom(0xc0);
  251.                                for(ks_0=0;ks_0<10;ks_0++)
  252.                                  {
  253.                                   wdata(tab6[ks_0]);
  254.                                  }                           
  255.                                                                                                         for(ks_0=0;ks_0<10;ks_0++)
  256.                                            {
  257.                                  delay(250);
  258.                                            }
  259.                                                   }
  260.                                                                                       delay(1);
  261.                                                                                     }break;
  262.                default :
  263.                                                       break;
  264.                                               }
  265.                                           ks_0=0;
  266.                                 }
  267.          sure_flag=0;
  268.                             serial_len=0;
  269.                    chushi();        //初始化,等待下一次發(fā)送指令
  270.                             wcom(0xc0);  
  271.                    for(ks_1=0;ks_1<MAX_LEN;ks_1++)    //清空發(fā)送緩沖數(shù)組
  272.                        serial_data[ks_1]=0;
  273.        }
  274.    }
  275. // 求取輸入值轉(zhuǎn)換為十進(jìn)制
  276. unchar jisuan(void)
  277. {
  278. unchar jieguo;
  279. if(serial_len==3)
  280. jieguo=serial_data[0]*100+serial_data[1]*10+serial_data[2];
  281. else if(serial_len==2)
  282. jieguo=serial_data[0]*10+serial_data[1];
  283. else if(serial_len==1)
  284. jieguo=serial_data[0];
  285. else ;
  286. ……………………

  287. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
直流伺服電機(jī)控制系統(tǒng)設(shè)計(jì)62701844.doc (605.31 KB, 下載次數(shù): 142)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:579411 發(fā)表于 2019-12-14 18:59 | 只看該作者
我來學(xué)習(xí)下,剛好做這個(gè)題目
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜影院官网 | 国产精品国产三级国产aⅴ无密码 | 激情视频中文字幕 | 日本在线综合 | 国产精品久久一区二区三区 | 亚洲欧美综合精品久久成人 | 亚洲一区二区三区视频 | 在线观看av免费 | 91n成人| 自拍亚洲 | www.亚洲国产精品 | 精品一区二区三区四区外站 | 欧美日韩精品国产 | 国产成都精品91一区二区三 | 欧洲色 | www.久草.com| 亚洲精品中文字幕在线观看 | 欧美 日韩 国产 成人 在线 91 | 欧美一区二区三区精品免费 | 亚洲欧美日韩一区二区 | 九九热免费在线观看 | 综合激情av| 国产成人精品a视频一区www | 国产成人自拍一区 | 欧美性久久 | 91视频在线观看 | 午夜久久av | 欧美亚洲一区二区三区 | 中文字幕av亚洲精品一部二部 | 美国一级黄色片 | 欧美精品一区免费 | 欧洲高清转码区一二区 | 天天爽夜夜骑 | 欧美在线综合 | 麻豆国产一区二区三区四区 | 日韩国产欧美一区 | 国产九九九九 | 国产精品精品久久久 | 91社区在线观看播放 | 国产99久久精品一区二区永久免费 | 国产日韩av一区二区 |