找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1949|回復(fù): 0
收起左側(cè)

單片機(jī)數(shù)控系統(tǒng)設(shè)計 步進(jìn)電機(jī) 開關(guān)量的輸入/輸出電路 附程序

[復(fù)制鏈接]
ID:685250 發(fā)表于 2023-7-11 15:22 | 顯示全部樓層 |閱讀模式
數(shù)控系統(tǒng)設(shè)計綜合實踐
一、系統(tǒng)硬件電路設(shè)計
系統(tǒng)硬件電路設(shè)計的主要內(nèi)容包括 CPU 的選型、1/0 口以及存儲器的擴(kuò)展電路、鍵盤-顯示電路、開關(guān)量的輸入/輸出電路、步進(jìn)電機(jī)驅(qū)動電路以及抗干擾電路等設(shè)計,本章就這些內(nèi)容展開研究、討論。圖 3.1 為數(shù)控系統(tǒng)總體設(shè)計框圖。
從圖中可以看出,系統(tǒng)選用ATMEL公司生產(chǎn)的8位單片機(jī)AT89S52作為控制核心考慮到數(shù)控系統(tǒng)程序代碼存儲量比較大,擴(kuò)展了一片 EPROM 芯片27512 用做程序存儲器:AT89S52芯片內(nèi)只有 256KB 的數(shù)據(jù)存儲器(RAM,而一般數(shù)控系統(tǒng)需要存儲的數(shù)據(jù)較多,必須外接數(shù)據(jù)存儲器芯片進(jìn)行適當(dāng)擴(kuò)展,故擴(kuò)展一片 SRAM 芯片6264 數(shù)據(jù)存儲器,用來存放用戶程序:鍵盤輸入電路采用一片 8279 芯片來管理;擴(kuò)展一片 8255 可編程接口芯片作為并行 O 口,步進(jìn)電機(jī)、切削液泵電機(jī)等控制信號都經(jīng) 8255 輸出,些進(jìn)/出的信號均做了隔離放大處理:系統(tǒng)采用 LCD 顯示,LCD的控制器選用 1602芯片。
系統(tǒng)硬件結(jié)構(gòu)確定之后,如何實現(xiàn)系統(tǒng)硬件具體結(jié)構(gòu),如何實現(xiàn)各種功能模塊電路成為硬件設(shè)計的核心內(nèi)容。實現(xiàn)同樣的功能,采用不同的電路和模式,其效果并不是完全相同。以下對本平臺中的各個單元模塊予以介紹。
1.CPU及存儲器的擴(kuò)展設(shè)計
1.1 數(shù)據(jù)存儲擴(kuò)展
在機(jī)電一體化設(shè)備的專用控制系統(tǒng)中,數(shù)據(jù)存儲器通常選用靜態(tài) RAM(SRAM)。因為在使用SRAM時,無需考慮刷新問題,且與 CPU 的接口較簡單。常用的 SRAM 芯片主要有6116(2KX8位)、6264(8KX8位)、62256(32KX8位)、628128(128KX8位)等。本次設(shè)計中選用 6264 芯片,其中,Ai 是地址線;I/i 是雙向數(shù)據(jù)線;/CE 或/CS 是片選線;/0E是數(shù)據(jù)讀出選通線,通常與 CPU 芯片的/RD引腳相連:/WE 是數(shù)據(jù)寫入選通線,一般與CPU的/WR引腳連接;VCC是工作電源,通常要求4.5V-5V。
數(shù)據(jù)存儲器的擴(kuò)展與程序存儲器的擴(kuò)展,在地址線的處理上是相同的,所不同的是除讀選通信號各異之外,尚需考慮寫選通的控制問題。
6264 芯片有一個片選/CS1,今用“3-8”譯碼器輸出引腳 CSO 來選通它;8 根數(shù)據(jù)線I/07-I/00 直接掛在CPU的PO口;13根地址線A12-A0分為高5位和低8位,其中高5位與CPU的P2.4-P2.0引腳相連,低8位與地址鎖存器74LS373 的輸出端相連:數(shù)據(jù)讀允許引腳/0E與CPU的/RD連接;數(shù)據(jù)寫允許引腳/WE 與CPU的WR連接可以算出6264的地址范圍是:0000H-FFFH。
在很多應(yīng)用場合,要求 SRAM 芯片內(nèi)部的數(shù)據(jù)在掉電后不丟失,這時就需要增加掉電保護(hù)電路。SRAM屬CMOS 芯片,靜態(tài)電流小,正常運行時由電源對其供電,而在掉電狀態(tài)下,由小型蓄電池對其供電,連續(xù)掉電后,蓄電池可維持?jǐn)?shù)據(jù) 3-5 個月不丟失。
1.2 CPU的選擇
AT89S52是一種低功耗、高性能CMOS的8位微控制器,具有8K 在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè) 80C51產(chǎn)品指令和引存儲空間,如果不需要這一空間,可將其/EA 引腳接地:如果需要使用這部分空間,/EA引腳必須接高電平,且片外擴(kuò)展的 EPROM 地址應(yīng)從2000H開始。
AT89S52單片機(jī)的 PO 口是分時復(fù)用的地址/數(shù)據(jù)總線,而且與 I/0 口線復(fù)用,為了將地址總線與數(shù)據(jù)總線分離出來,以便同片外的電路正確連接,需要在單片機(jī)外部增加地址鎖存器,構(gòu)成片外三總線結(jié)構(gòu),一般常用鎖存器74LS373。
74LS373有直通、高阻、鎖存3個狀態(tài)。通過鎖存信號輸入端G和輸出允許控制信號輸入端/0E 組合,可實現(xiàn)上述3個狀態(tài)。當(dāng)三態(tài)門的/0E=0 且 G=1時,三態(tài)門處于直通狀態(tài),允許 1Q-8Q 輸出到 Q0-Q7;當(dāng)/0E 為高電平時,輸出三態(tài)門斷開,輸出線 Q0-Q7處于高阻狀態(tài):當(dāng)/0E=0且G 端出現(xiàn)下降沿時,為鎖存狀態(tài)。74LS373 作為地址鎖存器時,首先應(yīng)使三態(tài)門的使能信號/0E 為低電平,這時,當(dāng)G輸入為高電平時,鎖存器直通狀態(tài),此時輸出端Q0-Q7 狀態(tài)和輸入端 DO-D7 狀態(tài)相同;當(dāng)G端從高電平到低電平(下降沿)時,輸入端1D-8D的數(shù)據(jù)鎖入 10-8Q的8位鎖存器,為鎖存狀。它的鎖存控制端G直接與單片機(jī)的鎖存控制信號 ALE 相連,ALE 下降沿進(jìn)行低8 位地址鎖存,直到下一次 ALE 變高,地址才發(fā)生變化。
74LS138是一個廣泛應(yīng)用的地址譯碼器,3位輸入A BC對應(yīng)8位反向輸出YO-Y78選1,即YO-Y7 有一個輸出為低電平有效,作片選。
2.鍵盤電路和LCD顯示電路設(shè)計
鍵盤-顯示功能是數(shù)控系統(tǒng)中的一個很關(guān)鍵的部分,它能實現(xiàn)向系統(tǒng)輸入數(shù)據(jù)、傳達(dá)命令和顯示工作狀況等,是人工干預(yù)的主要依據(jù)和手段。
2.1鍵盤電路
鍵盤主要有獨立式和矩陣式。前者一個按鍵接一個輸入線,輸入口浪費很大,用于按鍵數(shù)量較少的場合:后者多用按鍵較多的場合,可以節(jié)省很多 1/0 口。矩陣式鍵盤又可分為兩大類:無編碼器鍵盤和帶編碼器鍵盤。帶編碼器鍵盤采用硬件方法,當(dāng)按鍵按下時直接給出該鍵的鍵編碼,而且還能夠消除抖動和解決重復(fù)鍵問題。鍵盤編碼器有靜態(tài)編碼器,掃描式編碼器和反相編碼器等。無編碼器鍵盤采用軟件掃描法,逐行逐列地檢查鍵盤狀態(tài),當(dāng)發(fā)現(xiàn)有鍵按下時,用計算的方法來得到該鍵的編碼。目前使用較多的是帶編碼器鍵盤。
INTEL8279是一種通用可編程鍵盤-顯示器接口芯片。它能完成鍵盤輸入和顯示控制兩種功能。鍵盤部分提供一種掃描工作方式,可于 64 個按鍵的矩陣鍵盤連接,能對鍵盤不斷掃描,自動消抖,自動識別出按下的鍵并給出編碼,能對雙鍵或n鍵同時按下實現(xiàn)保護(hù)。8279為40列引腳封裝。

