李逸楠 孫麗君 孫鳳鳴 王玉敬 崔建飛
摘 要:設(shè)計(jì)了光電編碼器與TMS320F28335之間的接口電路,編程實(shí)現(xiàn)了SSI同步串行接口協(xié)議,以及實(shí)現(xiàn)了光電編碼器格雷碼位置信息的讀取并轉(zhuǎn)換為二進(jìn)制碼參與后續(xù)位置控制運(yùn)算。經(jīng)實(shí)驗(yàn)驗(yàn)證,通過TMS320F28335的GPIO讀取的編碼器位置信息準(zhǔn)確,40 μs內(nèi)可完成一次25 bit的位置信息讀取,分辨力為5'16"。該系統(tǒng)適用于絕大部分需要監(jiān)測(cè)位移、角度、速度、角速度的場合,具有讀取速度快、精度高、價(jià)格低、適用范圍廣的優(yōu)點(diǎn)。
關(guān)鍵詞:TMS320F28335;光電編碼器;格雷碼;SSI同步串行接口
中圖分類號(hào):TP273 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.15913/j.cnki.kjycx.2017.05.023
在電機(jī)控制領(lǐng)域,如果需要精確控制負(fù)載的位置,就必須測(cè)得負(fù)載的當(dāng)前位置,然后與目標(biāo)位置進(jìn)行比較,根據(jù)差值確定電機(jī)的控制策略。因此,準(zhǔn)確地檢測(cè)出負(fù)載位置是一切控制手段的前提。光電編碼器是測(cè)量旋轉(zhuǎn)運(yùn)動(dòng)、角速度的傳感器,可與機(jī)械測(cè)量設(shè)備一起使用,例如絲杠,測(cè)量直線運(yùn)動(dòng)。應(yīng)用領(lǐng)域包括電機(jī)、機(jī)床、印刷機(jī)、木工機(jī)器、紡織機(jī)器、機(jī)器人和運(yùn)送設(shè)備以及各種測(cè)量、測(cè)試和檢驗(yàn)設(shè)備。光電編碼器測(cè)得的位置信息通常通過SSI同步串行總線與控制器進(jìn)行數(shù)據(jù)交換。TMS320F28335本身具有SPI同步串行總線接口,協(xié)議與SSI總線類似,但其數(shù)據(jù)寬度僅為16 bit,對(duì)于多圈數(shù)高精度的光電編碼器(通常為25 bit)無法直接連接使用。本文介紹了一種基于TMS320F28335的光電編碼器驅(qū)動(dòng)方案,可以讀取任意數(shù)據(jù)長度的光電編碼器位置數(shù)據(jù),同時(shí)具有讀取速度快、精度高、價(jià)格低、適用范圍廣的優(yōu)點(diǎn)。
1 簡介
1.1 光電編碼器簡介
本系統(tǒng)采用了海德漢公司的EQN425絕對(duì)式光電編碼器,采用SSI接口。該編碼器為多圈式,讀出的位置信息為25 bit,其中高12位為圈數(shù),低13位為絕對(duì)位置,數(shù)據(jù)格式見表1.
編碼器采用28.5 V直流供電,編碼器通過一路差分信號(hào)接收輸入的CLOCK信號(hào),在CLOCK信號(hào)的驅(qū)動(dòng)下,通過一路差分信號(hào)輸出位置信息。提供了升序旋轉(zhuǎn)方向切換和置零接口,可以通過編程隨時(shí)切換。
1.2 TMS320F28335簡介
TMS320F28335是32位高性能浮點(diǎn)數(shù)字信號(hào)處理器,是近年美國TI公司推出的一種新產(chǎn)品。該芯片具有很強(qiáng)的信號(hào)處理及控制功能,具有單精度浮點(diǎn)運(yùn)算單元和高精度PWM,與定點(diǎn)DSP相比增加了DMA功能,可將ADC轉(zhuǎn)換結(jié)果直接存入DSP的任一存儲(chǔ)空間,有外部存儲(chǔ)器擴(kuò)展接口、看門狗和3個(gè)定時(shí)器,采集精度高,抗干擾能力強(qiáng)。運(yùn)行頻率為150 MHz。
2 硬件接口設(shè)計(jì)
光電編碼器符合RS-485傳輸協(xié)議,采用差分信號(hào)進(jìn)行傳輸。采用28335的GPIO55作為時(shí)鐘輸出,經(jīng)過ISO7221CD隔離,經(jīng)MAX490EESA轉(zhuǎn)換為光電編碼器可用的差分信號(hào)。在時(shí)鐘信號(hào)驅(qū)動(dòng)下,光電編碼器的位置信息通過DATA+與DATA-輸入MAX490EESA轉(zhuǎn)換,經(jīng)隔離后輸入28335的GPIO56。28335的GPIO57作為升序旋轉(zhuǎn)方向切換控制輸出,GPIO58作為置零輸出。如有需要,可以與光電編碼器相應(yīng)接口連接,如圖1所示。
3 軟件設(shè)計(jì)
首先進(jìn)行GPIO55、GPIO56的初始化,代碼如下:
EALLOW; //Enable EALLOW
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 0; //配置為基本輸入輸出功能,光電編碼器輸出時(shí)鐘
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0; //配置為基本輸入輸出功能,光電編碼器數(shù)據(jù)輸入
GpioCtrlRegs.GPBDIR.bit.GPIO55 = 1; //GOIO55方向?yàn)?/p>
輸出,編碼器輸出時(shí)鐘
GpioCtrlRegs.GPBDIR.bit.GPIO56 = 0; // GOIO56方向?yàn)檩斎?,編碼器數(shù)據(jù)輸入
EDIS; //Disable EALLOW
接著對(duì)GPIO55的輸出電平進(jìn)行編程,模擬輸出時(shí)鐘時(shí)序,在下降沿之后讀取GPIO56的數(shù)據(jù),并進(jìn)行數(shù)據(jù)的移位、拼接,得到光電編碼器輸出的格雷碼。代碼如下:
Uint32 m_Rec_Data_Gray = 0; // 光電編碼器輸出格雷碼
long int m_Rec_Data_Bin = 0; // 轉(zhuǎn)換之后的二進(jìn)制碼
void Rec_SSIData(void)
{
Uint32 in_data = 0;
int i;
GpioDataRegs.GPBSET.bit.GPIO55 = 1; //拉高
DELAY_US(0.5); //延遲0.5 μs
GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1; //置低
DELAY_US(0.5); //先發(fā)出一個(gè)下降沿,通知光電編碼器準(zhǔn)備輸出數(shù)據(jù)
for(i=24;i>=0;i--) // 進(jìn)入正式讀數(shù)循環(huán)。該型號(hào)光電編碼器為25位,因此進(jìn)行25次循環(huán)
//讀數(shù)。如果其他光電編碼器位數(shù)不同,則可以改變循環(huán)次數(shù)。
{
GpioDataRegs.GPBSET.bit.GPIO55 = 1; //56 is high can read
DELAY_US(0.5);
GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1; //56 is low
in_data=GpioDataRegs.GPBDAT.bit.GPIO56; //讀數(shù)
m_Rec_Data_Gray|=(in_data<
DELAY_US(0.5);
}
GpioDataRegs.GPBSET.bit.GPIO55 = 1; //56 is high, last high
m_Rec_Data_Bin = (long int)(GrayToDecimal(m_Rec_Data_Gray)); //轉(zhuǎn)換
}
其中,GrayToDecimal()函數(shù)為格雷碼轉(zhuǎn)換為二進(jìn)制數(shù)函數(shù),代碼如下:
static Uint32 GrayToDecimal(Uint32 x)
{
Uint32 y;
y = x;
while (x>>=1)
{
y^=x;
}
return y;
}
4 試驗(yàn)驗(yàn)證
將上述硬件連接完畢,代碼燒錄完畢,上電。采用示波器觀察GPIO55與GPIO56信號(hào)波形,可以看到時(shí)鐘信號(hào)與數(shù)據(jù)信號(hào)如圖2所示。
在圖2中,波形1為讀出數(shù)據(jù),波形2為輸出時(shí)鐘信號(hào)??梢钥吹?,輸出時(shí)鐘脈沖周期為1.4 μs,讀出25位數(shù)據(jù)用時(shí)40 μs,讀出的位置數(shù)據(jù)格雷碼為“1 0010 0101 1011 1011 0001 0110”,轉(zhuǎn)換成二進(jìn)制碼為“1 1100 0110 1101 0010 0001 1101”,轉(zhuǎn)換為十進(jìn)制數(shù)為29 807 133.在此基礎(chǔ)上,將光電編碼器旋轉(zhuǎn)一圈,讀數(shù)變?yōu)?9 811 229,相差4 096.該實(shí)驗(yàn)表明此型號(hào)光電編碼器最小量化單位為360/4 096=0.088°,即分辨力為5'16"。需要注意的是,雖然此光電編碼器用戶手冊(cè)上說明讀出格雷碼的低13 bit為絕對(duì)位置值,但在實(shí)際使用中它并不能達(dá)到標(biāo)稱的精度,相當(dāng)于經(jīng)過格雷碼轉(zhuǎn)換為二進(jìn)制之后,只有低12 bit代表了實(shí)際位置值。其量化精度比標(biāo)稱值降低了一半。
5 結(jié)論
采用TMS320F28335作為控制核心,設(shè)計(jì)了硬件接口電路與驅(qū)動(dòng)軟件,可以適用于任意數(shù)據(jù)寬度的光電編碼器位置信息的讀取。經(jīng)實(shí)驗(yàn)驗(yàn)證,光電編碼器旋轉(zhuǎn)一圈讀數(shù)變化4 096.該系統(tǒng)工作穩(wěn)定可靠,具有讀取速度快、精度高、價(jià)格低、適用范圍廣的優(yōu)點(diǎn)。
參考文獻(xiàn)
[1]徐丹,方超,張建祥,等.電動(dòng)執(zhí)行機(jī)構(gòu)中光電編碼器脈沖波形問題的研究[J].自動(dòng)化應(yīng)用,2011(12):67-69.
[2]羅長洲,陳良益,孫巖,等.一種新型光學(xué)編碼器[J].光學(xué)精密工程,2003(01):104-108.
[3]周志煒.基于FPGA的多路光電編碼器數(shù)據(jù)采集系統(tǒng)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2006.
[4]趙長海,萬秋華,王樹潔,等.21位光電編碼器數(shù)據(jù)處理系統(tǒng)[J].電子測(cè)量與儀器學(xué)報(bào),2010(06):569-573.
[5]李振.一種SSI接口低成本實(shí)現(xiàn)方案[J].工業(yè)控制計(jì)算機(jī),2011(01):61-62.
[6]金彧,金克一,許海洪.一種C8051F單片機(jī)讀取SSI信號(hào)的設(shè)計(jì)[J].電腦開發(fā)與應(yīng)用,2014(09):67-69.
[7]任先文,王坤,張俊豐,等.基于TMS320F28335的SVPWM實(shí)現(xiàn)方法[J].電力電子技術(shù),2010(07):76-78.
[8]姜洪訓(xùn).基于TMS320F28335的異步電機(jī)直接轉(zhuǎn)矩控制系統(tǒng)研究[J].黃石理工學(xué)院學(xué)報(bào),2010(06):12-15.
[9]劉明.基于TMS320F28335的小型導(dǎo)航計(jì)算機(jī)系統(tǒng)設(shè)計(jì)[J].測(cè)控技術(shù),2009(12):37-39.
[10]雷曉瑜,曹廣忠.TMS320F28335及其最小應(yīng)用系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,2009(01):91-95.
〔編輯:劉曉芳〕