緒論 1.1 步進電機國內外研究現狀 步進電動機是一種新型增量式電機,是數字控制系統的一種執行元件。它是利用電脈沖信號進行控制,將電脈沖信號轉換成相應的角位移或線位移的電動機。它的位移與輸入脈沖信號相對應,步矩誤差不長期積累,不需用電刷,電機本體部件少,易于啟停、正反轉及變速。用步進電機作為驅動裝置構成的控制系統,具有成本低,控制簡單,容易維護等優點。步進電動機問世后,廣泛地應用在等各個領域。做為機床控制、電子瞄準、工業自動化、辦公自動化和機器人運動控制中應用的重要執行部件,顯示出廣闊的發展前景。 步進電動機有多種不同的結構。經過近七十多年的發展,逐漸形成以混合式和反應式為主的產品格局。混合式步進電動機是在同步電動機或者說是在永磁感應子式同步電動機的基礎上發展起來的。既有反應式步進電動機基于氣隙磁導變化的特征,又有軸向恒定磁場的永磁式步進電動機的特征。其綜合了該兩類步進電動機的特點,因而性能更好。具有分辨率高,控制功率小等優點,是應用最為廣泛的步進電動機種類,至今沒發現更合適取代它的產品。缺點是帶慣性負載能力差,低頻振蕩現象嚴重,高頻運行時輸出轉矩下降。 國外步進電動機研究較早,對步進電機驅動技術的研究一直很活躍,如今正在研究開發以步進電動機為執行機構的高性能伺服系統。目前,這類電動機最大的生產國還是日本。日本有很多公司生產,像JAPAN SERVO,SANYO DENKI等。它們的產品無論是外觀質量,內部性能指標,還是生產手段,都處于世界先進水平。而在我國,步進電動機的研制最早始于1958年。經過五十年的發展,目前發展趨于平緩,與國外相比,反應式步進電動機還占大量比例,只是隨著近年來大批進口設備大量涌入我國,而這些設備大多數采用了混合式步進電動機,混合式步進電動機才為人們所熟悉。在國外,特別是工業比較發達的國家,步進電動機及其驅動技術早已規模化生產,我國與之相比還有相當大的差距。雖然我國在該類電機的研制和生產上已形成一定規模,但生產規模較小,未形成商品化和系列化,僅處于按用戶要求研制定制階段,與國外產品相比尚無競爭能力。從步進電動機驅動技術發展歷史來看,步進電動機的相數不同,有2相、3相、4相、5相、9相等。齒數也不同,使得產品規格品種繁多,生產格局復雜化,對用戶選擇不利。然而由于步進電動機和其它電機有著很大的差別,具有其它電機所沒有的特性。因此,它仍然能根據市場的需求,沿著小型化、高效、低價的方向發展. 步進電動機的使用性能與它的驅動電路有密切的關系,隨著電力電子技術及微電子技術及其器件的發展,驅動器的面貌不斷改變。最初使用的末級功放元件是可控硅。可控硅雖然觸發簡單,但關斷困難,總的來說線路較復雜、易形成誤觸發、可靠性也差;且不便于調試和維護、抗干擾能力不好。但隨著大功率晶體管的發展目前一般不再采用末級功放元件來驅動控制步進電動機。目前,功率開關管多采用功率場控晶體管(MOSFET)和全控型器件(IGBT)。功率集成電路(PIC)將功率器件、前級驅動電路、控制電路及保護電路等都集成在一起,具有較強的功能和較大的輸出功率。用這種器件做成步進電動機驅動器,具有結構簡單、性能穩定及運行可靠等優點。目前已應用于中、小功率步進電動機的驅動。驅動器控制電路發展的一個重要方面是集成電路專用芯片的采用。如F/V變換器(LM2917),V/W變換器(SG3525,TL494),微步控制與功率器件集成在一起的芯片(A3955SB)等,更使步進電機驅動器的研制上了一個新臺階,使其性能指標有了顯著的提高。使步進電動機的控制系統達到了一個新的水平。其它一些控制技術,如矢量控制,模糊控制,神經網絡控制等也獲得了飛速發展和應用。步進電動機今后的發展,依賴于新材料的應用,設計手段的完善,以及與驅動技術的最佳配合。首先,精確的分析和設計,模型的建立和完善,是一項重要的基礎研究,至今還有很多工作要做,它可以為各類問題的深入分析提供基礎,為優化設計指出方向。其次,電力電子技術、微電子技術的發展,高性能永磁材料的應用及優化設計技術起到明顯的作用自不待說,驅動技術改進的作用也不容忽視,特別是微步驅動技術的應用和成熟,使步進電動機的分辨率和特性與相數的關系不大,對步進電動機的設計,今后的發展會產生很大的影響,也提出了一系列新的研究課題和方向。 1.2 研究主要內容及其意義 隨著步進電動機系統在各種數字控制系統中的廣泛應用,各種數字控制系統隨步進電動機性能和使用條件的要求也越來越高。這就要求不斷研制出高性能高可靠性高集成化低價位的驅動器和低成本的單片機控制滿足需求。眾所周知,國內對這方面的研究一直很活躍,但是可供選用的高性能的步進電動機驅動器卻很少,而且國內的驅動器方面基本都存在著體積大、外形尺寸不規則、性能指標不穩定及遠沒有達到系列化等問題,這就給驅動器的選用和安裝帶來了極大的不便,另外,隨著國內單片機技術的發展,更精度的步進電動機控制技術也得到很大的發展。國外雖然有通用的各種類型的步進電動機驅動器,但大都存在價格昂貴,與我國的系統連接不匹配等問題。步進電動機不能直接接到交直流電源上工作,而必須使用專用的步進電動機驅動器;在驅動電源的設計方面目前采用更多的是由單片機提供脈沖驅動信號。步進電動機系統的性能,除與電動機自身的性能有關外,也在很大程度上取決于驅動器的性能。步進電動機在運行時,一般有以下問題:各相繞組都是開關工作,多數電動機繞組都是連續的交流或直流,而步進動機各相繞組都是脈沖式供電所以繞組電流不是連續的。電動機各相繞組都是繞在鐵心上的線圈,所以都有較大的電感。繞組通電時,電流不能迅速上升至額定值,電流上升率受到限制,繞組斷電時,應該電流截止的相不能立即截止。繞組導通和截止都會產生較大的反電勢,而截止時反電勢將對驅動級器件的安全產生有害的影響。電動機運轉時在各相繞組中產生旋轉電勢,這些電勢的大小和方向將對繞組電流產生很大的影響。由于旋轉電勢基本上與電動機轉速成正比,轉速越高,電勢越大,繞組電流越小,從而使電機輸出轉矩也隨著轉速升高而下降。步進電動機的固有分辨率不高,不能精密位移。以應用最廣的8極50齒兩相混合式步進電動機為例,其步距角為0.9°/1.8°,需配合機械減速機構以達到所需要的脈沖當量精度,但是,機械系統的增加也同時帶來了一個誤差源。步進電動機在低頻運行時的振蕩及過沖問題,嚴重限制了步進電動機的應用范圍。對這個問題的解決辦法,除了改善負載特性及附加機械阻尼外,還可以在驅動電源方面加以改善,如引入電磁阻尼、采用細分驅動等辦法來解決。 在機電一體化中,步進電機是最常用的一種執行電機,它實現了機械中的角度、位移的數字化控制,從而使機械控制的精度大大提高。現代控制技術中普遍采用的方式為開環控制和閉環控制,開環控制結構簡單成本低但其精度不是太高;閉環控制可以實現高精度的控制,但其結構復雜投入成本高。步進電機的出現解決了這一技術難題,它使得開環控制的精度和速度大大提高,由它組成的步進式伺服控制系統實現了數字化機械生產過程。步進電機可以直接用數字信號驅動,使用非常方便。一般電動機都是連續轉動的,而步進電動機則有定位和運轉兩種基本狀態,當有脈沖輸入時步進電動機一步一步地轉動,每給它一個脈沖信號,它就轉過一定的角度。步進電動機的角位移量和輸入脈沖的個數嚴格成正比,在時間上與輸入脈沖同步,因此只要控制輸入脈沖的數量、頻率及電動機繞組通電的相序,便可獲得所需的轉角、轉速及轉動方向。在沒有脈沖輸入時,在繞組電源的激勵下氣隙磁場能使轉子保持原有位置處于定位狀態。因此非常適合于單片機控制[2] 1.3 步進電機的單片機控制優點 控制系統對步進電機的控制通過步進電機驅動器來完成。因此它已經被廣泛地用于自動控制系統中作為執行元件。原來的步進電機控制系統采用分立元件或者集成電路組成的控制回路,不僅調試安裝復雜,要消耗大量元器件,實現起來成本高、費時多,而且一旦定型后,電路就很難改動,因此不得不重新設計控制器。 單片機是一種微型計算機,它在一個集成芯片中,集成有微處理器(CPU)、存儲器(RAM和ROM)、基本的I/O接口以及定時/計數部件,即在一個芯片上實現了一臺微型計算機的基本功能[3]。 步進電機的控制部分以單片機為主的微處理器控制具有如下優點:1.靈活性和適應性。微處理器的控制方式是有軟件完成時,如果需要修改控制規律,一般不必改變系統的硬件電路,只需修改程序即可。在系統調試和升級時,可以不斷嘗試選擇最優參數,非常方便。2.可以實現較復雜的控制,控制精度高。微處理器具有很強的邏輯功能、運算速度快、精度高、有大量的存儲單元,因此有能力實現復雜的控制。3.可提供人機界面。在電機控制中要用到鍵盤和顯示器作為人機界面來實現對步進電機的控制。單片機體積小,重量輕,抗干擾能力強,對環境要求不高,價格低廉,指令功能強,運行速度快,可靠性高及靈活性好開發也較為容易,國內近些年來已將其廣泛應用[4]。 在該設計中我選用了MSC-51作為步進電機的控制器, 用它來實現步進電機的空載時的一些控制功能。 2.1 步進電動機的基本原理 步進電機是一種將電脈沖轉化為角位移的執行機構。步進電機可以直接用數字信號驅動,使用非常方便。一般電動機都是連續轉動的,而步進電動機則有定位和運轉兩種基本狀態,在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數,而不受負載變化的影響,即當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(稱為“步距角”),它的旋轉是以固定的角度一步一步運行的。可以通過控制脈沖個數來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。步進電機可以作為一種控制用的特種電機,利用其沒有積累誤差的特點,使得在速度、位置等控制領域用步進電機來控制變的非常的簡單,廣泛應用于各種開環控制[5]。 2.2 步進電動機分類 步進電機的品種規格很多,現在比較常用的步進電機包括反應式步進電機(VR)、永磁式步進電機(PM)、混合式步進電機(HB)和單相式步進電機等。 永磁式步進電機一般為兩相,轉矩和體積較小,步進角一般為7.5度或15度;反應式步進電機一般為三相,可實現大轉矩輸出,步進角一般為1.5度,但噪聲和振動都很大。反應式步進電機的轉子磁路由軟磁材料制成,定子上有多相勵磁繞組,利用磁導的變化產生轉矩。 混合式步進電機是指混合了永磁式和反應式的優點。它又分為兩相和五相:兩相步進角一般為1.8度而五相步進角一般為0.72度。這種步進電機的應用最為廣泛,也是本方案所選用的步進電機[6]。 2.3 步進電機的一些基本參數 2.3.1 電機的拍數 完成一個磁場周期性變化所需脈沖用n表示或指電機轉過一個齒距角所需脈沖數以四相電機為例,四相四拍運行方式即AB-BC-CD-DA-AB,四相八拍運行方式即 A-AB-B-BC-C-CD-D-DA-A。 2.3.2 電機固有步進角 它表示控制系統每發一個步進脈沖信號,電機所轉動的角度。電機出廠時給出了一個步距角的值,如86BYG250A型電機給出的值為0.9°/1.8°(表示半步工作時為0.9°、整步工作時為1.8°),這個步距角可以稱之為‘電機固有步距角’,它不一定是電機實際工作時的真正步距角,真正的步距角和驅動器有關[7]。 2.3.3 步進電機的相數 產生不同對極N、S磁場的激磁線圈對數,是指電機內部的線圈組數,目前常用的有二相、三相、四相、五相步進電機。電機相數不同,其步距角也不同,一般二相電機的步距角為0.9°/1.8°、三相的為0.75°/1.5°、五相的為0.36°/0.72°。在沒有細分驅動器時,用戶主要靠選擇不同相數的步進電機來滿足自己步距角的要求。如果使用細分驅動器,則‘相數’將變得沒有意義,用戶只需在驅動器上改變細分數,就可以改變步距角[8]。 2.4 步進電機結構 電機轉子均勻分布著 40個小齒,定子齒有三個勵磁繞阻,其幾何軸線依次分別與轉子齒軸線錯開0、1/3て、2/3て,(相鄰兩轉子齒軸線間的距離為齒距以て表示),即A與齒1相對齊,B與齒2向右錯開1/3て,C與齒3向右錯開2/3て,A'與齒5相對齊,(A'就是A,齒5就是齒1) 2.4.1 步進電機的旋轉 如A相通電,B,C相不通電時,由于磁場作用,齒1與A對齊,(轉子不受任何力以下均同)。 如B相通電,A,C相不通電時,齒2應與B對齊,此時轉子向右移過1/3て,此時齒3與C偏移為1/3て,齒4與A偏移(て-1/3て)=2/3て。 如C相通電,A,B相不通電,齒3應與C對齊,此時轉子又向右移過1/3て,此時齒4與A偏移為1/3て對齊。 如A相通電,B,C相不通電,齒4與A對齊,轉子又向右移過1/3て ,這樣經過A、B、C、A分別通電狀態,齒4(即齒1前一齒)移到A相,電機轉子向右轉過一個齒距,如果不斷地按A,B,C,A„„通電,電機就每步(每脈沖)1/3て,向右旋轉。如按A,C,B,A„„通電,電機就反轉[9]。 由此可見:電機的位置和速度由導電次數(脈沖數)和頻率成一一對應關系,而方向由導電順序決定。 不過,出于對力矩、平穩、噪音及減少角度等方面考慮。往往采用A-AB-B-BC-C-CA-A這種導電狀態,這樣將原來每步1/3て改變為1/6て。甚至于通過二相電流不同的組合,使其1/3て變為1/12て,1/24て,這就是電機細分驅動的基本理論依據。 不難推出:電機定子上有m相勵磁繞阻,其軸線分別與轉子齒軸線偏移1/m,2/m……(m-1)/m,1。并且導電按一定的相序電機就能正反轉被控制——這是步進電機旋轉的物理條件[10]。 2.5 步進電動機的控制原理 由于步進電機是一種將電脈沖信號轉換成直線或角位移的執行元件,它不能直接接到交直流電源上,而必須使用專用設備—步進電機控制驅動器,控制器可以發出脈沖頻率從幾赫茲到幾千赫茲可以連續變化的脈沖信號,它為環形分配器提供脈沖序列。環形分配器的主要功能是把來自控制環節的脈沖序列按一定的規律分配后,經過功率放大器的放大加到步進電機驅動電源的各項輸入端,以驅動步進電動機的轉動。環形分配器主要有兩大類:一類是用計算機軟件設計的方法實現環形分配器要求的功能,通常稱軟環形分配器、另一類是用硬件構成的環形分配器,通常稱為硬環形分配器。功率放大器主要對環形分配器的較小輸出信號進行放大,以達到驅動步進電機的目的[11]。 2.6 步進電動機的特點 步進電動機有如下特點: (1)步進電機的角位移與輸出脈沖數成正比,因此當它轉一轉后,沒有累計誤差,具有良好的跟隨性。 (2)由步進電機和驅動電路組成的開環數控系統,既非常方便、廉價,又非常可靠。同事,它也可以有角度反饋環節組成高性能的閉環數控系統。 (3)步進電機的動態響應快,易于起停、正反轉及變速。 (4)速度可在相當寬的范圍內平滑調節,低速情況下仍能保證獲得很大的轉矩,因此一般可以不用減速器而直接驅動負載。 (5)步進電機只能通過脈沖電源供電才能運行,它不能直接用交流電源或直接電源。 (6)步進電機自身的噪聲和震動比較大,帶慣性負載的能力強[16] 3 主要芯片介紹 3.1 89S5l單片機簡介 本次設計以CPU選用89S5l作為步進電機的控制芯片.89S51的結構簡單并可以在編程器上實現閃爍式的電擦寫數達幾萬次以上.使用方便等優點,而且完全兼容MCS5l系列單片機的所有功能。AT89S51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable And erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89S51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案[17]。 3.1.1 單片機的引腳功能 (1)VCC(40):電源+5V。 (2)VSS(20):接地,也就是GND。 (3)XTL1(19)和XTL2(18):振蕩電路。單片機是一種時序電路,必須有脈沖信號才能工作,在它的內部有一個時鐘產生電路,有兩種振蕩方式,一種是內部振蕩方式,只要接上兩個電容和一個晶振即可;另一種是外部振蕩方式,采用外部振蕩方式時,需在XTL2上加外部時鐘信號。 (4)PSEN(29):片外ROM選通信號,低電平有效。 (5)ALE/PROG(30):地址鎖存信號輸出端/EPROM編程脈沖輸入端。 (6)RST/VPD(9):復位信號輸入端/備用電源輸入端。 (7)EA/VPP(31):內/外部ROM選擇端 (8)P0口(39-32):雙向I/O口。 (9)P1口(1-8):準雙向通用I/0口。 (10)P2口(21-28):準雙向I/0口[18]。 3.1.2 單片機的主要特性 與MCS-51 兼容 4K字節可編程閃爍存儲器 壽命:1000寫/擦循環數據保留時間:全靜態工作:0Hz-24Hz三級程序存儲器鎖定、128*8位內部RAM、32可編程I/O線、兩個16位定時器/計數器、5個中斷源、可編程串行通道、低功耗的閑置和掉電模式、片內振蕩器和時鐘電路[19]。 (1)振蕩器特性: XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。輸入至其內部時鐘信號要通過一個二分頻觸發器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度[20]。 (2)芯片擦除: 整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節被重復編程以前,該操作必須被執行。 此外,AT89S51設有穩態邏輯,可以在低到零頻率的條件下靜態邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM定時器,計數器,串口和中斷系統仍在工作。在掉電模式下,保存RAM的內容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止[21]。 3.2 L298簡介 3.2.1 L298的原理 L298N是一種比較常用的芯片,具有電壓高、電流大的特性,同時他還具有兩個橋的高電壓大電流全橋式驅動器,能夠實現驅動直流電動機、步進電機和電感線圈等器件,它通過邏輯電平信號控制,而且同時具有兩個使能控制端,另外外部可以增加一個電路,檢測電阻將發生的變化反饋給控制電路。L298N芯片作為驅動電機的芯片,可以驅動四相電機,能夠調節輸出電壓,根據電源操作很方便,同時還提供信號,通過單片機的I/O口進行,并且電路較為簡單,容易操作且不容易出錯,比較方便。 3.2.2 L298概述 L298是SGS公司的產品,比較常見的是15腳Multiwatt封裝的L298N,內部同樣包含4通道邏輯驅動電路。可以方便的驅動兩個直流電機,或一個兩相步進電機。 L298N芯片可以驅動兩個二相電機,也可以驅動一個四相電機,輸出電壓最高可達50V,可以直接通過電源來調節輸出電壓;可以直接用單片機的IO口提供信號;而且電路簡單,使用比較方便。 L298N可接受標準TTL邏輯電平信號VSS,VSS可接4.5~7 V電壓。4腳VS接電源電壓,VS電壓范圍VIH為+2.5~46 V。輸出電流可達2.5 A,可驅動電感性負載。1腳和15腳下管的發射極分別單獨引出以便接入電流采樣電阻,形成電流傳感信號。L298可驅動2個電動機,OUT1,OUT2和OUT3,OUT4之間可分別接電動機。圖3-5是L298N功能邏輯圖,圖3-6是L298N的引腳圖[25]。 3.3 光電開關 本系統中所用傳感器為FC-SPX302光電開關,該傳感器為開關型傳感器,四個接線腳分別為“+,L,OUT,-”其輸入電壓范圍廣為直流5-24V,L為控制指示端,當“L”與“+”相連時,傳感器未檢測到物體時LED燈發光,當“L”懸空時則相反,其特點為: 1. 動作模式備有遮光時ON/入光時ON(可切換型) 2. 應答頻率為1KHZ的高速響應 3. 入光顯示燈明顯,容易進行動作確認 4. 電源電壓為DC-24V的廣范圍 5. 備有遮光時入光顯示燈燈亮型 其連接電路如圖3-7所示: file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps228D.tmp.jpg 4 硬件設計 啟動系統后,從單片機的I/O口輸出控制脈沖,經過L298N驅動電路對脈沖進行處理,輸出能直接控制步進電機的脈沖信號。在負載能力范圍允許內,就能實現步進電機獨立起停、轉向、速度、位置變化的控制。 4.1 總體設計方框圖 由4-1圖中看以看出以單片機為控制核心。鍵盤做為外設,進行功能的選擇,啟動,轉速增加,轉速減少,停止等操作。1602液晶屏顯示實際轉速和設定轉速。通過L298N來驅動步進電機。把步進電機的實際轉速通過單片機外部中斷反饋到單片機。調用PID程序,通過改變脈沖周期調節轉速。總體設計方框圖如圖4-1所示 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps22AD.tmp.jpg 4.2 系統仿真圖 系統仿真圖如圖4-2。仿真圖是根據實際電路所搭建。是以單片機為核心,L298為驅動,1602作為顯示,按鍵作為輸入所搭建的仿真模型。4-2圖所示模型處于運行狀態。啟動仿真模型,選擇按鍵START,模型開始正常運轉,通過V+V-改變電機轉速,最后選擇按鍵STOP停止仿真。
file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps22CD.tmp.jpg 4.3 步進電動機的控制方式選擇 步進電機控制是一個比較精確的控制,步進電機開環控制系統具有成本低、簡單、控制方便等優點,在采用單片機的步進電機開環系統中,控制系統的CP脈沖的頻率或者換向周期實際上就是控制步進電機的運行速度。系統可用兩種辦法實現步進電機的速度控制。一種是延時,一種是定時。延時方法是在每個周期完成后調用一個延時子程序,待延時結束后再次執行脈沖輸出程序,這樣周而復始就可發出一定頻率的CP脈沖。延時子程序的延時時間與換向程序所用的時間和,就是CP脈沖的周期,該方法簡單,占用資源少,全部由軟件實現,調用不同的子程序可以實現不同速度的運行,適合較簡單的控制過程。定時方法是利用單片機系統中的定時器定時功能產生任意周期的定時信號,從而可方便的控制系統輸出CP脈沖的周期,有點是定時時間準確。本次設計采用第二種方式改變頻率,進而來控制速度的方法來實現。 步進電機控制采用閉環控制,具有準確性較高、成本低、簡單等優點,
4.4 步進電動機的驅動方式選擇 有兩種方法驅動步進電機,都是利用CPU驅動,分為直接和間接。這里不采用直接驅動,因為他的缺點很明顯,步進電機運轉需要足夠的電流,而CPU直接驅動不能夠提供足夠大的電流脈沖;CPU間接驅動,需要先將CPU輸出的信號放大,這樣就能滿足驅動步進電動機的條件,再直接驅動或者再利用控制驅動器來實現要求,這種方法比較穩妥,可以達到目的,優更加安全可靠,這里采用CPU間接驅動步進電機。 步進電機具有兩種控制驅動器,一種利用多個功率放大器件驅動電機,放大電路的種類和器件的參數不同,達到的目的就不同,實現的功能也不同,但是選擇使用四相步進電機,需要每個信號都放大,電路將比較復雜而且麻煩,電路也會特別不穩定,本次使用電機驅動模塊芯片驅動電機。 此次設計利用L298芯片驅動電機,L298芯片能夠很好的與單片機結合,進行控制,對于單片機的驅動更方便,與單片機結合能夠實現性能較好的步進電機的驅動。這次采用固定斬波頻率的PWM恒流斬波驅動方式,可以采用四相雙極性步進電機,電壓可達到46V,電流可與達到2A。此次步進電機驅動系統的設計比較簡單,需要的元件較少,成本很低,電路也簡單,可靠性很高,占用空間少。并且通過開發軟件,使得計算機的負擔降低,準確性變高。同時,L298芯片是獨立的,能夠十分靈活的應用,可以廣泛的適用在步進電機系統中,使得整個電路設計方案簡潔,成本低廉,準確性高,使用特別方便。
4.5 鍵盤電路設計 4.5.1 鍵盤原理圖 鍵盤具有兩種接口的方法,一種是矩陣式接口,另一種是獨立式接口。矩陣接口方式接線相對較為復雜,但是資源占用得較少,一般在需要鍵盤較多的時候使用。獨立式接口方式接發結構較為簡單,但是占用的資源較多,比較適合需要按鍵較少的時候使用,本次設計就采用的是獨立性鍵盤接口,其原理圖如下 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps22EE.tmp.jpg 4.5.2 鍵盤功能 此次設計,設計了手動控制電路,實現了動控制、加速控制、減速控制、停止控制、反轉控制,分別通過s1、s2、s3、s3控制,具體電路圖如下,其中S1實現電機的啟動,通過內部檢測到s1的變化引發的P1.3的狀態改變,來操作程序的運行,最終達到啟動電機的目的。至于步進電機的轉速就是通過改變點擊的脈沖不同二實現的,達到控制轉速的目的。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps231D.tmp.jpg 按鍵功能表
4.6 顯示電路 此次設計,需要通過步進電機的控制,實現顯示電路來表示加速、減速。有兩種方法可以實現功能,但是如果采用4位段數碼管組成顯示電路,利用數碼管來顯示單片機得到的數據,這種方案缺點很明顯,需要的元件很多,電路較為復雜,且不容易操作,可讀性差,如果設定了數值,就不容易更改,操作起來很麻煩,很難增加其他的功能,而且耗電量很大,電路供電很麻煩。所以本次設計采用了單片機和液晶顯示器的結合,實現電機設計和電機的工作狀態的顯示電路,以方便了解電機的運行狀態和轉速,同時顯示數據。 通過液晶顯示數據,比數碼管的電路更加簡單,而且容易操作,同時液晶顯示比較穩定、省電、美觀,對于修改數據也比較簡單,容易修改功能,可操作性較高,同時讀數比較容易,同時能夠顯示實際轉速和設定轉速。
file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps233E.tmp.jpg 4.7 測速電路 對于測速電路的設計,采用FA-SPX302光電開關實現功能,電路比較簡單,電路如下圖所示: file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps237D.tmp.jpg 5 軟件設計 步進電機的軟件設計,就是通過程序的設計,實現完成環形分配器的要求,進而實現對于轉動角度和唯一的目標。開始的是時候,通過判斷旋轉方向,然后相應的運行對應的程序,同時通過運行正反轉程序的相應模型以及脈寬時延程序來實現步進電機的正反轉功能。
5.1 PID控制算法 在計算機控制過程中,整個過程采用的是數值計算方法,當采樣周期足夠小時,這種數值近似計算相當誰確,使離散的被控過程與連續過程相當接近。圖5-1為單片機閉環控制系統框圖。PID算法是將描述連續過程的微分方程轉化為差分方程,然后,根據差分方程編制計算程序來進行控制計算的。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps238E.tmp.jpg 5.1.1 位置式PID的控制算法 如前所述PID調節的微分方程見公式(5-1) file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps243B.tmp.jpg+ 公式(5-1) 將此微分方程寫成對應的差分方程形式。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps246B.tmp.jpg-=-=+++å 公式(5-2) 公式(5-2)式中ne-第n次采樣周期內所獲得的偏差信號;1ne--第n-1次采樣 周期內所獲得的偏差信號;T-采樣周期;ny-調節器第rt次控制變量的輸出;為了編寫計算機程序的方便,現將公式(5-2)寫成下列形式 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps247B.tmp.jpg 其中file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps249B.tmp.jpg因為采樣周期T,積分常數iT和微 分常數dT選定后皆為常數,因此ak及bk必為常。當調整參數改善控制性能時,也只須調整pk、ak和bk的大小即可。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps24BC.tmp.jpg file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps24CC.tmp.jpg 附錄C 程序 #include<intrins.h> #include<reg51.h> #define uint unsigned int #define uchar unsigned char
uint i,j,m,n,flag,t; signed int a,b,c,d; double tt; uchar code LEDData[]="0123456789"; uchar TX[6]={0,}; uchar run[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; 控制口定義 sbit EnA =P2^6; sbit SA1 =P2^2; sbit SA2 =P2^3; sbit EnB =P2^7;
sbit SB1 =P2^4; sbit SB2 =P2^5; sbit en =P3^3; sbit rw =P3^1; sbit rs =P3^0; sbit start=P1^4; sbit vh =P1^5; sbit vl =P1^6; sbit stop =P1^7; 延時1ms程序 void delay0(int t) {int w; for(;t>0;t--) for(w=110;w>0;w--); } 鍵盤掃描程序 void key() {if(start==0) {delay0(10); while(start==0); {j++; n=1; } } if(stop==0) {delay0(10); while(stop==0); {n--; j=0; } } if(vh==0) {delay0(10); while(vh==0); {m++; a++;} } if(vl==0) {delay0(10); while(vl==0); {m--; b--;} } } 寫指令程序 void write_com(uchar com) { rs=0; P0=com; delay0(5); en=1; delay0(5); en=0; } 寫數據程序 void write_data(uchar date) { rs=1; P0=date; delay0(5); en=1; delay0(5); en=0; } PID程序 void PID() {uint e1,e2,e3; e1=TX[5]-TX[4]; e2=TX[3]-TX[2]; e3=TX[1]-TX[0]; if(e1>e2>10) { t=10*e1-6*e2+4*e3; } if(2<e1<e2) { t=3*e1-5*e2+2*e3; } 中斷0服務程序 void interrupt0() interrupt 1 using 2 {c++; } 定時器0服務程序 void timer0() interrupt 1 { uint e; uint f; TH0=(65536-(1250-t))/256; TL0=(65536-(1250-t))%256; if(f<7) {P2=run[f]; f++; } else {P2=run[f]; f=0; } d++; if(d==m) {if(e<6) {e++; TX[e]=c; } else {e=0; PID(); } c=0; d=0; } } 內部資源初始化 void Init(void) { TMOD=0x11; TH0=(65536-(1250-t))/256; TL0=(65536-(1250-t))%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; IT0=1; EX0=1; IP=0x03; EA=1; ET0=1; TR0=1; en=0; rw=0; write_com(0x38); write_com(0x0c); write_com(0x04); write_com(0x01); write_com(0x80); write_data('S'); write_data('S'); write_data('P'); write_data('E'); write_data('E'); write_data('D'); write_data(':'); write_com(0x80+0x0B); write_data('R'); write_data('/'); write_data('S'); write_com(0x80+0x40); write_data('R'); write_data('S'); write_data('P'); write_data('E'); write_data('E'); write_data('D'); write_data(':'); write_com(0x80+0x4B); write_data('R'); write_data('/'); write_data('S'); } 速度顯示 void speeddisplay() { write_com(0x80+0x07); write_data('0'); write_data(LEDData[m/100]); write_data(LEDData[m%100/10]); write_data(LEDData[m%10]); if((m<600)&(m>950)) {write_com(0x80+0x48); write_data(LEDData[(m+1)/100]); write_data(LEDData[(m+1)%100/10]); write_data(LEDData[(m+1)%10]);} else {write_com(0x80+0x47); write_data('0'); write_data(LEDData[m/100]); write_data(LEDData[m%100/10]); write_data(LEDData[m%10]);}; } void main(void) { a=b=c=d=i=0; j=0; m=800; n=1; flag=0; while(1) {key(); if(j==1) {init(); } while(j&&n) {key(); PID(); tt=(1.3*(a+b)); t=tt; speeddisplay(); } if(n==0) {write_com(0x38); write_com(0x0c); write_com(0x04); write_com(0x01); } } }
|