引腳簡介:
1.數(shù)據(jù)總線:DO-D7 是雙向三態(tài)總線。用于和系統(tǒng)數(shù)據(jù)總線相連,在 CPU 和 8279之間傳送命令或數(shù)據(jù)。
2.地址線:當(dāng)/CS=0選中8279,當(dāng)AO=1為命令字及狀態(tài)字地址,A0=0 為片內(nèi)數(shù)據(jù)地址,故8279占用兩個端口地址。
3.控制線:8279的控制線較多。這里介紹系統(tǒng)設(shè)計中幾個用到的控制線
4.IRQ:中斷請求輸出線,高電平有效。
5SLO-SL3(掃描線):輸出線。這四條輸出線用來掃描鍵盤和顯示器。它們可以編程設(shè)定為編碼輸出(16 中取 1)或譯碼輸出(4 中取1)。
6.RLO-RL7(回復(fù)線):輸入線。它們是鍵盤矩陣或傳感器矩陣的列信號輸入線。
7.SHIFT(移位信號):輸入線,高電平有效。該輸入信號是 8279 鍵盤數(shù)據(jù)的次高位D6,通常用來補充鍵盤開關(guān)的功能,可以用作鍵盤上、下檔功能鍵,在傳感器方式和選通方式中,SHIFT 無效。
8.CNTL/STB(控制/選通):輸入線,高電平有效。在鍵盤方式時,該輸入信號是鍵盤數(shù)據(jù)的最高位 D7,通常用來擴(kuò)充鍵開關(guān)的控制功能,做控制功能鍵用。
本節(jié)著重介紹系統(tǒng)中可編程 I/0 接口芯片的電路設(shè)計。
可編程1/0接口芯片種類很多,常用的有 Intel 公司的外圍器件,如可編程外圍并行接口8255A、可編程RAM/I0擴(kuò)展接口8155、可編程鍵盤/顯示接口8279、可編程定時/計數(shù)器8253、可編程串行通訊接口 8251等。這些芯片都具有多種工作方式,可由CPU對其編程進(jìn)行決定。下面對 8255A、8253在本平臺中的運用進(jìn)行詳細(xì)介紹。
2.2可編程外圍并行接口設(shè)計
本系統(tǒng)中所要控制的外部設(shè)備主要有兩個步進(jìn)電機(jī)(根據(jù)自制的步進(jìn)電機(jī)驅(qū)動器需要用8個輸出口),加上上下左右的4個鍵盤輸口,選用8255A 可編程外圍并行接口芯片。

