中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 舞蹈機(jī)器人步進(jìn)電機(jī)驅(qū)動(dòng)電路和程序設(shè)計(jì)

        舞蹈機(jī)器人步進(jìn)電機(jī)驅(qū)動(dòng)電路和程序設(shè)計(jì)

        作者: 時(shí)間:2016-10-15 來(lái)源:網(wǎng)絡(luò) 收藏

        在中國(guó)科大首屆機(jī)器人舞蹈比賽中(中央10臺(tái)節(jié)目轉(zhuǎn)播),我們用一個(gè)單片機(jī)控制多個(gè)指揮跳舞機(jī)器人 的雙肩、雙肘和雙腳伴著音樂做出各種協(xié)調(diào)舒緩充滿感情的動(dòng)作,榮獲一等獎(jiǎng)。電路采用74373鎖存,74LS244和ULN2003作電壓和電流驅(qū)動(dòng),單 片機(jī)(Atc52)作脈沖序列信號(hào)發(fā)生器。程序設(shè)計(jì)基于中斷服務(wù)和總線分時(shí)利用方式,實(shí)時(shí)更新各個(gè)電機(jī)的速度、方向。整個(gè)舞蹈由運(yùn)動(dòng)數(shù)據(jù)所決定的一截截動(dòng) 作無(wú)縫連接而成。

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

        1 簡(jiǎn)介

        根據(jù)內(nèi)部線圈個(gè)數(shù)不同分為二相制、三相制、四相制等。本文以四相制為例介紹其內(nèi)部結(jié)構(gòu)。圖1為四相五線制步進(jìn)電機(jī)內(nèi)部結(jié)構(gòu)示意圖。

        2 四相五線制步進(jìn)電機(jī)的

        電路主要由單片機(jī)工作外圍電路、信號(hào)鎖存和放大電路組成。我們利用了單片機(jī)的I/O端口,通過(guò)74373鎖 存,由74LS244驅(qū)動(dòng),ULN2003對(duì)信號(hào)進(jìn)行放大。8個(gè)電機(jī)共用4bit I/O端口作為數(shù)據(jù)總線,向電機(jī)傳送步進(jìn)脈沖。每個(gè)電機(jī)分配1bit的I/O端口用作74373鎖存信號(hào),鎖存步進(jìn)電機(jī)四相脈沖,經(jīng)ULN2003放大到 12V驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)。

        1.jpg

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

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

        (2)74LS244為三態(tài)控制芯片,目的是使單片機(jī)足以驅(qū)動(dòng)ULN2003。ULN2003是常用的達(dá)林頓管陣列,工作電壓是12V,可以提供足夠的電流以驅(qū)動(dòng)步進(jìn)電機(jī)。關(guān)于這些芯片的詳細(xì)介紹可參見它們各自的數(shù)據(jù)手冊(cè)。

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

        2.jpg

        這是一種基于總線分時(shí)復(fù)用的方式,以動(dòng)態(tài)掃描的方式來(lái)發(fā)送控制信號(hào),這和高級(jí)操作系統(tǒng)里的多任務(wù)進(jìn)程調(diào)度的思想一致。這種方法明顯的好處是節(jié)省I/O口,使系統(tǒng)可以控制更多的步進(jìn)電機(jī)。本電路設(shè)計(jì)為控制8個(gè)。

        3 程序設(shè)計(jì)

        傳統(tǒng)的步進(jìn)電機(jī)驅(qū)動(dòng)程序利用簡(jiǎn)單的條件循環(huán)來(lái)發(fā)送脈沖序列,但當(dāng)電機(jī)數(shù)目發(fā)生變化時(shí),編程繁雜,冗余代碼較 多,難以做到信號(hào)占空比一致,進(jìn)而產(chǎn)生“抖動(dòng)”現(xiàn)象。下面提出一種基于中斷服務(wù)方式,面向舞蹈動(dòng)作,可實(shí)時(shí)改變各個(gè)電機(jī)速度和方向(每200ms可改變一 次)的程序設(shè)計(jì)方法。

        3.1 速度歸一化和線性關(guān)系

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

        歸一化速度值設(shè)為num(-128~127),電機(jī)實(shí)際旋轉(zhuǎn)速度設(shè)為V,那么V和num之間滿足關(guān)系式:

        (1)當(dāng)num是閾值600的約數(shù)時(shí),

        其中,[x]代表不超過(guò)x的最大整數(shù)。

        (3)V0是一個(gè)速度常數(shù),即當(dāng)歸一化速度值num=120的時(shí)候?qū)?yīng)的電機(jī)實(shí)際速度。

        (4)num和速度V近似線性關(guān)系,V∝num。正是因?yàn)橛辛诉@種函數(shù)關(guān)系,我們?cè)谖璧竸?dòng)作控制中,可以輕松實(shí)現(xiàn)速度在大范圍內(nèi)變化。

        3.2 速度正負(fù)實(shí)現(xiàn)方式

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


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

        (3)設(shè)置指針移動(dòng)變量delta=0。delta=1,指針向后移動(dòng)一步,電機(jī)正轉(zhuǎn);delta=-1,指針向前移動(dòng)一步,電機(jī)反轉(zhuǎn);delta=0,指針不移動(dòng),電機(jī)不發(fā)生轉(zhuǎn)動(dòng)。

        3.3 程序具體步驟

        3.3.1初始化計(jì)時(shí)器InitTimer,然后空循環(huán),進(jìn)入等中斷階段。

        3.3.2 中斷觸發(fā)后,程序進(jìn)入服務(wù)程序。

        (1)執(zhí)行函數(shù)SetAllSpeeds,函數(shù)根據(jù)提供的速度值speed[i]依次判斷是否給各個(gè)電機(jī)發(fā)送脈沖,實(shí)現(xiàn)電機(jī)以特定的速度和方向旋轉(zhuǎn)。SetAllSpeeds具體算法流程見圖3。

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

        (3)將系統(tǒng)在調(diào)用中斷處理函數(shù)時(shí)關(guān)閉的計(jì)時(shí)器重新打開InitTimer。

        (4)中斷處理函數(shù)結(jié)束返回。

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

        3.jpg

        3.4 舞蹈編排

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

        4.jpg

        每組數(shù)據(jù)含有8個(gè)字節(jié),分別代表8個(gè)電機(jī)的歸一化速度num,這點(diǎn)在3.1節(jié)中已經(jīng)做了詳細(xì)分析。程序每200ms讀一次數(shù)據(jù),換句話說(shuō),每組數(shù)據(jù)的有效期只有200ms。我們分析表2一組數(shù)據(jù)代表的含義。

        5.jpg

        (1)組數(shù)為25,這隱含了動(dòng)作的時(shí)間信息。因?yàn)槊拷M數(shù)據(jù)的有效期為200ms,所以,25組數(shù)據(jù)的執(zhí)行時(shí)間為:200ms×25=5000ms

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

        V=0.5×V0

        所以,機(jī)器人以0.5V0的速度原地轉(zhuǎn)圈5000ms。

        (3)其它關(guān)節(jié)的歸一化速度num=0,說(shuō)明其它關(guān)節(jié)均無(wú)動(dòng)作。

        3.5 可視化輔助程序簡(jiǎn)介

        我們發(fā)現(xiàn)一個(gè)簡(jiǎn)單的動(dòng)作競(jìng)需要5組數(shù)據(jù),5分鐘的舞蹈需要

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

        4 電路和程序特點(diǎn)總結(jié)

        (1)一塊單片機(jī)控制多個(gè)步進(jìn)電機(jī),總線分時(shí)復(fù)用。

        (2)程序基于中斷服務(wù),電機(jī)工作穩(wěn)定可靠。

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

        (4)數(shù)據(jù)更新每200ms一次,可以輕松控制各個(gè)電機(jī)實(shí)時(shí)加速、減速、爆發(fā),從而使舞蹈更人性化、感情化。這也正是我們?cè)试S數(shù)據(jù)量大的原因。

        (5)輔助程序?qū)崿F(xiàn)編程可視化。

        文末是中國(guó)科大首屆機(jī)器人舞蹈比賽中用到的程序?qū)嵗?/p>





        1.jpg


        參考文獻(xiàn)

        1 顧天柱,陳巳康.C51交叉編譯系統(tǒng).上海:復(fù)旦大學(xué)出版社,1990,8

        2 胡漢才.單片機(jī)原理及系統(tǒng)設(shè)計(jì).北京:清華大學(xué)出版社,2002



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