<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于VC++的步進(jìn)電機(jī)控制系統(tǒng)研究

          基于VC++的步進(jìn)電機(jī)控制系統(tǒng)研究

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


          3、軟件實(shí)現(xiàn)

          3.1 利用提供的串行通信控件MSComm實(shí)現(xiàn)串行通信

          首先,在的對(duì)話框中創(chuàng)建通信控件,若Control工具欄中缺少該控件,可通過(guò)菜單Project→Add toProject→Components and Control插入即可,再將該控件從工具箱拉到對(duì)話框中。此時(shí),你只需要關(guān)心控件提供的對(duì)Windows通信驅(qū)動(dòng)程序的API函數(shù)的接口,即只需要設(shè)置和監(jiān)視MSComm控件的屬性和事件。

          在ClassWizard中為新建的通信控件定義成員對(duì)象(CMSComm m_Serial),通過(guò)該對(duì)象便可以對(duì)串口屬性進(jìn)行設(shè)置,MSComm控件共有27個(gè)屬性,其中主要包括:

          Commport:設(shè)置并返回通信端口號(hào),缺省為COM1。

          Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。

          PortOpen:設(shè)置并返回通信端口的狀態(tài),也可以打開(kāi)和關(guān)閉端口。

          Input:從接收緩沖區(qū)返回和刪除字符。

          Output:向發(fā)送緩沖區(qū)寫(xiě)入字符串。

          InputLen:每次設(shè)置Input讀入的字符個(gè)數(shù),缺省值為0,表明讀取接收緩沖區(qū)中的全部?jī)?nèi)容。

          InBufferCount:返回接收緩沖區(qū)中已接收到的字符數(shù),將其置0可以清除接收緩沖區(qū)。

          InputMode:定義Input屬性獲取數(shù)據(jù)的方式(為0:文本方式;為1:二進(jìn)制方式)。

          RThreshold和SThreshold屬性,表示在OnComm事件發(fā)生之前,接收緩沖區(qū)或發(fā)送緩沖區(qū)中可接收的字符數(shù)。

          以下是通過(guò)設(shè)置控件屬性對(duì)串口進(jìn)行初始化的實(shí)例:

          打開(kāi)所需串口后,需要考慮串口通信的時(shí)機(jī)。在接收或發(fā)送數(shù)據(jù)過(guò)程中,可能需要監(jiān)視并響應(yīng)一些事件和錯(cuò)誤,所以事件驅(qū)動(dòng)是處理串行端口交互作用的一種非常有效的方法。使用OnComm事件和CommEvent屬性捕捉并檢查通信事件和錯(cuò)誤的值。發(fā)生通信事件或錯(cuò)誤時(shí),將觸發(fā)OnComm事件,CommEvent屬性的值將被改變,應(yīng)用程序檢查CommEvent屬性值并作出相應(yīng)的反應(yīng)。在程序中用ClassWizard為CMSComm控件添加OnComm消息處理函數(shù):

          3.2 系統(tǒng)初始化

          在執(zhí)行應(yīng)用程序時(shí)首先必須進(jìn)行初始化,其初始化程序框圖如圖2所示。



          圖2 初始化程序框圖

          運(yùn)行程序時(shí),視圖執(zhí)行初始化操作函數(shù)OnInitialUpdate(),該函數(shù)內(nèi)要先打開(kāi)串口1,通過(guò)設(shè)置對(duì)象m_ContrCom各成員函數(shù),設(shè)置好各通信參數(shù):

          然后經(jīng)過(guò)一個(gè)位置選擇對(duì)話框,通常選“保持原來(lái)的位置”,然后就發(fā)出詢(xún)問(wèn)各軸的坐標(biāo)值的指令。流程如圖2所示。除x軸是直接發(fā)送坐標(biāo)詢(xún)問(wèn)指令獲得坐標(biāo)數(shù)據(jù)外,其他2個(gè)軸都是通過(guò)連續(xù)的2個(gè)定時(shí)器來(lái)詢(xún)問(wèn)坐標(biāo)的,定時(shí)器響應(yīng)后執(zhí)行圖3的程序。此后就進(jìn)入待操作畫(huà)面。

          3.3 運(yùn)行操作的編程

          在電機(jī)運(yùn)動(dòng)操作區(qū)的各文本框內(nèi)輸入某一軸向的位移值、速度值,按下“運(yùn)行”按鈕,則程序會(huì)把位移值轉(zhuǎn)化為字符型的實(shí)際要運(yùn)行的步數(shù),通過(guò)串口送到SC3控制器,控制對(duì)應(yīng)的軸的電機(jī)運(yùn)行相應(yīng)的步數(shù)。運(yùn)行結(jié)束后,SC3會(huì)返回一個(gè)“OK”字符至串口,PC機(jī)接受到這個(gè)字符后,就知道電機(jī)運(yùn)行結(jié)束,然后向串口發(fā)送坐標(biāo)詢(xún)問(wèn)指令,SC3會(huì)回送有關(guān)坐標(biāo)數(shù)據(jù),PC機(jī)接到這些數(shù)據(jù)后進(jìn)行處理運(yùn)算并在文本框中顯示出來(lái)。這樣就結(jié)束了一個(gè)完整的運(yùn)行操作。

          所有主要的PC機(jī)和SC3控制器的有關(guān)數(shù)據(jù)通信程序都在MSComm控件內(nèi)。包括所有的接受、識(shí)別返回字符,各軸向坐標(biāo)的運(yùn)算和顯示。

          當(dāng)步進(jìn)運(yùn)動(dòng)完畢后,返回到PC機(jī)的數(shù)據(jù)為已經(jīng)運(yùn)行的步數(shù),根據(jù)這個(gè)步數(shù)要計(jì)算相應(yīng)的坐標(biāo),必須知道各軸的脈沖當(dāng)量。每走一步,電移臺(tái)的位移等于脈沖當(dāng)量,即分辨率。

          坐標(biāo)值=初始坐標(biāo)+運(yùn)行步數(shù)*脈沖當(dāng)量

          平移臺(tái)脈沖當(dāng)量=絲杠導(dǎo)程mm*步距角/(360*細(xì)分?jǐn)?shù))

          旋轉(zhuǎn)臺(tái)(x軸)的脈沖當(dāng)量(度)=步進(jìn)電機(jī)步距角/(傳動(dòng)比*細(xì)分?jǐn)?shù))

          其中細(xì)分?jǐn)?shù)是由控制器后面板撥碼開(kāi)關(guān)設(shè)置的。

          步進(jìn)電機(jī)的步距角都為1.8°,縱軸的絲杠導(dǎo)程為1 mm,橫軸為4 mm,旋轉(zhuǎn)軸傳動(dòng)比為180∶1,細(xì)分?jǐn)?shù)為2,則根據(jù)以上公式可得出:

          縱軸(z)脈沖當(dāng)量=1/100

          橫軸(y)脈沖當(dāng)量=1/400

          旋轉(zhuǎn)軸(x)脈沖當(dāng)量=1/200

          4、結(jié)語(yǔ)

          在PC機(jī)和單片機(jī)之間實(shí)現(xiàn)串行通信控制是近幾年很受歡迎、較為流行的方法。本文介紹的運(yùn)用MSComm控件來(lái)編制的由PC機(jī)對(duì)步進(jìn)電機(jī)直接控制的應(yīng)用軟件具有友好的人機(jī)交互界面,且編程簡(jiǎn)便、工作可靠,是一種切實(shí)有效的方法。同時(shí),這種串行控制方法和技術(shù)還可運(yùn)用于相應(yīng)的工業(yè)控制場(chǎng)合。

          陀螺儀相關(guān)文章:陀螺儀原理



          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();