可編程輸入/輸出接口芯片 8255A 的引腳如圖 3.5所示。D是雙向數(shù)據(jù)線:/CS是片選線:/RD 是數(shù)據(jù)讀出選通線,通常與 CPU 芯片的/RD引腳相連;/WR 是數(shù)據(jù)寫入選通線,一般與CPU的/WR引腳連接:PA口是8位數(shù)據(jù)輸出口,既有上拉又有下拉總線保持器;PB 口是8位數(shù)據(jù)輸入/輸出口,只有上拉總線保持器;PC 口是8位數(shù)據(jù)輸入(無所存)/輸出(帶緩沖器)口,在方式控制下可分作兩個 4 位端口用,每個 4位口都有一個4位所存器,這兩個4位端口可與A及B口配合使用,輸出控制信號輸入狀態(tài)信息,PC 口的保持結(jié)構(gòu)與 B口相同。
向8255A 控制口寫入控制字可決定它的工作方式,并且只有先寫入控制字,才能通過三個數(shù)據(jù)口實現(xiàn)正確的I/0操作。它的3個I/0并行口 PA、PB、PC可選擇三種工作方式:方式0為基本的輸入輸出:方式1為選通輸入輸出:方式2 為雙向傳送8255A 還能對C端口的任一位進(jìn)行置位/復(fù)位操作。
3.步進(jìn)電機(jī)控制設(shè)計
步進(jìn)電機(jī)是一種通過電脈沖信號控制相繞組電流實現(xiàn)定角轉(zhuǎn)動的機(jī)電元件,與其他類型電機(jī)相比具有易于開環(huán)精確控制、無積累誤差等優(yōu)點,在眾多領(lǐng)域中獲得了廣泛的應(yīng)用。為了得到性能優(yōu)越的控制效果,出現(xiàn)了很多步進(jìn)電機(jī)控制系統(tǒng),其中采用單片機(jī)作為控制核心的控制系統(tǒng)得到了廣泛的應(yīng)用。
3.1步進(jìn)電機(jī)的工作原理

圖3.6反應(yīng)式步進(jìn)電機(jī)結(jié)構(gòu)圖
圖3.6 是反應(yīng)式步進(jìn)電機(jī)結(jié)構(gòu)示意圖,它的定子具有均勻分布的六個磁極,磁極上繞有繞組。兩個相對的磁極組成一組,連法如圖 3.6 所示。
下面介紹反應(yīng)式步進(jìn)電動機(jī)單三拍、六拍及雙三拍通電方式的基本原理。反應(yīng)式進(jìn)電機(jī)的工作原理是利用了物理上的“磁通總是力圖使自己所通過的路徑的磁阻最小所產(chǎn)生的磁阻轉(zhuǎn)矩,使電機(jī)一步一步轉(zhuǎn)動的。以三相反應(yīng)式步進(jìn)電機(jī)為例。
1、單三拍通電方式的基本原理
設(shè)A 相首先通電 (B、C 兩相不通電),產(chǎn)生 A-A軸線方向的磁通,并通過轉(zhuǎn)子形成閉合回路。這時 A、A’極就成為電磁極鐵的 N、S 極。在磁場的作用下,轉(zhuǎn)子總是力圖轉(zhuǎn)到磁阻最小的位置,也就是要轉(zhuǎn)到轉(zhuǎn)子的齒對齊 A、A’極的位置(圖 3.7a);接著B相通電(A、C兩相不通電),轉(zhuǎn)子便順時針方向轉(zhuǎn)過 30°,它的齒和C、C’極對齊(圖c)。不難理解,當(dāng)脈沖信號一個一個發(fā)來時,如果按 A一C一B一A一···的順序通電,則電機(jī)轉(zhuǎn)子逆時針方向轉(zhuǎn)動。這種通電方式稱為單三拍方式。
2、六拍通電方式的基本原理

