這是項(xiàng)目相關(guān)文檔,基于AT86C52設(shè)計(jì)關(guān)于直流伺服電機(jī)調(diào)速的
【項(xiàng)目目標(biāo)】: 1、知識(shí)目標(biāo): 掌握直流伺服電動(dòng)機(jī)工作原理 ,掌握直流伺服電動(dòng)機(jī)的特性 ,掌握直流伺服電動(dòng)機(jī)的調(diào)速控制方法 。 2、能力目標(biāo): 要求會(huì)通過(guò)數(shù)字邏輯芯片或者單片機(jī)技術(shù)設(shè)計(jì)該直流伺服電機(jī)的驅(qū)動(dòng)電路。 【重點(diǎn)難點(diǎn)】 1、重點(diǎn):直流伺服電機(jī)的工作原理及其驅(qū)動(dòng)電路設(shè)計(jì) 2、難點(diǎn):直流電機(jī)的驅(qū)動(dòng)電路設(shè)計(jì) 【相關(guān)知識(shí)】 本設(shè)計(jì)要求用單片機(jī)實(shí)現(xiàn)直流電機(jī)(學(xué)生自由選擇)的驅(qū)動(dòng)調(diào)速控制,學(xué)生在項(xiàng)目進(jìn)行前,有必要重新學(xué)習(xí)單片機(jī)課程。為了加快項(xiàng)目進(jìn)度,可以選用本院學(xué)生普遍學(xué)習(xí)的AT89C51單片機(jī)為核心控制模塊。 【項(xiàng)目實(shí)施】 一、項(xiàng)目任務(wù): 1.實(shí)現(xiàn)對(duì)電機(jī)的啟動(dòng)、停止、加速、減速、正轉(zhuǎn)、反轉(zhuǎn)的控制; 2.通過(guò)編碼器實(shí)現(xiàn)對(duì)電機(jī)速度的檢測(cè); 3.實(shí)現(xiàn)對(duì)電機(jī)實(shí)時(shí)速度的顯示; 4.設(shè)計(jì)電機(jī)驅(qū)動(dòng)的硬件電路; 5.編制驅(qū)動(dòng)電機(jī)的單片機(jī)控制程序; 6.要求電機(jī)穩(wěn)態(tài)工作性能好,電機(jī)速度可調(diào)范圍寬至少達(dá)到 0-1200r/min 二、項(xiàng)目實(shí)施: 1、制訂方案(2人一組),要求每小組方案盡量不同,如有雷同,視作抄襲 小組討論初步擬定實(shí)施方案。各小組查閱相關(guān)資料,制定各自的可行性方案。教師提供基本設(shè)計(jì)方案,如圖1,學(xué)生可在此基礎(chǔ)上擴(kuò)展其功能。 圖1 基本設(shè)計(jì)方案 2、確定方案: 各小組交流、評(píng)價(jià)各個(gè)方案的優(yōu)缺點(diǎn),確定實(shí)施方案。 3、實(shí)施方案: 方案實(shí)施的基本技術(shù)路線如圖2所示。各小組可根據(jù)教師提供的基本技術(shù)路線,適時(shí)調(diào)整各自的計(jì)劃進(jìn)度。由于時(shí)間和硬件條件限制,只需做到PROTEUS聯(lián)合仿真即可,有條件有興趣的同學(xué)可以完成整個(gè)方案的設(shè)計(jì)。可利用面包板、也可以利用PCB制版。 圖2基本技術(shù)路線圖 【項(xiàng)目評(píng)價(jià)】 1、成果展示 每個(gè)項(xiàng)目都要求學(xué)生以團(tuán)隊(duì)的形式完成項(xiàng)目所要求的任務(wù),在對(duì)每個(gè)團(tuán)隊(duì)的項(xiàng)目進(jìn)行驗(yàn)收和總結(jié)時(shí),以大賽的形式評(píng)價(jià)學(xué)生團(tuán)隊(duì)的作品來(lái)調(diào)動(dòng)學(xué)生的積極性。學(xué)生在項(xiàng)目作品展示時(shí),與同類(lèi)作品進(jìn)行比較,展示自己的優(yōu)勢(shì)并發(fā)現(xiàn)不足,這比課堂上教師單純的教授知識(shí)點(diǎn)更具有說(shuō)服力。 2、過(guò)程評(píng)價(jià) 每個(gè)項(xiàng)目的課程大賽成績(jī)可作為成績(jī)考核的主要依據(jù),比賽采取現(xiàn)場(chǎng)實(shí)操測(cè)試、答辯的形式,根據(jù)學(xué)生表現(xiàn)分配一定的分值。同時(shí),采取學(xué)生項(xiàng)目作品互評(píng)形式,每個(gè)完成項(xiàng)目的學(xué)生可以對(duì)分配到的3-5個(gè)作品進(jìn)行綜合評(píng)價(jià),綜合評(píng)價(jià)結(jié)果可以分配一定的比例分值。在項(xiàng)目實(shí)施過(guò)程中,建立學(xué)生項(xiàng)目過(guò)程自評(píng)表,作為成績(jī)?cè)u(píng)定的一項(xiàng)依據(jù)。 學(xué)生項(xiàng)目過(guò)程自評(píng)表 | 學(xué)科:控制電機(jī) 項(xiàng)目名稱(chēng):直流電機(jī)驅(qū)動(dòng)控制系統(tǒng)設(shè)計(jì) 班級(jí): 姓名: | | | | | | | | | | | | |
|
|
|
|
|
|
|
|
|
| |
| |
|
【項(xiàng)目總結(jié) 】 通過(guò)本次項(xiàng)目訓(xùn)練,可以讓同學(xué)們受益匪淺。一方面,學(xué)生將課堂上的理論知識(shí)應(yīng)用到了實(shí)際,加強(qiáng)鞏固了理論知識(shí),也提高了實(shí)際動(dòng)手能力,通過(guò)實(shí)踐反饋,又了解到學(xué)生自身知識(shí)面的不足。另一方面,在實(shí)驗(yàn)過(guò)程中,遇到問(wèn)題時(shí)候,各個(gè)小組列出可能問(wèn)題,一一進(jìn)行排查,找出問(wèn)題的所在,隊(duì)員之間分工明確,團(tuán)結(jié)合作,本次訓(xùn)練正是通過(guò)隊(duì)員之間的合作實(shí)現(xiàn)的。通過(guò)項(xiàng)目驅(qū)動(dòng)形式,要求學(xué)生能綜合運(yùn)用控制電機(jī)、單片機(jī)技術(shù)、PLC技術(shù)、Protues等課程的基本知識(shí),進(jìn)行融會(huì)貫通的獨(dú)立思考,充分調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性和參與性。 【項(xiàng)目拓展】 (1)應(yīng)用專(zhuān)用運(yùn)動(dòng)控制器LM629,結(jié)合單片機(jī)組成控制系統(tǒng)。 (2)加上一定的輕型負(fù)載,驗(yàn)證驅(qū)動(dòng)系統(tǒng)的帶負(fù)載能力。 案例僅為參考 直流電機(jī)調(diào)速系統(tǒng)設(shè)計(jì)案例報(bào)告 一、前言 在所有的機(jī)電設(shè)備當(dāng)中,直流電動(dòng)機(jī)具有優(yōu)良的調(diào)速特性,調(diào)速平滑,方便,調(diào)速范圍廣,過(guò)載能力大,能承受頻繁的沖擊負(fù)載,可實(shí)現(xiàn)頻繁的無(wú)級(jí)快速起動(dòng)、制動(dòng)和反轉(zhuǎn);能滿足生產(chǎn)過(guò)程中自動(dòng)化系統(tǒng)各種不同的特殊運(yùn)行要求。傳統(tǒng)的晶閘管直流調(diào)速系統(tǒng),其控制叫路是基于模擬器件沒(méi)計(jì)的,這使得控制電路的硬件設(shè)備極其復(fù)雜,安裝調(diào)試?yán)щy,相對(duì)故障牢高。電動(dòng)機(jī)調(diào)速系統(tǒng)采用微機(jī)實(shí)現(xiàn)自動(dòng)控制,是電氣傳動(dòng)發(fā)展的主要方向之一。本文設(shè)計(jì)了一種基于單片機(jī)的直流電機(jī)脈寬調(diào)速控制系統(tǒng),其控制方案依靠軟件實(shí)現(xiàn)。采樣、觸發(fā)、控制均采用數(shù)字處理,避免了模擬控制電路對(duì)元件參數(shù)的影響,且參數(shù)調(diào)整簡(jiǎn)單方便,簡(jiǎn)化了系統(tǒng),提高了電機(jī)工作穩(wěn)定性,延長(zhǎng)了系統(tǒng)使用壽命。采用微機(jī)控制后,整個(gè)調(diào)速系統(tǒng)體積小、結(jié)構(gòu)簡(jiǎn)單、可靠性高、操作維護(hù)方便,電動(dòng)機(jī)穩(wěn)態(tài)運(yùn)轉(zhuǎn)時(shí)轉(zhuǎn)速精度可達(dá)到較高水平,靜動(dòng)態(tài)各項(xiàng)指標(biāo)均能較好地滿足工業(yè)生產(chǎn)中高性能電氣傳動(dòng)的要求。直流凋速技術(shù)已廣泛戍用于現(xiàn)代工業(yè)、航天等各個(gè)領(lǐng)域。 二、總體方案設(shè)計(jì)
對(duì)于同一個(gè)研究的系統(tǒng),根據(jù)不同的要求和精確度,所用到的方案也不一樣,作出的具體要求如下: 1.實(shí)現(xiàn)對(duì)電機(jī)的啟動(dòng)、停止、加速、減速、正轉(zhuǎn)、反轉(zhuǎn)的控制; 2.通過(guò)編碼器實(shí)現(xiàn)對(duì)電機(jī)速度的檢測(cè); 3.實(shí)現(xiàn)對(duì)電機(jī)實(shí)時(shí)速度的顯示; 4.設(shè)計(jì)電機(jī)驅(qū)動(dòng)的硬件電路; 5.編制驅(qū)動(dòng)電機(jī)的單片機(jī)控制程序; 6.要求電機(jī)穩(wěn)態(tài)工作性能好,電機(jī)速度可調(diào)范圍寬至少達(dá)到0-1200r/min 。 
通過(guò)軟件產(chǎn)生PWM信號(hào),并由P3.2輸出,經(jīng)過(guò)驅(qū)動(dòng)電路處理后供給直流電機(jī),從而使直流電機(jī)在脈沖高電平時(shí)電得電,在低電平的時(shí)候失電。程序上通過(guò)使用延時(shí)模塊使得單片機(jī)在不同的時(shí)間段輸出不同的電平。啟動(dòng)單片機(jī),整個(gè)系統(tǒng)進(jìn)入準(zhǔn)備狀態(tài)。按下電路板上的啟動(dòng)按鍵后,根據(jù)驅(qū)動(dòng)路中由四個(gè)三極管構(gòu)成的橋式電路的特點(diǎn),當(dāng)P2.4和P2.5為高電平,P2.6和P2.7為低電平時(shí)電機(jī)正;反之當(dāng)P2.4和P2.5為低電平,P2.6和P2.7為高電平時(shí)電機(jī)反轉(zhuǎn)。根據(jù)加速和減速鍵,調(diào)整P3.2輸出脈沖的高低電平時(shí)的初始值,從而可以控制P3.2輸出高低電平時(shí)的占空比,進(jìn)而控制直流電機(jī)的轉(zhuǎn)速。 圖 1 系統(tǒng)控制簡(jiǎn)圖 三、 硬件電路設(shè)計(jì) 結(jié)合以往的設(shè)計(jì)經(jīng)驗(yàn),根據(jù)單片機(jī)系統(tǒng)的特點(diǎn),針對(duì)硬件電路的設(shè)計(jì)作出以下兩點(diǎn)要求:(1)考慮到可以盡可能地簡(jiǎn)化電路,應(yīng)該盡可能使用集成度高功能性強(qiáng)的芯片;(2)考慮到電路修改優(yōu)化的情況要留有將來(lái)修改擴(kuò)展的余地。(一)單片機(jī)最小系統(tǒng)的設(shè)計(jì)單片機(jī)的最小系統(tǒng):所謂的單片機(jī)最小系統(tǒng)指的是由單片機(jī)和一些基本的外圍電路所組成的一個(gè)可以工作的單片機(jī)系統(tǒng)。需要在單片機(jī)18,19引腳之間連接晶振,并且在晶振兩邊分別并聯(lián)一個(gè)22UF的電容;另外還包括在單片機(jī)的復(fù)位引腳通過(guò)開(kāi)關(guān)再接到地構(gòu)成復(fù)位電路。通常來(lái)說(shuō),它包括單片機(jī),復(fù)位電路和時(shí)鐘電路。 1.微處理器選擇及硬件介紹圖2 STC89C52單片機(jī)引腳圖 如圖2所示89C52單片機(jī)一共有40個(gè)引腳,其中20引腳和40引腳分別接地和接電源VCC,以提供合適的電壓給單片機(jī)工作。P0 ,P1,P2,P3這四組端口每一組都具有0到7號(hào)8個(gè)I\O口,一共是32個(gè),這32個(gè)端口可以作為單片機(jī)的輸入端也可以作為它的輸出端,每一組端口的具體功能作用都有相同的部分也有不同之處,詳細(xì)的用法如下:
P0口(P0.0——P0.7):它們屬于單片機(jī)上的39到32引腳,是雙向8位的三態(tài)輸入輸出口,每一個(gè)端口都可以獨(dú)立使用,在這次的設(shè)計(jì)中,P0口就是用作了驅(qū)動(dòng)LED數(shù)碼管(分別接在了數(shù)碼管的8個(gè)陽(yáng)極)。
P1口(P1.1——P1.7):它們屬于單片機(jī)上的1腳到8腳,這8個(gè)端口也是可以獨(dú)立使用,但是這跟P0口有點(diǎn)不同,就是每一個(gè)端口內(nèi)部已經(jīng)接上了上拉電阻,使得端口的輸出沒(méi)有高阻態(tài),輸入也沒(méi)有鎖存功能,所以說(shuō)這并不是我們常說(shuō)的輸入輸出口,而是作為“準(zhǔn)雙向端口”。正是這些區(qū)別使得P1口的作用跟P0口有很大的區(qū)別。在本次的設(shè)計(jì)中P1.0到P1.3是用作驅(qū)動(dòng)四個(gè)指示燈,而P1.4到P1.7是連接到了4個(gè)按鍵,用以把按鍵的信號(hào)輸入給單片機(jī)。
P2口(P2.0——P2.7):它們屬于單片機(jī)上的21到28引腳,P2口跟P1口很相似,都是內(nèi)接上拉電阻,作為“準(zhǔn)雙向端口”,可以獨(dú)立使用。在本次的設(shè)計(jì)中,P2.0到P2.3分別接到了四位數(shù)碼管的四個(gè)位選端口,而P2.4到P2.7則作為輸出接到橋式電路的四個(gè)控制端,通過(guò)單片機(jī)實(shí)現(xiàn)控制電機(jī)的正反轉(zhuǎn)。
另外89C52單片機(jī)的外部引腳中還有幾個(gè)是比較普遍要用到的,例如:
第9引腳的復(fù)位引腳RST,該引腳是用于單片機(jī)的復(fù)位初始化,當(dāng)該引腳輸入連續(xù)兩個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就會(huì)自動(dòng)的復(fù)位,所謂的復(fù)位就是,單片機(jī)從頭開(kāi)始執(zhí)行程序
第18,19引腳:這兩個(gè)引腳為單片機(jī)的時(shí)鐘輸入引腳,兩腳之間可接石英晶體或者振蕩電容(在本次設(shè)計(jì)中這兩個(gè)引腳接上的是頻率為12M的晶振,而在晶振的兩邊需要分別并聯(lián)一個(gè)22PF的電容,以幫助起振)
第20引腳:為程序存儲(chǔ)器允許輸出控制端,當(dāng)內(nèi)部ROM讀取時(shí), 程序存儲(chǔ)器允許輸出控制端不動(dòng)作:外部ROM讀取時(shí),在每個(gè)機(jī)器周期會(huì)動(dòng)作兩次;當(dāng)外部RAM讀取時(shí),兩個(gè)脈沖會(huì)被跳過(guò)不會(huì)輸出;外接ROM時(shí),與ROM的OE腳相接。 2 .復(fù)位電路及時(shí)鐘電路維持單片機(jī)最小系統(tǒng)運(yùn)行的基本模塊包括復(fù)位電路和時(shí)鐘電路。復(fù)位電路通常分為兩種:上電復(fù)位和手動(dòng)復(fù)位,如圖3,圖4所示。 
圖3 上電復(fù)位 圖4 手動(dòng)復(fù)位 比較上電復(fù)位與手動(dòng)復(fù)位兩種方式的優(yōu)缺點(diǎn)時(shí),考慮到系統(tǒng)在運(yùn)行的過(guò)程中有時(shí)會(huì)出現(xiàn)程序跑飛的情況,所以在程序的開(kāi)發(fā)過(guò)程中,一般都需要手動(dòng)復(fù)位。在這次設(shè)計(jì)同樣也是選用手動(dòng)復(fù)位。 給單片機(jī)提供較高頻率的時(shí)鐘信號(hào)可以使單片機(jī)的處理速度更快,處理事情的效率也相應(yīng)的提高,但是伴之帶來(lái)的是更大的功耗和更惡烈的工作環(huán)境,太高的時(shí)鐘頻率有可能會(huì)影響到系統(tǒng)的工作穩(wěn)定性?紤]到在本系統(tǒng)中單片機(jī)只是用作控制,而不是用于高速信號(hào)的采樣處理,所以只需要采用合適頻率的晶振即可。合適頻率的晶振對(duì)于選頻信號(hào)強(qiáng)度準(zhǔn)確度都有好處,本次設(shè)計(jì)選取接入XTAL1和XTAL2引腳的是12.000M無(wú)源晶振。并且在晶振兩邊分別并聯(lián)2個(gè)22pF陶瓷電容幫助起振。 最小系統(tǒng)如圖5所示:
圖5 最小系統(tǒng) (二) 直流電機(jī)驅(qū)動(dòng)電路設(shè)計(jì) 因?yàn)閱纹瑱C(jī)P3口輸出的電壓最高才有5V,難以直接驅(qū)動(dòng)直流電機(jī)。所以我們需要先把PWM信號(hào)通過(guò)一個(gè)三極管放大后才能驅(qū)動(dòng)直流電機(jī)。驅(qū)動(dòng)電路如圖3.5所示,其中Q1和Q3都是NPN型三極管,而Q2和Q4都是PNP型三極管,Q1,Q2,Q3,Q4四個(gè)三極管共同構(gòu)成了一個(gè)橋式電路,而Q0構(gòu)成放大電路,把PWM信號(hào)放大到可以驅(qū)動(dòng)直流電機(jī)。當(dāng)P2.4和P2.5為高電平,P2.6和P2.7為低電平時(shí),PWM信號(hào)經(jīng)過(guò)三極管Q0的放大之后,從Q1端流向Q4端,實(shí)現(xiàn)了電機(jī)正;反之當(dāng)P2.4和P2.5為低電平,P2.6和P2.7為高電平時(shí)PWM信號(hào)放大后從Q3端流向Q2,實(shí)現(xiàn)了電機(jī)反轉(zhuǎn)。
 圖6 驅(qū)動(dòng)電路 (三) 7805穩(wěn)壓電源電路圖
