新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 舞蹈機器人步進電機驅動電路和程序設計

        舞蹈機器人步進電機驅動電路和程序設計

        作者: 時間:2016-10-15 來源:網絡 收藏

        在中國科大首屆機器人舞蹈比賽中(中央10臺節目轉播),我們用一個單片機控制多個指揮跳舞機器人 的雙肩、雙肘和雙腳伴著音樂做出各種協調舒緩充滿感情的動作,榮獲一等獎。電路采用74373鎖存,74LS244和ULN2003作電壓和電流驅動,單 片機(Atc52)作脈沖序列信號發生器。程序設計基于中斷服務和總線分時利用方式,實時更新各個電機的速度、方向。整個舞蹈由運動數據所決定的一截截動 作無縫連接而成。

        本文引用地址:http://www.104case.com/article/201610/307416.htm

        1 簡介

        根據內部線圈個數不同分為二相制、三相制、四相制等。本文以四相制為例介紹其內部結構。圖1為四相五線制步進電機內部結構示意圖。

        2 四相五線制步進電機的

        電路主要由單片機工作外圍電路、信號鎖存和放大電路組成。我們利用了單片機的I/O端口,通過74373鎖 存,由74LS244驅動,ULN2003對信號進行放大。8個電機共用4bit I/O端口作為數據總線,向電機傳送步進脈沖。每個電機分配1bit的I/O端口用作74373鎖存信號,鎖存步進電機四相脈沖,經ULN2003放大到 12V驅動電機運轉。

        1.jpg

        電路原理圖(部分)如圖2所示。

        (1)Intel 8051系列單片機是一種8位的嵌入式控制器,可尋址64K字節,共有32個可編程雙向I/O口,分別稱為P0~P3。該系列單片機上集成8K的ROM,128字節RAM可供使用。

        (2)74LS244為三態控制芯片,目的是使單片機足以驅動ULN2003。ULN2003是常用的達林頓管陣列,工作電壓是12V,可以提供足夠的電流以驅動步進電機。關于這些芯片的詳細介紹可參見它們各自的數據手冊。

        (3)74373是電平控制鎖存器,它可使多個步進電機共用一組數據總線。我們用P1.0~P1.7作為8個電機的鎖存信號輸出端,見表1。

        2.jpg

        這是一種基于總線分時復用的方式,以動態掃描的方式來發送控制信號,這和高級操作系統里的多任務進程調度的思想一致。這種方法明顯的好處是節省I/O口,使系統可以控制更多的步進電機。本電路設計為控制8個。

        3 程序設計

        傳統的步進電機驅動程序利用簡單的條件循環來發送脈沖序列,但當電機數目發生變化時,編程繁雜,冗余代碼較 多,難以做到信號占空比一致,進而產生“抖動”現象。下面提出一種基于中斷服務方式,面向舞蹈動作,可實時改變各個電機速度和方向(每200ms可改變一 次)的程序設計方法。

        3.1 速度歸一化和線性關系

        我們將速度量化成一個-128~127內可變的數,正號代表正轉,負號代表返轉,稱之歸一化速度 (-128~127為一個字節)。給每個電機分配一個速度累加計數器speed_tickers[i](I=0,1,2…,7分別代表8個電機),初始值 為0,每個中斷觸發周期內給該累加計數器加上從舞步信息數組dancedata中讀取的速度值speeds[i],當計數器值大于或等于預設的閾值 MAX_SPEED_TICKER=600時,則發送脈沖序列中的下一個(正轉)或上一個(反轉)給步進電機,這取決于速度的符號(參考3.2節)。同 時,將該電機的累加計數器speed_tickers[i]恢復為0。給出的速度值speed[i]越大,則累加達到或超過閾值 MAX_SPEED_TICKER的時間就越短,那么向步進電機發送脈沖的頻率就越高,速度也就越快。

        歸一化速度值設為num(-128~127),電機實際旋轉速度設為V,那么V和num之間滿足關系式:

        (1)當num是閾值600的約數時,

        其中,[x]代表不超過x的最大整數。

        (3)V0是一個速度常數,即當歸一化速度值num=120的時候對應的電機實際速度。

        (4)num和速度V近似線性關系,V∝num。正是因為有了這種函數關系,我們在舞蹈動作控制中,可以輕松實現速度在大范圍內變化。

        3.2 速度正負實現方式

        (1)在程序中,數組steps[8]用于存放步進電機的脈沖序列。


        (2)設置指針cur_step[8]指向8個電機當前處在脈沖序列step[8]中的位置。
        易知:0=step[i]=7,其中,i分別代表8個電機。

        (3)設置指針移動變量delta=0。delta=1,指針向后移動一步,電機正轉;delta=-1,指針向前移動一步,電機反轉;delta=0,指針不移動,電機不發生轉動。

        3.3 程序具體步驟

        3.3.1初始化計時器InitTimer,然后空循環,進入等中斷階段。

        3.3.2 中斷觸發后,程序進入服務程序。

        (1)執行函數SetAllSpeeds,函數根據提供的速度值speed[i]依次判斷是否給各個電機發送脈沖,實現電機以特定的速度和方向旋轉。SetAllSpeeds具體算法流程見圖3。

        (2)從定義的數組dancedata中讀取新的速度信息,每200ms一次。

        (3)將系統在調用中斷處理函數時關閉的計時器重新打開InitTimer。

        (4)中斷處理函數結束返回。

        注意:第一,(1)和(2)不可交換,這是為了保證步進電機每步延時的均勻性;第二,內部中斷間隔時間 1ms內,8051是否能夠將中斷服務程序中所有的代碼執行完全?答案是肯定的。參考圖4,我們對整個中斷服務程序進行了統計,它所要執行的指令數在 200~300之間變化,時鐘間隔設置為1ms,選用12MHz晶振,執行這些指令需要耗時約500~600μs1ms,因此,中斷處理完全可以在一個計時器周期內執行完畢。

        3.jpg

        3.4 舞蹈編排

        在舞蹈編排中,我們面向的是動作,因此,必須關心三要素:快慢、方向和幅度。在程序中,舞步信息數組格式如下:

        4.jpg

        每組數據含有8個字節,分別代表8個電機的歸一化速度num,這點在3.1節中已經做了詳細分析。程序每200ms讀一次數據,換句話說,每組數據的有效期只有200ms。我們分析表2一組數據代表的含義。

        5.jpg

        (1)組數為25,這隱含了動作的時間信息。因為每組數據的有效期為200ms,所以,25組數據的執行時間為:200ms×25=5000ms

        (2)左腳和右腳(輪式)的歸一化速度相等,方向相反。根據公式(1)可以知道

        V=0.5×V0

        所以,機器人以0.5V0的速度原地轉圈5000ms。

        (3)其它關節的歸一化速度num=0,說明其它關節均無動作。

        3.5 可視化輔助程序簡介

        我們發現一個簡單的動作競需要5組數據,5分鐘的舞蹈需要

        組數據(需占用1.5K存儲空間,AT89C52足夠)。如果人工填寫這些數據,將十分困難。因此在實際的運用中,我們用C+Builder編寫了機器人模擬程序,采用圖形界面,預一化速度和時間信息,寫入data.h,只要將其作為頭文件,電機驅動程序將自動讀取。

        4 電路和程序特點總結

        (1)一塊單片機控制多個步進電機,總線分時復用。

        (2)程序基于中斷服務,電機工作穩定可靠。

        (3)提出歸一化速度,實現了速度V大范圍可變。

        (4)數據更新每200ms一次,可以輕松控制各個電機實時加速、減速、爆發,從而使舞蹈更人性化、感情化。這也正是我們允許數據量大的原因。

        (5)輔助程序實現編程可視化。

        文末是中國科大首屆機器人舞蹈比賽中用到的程序實例。





        1.jpg


        參考文獻

        1 顧天柱,陳巳康.C51交叉編譯系統.上海:復旦大學出版社,1990,8

        2 胡漢才.單片機原理及系統設計.北京:清華大學出版社,2002



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 扶风县| 竹溪县| 彩票| 鞍山市| 和顺县| 新蔡县| 巴彦县| 武冈市| 马龙县| 西城区| 滦南县| 达拉特旗| 义乌市| 金湖县| 崇礼县| 伊金霍洛旗| 夏邑县| 苏尼特右旗| 望奎县| 恭城| 龙陵县| 资源县| 响水县| 阿克陶县| 酒泉市| 横峰县| 金平| 孟津县| 武山县| 隆安县| 陵川县| 益阳市| 扎鲁特旗| 江安县| 乌鲁木齐县| 景德镇市| 陇西县| 宁武县| 海门市| 永新县| 新余市|