設(shè)A相首先通電,轉(zhuǎn)子齒與定子A、A’對齊(圖3.7a),然后在A 相繼續(xù)通電的情況下接通B相。這時定子 B、B’極對轉(zhuǎn)子齒 2、4產(chǎn)生磁拉力,使轉(zhuǎn)子順時針方向轉(zhuǎn)動但是 A、A’極繼續(xù)拉住齒 1、3,因此,轉(zhuǎn)子轉(zhuǎn)動兩個磁拉力平衡為止。這時轉(zhuǎn)子的位置如圖 3.7b 所示,即轉(zhuǎn)子從圖 3.7a 位置順時針轉(zhuǎn)過了巧“。接著A相斷電,B相繼續(xù)通電。這時轉(zhuǎn)子齒2、4和定子 B、B’極對齊(圖3.7c),轉(zhuǎn)子從圖3.8(b)的位置又轉(zhuǎn)過了15“。其位置如圖3.8d所示。這樣,如果按 A-A、B-B-B、C-C-C、A一A.二的順序輪流通電,則轉(zhuǎn)子便順時針方向一步一步地轉(zhuǎn)動,步距角 15°。電流換接六次,磁場旋轉(zhuǎn)一周,轉(zhuǎn)子前進(jìn)了一個齒距角。如果按 A一A、C-C-C、B一B一B、A一A.二的順序通電,則電機(jī)轉(zhuǎn)子逆時針方向轉(zhuǎn)動。這種通電方式稱為六拍方式功能來實現(xiàn)。
3、轉(zhuǎn)矩的選擇
步進(jìn)電機(jī)轉(zhuǎn)矩的選擇包括四個方面:最大靜轉(zhuǎn)矩、啟動轉(zhuǎn)矩、矩頻特性、定位轉(zhuǎn)矩最大靜轉(zhuǎn)矩是指步進(jìn)電動機(jī)在通電狀態(tài)下,使轉(zhuǎn)子離開平衡位置時的極限力矩值,它反映了步進(jìn)電動機(jī)承受外加轉(zhuǎn)矩的特性;啟動轉(zhuǎn)矩是指步進(jìn)電動機(jī)單相繞組勵磁時所能帶動的極限負(fù)載轉(zhuǎn)矩:矩頻特性是指輸出轉(zhuǎn)矩與頻率的關(guān)系,一般來一說,隨著運行頻率的提高,輸出轉(zhuǎn)矩逐漸下降;定位轉(zhuǎn)矩是指步進(jìn)電機(jī)在斷電狀態(tài)下定位時所需的轉(zhuǎn)矩。當(dāng)注意的是,步進(jìn)電動機(jī)的輸出轉(zhuǎn)矩不僅與電動機(jī)本身的最大靜轉(zhuǎn)矩和矩頻特性有關(guān),而且還與驅(qū)動電源有著很大的關(guān)系。
4、連續(xù)運行頻率的選擇
步進(jìn)電動機(jī)啟動后,不失步地連續(xù)升速,所能達(dá)到的最高頻率,稱作連續(xù)運行頻率。產(chǎn)品樣本所提供的極限運行頻率,是指電動機(jī)在空載時的最高運行頻率。帶載時的極限運行頻率要根據(jù)負(fù)載轉(zhuǎn)矩的大小,從矩頻特性曲線上查找。
5.啟動頻率的選擇
步進(jìn)電動機(jī)不同于一般電動機(jī),它的啟動概念和不失步聯(lián)系在一起。廠家提供的步進(jìn)電動機(jī)啟動頻率,是指步進(jìn)電動機(jī)空載時的極限啟動頻率。電動機(jī)帶載后,啟動頻率要下降。啟動頻率主要取決于負(fù)載的轉(zhuǎn)動慣量,二者之間的關(guān)系可以用啟動慣頻特性曲線來描述。用戶可以根據(jù)廠家提供的啟動慣頻特性曲線來決定帶載時的啟動頻率。
綜合上述因素,進(jìn)給系統(tǒng)選用三洋 57 型步進(jìn)電機(jī),其額定轉(zhuǎn)矩為 20Nm,相數(shù)為 2,步距角為 0.9/1.8度,可以對其進(jìn)行兩相兩拍、兩相四拍控制。
3.2步進(jìn)電機(jī)驅(qū)動與隔離選擇
由于步進(jìn)電機(jī)的大功率、高電平會對單片機(jī)產(chǎn)生比較嚴(yán)重的干擾,不能直接把單片機(jī)產(chǎn)生的控制信號直接連在步進(jìn)電機(jī)上,需要進(jìn)行強(qiáng)弱電隔離。在實際運用中,對于強(qiáng)弱電隔離一般采用電子開關(guān)方法或光電隔離的方法。由于步進(jìn)電機(jī)工作需要較大的功率所以通常需要使用功率放大器來提供步進(jìn)電機(jī)的工作電流,將光電隔離器送來的弱電信號變?yōu)閺?qiáng)電信號,可以采用集成功放,也可以采用分立元件。本系統(tǒng)使用 TLP521GB 光電耦合芯片。
由于步進(jìn)電機(jī)是一種將電脈沖信號轉(zhuǎn)換成直線或角位移的執(zhí)行元件,它不能直接接到交直流電源上.而必須使用專用設(shè)備-步進(jìn)電機(jī)控制驅(qū)動器。典型步進(jìn)電機(jī)控制系統(tǒng)中的控制器可以發(fā)出脈沖頻率從幾赫茲到幾十千赫茲連續(xù)變化的脈沖信號,它為環(huán)形分配器提供脈沖序列。環(huán)形分配器的主要功能是把來自控制環(huán)節(jié)的脈沖序列按一定的規(guī)律分配后,經(jīng)過功率放大器的放大加到步進(jìn)電機(jī)驅(qū)動電源的各項輸人端,以驅(qū)動步進(jìn)電機(jī)的轉(zhuǎn)動。環(huán)形分配器主要有兩大類:一類是用計算機(jī)軟件設(shè)計的方法實現(xiàn)環(huán)分器要求的功能,通常稱軟環(huán)形分配器。另一類是用硬件構(gòu)成的環(huán)形分配器,通常稱為硬環(huán)形分配器。功率放大器主要對環(huán)形分配器的較小輸出信號進(jìn)行放大,以達(dá)到驅(qū)動步進(jìn)電機(jī)目的。L298N 是ST 公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動芯片。該芯片采用 15 腳封裝主要特點是:工作電壓高,最高工作電壓可達(dá) 46V;輸出電流大,瞬間峰值電流可達(dá) 3A,持續(xù)工作電流為 2A;額定功率 25W。內(nèi)含兩個H橋的高電壓大電流全橋式驅(qū)動器,可以用來驅(qū)動直流電動機(jī)和步進(jìn)電動機(jī)、繼電器線圈等感性負(fù)載:采用標(biāo)準(zhǔn)邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影響的情況下允許或禁止器件工作有一個邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用 L298N 芯片驅(qū)動電機(jī),該芯片可以驅(qū)動一臺兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動兩臺直流電機(jī)?梢灾苯佑脝纹瑱C(jī)的 I/O 口提供信號:而且電路簡單,使用比較方便。L298N 可接受標(biāo)準(zhǔn)TTL邏輯電平信號 VSS,VSS 可接4.5~7V電壓。4腳VS 接電源電壓,VS 電壓范圍VIH為+25~46V。輸出電流可達(dá)2.5A,可驅(qū)動電感性負(fù)載。1 腳和 15 腳下管的發(fā)射極分別單獨引出以便接入電流采樣電阻,形成電流傳感信號。L298 可驅(qū)動 2個電動機(jī),OUT1,OUT2 和OUT3,OUT4 之間可分別接電動機(jī),本實驗裝置我們選用驅(qū)動一臺電動機(jī)。5,7,10,12 腳接輸入控制電平,控制電機(jī)的正反轉(zhuǎn)。EnA,EnB 接控制使能端,控制電機(jī)的停轉(zhuǎn)。