為了使整個(gè)系統(tǒng)能夠順利穩(wěn)定的工作,所以必需要使各個(gè)元器件都能穩(wěn)定正常地工作,為此提供一個(gè)穩(wěn)定的直流電源是基本的保證,利用芯片LM7805很容易就可以構(gòu)成穩(wěn)壓電源電路,可以實(shí)現(xiàn)這個(gè)功能。
芯片 LM7805是具有三個(gè)端腳的正電源穩(wěn)壓電路,一個(gè)管腳接地,另外兩個(gè)分別是輸入電壓端和輸出電壓端。利用它可以輸出一系列固定值的電壓,而7805的封裝是TO-220.由于芯片7805的內(nèi)部電流有所限制,并且還具有過(guò)熱保護(hù)和 安全工作區(qū)保護(hù),所以一般情況下是不會(huì)損壞的,在提供足夠的散熱片的情況下,芯片甚至能提供大于1.5A的輸出電流。在這次設(shè)計(jì)中主要是利用7805芯片的穩(wěn)壓電路把電源12V的電壓轉(zhuǎn)化成5V的穩(wěn)定電壓輸出。如圖7即為利用芯片7805所設(shè)計(jì)的穩(wěn)壓電源電路(輸入電壓VCC為12V,而輸出的穩(wěn)定電壓為5V)  圖7 穩(wěn)壓電源電路圖
(四)顯示模塊設(shè)計(jì)在本設(shè)計(jì)課題中采用的是4位7段共陰極LED數(shù)碼管,它的引腳圖如圖8所示。 七段數(shù)碼管是用七段發(fā)光二極管來(lái)顯示數(shù)學(xué)0到9,加外還有一根發(fā)光二極管是用來(lái)顯示小數(shù)點(diǎn),其中數(shù)碼管可以分為共陰極和共陽(yáng)極兩種,共陰極指的是把數(shù)碼管里面的發(fā)光二極管的陰極全部接在一起(接到地),當(dāng)發(fā)光二極管的另一端接到高電平的時(shí)候,數(shù)碼管中相對(duì)應(yīng)的二極管就會(huì)發(fā)光,正是應(yīng)用這個(gè)原理,可以先把數(shù)碼管的8個(gè)輸入端進(jìn)行編譯,只要控制這8個(gè)輸入端就可以把所要顯示的內(nèi)容,實(shí)時(shí)顯示出來(lái)。在這次設(shè)計(jì)中所要用到的是四位數(shù)碼管,所以除了這8個(gè)控制顯示數(shù)字的輸入外,還有4位輸入用來(lái)選擇顯示哪一位數(shù)碼管工作,通過(guò)位選和段選就可以完美的實(shí)現(xiàn)直流電機(jī)的實(shí)時(shí)速度顯示。用于線選的8位輸入直接接到單片機(jī)的輸出端的情況下,由于單片機(jī)輸出高電平時(shí),用于驅(qū)動(dòng)數(shù)碼管時(shí)需要接上拉電阻,因?yàn)樾枰蘖鳎乐闺娏鬟^(guò)大,但是如果上拉電阻過(guò)大的話會(huì)造成數(shù)碼管的顯示比較暗,經(jīng)過(guò)綜合考慮上拉電阻為1K即可。 其連接圖如圖8所示。
圖8 7段共陰極LED連接圖 (五)鍵盤(pán)電路設(shè)計(jì)啟停、正反轉(zhuǎn)、加速、減速四個(gè)開(kāi)關(guān)分別與單片機(jī)的P1.4,P1.5,P1.6,P1.7,相連接,然后再與地相連。啟停是用于實(shí)現(xiàn)直流電機(jī)的啟動(dòng)與停止轉(zhuǎn)動(dòng),正反轉(zhuǎn)實(shí)現(xiàn)的是直流電機(jī)的正轉(zhuǎn)和反轉(zhuǎn),加速實(shí)現(xiàn)直流電機(jī)的加速功能,減速實(shí)現(xiàn)直流電機(jī)的減速功能,為了電路的精簡(jiǎn)性,在設(shè)計(jì)硬件電路鍵盤(pán)的時(shí)候把正反轉(zhuǎn),啟到停止這兩組功能分別集成在兩個(gè)不同的按鍵上(S1為啟停功能,S2為正反轉(zhuǎn)功能)其電路如圖9所示。  圖9 按鍵電路 (六) 硬件電路總圖圖10為硬件電路的原理圖

