具有上位機(jī)通信功能的數(shù)控分度頭
1 引言
本文引用地址:http://m.butianyuan.cn/article/154191.htm分度頭是機(jī)械加工中的重要裝備,是銑床主要附件之一,應(yīng)用十分廣泛。許多零件如齒輪、離合器、花鍵軸及刀具開(kāi)齒等在銑削時(shí)都需要利用分度頭進(jìn)行分度。常用的機(jī)械分度頭主要是通過(guò)計(jì)算然后通過(guò)人工手動(dòng)分度完成,分度速度慢,勞動(dòng)強(qiáng)度高;市面上的數(shù)控分度頭準(zhǔn)確可靠但是投資較大,而且購(gòu)買(mǎi)的數(shù)控分度頭體積大,無(wú)法和中小型銑床配合加工尺寸較小的零件。
在項(xiàng)目實(shí)施過(guò)程中,需要在諸多圓盤(pán)上非等角度鉆孔 15 個(gè)。鑒于市售分度頭價(jià)位較高(5000-6000 元),筆者萌發(fā)了制造一臺(tái)簡(jiǎn)易、高精度數(shù)控分度頭的想法。根據(jù)實(shí)際需求,我們?cè)O(shè)計(jì)了一種體積較小能夠同實(shí)驗(yàn)室內(nèi)現(xiàn)有銑床配合、具有上位機(jī)通信功能的低成本數(shù)控分度頭。分度的計(jì)算工作由上位機(jī)來(lái)完成,分度速度快、精度高。機(jī)械加工、裝配都是在實(shí)驗(yàn)室內(nèi)完成,節(jié)約了大量成本。
2 系統(tǒng)結(jié)構(gòu)與機(jī)械精度
系統(tǒng)結(jié)構(gòu)如圖1 所示,單片機(jī)作為主控制器向步進(jìn)電機(jī)驅(qū)動(dòng)器發(fā)送脈沖、使能、方向三個(gè)信號(hào)來(lái)驅(qū)動(dòng)步進(jìn)電機(jī)工作。脈沖的個(gè)數(shù)以及頻率由上位機(jī)軟件完成計(jì)算,通過(guò)串行口發(fā)送給單片機(jī),由單片機(jī)的一個(gè)定時(shí)器進(jìn)行輸出比較匹配,完成脈沖的發(fā)送,分度速度快。步進(jìn)電機(jī)通過(guò)機(jī)械減速器和同步帶驅(qū)動(dòng)卡盤(pán)實(shí)現(xiàn)精確分度。
圖 1 數(shù)控分度頭結(jié)構(gòu)圖
分度頭的誤差是由于在實(shí)際進(jìn)行分度的時(shí)候有可能所分的度數(shù)不能整除,出現(xiàn)小數(shù),單片機(jī)只能處理整數(shù)的脈沖數(shù),小數(shù)部分就要舍去,由此導(dǎo)致分度頭的精度誤差。最大的誤差值就相當(dāng)于舍去了一個(gè)完整的脈沖δ=θ/i,式中δ表示單片機(jī)發(fā)送一個(gè)脈沖卡盤(pán)所轉(zhuǎn)過(guò)的角度,θ表示步進(jìn)電機(jī)的步進(jìn)角,i 表示機(jī)械傳動(dòng)裝置的減速比。系統(tǒng)采用的步進(jìn)電機(jī)步進(jìn)角是1.8°,經(jīng)過(guò)1000 細(xì)分驅(qū)動(dòng)器的驅(qū)動(dòng),實(shí)際的步進(jìn)角是0.36°,機(jī)械減速比是75:1,所以分度頭的最大誤差值是0.36°/ 75 = 0.0048°= 17.28″,比一般的手動(dòng)分度頭45″的精度要高出一倍以上。減小步進(jìn)電機(jī)的步進(jìn)角和增大機(jī)械減速比還可以進(jìn)一步提高系統(tǒng)的精度,但是這樣做會(huì)降低分度速度。在實(shí)際的應(yīng)用中所選取的電機(jī)細(xì)分?jǐn)?shù)和機(jī)械減速比已經(jīng)提供了足夠高的機(jī)械精度,能夠滿足實(shí)際加工需要。
3 與上位機(jī)通信
系統(tǒng)采用RS232 接口與上位機(jī)進(jìn)行通信。一般的USART 收發(fā)程序,往往是一段采用輪循方式完成數(shù)據(jù)收發(fā)的簡(jiǎn)單代碼。采用這種方式不僅大大降低了MCU 運(yùn)行效率,而且也不適合于與其他的實(shí)際應(yīng)用代碼相融合,無(wú)法實(shí)現(xiàn)結(jié)構(gòu)化、模塊化的程序設(shè)計(jì)。根據(jù)AVR 單片機(jī)自身特點(diǎn)(片內(nèi)含有高速大容量RAM),我們?cè)谄瑑?nèi)RAM 中設(shè)置了一個(gè)接收緩沖區(qū),采用一種底層驅(qū)動(dòng)+中間層函數(shù)的結(jié)構(gòu),把USART 接口部分相對(duì)地獨(dú)立出來(lái),更加方便系統(tǒng)軟件的編寫(xiě)。
針對(duì)接收緩沖區(qū)的設(shè)計(jì),我們采用一個(gè)類(lèi)似于環(huán)形隊(duì)列的結(jié)構(gòu),讀寫(xiě)緩沖區(qū)各用一個(gè)指針,再設(shè)一個(gè)計(jì)數(shù)器記錄緩沖區(qū)中未讀出的數(shù)據(jù)個(gè)數(shù)。主程序中每次讀取一個(gè)數(shù)據(jù),讀指針指向下一個(gè)數(shù)據(jù),計(jì)數(shù)器減1,每次發(fā)生接收中斷,寫(xiě)指針指向下一個(gè)數(shù)據(jù),計(jì)數(shù)器加1。當(dāng)主程序調(diào)用中間層函數(shù)接收數(shù)據(jù)時(shí),如果接收緩沖區(qū)為空,單片機(jī)不必等待,可以繼續(xù)執(zhí)行其他操作。而USART 硬件接收完一個(gè)數(shù)據(jù)以后,中斷函數(shù)將接收到的數(shù)據(jù)存入接收緩沖區(qū),當(dāng)主程序中的其他操作結(jié)束后由中間層函數(shù)來(lái)讀取。
控制命令由上位機(jī)發(fā)出,由五個(gè)字節(jié)組成一條完整的控制命令,格式如表 1 所示。
D0:控制字的起始字節(jié),規(guī)定每個(gè)控制字的起始字節(jié)都是固定值0x42,即ASCII 碼中的‘B’,用來(lái)代表開(kāi)始;
D1:規(guī)定脈沖個(gè)數(shù)的高字節(jié),在單片機(jī)中,我們用一個(gè)16 位的int 型變量存儲(chǔ)每一條控制命令的脈沖數(shù),所以,上位機(jī)發(fā)過(guò)來(lái)的脈沖數(shù)就要被拆分成兩個(gè)字節(jié);
D2:規(guī)定脈沖個(gè)數(shù)的低字節(jié);
D3:這個(gè)字節(jié)的高四位中的第四位用來(lái)代表電機(jī)的轉(zhuǎn)動(dòng)方向(1 代表順時(shí)針,0 代表逆時(shí)針);低四位用來(lái)代表電機(jī)的轉(zhuǎn)動(dòng)速度,分為15 個(gè)等級(jí);
D4:控制字的結(jié)束字節(jié),規(guī)定結(jié)束字節(jié)都是固定值0x45,即ASCII 中的‘E’,用來(lái)代表一條控制命令的結(jié)束。
系統(tǒng)的上位機(jī)界面如圖2所示,在上位機(jī)界面中可以方便地設(shè)置旋轉(zhuǎn)角度、電機(jī)轉(zhuǎn)速、電機(jī)的轉(zhuǎn)動(dòng)方向,并按照使用意圖進(jìn)行運(yùn)動(dòng)。實(shí)物圖如圖3所示。
評(píng)論