In1,In2的邏輯圖與圖3.9相同。由圖可知 EnA 為低電平時,輸入電平對電機(jī)控制起作用,當(dāng) EnA 為高電平,輸入電平為一高一低,電機(jī)正或反轉(zhuǎn)。同為低電平電機(jī)停止,同為高電平電機(jī)剎停。
4.系統(tǒng)抗干擾措施
控制系統(tǒng)都工作在一定的環(huán)境條件下。環(huán)境中必然存在各種產(chǎn)生電磁場的因素,這些磁場能量會通過一定的途徑傳入單片機(jī)控制系統(tǒng),產(chǎn)生系統(tǒng)正常工作所不需要的信號,影響了單片機(jī)的正常工作。同時,單片機(jī)內(nèi)部也會產(chǎn)生影響正常工作的信號。一般把上述所說影響正常工作的信號稱為噪聲,也就是干擾。在單片機(jī)控制系統(tǒng)出現(xiàn)干擾就會影響指令的正常執(zhí)行。
環(huán)境對單片機(jī)控制系統(tǒng)的干擾一般都是以脈沖的形式進(jìn)入系統(tǒng)的,干擾竄入系統(tǒng)的渠道主要有 3條,即空間干擾、供電系統(tǒng)干擾、過程通道干擾。一般情況下,空間干擾在強(qiáng)度上遠(yuǎn)小于其它兩個渠道進(jìn)入系統(tǒng)的干擾,而且空間干擾可用良好的屏蔽與正確的接地,或采用高頻濾波器加以解決。因此,抗干擾的重點應(yīng)放在供電系統(tǒng)和過程干擾通道的干擾。系統(tǒng)的抗干擾措施可以從硬件和軟件兩方面著手。
4.1硬件抗干擾技術(shù)
硬件系統(tǒng)的抗干擾設(shè)計特別重要,必須要在硬件設(shè)計的初始階段就要考慮各種干擾因素,否則在系統(tǒng)調(diào)試時將會非常困難,增加系統(tǒng)調(diào)試的時間和費用。
單片機(jī)控制系統(tǒng)通常可由幾塊印刷電路板組成,各板之間以及各板與基準(zhǔn)電源之間經(jīng)常選用接插針相聯(lián)系。在接插件的插針之間也易造成干擾,這些干擾與接插件插針之間的距離都有關(guān)系。在設(shè)計時要注意四個問題:合理地設(shè)置接插件:2插座上要話當(dāng)增加接地針數(shù);3信號針盡量分散配置,增大彼此之間的距離;@考慮到信號的翻轉(zhuǎn)時差,把不同時刻翻轉(zhuǎn)的插針放在一起,同時翻轉(zhuǎn)的插針盡量遠(yuǎn)離,因為同時翻轉(zhuǎn)會使干擾疊加。
印刷電路板是器件、信號線、電源線的高密度集合體,電路板的布線和布局好壞對可靠性影響很大。制作電路板時要注意以下幾個事項:D電路板大小要適中,元件布局時相關(guān)盡量靠近:2電源線和地線與數(shù)據(jù)線傳輸方向要一致,這樣有助于增強(qiáng)抗干擾能力;3地線盡量加寬,數(shù)據(jù)地線、模擬地線要分開,配置必要的去藕電容。
4.2軟件抗干擾抗術(shù)
控制系統(tǒng)軟件設(shè)計對提高系統(tǒng)的可靠性,提高抗干擾性能意義很大。一個好的軟件設(shè)計,要充分考慮采取必要的抗干擾措施,利用軟、硬件相結(jié)合的措施實現(xiàn)系統(tǒng)抗干擾,這也是單片機(jī)控制系統(tǒng)具有的優(yōu)點之一。
1.軟件冗余
軟件冗余技術(shù)就是多次使用同一功能的軟件指令,以保證指令執(zhí)行的可靠性,常從以下幾個方面考慮。
(1) 采用多次讀入法,確保開關(guān)量輸入正確無誤。重要的輸入信息利用軟件多讀入,比較幾次結(jié)果一致再讓其參與運算。對于按鈕和開關(guān)狀態(tài)讀入時,要配合軟件延時可消除抖動和誤操作。
(2) 不斷輸出狀態(tài)寄存器,及時糾正輸出狀態(tài)。設(shè)置輸出狀態(tài)寄存器,利用軟件不斷查詢,當(dāng)發(fā)現(xiàn)和輸出的不一致時,及時糾正,防止由于干擾引起的輸出變化導(dǎo)致設(shè)備誤動作。
(3)對于條件控制系統(tǒng),把對控制條件的一次采樣、處理控制輸出改為循環(huán)地采樣。這種方法對于慣性較大的控制系統(tǒng)具有良好的抗干擾作用。
(4)為防止計算錯誤,可采用兩組計算程序,分別計算,然后將兩組計算結(jié)果進(jìn)行比較,如兩次計算結(jié)果相同,則將結(jié)果輸出。如果出現(xiàn)誤差,則再進(jìn)行一次運算,重新比較,直到結(jié)果相同,才認(rèn)為計算正確。
軟件冗余技術(shù)是提高軟件設(shè)計可靠性,防止干擾造成誤差,保證控制系統(tǒng)正常運行的有力措施。至于在什么地方采用冗余,是根據(jù)在軟件設(shè)計過程中的薄弱環(huán)節(jié)和在硬件上易于受到干擾部位而定。采用軟件冗余技術(shù),可使程序運轉(zhuǎn)的可靠性大大提高。
對于AT89S52 單片機(jī)來說,所有的指令都不會超過三個字節(jié),因此在某條關(guān)鍵的指令前插入兩條“NOP”指令,則該條指令不會因程序跑飛而跳過沒有被執(zhí)行,造成整個程序的混亂。這些關(guān)鍵的指令一般為:RET、RETI、ACALL、LCALL、AJMP、LJMP、JZ、州Z、JC、JNC、JB、JBC、DJNZ、CJNE 等。同樣可以在某些對系統(tǒng)狀態(tài)起關(guān)鍵作用的指令前加上冗余指令。
2.增加程序監(jiān)視系統(tǒng)
利用設(shè)置軟件陷阱的辦法雖然在一定程度上解決了程序“飛出”失控問題,但在程序執(zhí)行過程中若進(jìn)入死循環(huán),無法撞上陷阱,就會使程序運行不下去。因此設(shè)置陷阱的辦法不能有效的解決死循環(huán)問題。設(shè)置程序監(jiān)視器(Watchdog)可比較有效的解決死循環(huán)問題。程序監(jiān)視器系統(tǒng)有的采用軟件解決,大部分都是采用軟硬件相結(jié)合的辦法。
本系統(tǒng)采用單片機(jī)內(nèi)部定時器進(jìn)行監(jiān)視,其方法是在程序一開始就啟動定時器工作,在主程序中增設(shè)定時器賦值指令,使該定時器維持在非溢出工作狀態(tài)。定時器要稍大于程序一次循環(huán)的執(zhí)行時間。程序正常循環(huán)執(zhí)行一次給定定時器送一次初值,使其不能溢出。若程序失控,定時器則計滿溢出中斷,在中斷服務(wù)程序中使主程序自動復(fù)位又進(jìn)行初始狀。
5.開關(guān)量輸入、輸出通道設(shè)計
5.1有觸點開關(guān)量
有觸點開關(guān)也稱機(jī)械式開關(guān),比如行程開關(guān)、控制按鈕、繼電器、接觸器等。有觸點開關(guān)分為常開、常閉兩種方式,其顯著特點是無源,開、閉時均會產(chǎn)生抖動,所以在實際應(yīng)用中需要采取措施消除抖動。
在機(jī)械有觸點開關(guān)中,當(dāng)觸點閉合或打開時將產(chǎn)生抖動,使得開關(guān)量在瞬間的狀態(tài)不穩(wěn),由于機(jī)械觸點的彈性作用,按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會立即斷開。因而在閉合及斷開的瞬間均伴隨一連串的抖動,抖動的時間長短中按鍵的機(jī)械特性決定,一般為5到10ms。若是工作在計數(shù)器方式或作為中斷輸入,將導(dǎo)致系統(tǒng)工作不正常,因此消除抖動是十分必要的。消除按鍵抖動通常有兩種方法:硬件消除抖動和軟件消抖。
硬件消除抖動是通過在按鍵輸出電路上加一定的硬件線路來消除抖動,一般采用R-S 觸發(fā)器或單穩(wěn)態(tài)電路。軟件消除抖動是利用延時來跳過抖動動作過程,當(dāng)判斷有按鍵按下后,先執(zhí)行一段大于 10ms 的延時程序再去判斷按下的鍵位是哪一個,從而消除抖動的影響。本系統(tǒng)采用軟件消除抖動。
5.2開關(guān)量輸入通道
開關(guān)量輸入通道也稱數(shù)字量輸入通道,它是將用雙值邏輯“1’和“0’表示的電壓或電流的開關(guān)量,轉(zhuǎn)換為計算機(jī)能夠識別的數(shù)字量。典型的開關(guān)量輸入通道通常由以下幾個部分組成:
(1)信號變換器 將工業(yè)過程的非電量或電磁量轉(zhuǎn)換為電壓或電流的雙值邏輯值比如有觸點的機(jī)械開關(guān)或無觸點的接近開關(guān)等。
(2) 整形變換電路 將混有毛刺之類干擾的雙值邏輯信號,或前后沿不合要求的輸入信號,整形為接近理想狀態(tài)的方波。
(3)電平變換電路 將輸入的雙值邏輯電平轉(zhuǎn)換成與 CPU 兼容的邏輯電平
二、系統(tǒng)軟件設(shè)計
控系統(tǒng)軟件是為實現(xiàn)數(shù)控系統(tǒng)各項功能而編制的專用軟件,即存放于內(nèi)存儲器中的系統(tǒng)程序。由于數(shù)控系統(tǒng)的功能設(shè)置與控制方案各不相同,在結(jié)構(gòu)和規(guī)模上差別很大般來說,功能越多,所需要的系統(tǒng)程序越長,所占內(nèi)存空間越大。系統(tǒng)程序的設(shè)計直接關(guān)系到數(shù)控系統(tǒng)各項功能的實現(xiàn)及其將來的擴(kuò)展,所以它是整個數(shù)控系統(tǒng)研制工作中的關(guān)鍵,也是工作量最大的部分。一般數(shù)控系統(tǒng)軟件設(shè)計的原則是,在條件允許的情況下,減少硬件電路,降低成本,盡可能地用軟件來代替硬件。系統(tǒng)軟件必須完成管理和控制兩項仟務(wù),數(shù)控裝置的管理任務(wù)一般包括編輯輸入、I/0 處理、顯示、診斷等,控制任務(wù)包括譯碼、刀具補償、速度處理、插補、位置控制等。
本系統(tǒng)的軟件設(shè)計主要分為系統(tǒng)初始化、按鍵、顯示處理及控制脈沖輸出幾部分,事實上每一部分都是緊密相關(guān)的,每個功能模塊對于整體設(shè)計都是非常重要,單片機(jī)AT89C2051 通過軟件編程才能使系統(tǒng)真正的運行起來,軟件設(shè)計的好壞也直接決定了系統(tǒng)的運行質(zhì)量。
程序流程圖的設(shè)計遵循自頂向下的原則,即從主體遂逐步細(xì)分到每一個模塊的流程。在流程圖中把設(shè)計者的控制過程梳理清楚。本程序主要由鍵盤程序、顯示器程序、步進(jìn)電機(jī)驅(qū)動程序三部份組成,主程序首先初始化各變量,將顯示器消隱,步進(jìn)電機(jī)驅(qū)動的各引腳均輸出高電平,便進(jìn)入待機(jī)狀態(tài),等待鍵入相應(yīng)操作。然后調(diào)用鍵盤程序,并作判斷,如果有鍵按下,則調(diào)用鍵盤處理程序。在各個調(diào)用程序中相應(yīng)的編入顯示的程序。
1.系統(tǒng)軟件的總體框架簡介
在此運行模塊中,在開啟定時器后,便進(jìn)入速度檔位顯示和允許操作鍵盤掃描判斷程序。在連續(xù)運行模式中“拍數(shù)”和“模式”鍵不可用,“上升”和“下降”鍵為速度調(diào)節(jié)鍵。數(shù)控系統(tǒng)軟件具有多任務(wù)性和實時性兩大特點。編輯輸入、預(yù)處理、顯示、插補、進(jìn)給控制等任務(wù)需并行及時處理。所以要采用并行處理技術(shù)確定軟件各模塊的結(jié)構(gòu)。并行處理技術(shù)的方法很多,本系統(tǒng)由于是單 CPU的數(shù)控裝置,因而在軟件設(shè)計中采用資源分時并行處理技術(shù)。一般地采用資源分時共享方法是:各個任務(wù)按其需要時間的長短被分割成一個個子任務(wù),系統(tǒng)采用時循環(huán)調(diào)度和優(yōu)先搶占調(diào)度相結(jié)合的方法完成各任務(wù),所以資源分時共享的并行處理只具有宏觀上的意義,從微觀上看來,各個任條還是順序執(zhí)行的。并行處理中的信息交換主要通過設(shè)置各種緩沖存儲區(qū)來實現(xiàn)。零件程序首先通過編輯輸入程序的處理存入加工程序緩沖存儲區(qū),這是一個循環(huán)存儲隊列,然后插補準(zhǔn)備程序(包括譯碼、刀具補償和速度處理)從加工程序存儲區(qū)將一個程序段的數(shù)據(jù)讀入譯碼緩沖存儲區(qū),進(jìn)行譯碼、刀具補償和速度處理,并將結(jié)果放入插補緩沖存儲區(qū)。插補程序在每次執(zhí)行一個程序段的插補運算時,將插補緩沖存儲區(qū)的內(nèi)容讀入插補工作存儲區(qū),用插補工作存儲區(qū)的數(shù)據(jù)進(jìn)行插補計算并將結(jié)果送到插補輸出寄存器。各緩沖區(qū)數(shù)據(jù)交換和更新的同步依靠同步信號指針實現(xiàn),從而保證了信息的正確傳輸。分時并行處理技術(shù)主要需解決的問題是,充分利用計算機(jī)的高速數(shù)據(jù)計算和處理能力,保證每個任務(wù)的合理響應(yīng)時間。
本系統(tǒng)軟件總體結(jié)構(gòu)采用前后臺型。這種模式將數(shù)控系統(tǒng)分成兩部分:前臺程序和后臺程序。前臺程序為實時中斷程序,承擔(dān)了幾乎全部實時任務(wù),實現(xiàn)插補、位置控制、開關(guān)控制等實時功能;后臺程序是一個循環(huán)運行程序,實現(xiàn)加工程序的輸入和預(yù)處理以及管理的各項任務(wù)。后臺程序是本系統(tǒng)的主程序,主要功能是完成整個系統(tǒng)的管理和調(diào)度,并完成實時插補前的各項控制任務(wù)。
系統(tǒng)啟動和復(fù)位重新啟動后,先進(jìn)入開機(jī)界面,稍后自動進(jìn)入系統(tǒng)初始化子程序為系統(tǒng)的正常工作做好各種準(zhǔn)備。初始化子程序的主要工作有:設(shè)置 CPU 及其有關(guān)接口工作狀態(tài),顯示系統(tǒng)有關(guān)的局部標(biāo)志和全局標(biāo)志:設(shè)置系統(tǒng)參數(shù):設(shè)置中斷矢量,使系統(tǒng)能及時獲得操作員的操作控制信號。
圖4.1為正常加工狀態(tài)下背景程序的軟件度管理主流程圖。初始化工作完成后,系統(tǒng)進(jìn)入背景程序的循環(huán)中,調(diào)度系統(tǒng)工作于編輯、手動、自動、模擬和對刀等工作方式中。編輯工作方式使背景程序進(jìn)入鍵盤輸入處理程序,用來進(jìn)行程序的編制、修改和存儲;手動工作方式使背景程序進(jìn)入手動方式處理程序,按操作面板上的操作狀態(tài)轉(zhuǎn)入不同的處理分支,在實時時鐘中斷服條程序和點動處理程序的配合下,實現(xiàn)各種手動功能,自動工作方式是對零件進(jìn)行自動加工的一種方式,自動處理程序及時完成各程序段插補前的預(yù)處理并完成實時加工控制。
附錄2:程序清單
  1. #include  <reg51. H> //x軸半/全步設(shè)定
  2. sbit hfx= P(f7;   sbit   //x軸正反轉(zhuǎn)設(shè)定
  3. ccwx=  P20;    sbit   //x軸脈沖設(shè)定
  4. stepx=  P21;   sbit  //y軸半/全步設(shè)定
  5. hfy=P2"2;sbit ccwy //y軸正反轉(zhuǎn)設(shè)定
  6. =P2 3;sbit stepy = 7/y軸脈沖設(shè)定
  7. P2 4;    sbit  LED = "報警
  8. P2"5; sbit K1 = P2^7;  //確定步進(jìn)電機(jī)工作
  9. sbit shift =P31;      //圓、直線轉(zhuǎn)換
  10. int  a[]={0x3F,0x06,0x5B,0x4F,0x66,
  11.           0x6D,0x7D,Ox07,0x7F,0x6F,0x77,
  12.           0x7C,0x39,0x5E,0x79,0x71};   //數(shù)碼管顯示代碼
  13. Static int Fn1=0;static int Fn2=0;
  14. Static int Fn3=0;static int Fn4=0
  15. Static int Fn=0;
  16. Static int xn1,yn1;
  17. Static int xn2,yn2;
  18. Static int xn3,yn3;
  19. Static int xn4,yn4;
  20. Int cntx=0;
  21. Int  cnty=0;
  22. Int m1,m2.m3,m4,m;
  23. Static int kx,ky,i,mO;
  24. Void circle(void);//函數(shù)聲明
  25. Void alarm(void);
  26. Void Delay(int  t);
  27. Void line (void);
  28. Void LI(void);
  29. Void L2(void);
  30. Void L3(void);
  31. void           main(void)
  32. EA   =1:      //開中斷
  33. ITO=1;
  34. EXO=1;
  35. TT1=1;
  36. EXl=1;
  37. while(K1);if
  38. (shift^0)
  39. circle();
  40. if(shift=1)      //調(diào)用兩圓子程序
  41. line();
  42. }                //調(diào)用岡直線子程序
  43. /*外部中斷0程序*1

  44. void         intO(void)interrupt 0 using 1{
  45.     Delay(2000);
  46. cntx++;
  47.     cntx%:16;
  48. ynl=0;
  49. xnl=10 氺 cntx;
  50. xn2=0;
  51. yn2=10氺cntx;
  52. yn3=0;
  53. xn3=10氺cntx;
  54. xn4=0;
  55. yn4=10氺cntx;
  56. Pl=~a[cntx];
  57. kx=5氺cntx;
  58. }
  59. / * 外 部 中 斷 1 程 序 * /
  60. void         inti(void)interrupt 2 using 2
  61. Delay(2000);
  62.     cnty++;
  63.     Cnty%16;
  64. P0=~a[cnty];
  65. Ky=5氺cnty;
  66. }                        
  67.   //顯示更新程序
  68. void circle(void)     //顯示更新畫圓
  69. {1)1 =~a[cntx];
  70. hfx=0;
  71. hfy=0;
  72. m1=m2=m3,m4=20*cnty;//若K1鍵按下(為0),步進(jìn)電機(jī)開始動作
  73. while (R1=0)
  74. {
  75.   Delay(1000);if(Kl=0)         //延時消抖處理
  76. {
  77. LED=0;  while
  78. (ml)
  79.                //此時調(diào)用各象限加工子函數(shù)
  80. {
  81.    PO=~0x06;L1();
  82. }
  83. Delay(1000);while(m2){PO=~0x5B;L2();
  84. }Delay(1000);while(m3)   {PO=~0x4F:
  85.     L3()
  86. }
  87. Delay(1000);while(m4)
  88. P0=~0x66;L4();
  89. }
  90. while(!ml&&!m2&&!m3&&!m4)//加工完畢,報警提示
  91.          stepx=stepy=1;
  92. alarm();
  93.          }
  94.        }
  95.       }
  96. }
  97. Void line(void)  //顯示更新畫直線單步插補
  98. {
  99. mO=kx+ky;ccwx=1;ccwy=1;
  100.                   //xy步進(jìn)電機(jī)正轉(zhuǎn)
  101. while(Kl==0)
  102. //若K1為0,步進(jìn)電機(jī)開始動作
  103. {
  104. EA  =0;
  105. LED=0;while(mO)
  106. {
  107. if(Fn 〉=0)
  108.   {
  109.    Fn =Fn ky;
  110.    ky=ky;
  111. stepx=0;Delay(25);
  112. stepx=1;Delay(25);mO-
  113. =1;
  114. }
  115. if(Fn〈0)
  116. En=Fn+kx;
  117. kx=kx;
  118. stepy=0;Delay     (25);
  119. stepy=1;Delay(25);
  120. mO-=1;
  121. }
  122. }
  123. if(!mO)                 //加工完畢,報警提示
  124. {
  125. stepx=stepy=1;     alarm
  126.   ();
  127. /****                    //顯示更新畫直線比例插補
  128. Kx=100*cntx
  129. ky=100*cnty; while(Kl=0)
  130. {                       //若K1為0,步進(jìn)電機(jī)開始動作
  131. EA =0;
  132. LED=0;while(kx||ky)
  133.   {
  134.    kx=kx-cntx;
  135.    ky=ky-cnty;
  136.    for(m=0;m<cntx;m++)  //脈沖
  137.                    {
  138.        Delay(25);
  139. stepx=0;
  140. Delay(25);
  141. stepx=1;
  142. }
  143. for(m=0;n)<cnty;m++)
  144. Delay(25);
  145. stepy=0;
  146. Delay(25);
  147. stepy=1;
  148. }
  149. }
  150. if(!kx&&!ky)    //加工完畢,報警提示
  151.   stepx=stepy=1;
  152. alarm();
  153. }
  154. }  ****
  155.      }
  156. /各象限插補程序/
  157. voidLI(void)
  158. ccwx=0;ccwy=1;
  159. if(Fnl>=0)
  160. Fnl=Fn1-2*xnl+1;
  161. xnl=xnl- 1;
  162. stepx=0;Delay(25);
  163. stcpx=1;Delay(25);
  164. ml-=1;
  165. }
  166. if(Fnl<0)
  167.   Fnl=Fnl+2*ynl+1;
  168. ynl=ynl+1;
  169. stepy=0;Delay(25);
  170. stepy=1;Delay(25);
  171. m1=1
  172. }
  173. void   L2(void)
  174. ccwx=0;ccwy=0;
  175. if(Fn2>=0)
  176. {
  177. Fn2=Fn2-2*yn2+1;
  178. yn2=yn2~1;m2~=1;
  179. stepy=0;Delay(25);
  180. stepy=1;Delay(25);}
  181. if(Fn2<0)
  182. {
  183. Fn2=Fn2+2*xn2+1;
  184. xn2=xn2+1;m2-=1;
  185. stepx=0;Delay(25);
  186. stepx=1;Delay(25);
  187. }
  188. void     L3(void)
  189. {
  190. ccwx=1;ccwy=0;
  191. if(Fn3 〉=0)
  192.   {
  193.    Fn3=Fn3-2*xn3+1;
  194. xn3=xn3~1;m3-=1;
  195. stepx=0;Delay(25);
  196. stepx=1;Delay(25);}
  197. if(Fn3<0)
  198. {
  199. Fn3=Fn3+2*yn3+1;
  200. yn3=yn3+1;m3-=1;
  201. stepy=0;Delay(25);
  202. stepy=1;Delay(25);}
  203. void    L4(void)
  204.   ccwx=1;ccwy=1;if
  205.   (Fn4>=0)
  206.   {
  207.    Fn4=Fn4-2*yn4+1;
  208. yn4=yn4- 1;m4~=1;
  209. stepy=0;Delay(25);
  210. stepy=1;Delay(25);}
  211. if(Fn4<0)
  212.   {
  213. Fn4=Fn4+2*xn4+1;
  214. xn4=xn4+1;m4-=1;
  215. stepx=0;Delay(25);
  216. stepx=1;Delay(25);}
  217. 報警函數(shù)

  218. void   alarm(void)
  219.   {
  220.    for(i=0;i<200;i++)
  221.    {
  222.     LED=0;Delay(150);
  223. LED=1;Delay(150);
  224. //延時函數(shù)//
  225. void   Delay(int t)
  226. for(i=0;i<t;i++);
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表