圖10 硬件電路的原理圖
如圖11為硬件電路的PCB電路圖 圖11 硬件電路的PCB電路圖 四、 軟件編程 設(shè)計(jì)采用了模塊化的編程方法,把整個(gè)作品系統(tǒng)分為驅(qū)動(dòng)模塊,顯示模塊,測(cè)速模塊,調(diào)速模塊,按鈕掃描等幾個(gè)部分,在設(shè)計(jì)程序的時(shí)候先把每一個(gè)模塊的流程圖畫(huà)出來(lái),再根據(jù)流程圖編寫(xiě)程序,把每個(gè)模塊的功能獨(dú)立的實(shí)現(xiàn)好,再把各個(gè)模塊的程序連起來(lái),實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。 
在主程序的設(shè)計(jì)中要合理地調(diào)用各模塊程序。模塊化設(shè)計(jì)的優(yōu)點(diǎn)是:無(wú)論是硬件還是軟件,每一個(gè)模塊都相對(duì)獨(dú)立,故能獨(dú)立地進(jìn)行設(shè)計(jì)、研制、調(diào)試和修改,從而使復(fù)雜的工作得以簡(jiǎn)化。模塊之間的相互獨(dú)立也有助于研制任務(wù)的分解和設(shè)計(jì)人員之間的分工合作,這樣可提高工作效率和儀表的研制速度。其總體流程圖如圖12所示 。圖12 軟件設(shè)計(jì)流程圖 (一)PWM波軟件設(shè)計(jì)通過(guò)程序執(zhí)行的延時(shí)來(lái)實(shí)現(xiàn)PWM的產(chǎn)生,當(dāng)變量CNT不為0時(shí),PWM為高電平,當(dāng)CNT自減為0后,開(kāi)始輸出低電平(TEMP開(kāi)始自減),當(dāng)TEMP自減到0時(shí),重新輸出高電平,就是通過(guò)對(duì)變量PWMCNT的控制實(shí)現(xiàn)了脈沖寬度的調(diào)整: 定義 OutPutPWM(u8 cnt)子程序 void OutPutPWM(u8 cnt) { u8 temp; temp=RESOLUTION-cnt; while(cnt--)PWM=0;//高電平部分 while(temp--)PWM=1;//低電平部分 }
輸出PWM脈沖的程序?yàn)椋?/font> if(power)OutPutPWM(pwmcnt); else PWM=1;
(二) 電機(jī)啟停,正反轉(zhuǎn),加速,減速的軟件設(shè)計(jì)
直流電機(jī)的正反轉(zhuǎn)可以通過(guò)純軟件就可以實(shí)現(xiàn)了,但是考慮到個(gè)人的能力問(wèn)題,如果是用純硬件來(lái)實(shí)現(xiàn)的話,對(duì)程序的能力就要更高一點(diǎn),對(duì)我本人而言這是一個(gè)難題,所以在設(shè)計(jì)硬件電路的時(shí)候,針對(duì)這個(gè)問(wèn)題,設(shè)計(jì)了一個(gè)橋式電路,有了該電路,程序上只要簡(jiǎn)單的控制橋式電路的四個(gè)控制端就可了。
變量key=Key_Scan(),通過(guò)子程序Key_Scan()對(duì)啟停,正反轉(zhuǎn),加速,減速,四個(gè)按鍵進(jìn)行掃描,然后將掃描后的值賦給KEY,再根據(jù)Switch(key)程序?qū)崿F(xiàn)電機(jī)啟停,正反轉(zhuǎn),加速,減速的控制。
Switch(key) { case 0:break; case 1://啟?刂 power=!power; if(power)LED1=0; else { LED1=1; MotorCtrl(0); } break; case 2://正反轉(zhuǎn)控制 direct=!direct; if(direct) { LED2=0;LED3=1; MotorCtrl(1); } else { LED2=1;LED3=0; MotorCtrl(2); } break; case 3://加速控制 if(pwmcnt<RESOLUTION)pwmcnt++; value=pwmcnt; break;
case 4://減速控制 if(pwmcnt>0)pwmcnt--; value=pwmcnt; break;
default:break; } 
圖13 直流電機(jī)啟停 正反轉(zhuǎn) 加速 減速程序設(shè)計(jì)流程圖 (三) 電機(jī)速度的計(jì)算方法
在檢測(cè)直流電機(jī)的速度上,有兩種方法可以實(shí)現(xiàn),一種是利用霍爾元件,另一種是利用編碼器。選用霍爾元件測(cè)速的原理是根據(jù)霍爾元件屬于帶有磁性的元件,當(dāng)電機(jī)轉(zhuǎn)動(dòng)的時(shí)候,霍爾元件會(huì)產(chǎn)生相應(yīng)的輸出信號(hào),把這個(gè)信號(hào)整理之后形成矩形脈沖信號(hào),再把這個(gè)信號(hào)輸給單片機(jī),經(jīng)單片機(jī)計(jì)數(shù)器計(jì)數(shù)處理,便可得到電機(jī)的轉(zhuǎn)速。對(duì)比兩種方法,個(gè)人覺(jué)得選用編碼器更加適合我,因?yàn)槲覍?duì)編碼器測(cè)速比較熟悉。本次設(shè)計(jì)選用的是334線編碼器,直流電機(jī)每轉(zhuǎn)一圈,編碼器便產(chǎn)生334個(gè)脈沖,經(jīng)過(guò)處理可以整形為矩形脈沖。通過(guò)對(duì)編碼器采集到的信號(hào)進(jìn)行處理后,將處理后的脈沖信號(hào)從編碼器輸出到單片機(jī),通過(guò)用計(jì)數(shù)器對(duì)輸出脈沖進(jìn)行計(jì)數(shù),單片機(jī)計(jì)算每半秒時(shí)間內(nèi)接收到的脈沖個(gè)數(shù)N,根據(jù)N乘以120再除以碼盤(pán)數(shù)就可以求出此時(shí)直流電機(jī)的轉(zhuǎn)速是多少了。
if(a==50) //50次中斷等于0.5S
{
zhuansu=(TH1*256+TL1)/334*120; //每分鐘轉(zhuǎn)速等于T1一秒計(jì)數(shù)脈沖值乘60秒除以碼盤(pán)數(shù)
TL1=0; //定時(shí)器重新賦初值,從0開(kāi)始計(jì)數(shù) TH1=0; a=0; //a置0,為下一秒開(kāi)始計(jì)數(shù)賦值 }(四) 電機(jī)速度的顯示1.共陰極七段數(shù)碼管的編碼
共陰極數(shù)碼管的8個(gè)段選位需要編碼后才方便顯示,經(jīng)過(guò)分析便可以得到如下段碼數(shù)據(jù)組:
uchar duan_code[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//段碼數(shù)據(jù)組0---9
2.定義電機(jī)的顯示子程序void display(uint zhuansu) void display(uint zhuansu) { P0=duan_code[zhuansu/1000]; //顯示千位數(shù)值 P1=wei_code[0]; //點(diǎn)亮第一位數(shù)碼管 delay_ms(3); //延時(shí),給數(shù)碼管一定的顯示時(shí)間 P0=duan_code[zhuansu%1000/100]; //顯示百位數(shù)值 P1=wei_code[1]; //點(diǎn)亮第二位數(shù)碼管 delay_ms(3); //延時(shí),給數(shù)碼管一定的顯示時(shí)間 P0=duan_code[zhuansu%1000%100/10]; //顯示十位數(shù)值 P1=wei_code[2]; //點(diǎn)亮第三位數(shù)碼管 delay_ms(3); //延時(shí),給數(shù)碼管一定的顯示時(shí)間 P0=duan_code[zhuansu%10]; //顯示個(gè)位數(shù)值 P1=wei_code[3]; //點(diǎn)亮第四位數(shù)碼管 delay_ms(3); //延時(shí),給數(shù)碼管一定的顯示時(shí)間 }
圖14所示是數(shù)碼管顯示模塊的程序設(shè)計(jì)流程圖。 圖14 數(shù)碼管顯示流程圖
系統(tǒng)的調(diào)試屬于整個(gè)設(shè)計(jì)的最后一個(gè)環(huán)節(jié),但是卻十分的重要,在這個(gè)環(huán)節(jié)可以把整個(gè)系統(tǒng)中的不足之處通過(guò)修正改進(jìn)達(dá)到正常,因?yàn)檐浖布加锌赡軙?huì)出現(xiàn)問(wèn)題,所以必需把軟件調(diào)試跟硬件調(diào)試分開(kāi)來(lái)完成,這樣更加有利于發(fā)現(xiàn)問(wèn)題的所在和有針對(duì)性的解決問(wèn)題。硬件的調(diào)試主要是檢測(cè)電路板有沒(méi)有短路現(xiàn)象或者接線接錯(cuò)了。嚴(yán)重一點(diǎn)的話會(huì)出現(xiàn)功能上的錯(cuò)誤,這些問(wèn)題都會(huì)影響到整個(gè)系統(tǒng)的功能,所以硬件調(diào)試必需首先進(jìn)行,在確保硬件電路沒(méi)問(wèn)題的情況下再寫(xiě)程序和修改程序。至于軟件調(diào)試的話,需要分模塊來(lái)進(jìn)行,這次設(shè)計(jì)一共有驅(qū)動(dòng)模塊,顯示模塊,測(cè)速模塊,還有就是各指示燈的指示功能,在編寫(xiě)程序或者修改程序的時(shí)候必需要根據(jù)模塊來(lái)修改,這樣才會(huì)有針對(duì)性和效率。確保系統(tǒng)的穩(wěn)定正常運(yùn)行。
(一)硬件調(diào)試 這次設(shè)計(jì)所用到的硬件電路是用Protel軟件畫(huà)好原理圖和PCB電路,然后寄到其他專(zhuān)業(yè)做版的公司做出來(lái)的電路版,經(jīng)過(guò)硬件調(diào)試,發(fā)現(xiàn)板還是出現(xiàn)了一點(diǎn)問(wèn)題,在畫(huà)圖的時(shí)候由于過(guò)于粗心,在畫(huà)PCB版的時(shí)候把PNP三極管和NPN三極管的封裝調(diào)亂了,等到電路版做出來(lái)了,用程序測(cè)試的時(shí)候才發(fā)現(xiàn),所以要在電路版上面改。還有就是在畫(huà)板的時(shí)候還有一條線沒(méi)有連好,所以電路板做出來(lái)后,需要另外飛線把這根線連好,這些雖然是小問(wèn)題,還可以通過(guò)修改電路板,但是都是因?yàn)樵诋?huà)板時(shí)因?yàn)榇中亩赶碌腻e(cuò)誤,是完全可以避免的。通過(guò)分模塊的用程序來(lái)檢測(cè)硬件,經(jīng)過(guò)幾次的修改,基本是沒(méi)有什么問(wèn)題了,但是發(fā)現(xiàn)數(shù)碼管的顯示感覺(jué)有點(diǎn)暗,原來(lái)是因?yàn)閿?shù)碼管所用的排阻是15K的,電阻過(guò)大,致使驅(qū)動(dòng)數(shù)碼管的電流偏小。為了最求完美,所以換了10K的排阻。幾經(jīng)修改,終于把硬件電路調(diào)好。如圖15為調(diào)試好了的硬件電路: 
圖15 調(diào)試好的硬件電路圖 (二)軟件調(diào)試 軟件調(diào)試指的是通過(guò)仿真軟件模擬設(shè)計(jì)的硬件電路,加載上程序后的運(yùn)行情況,這次設(shè)計(jì)所用的仿真軟件是keil軟件,這是一款功能很強(qiáng)大的軟件,其中的仿真功能也是非常實(shí)用的,可以通過(guò)執(zhí)行單步運(yùn)行檢測(cè)每一句程序的問(wèn)題,可以把程序按功能模塊來(lái)檢測(cè)功能性的錯(cuò)誤,最后可以實(shí)時(shí)檢測(cè)整個(gè)程序運(yùn)行時(shí),硬件電路的執(zhí)行情況?梢远ㄎ坏矫恳痪涑绦蚴欠裾_,這樣對(duì)于檢測(cè)修改程序提供了很大的方便,所以說(shuō)這一步是非常實(shí)用必要的一步。 通過(guò)KEIL軟件,程序單步運(yùn)行,模塊化調(diào)試,整體執(zhí)行,在調(diào)試的過(guò)程中觀察存儲(chǔ)單元的數(shù)據(jù)變化,查找出程序的語(yǔ)法和邏輯錯(cuò)誤,每一句,每一個(gè)模塊地修改好,具體的調(diào)試步驟如下:
1. 把系統(tǒng)分為驅(qū)動(dòng)模塊,測(cè)速模塊,顯示模塊,調(diào)速模塊獨(dú)立地在仿真軟件中調(diào)試。 2. 對(duì)于需要賦值的那幾個(gè)模塊,在調(diào)試的時(shí)候,要檢測(cè)在賦予不同的初值時(shí)各參數(shù)的變化情況,確定好最佳的賦值 3. 把前面分開(kāi)獨(dú)立檢測(cè)的所有模塊綜合起來(lái),執(zhí)行全速調(diào)試,觀察模擬的結(jié)果,看看是否已經(jīng)符合系統(tǒng)的要求和目的,如果還是沒(méi)有實(shí)現(xiàn)所要達(dá)到的要求,就要重新分模塊來(lái)調(diào)試。 附作品和程序 硬件電路實(shí)物照片: 
總程序:
/*-------------------------------------------------------- 名稱(chēng):基于單片機(jī)控制直流電機(jī)調(diào)速系統(tǒng) 單片機(jī):STC89C52RC 晶振:12M 光柵盤(pán):334格 輸入:P3.5(定時(shí)器T1計(jì)數(shù)輸入口) 輸出數(shù)碼管顯示:位選接P1的0,1,2,3端口;段選接P0口 內(nèi)容:數(shù)碼管顯示所測(cè)電機(jī)轉(zhuǎn)速 --------------------------------------------------------*/ - //#include <reg52.h> //包含單片機(jī)寄存器的頭文件
- #include <REGX52.H>
- #define uchar unsigned char //定義uchar為無(wú)符號(hào)字符型變量
- #define uint unsigned int //定義uint為無(wú)符號(hào)整型變量
- #define ulong unsigned long
- //uchar wei_code[]={0xfe,0xfd,0xfb,0xf7}; //位碼數(shù)據(jù)組
- #define wei1 P2_1=1;P2_2=1;P2_3=1;P2_0=0;
- #define wei2 P2_0=1;P2_2=1;P2_3=1;P2_1=0;
- #define wei3 P2_0=1;P2_1=1;P2_3=1;P2_2=0;
- #define wei4 P2_0=1;P2_1=1;P2_2=1;P2_3=0;
- #define RESOLUTION 200//PWM量化精度
- sbit LED1=P1^0;
- sbit LED2=P1^1;
- sbit LED3=P1^2;
- sbit LED4=P1^3;
- sbit KEY1=P1^4;
- sbit KEY2=P1^5;
- sbit KEY3=P1^6;
- sbit KEY4=P1^7;
- sbit PWM=P3^2;
- void Delay(uint x);
- void Init(void);
- void MotorCtrl(uchar cmd);
- uchar Key_Scan(void);
- uchar duan_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//段碼數(shù)據(jù)組0---9
- uint zhuansu,a=0; //定義變量名稱(chēng)
- bit flag,power,direct; //計(jì)時(shí)一秒標(biāo)志位
- /**************************************
- 主函數(shù)
- ***************************************/
- void main()
- {
- uchar key;
- uint cnt,pwmcnt;
- Init(); //定時(shí)計(jì)數(shù)器初始化
- cnt=0;
- power=0;
- direct=0;
- pwmcnt=0;
- MotorCtrl(1);
- while(1)
- {
- key=Key_Scan();
- switch(key)
- {
- case 1://啟?刂
- power=!power;
- if(power)LED1=0;
- else
- {
- LED1=1;
- MotorCtrl(0);
- PWM=1;
- }
- break;
- case 2://正反轉(zhuǎn)控制
- direct=!direct;
- if(direct)MotorCtrl(1);
- else MotorCtrl(2);
- break;
- case 3:
- if(pwmcnt<RESOLUTION)pwmcnt++;
- break;//加速控制
- case 4:
- if(pwmcnt>0)pwmcnt--;
- break;//減速控制
- default:break;
- }
- if(power)
- {
- cnt++;
- if(cnt<pwmcnt)PWM=0;
- else PWM=1;
- if(cnt>=RESOLUTION)cnt=0;
- }
- }
- }
- /**************************************
- T0定時(shí)中斷服務(wù)程序
- ***************************************/
- void timer0() interrupt 1 using 1//10MS中斷一次
- {
- static uchar wei=0;
- uchar temp;
- a++; //每中斷一次a加1
- if(a==50) //50次中斷等于0.5S
- {
- zhuansu=(TH1*256+TL1)/334*120; //每分鐘轉(zhuǎn)速等于T1一秒計(jì)數(shù)脈沖值乘60秒除以碼盤(pán)數(shù)
- TL1=0; //定時(shí)器重新賦初值,從0開(kāi)始計(jì)數(shù)
- TH1=0;
- a=0; //a置0,為下一秒開(kāi)始計(jì)數(shù)賦值
- }
- if(wei==0)
- {
- temp=zhuansu/1000;
- wei4;
- P0=duan_code[temp];
- wei=1;
- }
- else if(wei==1)
- {
- temp=zhuansu/100%10;
- wei3;
- P0=duan_code[temp];
- wei=2;
- }
- else if(wei==2)
- {
- temp=zhuansu/10%10;
- wei2;
- P0=duan_code[temp];
- wei=3;
- }
- else if(wei==3)
- {
- temp=zhuansu%10;
- wei1;
- P0=duan_code[temp];
- wei=0;
- }
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256; //重裝初值
- }
- /**************************************
- 延時(shí),大約1ms
- ***************************************/
- void Delay(uint x)
- {
- uchar i;
- while(x--)
- for(i=0;i<120;i++);
- }
- /**************************************
- 定時(shí)器計(jì)數(shù)器初始化
- ***************************************/
- void Init(void)
- {
- MotorCtrl(0);
- TMOD=0x51; //定時(shí)器T1工作于計(jì)數(shù)模式1,定時(shí)器T0工作于計(jì)時(shí)模式1
- TH0=(65536-10000)/256; //定時(shí)器T0的高8位設(shè)置初值,每10ms產(chǎn)生一次中斷
- TL0=(65536-10000)%256; //定時(shí)器T0的低8位設(shè)置初值,每10ms產(chǎn)生一次中斷
- TH1=0; //定時(shí)器T1高8位賦初值0
- TL1=0; //定時(shí)器T1低8位賦初值0
- EA=1; //開(kāi)總中斷
- ET0=1; //定時(shí)器T0中斷允許
- TR1=1; //定時(shí)器T1啟動(dòng)
- TR0=1; //定時(shí)器T0啟動(dòng)
- }
- /**************************************
- 電機(jī)正反轉(zhuǎn)及停止控制
- ***************************************/
- void MotorCtrl(uchar cmd)
- {
- uchar temp;
- temp=P2&0x0f;
- if(cmd==0)
- {
- temp|=0xa0;//停止
- LED2=1;LED3=1;
- }
- else if(cmd==1)
- {
- temp|=0x30;//正轉(zhuǎn)
- LED2=0;LED3=1;
- }
- else if(cmd==2)
- {
- temp|=0xc0;//反轉(zhuǎn)
- LED2=1;LED3=0;
- }
- P2=temp;
- }
- /**************************************
- 按鍵掃描
- ***************************************/
- uchar Key_Scan(void)
- {
- static uchar key_up=1;//按鍵按松開(kāi)標(biāo)志
- if(key_up&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
- {
- Delay(10);//去抖動(dòng)
- key_up=0;
- if(KEY1==0)return 1;
- if(KEY2==0)return 2;
- if(KEY3==0)return 3;
- if(KEY4==0)return 4;
- }
- else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1;
- return 0;
- }
- 0)return 3;
- if(KEY4==0)return 4;
- }
- else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1;
- return 0;
- }
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
控制電機(jī)綜合性試驗(yàn)訓(xùn)練---直流伺服電機(jī)(5)(1).doc
(2.21 MB, 下載次數(shù): 81)
2018-12-28 15:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|