一、系統(tǒng)硬件電路設(shè)計(jì) 系統(tǒng)硬件電路設(shè)計(jì)的主要內(nèi)容包括 CPU 的選型、1/0 口以及存儲(chǔ)器的擴(kuò)展電路、鍵盤(pán)-顯示電路、開(kāi)關(guān)量的輸入/輸出電路、步進(jìn)電機(jī)驅(qū)動(dòng)電路以及抗干擾電路等設(shè)計(jì),本章就這些內(nèi)容展開(kāi)研究、討論。圖 3.1 為數(shù)控系統(tǒng)總體設(shè)計(jì)框圖。 從圖中可以看出,系統(tǒng)選用ATMEL公司生產(chǎn)的8位單片機(jī)AT89S52作為控制核心考慮到數(shù)控系統(tǒng)程序代碼存儲(chǔ)量比較大,擴(kuò)展了一片 EPROM 芯片27512 用做程序存儲(chǔ)器:AT89S52芯片內(nèi)只有 256KB 的數(shù)據(jù)存儲(chǔ)器(RAM,而一般數(shù)控系統(tǒng)需要存儲(chǔ)的數(shù)據(jù)較多,必須外接數(shù)據(jù)存儲(chǔ)器芯片進(jìn)行適當(dāng)擴(kuò)展,故擴(kuò)展一片 SRAM 芯片6264 數(shù)據(jù)存儲(chǔ)器,用來(lái)存放用戶程序:鍵盤(pán)輸入電路采用一片 8279 芯片來(lái)管理;擴(kuò)展一片 8255 可編程接口芯片作為并行 O 口,步進(jìn)電機(jī)、切削液泵電機(jī)等控制信號(hào)都經(jīng) 8255 輸出,些進(jìn)/出的信號(hào)均做了隔離放大處理:系統(tǒng)采用 LCD 顯示,LCD的控制器選用 1602芯片。 系統(tǒng)硬件結(jié)構(gòu)確定之后,如何實(shí)現(xiàn)系統(tǒng)硬件具體結(jié)構(gòu),如何實(shí)現(xiàn)各種功能模塊電路成為硬件設(shè)計(jì)的核心內(nèi)容。實(shí)現(xiàn)同樣的功能,采用不同的電路和模式,其效果并不是完全相同。以下對(duì)本平臺(tái)中的各個(gè)單元模塊予以介紹。 1.CPU及存儲(chǔ)器的擴(kuò)展設(shè)計(jì) 1.1 數(shù)據(jù)存儲(chǔ)擴(kuò)展 在機(jī)電一體化設(shè)備的專(zhuān)用控制系統(tǒng)中,數(shù)據(jù)存儲(chǔ)器通常選用靜態(tài) RAM(SRAM)。因?yàn)樵谑褂肧RAM時(shí),無(wú)需考慮刷新問(wèn)題,且與 CPU 的接口較簡(jiǎn)單。常用的 SRAM 芯片主要有6116(2KX8位)、6264(8KX8位)、62256(32KX8位)、628128(128KX8位)等。本次設(shè)計(jì)中選用 6264 芯片,其中,Ai 是地址線;I/i 是雙向數(shù)據(jù)線;/CE 或/CS 是片選線;/0E是數(shù)據(jù)讀出選通線,通常與 CPU 芯片的/RD引腳相連:/WE 是數(shù)據(jù)寫(xiě)入選通線,一般與CPU的/WR引腳連接;VCC是工作電源,通常要求4.5V-5V。 數(shù)據(jù)存儲(chǔ)器的擴(kuò)展與程序存儲(chǔ)器的擴(kuò)展,在地址線的處理上是相同的,所不同的是除讀選通信號(hào)各異之外,尚需考慮寫(xiě)選通的控制問(wèn)題。 6264 芯片有一個(gè)片選/CS1,今用“3-8”譯碼器輸出引腳 CSO 來(lái)選通它;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ù)寫(xiě)允許引腳/WE 與CPU的WR連接可以算出6264的地址范圍是:0000H-FFFH。 在很多應(yīng)用場(chǎng)合,要求 SRAM 芯片內(nèi)部的數(shù)據(jù)在掉電后不丟失,這時(shí)就需要增加掉電保護(hù)電路。SRAM屬CMOS 芯片,靜態(tài)電流小,正常運(yùn)行時(shí)由電源對(duì)其供電,而在掉電狀態(tài)下,由小型蓄電池對(duì)其供電,連續(xù)掉電后,蓄電池可維持?jǐn)?shù)據(jù) 3-5 個(gè)月不丟失。 1.2 CPU的選擇 AT89S52是一種低功耗、高性能CMOS的8位微控制器,具有8K 在系統(tǒng)可編程Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè) 80C51產(chǎn)品指令和引存儲(chǔ)空間,如果不需要這一空間,可將其/EA 引腳接地:如果需要使用這部分空間,/EA引腳必須接高電平,且片外擴(kuò)展的 EPROM 地址應(yīng)從2000H開(kāi)始。 AT89S52單片機(jī)的 PO 口是分時(shí)復(fù)用的地址/數(shù)據(jù)總線,而且與 I/0 口線復(fù)用,為了將地址總線與數(shù)據(jù)總線分離出來(lái),以便同片外的電路正確連接,需要在單片機(jī)外部增加地址鎖存器,構(gòu)成片外三總線結(jié)構(gòu),一般常用鎖存器74LS373。 74LS373有直通、高阻、鎖存3個(gè)狀態(tài)。通過(guò)鎖存信號(hào)輸入端G和輸出允許控制信號(hào)輸入端/0E 組合,可實(shí)現(xiàn)上述3個(gè)狀態(tài)。當(dāng)三態(tài)門(mén)的/0E=0 且 G=1時(shí),三態(tài)門(mén)處于直通狀態(tài),允許 1Q-8Q 輸出到 Q0-Q7;當(dāng)/0E 為高電平時(shí),輸出三態(tài)門(mén)斷開(kāi),輸出線 Q0-Q7處于高阻狀態(tài):當(dāng)/0E=0且G 端出現(xiàn)下降沿時(shí),為鎖存狀態(tài)。74LS373 作為地址鎖存器時(shí),首先應(yīng)使三態(tài)門(mén)的使能信號(hào)/0E 為低電平,這時(shí),當(dāng)G輸入為高電平時(shí),鎖存器直通狀態(tài),此時(shí)輸出端Q0-Q7 狀態(tài)和輸入端 DO-D7 狀態(tài)相同;當(dāng)G端從高電平到低電平(下降沿)時(shí),輸入端1D-8D的數(shù)據(jù)鎖入 10-8Q的8位鎖存器,為鎖存狀。它的鎖存控制端G直接與單片機(jī)的鎖存控制信號(hào) ALE 相連,ALE 下降沿進(jìn)行低8 位地址鎖存,直到下一次 ALE 變高,地址才發(fā)生變化。 74LS138是一個(gè)廣泛應(yīng)用的地址譯碼器,3位輸入A BC對(duì)應(yīng)8位反向輸出YO-Y78選1,即YO-Y7 有一個(gè)輸出為低電平有效,作片選。 2.鍵盤(pán)電路和LCD顯示電路設(shè)計(jì) 鍵盤(pán)-顯示功能是數(shù)控系統(tǒng)中的一個(gè)很關(guān)鍵的部分,它能實(shí)現(xiàn)向系統(tǒng)輸入數(shù)據(jù)、傳達(dá)命令和顯示工作狀況等,是人工干預(yù)的主要依據(jù)和手段。 2.1鍵盤(pán)電路 鍵盤(pán)主要有獨(dú)立式和矩陣式。前者一個(gè)按鍵接一個(gè)輸入線,輸入口浪費(fèi)很大,用于按鍵數(shù)量較少的場(chǎng)合:后者多用按鍵較多的場(chǎng)合,可以節(jié)省很多 1/0 口。矩陣式鍵盤(pán)又可分為兩大類(lèi):無(wú)編碼器鍵盤(pán)和帶編碼器鍵盤(pán)。帶編碼器鍵盤(pán)采用硬件方法,當(dāng)按鍵按下時(shí)直接給出該鍵的鍵編碼,而且還能夠消除抖動(dòng)和解決重復(fù)鍵問(wèn)題。鍵盤(pán)編碼器有靜態(tài)編碼器,掃描式編碼器和反相編碼器等。無(wú)編碼器鍵盤(pán)采用軟件掃描法,逐行逐列地檢查鍵盤(pán)狀態(tài),當(dāng)發(fā)現(xiàn)有鍵按下時(shí),用計(jì)算的方法來(lái)得到該鍵的編碼。目前使用較多的是帶編碼器鍵盤(pán)。 INTEL8279是一種通用可編程鍵盤(pán)-顯示器接口芯片。它能完成鍵盤(pán)輸入和顯示控制兩種功能。鍵盤(pán)部分提供一種掃描工作方式,可于 64 個(gè)按鍵的矩陣鍵盤(pán)連接,能對(duì)鍵盤(pán)不斷掃描,自動(dòng)消抖,自動(dòng)識(shí)別出按下的鍵并給出編碼,能對(duì)雙鍵或n鍵同時(shí)按下實(shí)現(xiàn)保護(hù)。8279為40列引腳封裝。 
引腳簡(jiǎn)介: 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占用兩個(gè)端口地址。 3.控制線:8279的控制線較多。這里介紹系統(tǒng)設(shè)計(jì)中幾個(gè)用到的控制線 4.IRQ:中斷請(qǐng)求輸出線,高電平有效。 5SLO-SL3(掃描線):輸出線。這四條輸出線用來(lái)掃描鍵盤(pán)和顯示器。它們可以編程設(shè)定為編碼輸出(16 中取 1)或譯碼輸出(4 中取1)。 6.RLO-RL7(回復(fù)線):輸入線。它們是鍵盤(pán)矩陣或傳感器矩陣的列信號(hào)輸入線。 7.SHIFT(移位信號(hào)):輸入線,高電平有效。該輸入信號(hào)是 8279 鍵盤(pán)數(shù)據(jù)的次高位D6,通常用來(lái)補(bǔ)充鍵盤(pán)開(kāi)關(guān)的功能,可以用作鍵盤(pán)上、下檔功能鍵,在傳感器方式和選通方式中,SHIFT 無(wú)效。 8.CNTL/STB(控制/選通):輸入線,高電平有效。在鍵盤(pán)方式時(shí),該輸入信號(hào)是鍵盤(pán)數(shù)據(jù)的最高位 D7,通常用來(lái)擴(kuò)充鍵開(kāi)關(guān)的控制功能,做控制功能鍵用。 本節(jié)著重介紹系統(tǒng)中可編程 I/0 接口芯片的電路設(shè)計(jì)。 可編程1/0接口芯片種類(lèi)很多,常用的有 Intel 公司的外圍器件,如可編程外圍并行接口8255A、可編程RAM/I0擴(kuò)展接口8155、可編程鍵盤(pán)/顯示接口8279、可編程定時(shí)/計(jì)數(shù)器8253、可編程串行通訊接口 8251等。這些芯片都具有多種工作方式,可由CPU對(duì)其編程進(jìn)行決定。下面對(duì) 8255A、8253在本平臺(tái)中的運(yùn)用進(jìn)行詳細(xì)介紹。 2.2可編程外圍并行接口設(shè)計(jì) 本系統(tǒng)中所要控制的外部設(shè)備主要有兩個(gè)步進(jìn)電機(jī)(根據(jù)自制的步進(jìn)電機(jī)驅(qū)動(dòng)器需要用8個(gè)輸出口),加上上下左右的4個(gè)鍵盤(pán)輸口,選用8255A 可編程外圍并行接口芯片。 
可編程輸入/輸出接口芯片 8255A 的引腳如圖 3.5所示。D是雙向數(shù)據(jù)線:/CS是片選線:/RD 是數(shù)據(jù)讀出選通線,通常與 CPU 芯片的/RD引腳相連;/WR 是數(shù)據(jù)寫(xiě)入選通線,一般與CPU的/WR引腳連接:PA口是8位數(shù)據(jù)輸出口,既有上拉又有下拉總線保持器;PB 口是8位數(shù)據(jù)輸入/輸出口,只有上拉總線保持器;PC 口是8位數(shù)據(jù)輸入(無(wú)所存)/輸出(帶緩沖器)口,在方式控制下可分作兩個(gè) 4 位端口用,每個(gè) 4位口都有一個(gè)4位所存器,這兩個(gè)4位端口可與A及B口配合使用,輸出控制信號(hào)輸入狀態(tài)信息,PC 口的保持結(jié)構(gòu)與 B口相同。 向8255A 控制口寫(xiě)入控制字可決定它的工作方式,并且只有先寫(xiě)入控制字,才能通過(guò)三個(gè)數(shù)據(jù)口實(shí)現(xiàn)正確的I/0操作。它的3個(gè)I/0并行口 PA、PB、PC可選擇三種工作方式:方式0為基本的輸入輸出:方式1為選通輸入輸出:方式2 為雙向傳送8255A 還能對(duì)C端口的任一位進(jìn)行置位/復(fù)位操作。 3.步進(jìn)電機(jī)控制設(shè)計(jì) 步進(jìn)電機(jī)是一種通過(guò)電脈沖信號(hào)控制相繞組電流實(shí)現(xiàn)定角轉(zhuǎn)動(dòng)的機(jī)電元件,與其他類(lèi)型電機(jī)相比具有易于開(kāi)環(huán)精確控制、無(wú)積累誤差等優(yōu)點(diǎn),在眾多領(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)示意圖,它的定子具有均勻分布的六個(gè)磁極,磁極上繞有繞組。兩個(gè)相對(duì)的磁極組成一組,連法如圖 3.6 所示。 下面介紹反應(yīng)式步進(jìn)電動(dòng)機(jī)單三拍、六拍及雙三拍通電方式的基本原理。反應(yīng)式進(jìn)電機(jī)的工作原理是利用了物理上的“磁通總是力圖使自己所通過(guò)的路徑的磁阻最小所產(chǎn)生的磁阻轉(zhuǎn)矩,使電機(jī)一步一步轉(zhuǎn)動(dòng)的。以三相反應(yīng)式步進(jìn)電機(jī)為例。 1、單三拍通電方式的基本原理 設(shè)A 相首先通電 (B、C 兩相不通電),產(chǎn)生 A-A軸線方向的磁通,并通過(guò)轉(zhuǎn)子形成閉合回路。這時(shí) A、A’極就成為電磁極鐵的 N、S 極。在磁場(chǎng)的作用下,轉(zhuǎn)子總是力圖轉(zhuǎn)到磁阻最小的位置,也就是要轉(zhuǎn)到轉(zhuǎn)子的齒對(duì)齊 A、A’極的位置(圖 3.7a);接著B(niǎo)相通電(A、C兩相不通電),轉(zhuǎn)子便順時(shí)針?lè)较蜣D(zhuǎn)過(guò) 30°,它的齒和C、C’極對(duì)齊(圖c)。不難理解,當(dāng)脈沖信號(hào)一個(gè)一個(gè)發(fā)來(lái)時(shí),如果按 A一C一B一A一···的順序通電,則電機(jī)轉(zhuǎn)子逆時(shí)針?lè)较蜣D(zhuǎn)動(dòng)。這種通電方式稱(chēng)為單三拍方式。 2、六拍通電方式的基本原理 
設(shè)A相首先通電,轉(zhuǎn)子齒與定子A、A’對(duì)齊(圖3.7a),然后在A 相繼續(xù)通電的情況下接通B相。這時(shí)定子 B、B’極對(duì)轉(zhuǎn)子齒 2、4產(chǎn)生磁拉力,使轉(zhuǎn)子順時(shí)針?lè)较蜣D(zhuǎn)動(dòng)但是 A、A’極繼續(xù)拉住齒 1、3,因此,轉(zhuǎn)子轉(zhuǎn)動(dòng)兩個(gè)磁拉力平衡為止。這時(shí)轉(zhuǎn)子的位置如圖 3.7b 所示,即轉(zhuǎn)子從圖 3.7a 位置順時(shí)針轉(zhuǎn)過(guò)了巧“。接著A相斷電,B相繼續(xù)通電。這時(shí)轉(zhuǎn)子齒2、4和定子 B、B’極對(duì)齊(圖3.7c),轉(zhuǎn)子從圖3.8(b)的位置又轉(zhuǎn)過(guò)了15“。其位置如圖3.8d所示。這樣,如果按 A-A、B-B-B、C-C-C、A一A.二的順序輪流通電,則轉(zhuǎn)子便順時(shí)針?lè)较蛞徊揭徊降剞D(zhuǎn)動(dòng),步距角 15°。電流換接六次,磁場(chǎng)旋轉(zhuǎn)一周,轉(zhuǎn)子前進(jìn)了一個(gè)齒距角。如果按 A一A、C-C-C、B一B一B、A一A.二的順序通電,則電機(jī)轉(zhuǎn)子逆時(shí)針?lè)较蜣D(zhuǎn)動(dòng)。這種通電方式稱(chēng)為六拍方式功能來(lái)實(shí)現(xiàn)。 3、轉(zhuǎn)矩的選擇 步進(jìn)電機(jī)轉(zhuǎn)矩的選擇包括四個(gè)方面:最大靜轉(zhuǎn)矩、啟動(dòng)轉(zhuǎn)矩、矩頻特性、定位轉(zhuǎn)矩最大靜轉(zhuǎn)矩是指步進(jìn)電動(dòng)機(jī)在通電狀態(tài)下,使轉(zhuǎn)子離開(kāi)平衡位置時(shí)的極限力矩值,它反映了步進(jìn)電動(dòng)機(jī)承受外加轉(zhuǎn)矩的特性;啟動(dòng)轉(zhuǎn)矩是指步進(jìn)電動(dòng)機(jī)單相繞組勵(lì)磁時(shí)所能帶動(dòng)的極限負(fù)載轉(zhuǎn)矩:矩頻特性是指輸出轉(zhuǎn)矩與頻率的關(guān)系,一般來(lái)一說(shuō),隨著運(yùn)行頻率的提高,輸出轉(zhuǎn)矩逐漸下降;定位轉(zhuǎn)矩是指步進(jìn)電機(jī)在斷電狀態(tài)下定位時(shí)所需的轉(zhuǎn)矩。當(dāng)注意的是,步進(jìn)電動(dòng)機(jī)的輸出轉(zhuǎn)矩不僅與電動(dòng)機(jī)本身的最大靜轉(zhuǎn)矩和矩頻特性有關(guān),而且還與驅(qū)動(dòng)電源有著很大的關(guān)系。 4、連續(xù)運(yùn)行頻率的選擇 步進(jìn)電動(dòng)機(jī)啟動(dòng)后,不失步地連續(xù)升速,所能達(dá)到的最高頻率,稱(chēng)作連續(xù)運(yùn)行頻率。產(chǎn)品樣本所提供的極限運(yùn)行頻率,是指電動(dòng)機(jī)在空載時(shí)的最高運(yùn)行頻率。帶載時(shí)的極限運(yùn)行頻率要根據(jù)負(fù)載轉(zhuǎn)矩的大小,從矩頻特性曲線上查找。 5.啟動(dòng)頻率的選擇 步進(jìn)電動(dòng)機(jī)不同于一般電動(dòng)機(jī),它的啟動(dòng)概念和不失步聯(lián)系在一起。廠家提供的步進(jìn)電動(dòng)機(jī)啟動(dòng)頻率,是指步進(jìn)電動(dòng)機(jī)空載時(shí)的極限啟動(dòng)頻率。電動(dòng)機(jī)帶載后,啟動(dòng)頻率要下降。啟動(dòng)頻率主要取決于負(fù)載的轉(zhuǎn)動(dòng)慣量,二者之間的關(guān)系可以用啟動(dòng)慣頻特性曲線來(lái)描述。用戶可以根據(jù)廠家提供的啟動(dòng)慣頻特性曲線來(lái)決定帶載時(shí)的啟動(dòng)頻率。 綜合上述因素,進(jìn)給系統(tǒng)選用三洋 57 型步進(jìn)電機(jī),其額定轉(zhuǎn)矩為 20Nm,相數(shù)為 2,步距角為 0.9/1.8度,可以對(duì)其進(jìn)行兩相兩拍、兩相四拍控制。 3.2步進(jìn)電機(jī)驅(qū)動(dòng)與隔離選擇 由于步進(jìn)電機(jī)的大功率、高電平會(huì)對(duì)單片機(jī)產(chǎn)生比較嚴(yán)重的干擾,不能直接把單片機(jī)產(chǎn)生的控制信號(hào)直接連在步進(jìn)電機(jī)上,需要進(jìn)行強(qiáng)弱電隔離。在實(shí)際運(yùn)用中,對(duì)于強(qiáng)弱電隔離一般采用電子開(kāi)關(guān)方法或光電隔離的方法。由于步進(jìn)電機(jī)工作需要較大的功率所以通常需要使用功率放大器來(lái)提供步進(jìn)電機(jī)的工作電流,將光電隔離器送來(lái)的弱電信號(hào)變?yōu)閺?qiáng)電信號(hào),可以采用集成功放,也可以采用分立元件。本系統(tǒng)使用 TLP521GB 光電耦合芯片。 由于步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換成直線或角位移的執(zhí)行元件,它不能直接接到交直流電源上.而必須使用專(zhuān)用設(shè)備-步進(jìn)電機(jī)控制驅(qū)動(dòng)器。典型步進(jìn)電機(jī)控制系統(tǒng)中的控制器可以發(fā)出脈沖頻率從幾赫茲到幾十千赫茲連續(xù)變化的脈沖信號(hào),它為環(huán)形分配器提供脈沖序列。環(huán)形分配器的主要功能是把來(lái)自控制環(huán)節(jié)的脈沖序列按一定的規(guī)律分配后,經(jīng)過(guò)功率放大器的放大加到步進(jìn)電機(jī)驅(qū)動(dòng)電源的各項(xiàng)輸人端,以驅(qū)動(dòng)步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)。環(huán)形分配器主要有兩大類(lèi):一類(lèi)是用計(jì)算機(jī)軟件設(shè)計(jì)的方法實(shí)現(xiàn)環(huán)分器要求的功能,通常稱(chēng)軟環(huán)形分配器。另一類(lèi)是用硬件構(gòu)成的環(huán)形分配器,通常稱(chēng)為硬環(huán)形分配器。功率放大器主要對(duì)環(huán)形分配器的較小輸出信號(hào)進(jìn)行放大,以達(dá)到驅(qū)動(dòng)步進(jìn)電機(jī)目的。L298N 是ST 公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動(dòng)芯片。該芯片采用 15 腳封裝主要特點(diǎn)是:工作電壓高,最高工作電壓可達(dá) 46V;輸出電流大,瞬間峰值電流可達(dá) 3A,持續(xù)工作電流為 2A;額定功率 25W。內(nèi)含兩個(gè)H橋的高電壓大電流全橋式驅(qū)動(dòng)器,可以用來(lái)驅(qū)動(dòng)直流電動(dòng)機(jī)和步進(jìn)電動(dòng)機(jī)、繼電器線圈等感性負(fù)載:采用標(biāo)準(zhǔn)邏輯電平信號(hào)控制;具有兩個(gè)使能控制端,在不受輸入信號(hào)影響的情況下允許或禁止器件工作有一個(gè)邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測(cè)電阻,將變化量反饋給控制電路。使用 L298N 芯片驅(qū)動(dòng)電機(jī),該芯片可以驅(qū)動(dòng)一臺(tái)兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可以驅(qū)動(dòng)兩臺(tái)直流電機(jī)?梢灾苯佑脝纹瑱C(jī)的 I/O 口提供信號(hào):而且電路簡(jiǎn)單,使用比較方便。L298N 可接受標(biāo)準(zhǔn)TTL邏輯電平信號(hào) VSS,VSS 可接4.5~7V電壓。4腳VS 接電源電壓,VS 電壓范圍VIH為+25~46V。輸出電流可達(dá)2.5A,可驅(qū)動(dòng)電感性負(fù)載。1 腳和 15 腳下管的發(fā)射極分別單獨(dú)引出以便接入電流采樣電阻,形成電流傳感信號(hào)。L298 可驅(qū)動(dòng) 2個(gè)電動(dòng)機(jī),OUT1,OUT2 和OUT3,OUT4 之間可分別接電動(dòng)機(jī),本實(shí)驗(yàn)裝置我們選用驅(qū)動(dòng)一臺(tái)電動(dòng)機(jī)。5,7,10,12 腳接輸入控制電平,控制電機(jī)的正反轉(zhuǎn)。EnA,EnB 接控制使能端,控制電機(jī)的停轉(zhuǎn)。 
In1,In2的邏輯圖與圖3.9相同。由圖可知 EnA 為低電平時(shí),輸入電平對(duì)電機(jī)控制起作用,當(dāng) EnA 為高電平,輸入電平為一高一低,電機(jī)正或反轉(zhuǎn)。同為低電平電機(jī)停止,同為高電平電機(jī)剎停。4.系統(tǒng)抗干擾措施 控制系統(tǒng)都工作在一定的環(huán)境條件下。環(huán)境中必然存在各種產(chǎn)生電磁場(chǎng)的因素,這些磁場(chǎng)能量會(huì)通過(guò)一定的途徑傳入單片機(jī)控制系統(tǒng),產(chǎn)生系統(tǒng)正常工作所不需要的信號(hào),影響了單片機(jī)的正常工作。同時(shí),單片機(jī)內(nèi)部也會(huì)產(chǎn)生影響正常工作的信號(hào)。一般把上述所說(shuō)影響正常工作的信號(hào)稱(chēng)為噪聲,也就是干擾。在單片機(jī)控制系統(tǒng)出現(xiàn)干擾就會(huì)影響指令的正常執(zhí)行。 環(huán)境對(duì)單片機(jī)控制系統(tǒng)的干擾一般都是以脈沖的形式進(jìn)入系統(tǒng)的,干擾竄入系統(tǒng)的渠道主要有 3條,即空間干擾、供電系統(tǒng)干擾、過(guò)程通道干擾。一般情況下,空間干擾在強(qiáng)度上遠(yuǎn)小于其它兩個(gè)渠道進(jìn)入系統(tǒng)的干擾,而且空間干擾可用良好的屏蔽與正確的接地,或采用高頻濾波器加以解決。因此,抗干擾的重點(diǎn)應(yīng)放在供電系統(tǒng)和過(guò)程干擾通道的干擾。系統(tǒng)的抗干擾措施可以從硬件和軟件兩方面著手。 4.1硬件抗干擾技術(shù) 硬件系統(tǒng)的抗干擾設(shè)計(jì)特別重要,必須要在硬件設(shè)計(jì)的初始階段就要考慮各種干擾因素,否則在系統(tǒng)調(diào)試時(shí)將會(huì)非常困難,增加系統(tǒng)調(diào)試的時(shí)間和費(fèi)用。 單片機(jī)控制系統(tǒng)通常可由幾塊印刷電路板組成,各板之間以及各板與基準(zhǔn)電源之間經(jīng)常選用接插針相聯(lián)系。在接插件的插針之間也易造成干擾,這些干擾與接插件插針之間的距離都有關(guān)系。在設(shè)計(jì)時(shí)要注意四個(gè)問(wèn)題:合理地設(shè)置接插件:2插座上要話當(dāng)增加接地針數(shù);3信號(hào)針盡量分散配置,增大彼此之間的距離;@考慮到信號(hào)的翻轉(zhuǎn)時(shí)差,把不同時(shí)刻翻轉(zhuǎn)的插針?lè)旁谝黄,同時(shí)翻轉(zhuǎn)的插針盡量遠(yuǎn)離,因?yàn)橥瑫r(shí)翻轉(zhuǎn)會(huì)使干擾疊加。 印刷電路板是器件、信號(hào)線、電源線的高密度集合體,電路板的布線和布局好壞對(duì)可靠性影響很大。制作電路板時(shí)要注意以下幾個(gè)事項(xiàng):D電路板大小要適中,元件布局時(shí)相關(guān)盡量靠近:2電源線和地線與數(shù)據(jù)線傳輸方向要一致,這樣有助于增強(qiáng)抗干擾能力;3地線盡量加寬,數(shù)據(jù)地線、模擬地線要分開(kāi),配置必要的去藕電容。 4.2軟件抗干擾抗術(shù) 控制系統(tǒng)軟件設(shè)計(jì)對(duì)提高系統(tǒng)的可靠性,提高抗干擾性能意義很大。一個(gè)好的軟件設(shè)計(jì),要充分考慮采取必要的抗干擾措施,利用軟、硬件相結(jié)合的措施實(shí)現(xiàn)系統(tǒng)抗干擾,這也是單片機(jī)控制系統(tǒng)具有的優(yōu)點(diǎn)之一。 1.軟件冗余 軟件冗余技術(shù)就是多次使用同一功能的軟件指令,以保證指令執(zhí)行的可靠性,常從以下幾個(gè)方面考慮。 (1) 采用多次讀入法,確保開(kāi)關(guān)量輸入正確無(wú)誤。重要的輸入信息利用軟件多讀入,比較幾次結(jié)果一致再讓其參與運(yùn)算。對(duì)于按鈕和開(kāi)關(guān)狀態(tài)讀入時(shí),要配合軟件延時(shí)可消除抖動(dòng)和誤操作。 (2) 不斷輸出狀態(tài)寄存器,及時(shí)糾正輸出狀態(tài)。設(shè)置輸出狀態(tài)寄存器,利用軟件不斷查詢,當(dāng)發(fā)現(xiàn)和輸出的不一致時(shí),及時(shí)糾正,防止由于干擾引起的輸出變化導(dǎo)致設(shè)備誤動(dòng)作。 (3)對(duì)于條件控制系統(tǒng),把對(duì)控制條件的一次采樣、處理控制輸出改為循環(huán)地采樣。這種方法對(duì)于慣性較大的控制系統(tǒng)具有良好的抗干擾作用。 (4)為防止計(jì)算錯(cuò)誤,可采用兩組計(jì)算程序,分別計(jì)算,然后將兩組計(jì)算結(jié)果進(jìn)行比較,如兩次計(jì)算結(jié)果相同,則將結(jié)果輸出。如果出現(xiàn)誤差,則再進(jìn)行一次運(yùn)算,重新比較,直到結(jié)果相同,才認(rèn)為計(jì)算正確。 軟件冗余技術(shù)是提高軟件設(shè)計(jì)可靠性,防止干擾造成誤差,保證控制系統(tǒng)正常運(yùn)行的有力措施。至于在什么地方采用冗余,是根據(jù)在軟件設(shè)計(jì)過(guò)程中的薄弱環(huán)節(jié)和在硬件上易于受到干擾部位而定。采用軟件冗余技術(shù),可使程序運(yùn)轉(zhuǎn)的可靠性大大提高。 對(duì)于AT89S52 單片機(jī)來(lái)說(shuō),所有的指令都不會(huì)超過(guò)三個(gè)字節(jié),因此在某條關(guān)鍵的指令前插入兩條“NOP”指令,則該條指令不會(huì)因程序跑飛而跳過(guò)沒(méi)有被執(zhí)行,造成整個(gè)程序的混亂。這些關(guān)鍵的指令一般為:RET、RETI、ACALL、LCALL、AJMP、LJMP、JZ、州Z、JC、JNC、JB、JBC、DJNZ、CJNE 等。同樣可以在某些對(duì)系統(tǒng)狀態(tài)起關(guān)鍵作用的指令前加上冗余指令。 2.增加程序監(jiān)視系統(tǒng) 利用設(shè)置軟件陷阱的辦法雖然在一定程度上解決了程序“飛出”失控問(wèn)題,但在程序執(zhí)行過(guò)程中若進(jìn)入死循環(huán),無(wú)法撞上陷阱,就會(huì)使程序運(yùn)行不下去。因此設(shè)置陷阱的辦法不能有效的解決死循環(huán)問(wèn)題。設(shè)置程序監(jiān)視器(Watchdog)可比較有效的解決死循環(huán)問(wèn)題。程序監(jiān)視器系統(tǒng)有的采用軟件解決,大部分都是采用軟硬件相結(jié)合的辦法。 本系統(tǒng)采用單片機(jī)內(nèi)部定時(shí)器進(jìn)行監(jiān)視,其方法是在程序一開(kāi)始就啟動(dòng)定時(shí)器工作,在主程序中增設(shè)定時(shí)器賦值指令,使該定時(shí)器維持在非溢出工作狀態(tài)。定時(shí)器要稍大于程序一次循環(huán)的執(zhí)行時(shí)間。程序正常循環(huán)執(zhí)行一次給定定時(shí)器送一次初值,使其不能溢出。若程序失控,定時(shí)器則計(jì)滿溢出中斷,在中斷服務(wù)程序中使主程序自動(dòng)復(fù)位又進(jìn)行初始狀。 5.開(kāi)關(guān)量輸入、輸出通道設(shè)計(jì) 5.1有觸點(diǎn)開(kāi)關(guān)量 有觸點(diǎn)開(kāi)關(guān)也稱(chēng)機(jī)械式開(kāi)關(guān),比如行程開(kāi)關(guān)、控制按鈕、繼電器、接觸器等。有觸點(diǎn)開(kāi)關(guān)分為常開(kāi)、常閉兩種方式,其顯著特點(diǎn)是無(wú)源,開(kāi)、閉時(shí)均會(huì)產(chǎn)生抖動(dòng),所以在實(shí)際應(yīng)用中需要采取措施消除抖動(dòng)。 在機(jī)械有觸點(diǎn)開(kāi)關(guān)中,當(dāng)觸點(diǎn)閉合或打開(kāi)時(shí)將產(chǎn)生抖動(dòng),使得開(kāi)關(guān)量在瞬間的狀態(tài)不穩(wěn),由于機(jī)械觸點(diǎn)的彈性作用,按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開(kāi)時(shí)也不會(huì)立即斷開(kāi)。因而在閉合及斷開(kāi)的瞬間均伴隨一連串的抖動(dòng),抖動(dòng)的時(shí)間長(zhǎng)短中按鍵的機(jī)械特性決定,一般為5到10ms。若是工作在計(jì)數(shù)器方式或作為中斷輸入,將導(dǎo)致系統(tǒng)工作不正常,因此消除抖動(dòng)是十分必要的。消除按鍵抖動(dòng)通常有兩種方法:硬件消除抖動(dòng)和軟件消抖。 硬件消除抖動(dòng)是通過(guò)在按鍵輸出電路上加一定的硬件線路來(lái)消除抖動(dòng),一般采用R-S 觸發(fā)器或單穩(wěn)態(tài)電路。軟件消除抖動(dòng)是利用延時(shí)來(lái)跳過(guò)抖動(dòng)動(dòng)作過(guò)程,當(dāng)判斷有按鍵按下后,先執(zhí)行一段大于 10ms 的延時(shí)程序再去判斷按下的鍵位是哪一個(gè),從而消除抖動(dòng)的影響。本系統(tǒng)采用軟件消除抖動(dòng)。 5.2開(kāi)關(guān)量輸入通道 開(kāi)關(guān)量輸入通道也稱(chēng)數(shù)字量輸入通道,它是將用雙值邏輯“1’和“0’表示的電壓或電流的開(kāi)關(guān)量,轉(zhuǎn)換為計(jì)算機(jī)能夠識(shí)別的數(shù)字量。典型的開(kāi)關(guān)量輸入通道通常由以下幾個(gè)部分組成: (1)信號(hào)變換器 將工業(yè)過(guò)程的非電量或電磁量轉(zhuǎn)換為電壓或電流的雙值邏輯值比如有觸點(diǎn)的機(jī)械開(kāi)關(guān)或無(wú)觸點(diǎn)的接近開(kāi)關(guān)等。 (2) 整形變換電路 將混有毛刺之類(lèi)干擾的雙值邏輯信號(hào),或前后沿不合要求的輸入信號(hào),整形為接近理想狀態(tài)的方波。 (3)電平變換電路 將輸入的雙值邏輯電平轉(zhuǎn)換成與 CPU 兼容的邏輯電平 二、系統(tǒng)軟件設(shè)計(jì) 控系統(tǒng)軟件是為實(shí)現(xiàn)數(shù)控系統(tǒng)各項(xiàng)功能而編制的專(zhuān)用軟件,即存放于內(nèi)存儲(chǔ)器中的系統(tǒng)程序。由于數(shù)控系統(tǒng)的功能設(shè)置與控制方案各不相同,在結(jié)構(gòu)和規(guī)模上差別很大般來(lái)說(shuō),功能越多,所需要的系統(tǒng)程序越長(zhǎng),所占內(nèi)存空間越大。系統(tǒng)程序的設(shè)計(jì)直接關(guān)系到數(shù)控系統(tǒng)各項(xiàng)功能的實(shí)現(xiàn)及其將來(lái)的擴(kuò)展,所以它是整個(gè)數(shù)控系統(tǒng)研制工作中的關(guān)鍵,也是工作量最大的部分。一般數(shù)控系統(tǒng)軟件設(shè)計(jì)的原則是,在條件允許的情況下,減少硬件電路,降低成本,盡可能地用軟件來(lái)代替硬件。系統(tǒng)軟件必須完成管理和控制兩項(xiàng)仟?jiǎng)?wù),數(shù)控裝置的管理任務(wù)一般包括編輯輸入、I/0 處理、顯示、診斷等,控制任務(wù)包括譯碼、刀具補(bǔ)償、速度處理、插補(bǔ)、位置控制等。 本系統(tǒng)的軟件設(shè)計(jì)主要分為系統(tǒng)初始化、按鍵、顯示處理及控制脈沖輸出幾部分,事實(shí)上每一部分都是緊密相關(guān)的,每個(gè)功能模塊對(duì)于整體設(shè)計(jì)都是非常重要,單片機(jī)AT89C2051 通過(guò)軟件編程才能使系統(tǒng)真正的運(yùn)行起來(lái),軟件設(shè)計(jì)的好壞也直接決定了系統(tǒng)的運(yùn)行質(zhì)量。 程序流程圖的設(shè)計(jì)遵循自頂向下的原則,即從主體遂逐步細(xì)分到每一個(gè)模塊的流程。在流程圖中把設(shè)計(jì)者的控制過(guò)程梳理清楚。本程序主要由鍵盤(pán)程序、顯示器程序、步進(jìn)電機(jī)驅(qū)動(dòng)程序三部份組成,主程序首先初始化各變量,將顯示器消隱,步進(jìn)電機(jī)驅(qū)動(dòng)的各引腳均輸出高電平,便進(jìn)入待機(jī)狀態(tài),等待鍵入相應(yīng)操作。然后調(diào)用鍵盤(pán)程序,并作判斷,如果有鍵按下,則調(diào)用鍵盤(pán)處理程序。在各個(gè)調(diào)用程序中相應(yīng)的編入顯示的程序。 1.系統(tǒng)軟件的總體框架簡(jiǎn)介 在此運(yùn)行模塊中,在開(kāi)啟定時(shí)器后,便進(jìn)入速度檔位顯示和允許操作鍵盤(pán)掃描判斷程序。在連續(xù)運(yùn)行模式中“拍數(shù)”和“模式”鍵不可用,“上升”和“下降”鍵為速度調(diào)節(jié)鍵。數(shù)控系統(tǒng)軟件具有多任務(wù)性和實(shí)時(shí)性兩大特點(diǎn)。編輯輸入、預(yù)處理、顯示、插補(bǔ)、進(jìn)給控制等任務(wù)需并行及時(shí)處理。所以要采用并行處理技術(shù)確定軟件各模塊的結(jié)構(gòu)。并行處理技術(shù)的方法很多,本系統(tǒng)由于是單 CPU的數(shù)控裝置,因而在軟件設(shè)計(jì)中采用資源分時(shí)并行處理技術(shù)。一般地采用資源分時(shí)共享方法是:各個(gè)任務(wù)按其需要時(shí)間的長(zhǎng)短被分割成一個(gè)個(gè)子任務(wù),系統(tǒng)采用時(shí)循環(huán)調(diào)度和優(yōu)先搶占調(diào)度相結(jié)合的方法完成各任務(wù),所以資源分時(shí)共享的并行處理只具有宏觀上的意義,從微觀上看來(lái),各個(gè)任條還是順序執(zhí)行的。并行處理中的信息交換主要通過(guò)設(shè)置各種緩沖存儲(chǔ)區(qū)來(lái)實(shí)現(xiàn)。零件程序首先通過(guò)編輯輸入程序的處理存入加工程序緩沖存儲(chǔ)區(qū),這是一個(gè)循環(huán)存儲(chǔ)隊(duì)列,然后插補(bǔ)準(zhǔn)備程序(包括譯碼、刀具補(bǔ)償和速度處理)從加工程序存儲(chǔ)區(qū)將一個(gè)程序段的數(shù)據(jù)讀入譯碼緩沖存儲(chǔ)區(qū),進(jìn)行譯碼、刀具補(bǔ)償和速度處理,并將結(jié)果放入插補(bǔ)緩沖存儲(chǔ)區(qū)。插補(bǔ)程序在每次執(zhí)行一個(gè)程序段的插補(bǔ)運(yùn)算時(shí),將插補(bǔ)緩沖存儲(chǔ)區(qū)的內(nèi)容讀入插補(bǔ)工作存儲(chǔ)區(qū),用插補(bǔ)工作存儲(chǔ)區(qū)的數(shù)據(jù)進(jìn)行插補(bǔ)計(jì)算并將結(jié)果送到插補(bǔ)輸出寄存器。各緩沖區(qū)數(shù)據(jù)交換和更新的同步依靠同步信號(hào)指針實(shí)現(xiàn),從而保證了信息的正確傳輸。分時(shí)并行處理技術(shù)主要需解決的問(wèn)題是,充分利用計(jì)算機(jī)的高速數(shù)據(jù)計(jì)算和處理能力,保證每個(gè)任務(wù)的合理響應(yīng)時(shí)間。 本系統(tǒng)軟件總體結(jié)構(gòu)采用前后臺(tái)型。這種模式將數(shù)控系統(tǒng)分成兩部分:前臺(tái)程序和后臺(tái)程序。前臺(tái)程序?yàn)閷?shí)時(shí)中斷程序,承擔(dān)了幾乎全部實(shí)時(shí)任務(wù),實(shí)現(xiàn)插補(bǔ)、位置控制、開(kāi)關(guān)控制等實(shí)時(shí)功能;后臺(tái)程序是一個(gè)循環(huán)運(yùn)行程序,實(shí)現(xiàn)加工程序的輸入和預(yù)處理以及管理的各項(xiàng)任務(wù)。后臺(tái)程序是本系統(tǒng)的主程序,主要功能是完成整個(gè)系統(tǒng)的管理和調(diào)度,并完成實(shí)時(shí)插補(bǔ)前的各項(xiàng)控制任務(wù)。 系統(tǒng)啟動(dòng)和復(fù)位重新啟動(dòng)后,先進(jìn)入開(kāi)機(jī)界面,稍后自動(dòng)進(jìn)入系統(tǒng)初始化子程序?yàn)橄到y(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)能及時(shí)獲得操作員的操作控制信號(hào)。 圖4.1為正常加工狀態(tài)下背景程序的軟件度管理主流程圖。初始化工作完成后,系統(tǒng)進(jìn)入背景程序的循環(huán)中,調(diào)度系統(tǒng)工作于編輯、手動(dòng)、自動(dòng)、模擬和對(duì)刀等工作方式中。編輯工作方式使背景程序進(jìn)入鍵盤(pán)輸入處理程序,用來(lái)進(jìn)行程序的編制、修改和存儲(chǔ);手動(dòng)工作方式使背景程序進(jìn)入手動(dòng)方式處理程序,按操作面板上的操作狀態(tài)轉(zhuǎn)入不同的處理分支,在實(shí)時(shí)時(shí)鐘中斷服條程序和點(diǎn)動(dòng)處理程序的配合下,實(shí)現(xiàn)各種手動(dòng)功能,自動(dòng)工作方式是對(duì)零件進(jìn)行自動(dòng)加工的一種方式,自動(dòng)處理程序及時(shí)完成各程序段插補(bǔ)前的預(yù)處理并完成實(shí)時(shí)加工控制。 附錄2:單片機(jī)程序清單 - #include <reg51. H> //x軸半/全步設(shè)定
- sbit hfx= P(f7; sbit //x軸正反轉(zhuǎn)設(shè)定
- ccwx= P20; sbit //x軸脈沖設(shè)定
- stepx= P21; sbit //y軸半/全步設(shè)定
- hfy=P2"2;sbit ccwy //y軸正反轉(zhuǎn)設(shè)定
- =P2 3;sbit stepy = 7/y軸脈沖設(shè)定
- P2 4; sbit LED = "報(bào)警
- P2"5; sbit K1 = P2^7; //確定步進(jìn)電機(jī)工作
- sbit shift =P31; //圓、直線轉(zhuǎn)換
- int a[]={0x3F,0x06,0x5B,0x4F,0x66,
- 0x6D,0x7D,Ox07,0x7F,0x6F,0x77,
- 0x7C,0x39,0x5E,0x79,0x71}; //數(shù)碼管顯示代碼
- Static int Fn1=0;static int Fn2=0;
- Static int Fn3=0;static int Fn4=0
- Static int Fn=0;
- Static int xn1,yn1;
- Static int xn2,yn2;
- Static int xn3,yn3;
- Static int xn4,yn4;
- Int cntx=0;
- Int cnty=0;
- Int m1,m2.m3,m4,m;
- Static int kx,ky,i,mO;
- Void circle(void);//函數(shù)聲明
- Void alarm(void);
- Void Delay(int t);
- Void line (void);
- Void LI(void);
- Void L2(void);
- Void L3(void);
- void main(void)
- EA =1: //開(kāi)中斷
- ITO=1;
- EXO=1;
- TT1=1;
- EXl=1;
- while(K1);if
- (shift^0)
- circle();
- if(shift=1) //調(diào)用兩圓子程序
- line();
- } //調(diào)用岡直線子程序
-
- /*外部中斷0程序*1
- void intO(void)interrupt 0 using 1{
- Delay(2000);
- cntx++;
- cntx%:16;
- ynl=0;
- xnl=10 氺 cntx;
- xn2=0;
- yn2=10氺cntx;
- yn3=0;
- xn3=10氺cntx;
- xn4=0;
- yn4=10氺cntx;
- Pl=~a[cntx];
- kx=5氺cntx;
- }
-
- / * 外 部 中 斷 1 程 序 * /
- void inti(void)interrupt 2 using 2
- Delay(2000);
- cnty++;
- Cnty%16;
- P0=~a[cnty];
- Ky=5氺cnty;
- }
- //顯示更新程序
- void circle(void) //顯示更新畫(huà)圓
- {1)1 =~a[cntx];
- hfx=0;
- hfy=0;
- m1=m2=m3,m4=20*cnty;//若K1鍵按下(為0),步進(jìn)電機(jī)開(kāi)始動(dòng)作
- while (R1=0)
- {
- Delay(1000);
- if(Kl=0) //延時(shí)消抖處理
- {
- LED=0; while
- (ml)
- //此時(shí)調(diào)用各象限加工子函數(shù)
- {
- PO=~0x06;
- L1();
- }
- Delay(1000);
- while(m2)
- {
- PO=~0x5B;
- L2();
- }
- Delay(1000);
- while(m3)
- {
- PO=~0x4F:
- L3()
- }
- Delay(1000);while(m4)
- P0=~0x66;
- L4();
- }
- while(!ml&&!m2&&!m3&&!m4)//加工完畢,報(bào)警提示
- stepx=stepy=1;
- alarm();
- }
- }
- }
- }
- Void line(void) //顯示更新畫(huà)直線單步插補(bǔ)
- {
- mO=kx+ky;ccwx=1;ccwy=1;
- //xy步進(jìn)電機(jī)正轉(zhuǎn)
- while(Kl==0)
- //若K1為0,步進(jìn)電機(jī)開(kāi)始動(dòng)作
- {
- EA =0;
- LED=0;while(mO)
- {
- if(Fn 〉=0)
- {
- Fn =Fn ky;
- ky=ky;
- stepx=0;Delay(25);
- stepx=1;Delay(25);mO-
- =1;
- }
- if(Fn〈0)
- En=Fn+kx;
- kx=kx;
- stepy=0;Delay (25);
- stepy=1;Delay(25);
- mO-=1;
- }
- }
- if(!mO) //加工完畢,報(bào)警提示
- {
- stepx=stepy=1; alarm
- ();
-
- /**** //顯示更新畫(huà)直線比例插補(bǔ)
- Kx=100*cntx
- ky=100*cnty; while(Kl=0)
- { //若K1為0,步進(jìn)電機(jī)開(kāi)始動(dòng)作
- EA =0;
- LED=0;while(kx||ky)
- {
- kx=kx-cntx;
- ky=ky-cnty;
- for(m=0;m<cntx;m++) //脈沖
- {
- Delay(25);
- stepx=0;
- Delay(25);
- stepx=1;
- }
- for(m=0;n)<cnty;m++)
- Delay(25);
- stepy=0;
- Delay(25);
- stepy=1;
- }
- }
- if(!kx&&!ky) //加工完畢,報(bào)警提示
- stepx=stepy=1;
- alarm();
- }
- } ****
- }
- /各象限插補(bǔ)程序/
- voidLI(void)
- ccwx=0;ccwy=1;
- if(Fnl>=0)
-
- Fnl=Fn1-2*xnl+1;
- xnl=xnl- 1;
- stepx=0;Delay(25);
- stcpx=1;Delay(25);
- ml-=1;
- }
- if(Fnl<0)
-
- Fnl=Fnl+2*ynl+1;
- ynl=ynl+1;
- stepy=0;Delay(25);
- stepy=1;Delay(25);
- m1=1
- }
-
- void L2(void)
- ccwx=0;ccwy=0;
- if(Fn2>=0)
- {
- Fn2=Fn2-2*yn2+1;
- yn2=yn2~1;m2~=1;
- stepy=0;Delay(25);
- stepy=1;Delay(25);}
- if(Fn2<0)
- {
- Fn2=Fn2+2*xn2+1;
- xn2=xn2+1;m2-=1;
- stepx=0;Delay(25);
- stepx=1;Delay(25);
- }
-
- void L3(void)
- {
- ccwx=1;ccwy=0;
- if(Fn3 〉=0)
- {
- Fn3=Fn3-2*xn3+1;
- xn3=xn3~1;m3-=1;
- stepx=0;Delay(25);
- stepx=1;Delay(25);}
- if(Fn3<0)
- {
- Fn3=Fn3+2*yn3+1;
- yn3=yn3+1;m3-=1;
- stepy=0;Delay(25);
- stepy=1;Delay(25);}
-
- void L4(void)
- ccwx=1;ccwy=1;if
- (Fn4>=0)
- {
- Fn4=Fn4-2*yn4+1;
- yn4=yn4- 1;m4~=1;
- stepy=0;Delay(25);
- stepy=1;Delay(25);}
- if(Fn4<0)
- {
- Fn4=Fn4+2*xn4+1;
- xn4=xn4+1;m4-=1;
- stepx=0;Delay(25);
- stepx=1;Delay(25);}
-
- 報(bào)警函數(shù)
- void alarm(void)
- {
- for(i=0;i<200;i++)
- {
- LED=0;Delay(150);
- LED=1;Delay(150);
- //延時(shí)函數(shù)//
- void Delay(int t)
- for(i=0;i<t;i++);
復(fù)制代碼
|