引 言
美國(guó)微芯公司推出的dsPIC33FJ256MC710高性能16位數(shù)字信號(hào)控制器,,采用了改進(jìn)型的哈佛架構(gòu)、C編譯器優(yōu)化的指令集,、流水線取指令方式,,具有實(shí)用、低價(jià),、指令集小,、功耗低、速度高,、體積小,、功能強(qiáng)、抗干擾能力強(qiáng)等特點(diǎn),。dsPIC33FJ256MC710高性能16位數(shù)字信號(hào)控制器內(nèi)含有 12位的A/D轉(zhuǎn)換器(500 ksps),、直接存儲(chǔ)器訪問(wèn)(DMA)、比較輸出、捕捉輸入,、I2C接口,、SPI接口、CAN接口,、USART接口,、Flash程序存儲(chǔ)器自讀寫(xiě)等強(qiáng)大的控制功能,內(nèi)核又具有強(qiáng)大的數(shù)字信號(hào)處理能力,,具有廣闊的應(yīng)用前景,,主要應(yīng)用于電機(jī)控制等領(lǐng)域。
我們?cè)谛酒膶?shí)際應(yīng)用中遇到了一些預(yù)想不到的問(wèn)題,,有的是由于硬件設(shè)計(jì)造成,,有的是由于外部干擾造成,還有的是軟件初始化造成的,。這些問(wèn)題的解決方法在微芯公司的應(yīng)用文檔中未提供,,我們花了較多的時(shí)間進(jìn)行分析、測(cè)試,,最后解決了問(wèn)題,。本文將這些解決方法介紹給大家,以避免大家在這個(gè)問(wèn)題上花費(fèi)太多的時(shí)間或因一些無(wú)法解決的問(wèn)題而造成損失,。
1 正交編碼器接口模塊的問(wèn)題
dsPIC33FJ256MC710的正交編碼器接口模塊(以下簡(jiǎn)稱(chēng)QEI模塊),,在調(diào)試(Debug)模式下,能夠正常工作,,可以得到光電編碼器的轉(zhuǎn)動(dòng)信號(hào),但是在程序下載(Pro-gram)后模塊不工作,,不能得到光電編碼器的轉(zhuǎn)動(dòng)信號(hào),。這個(gè)問(wèn)題有些隱蔽,不易發(fā)現(xiàn),,在我們過(guò)去使用微芯公司芯片的過(guò)程中還從未遇到過(guò),。
本文選用的光電編碼器為1024線,差分信號(hào)輸出,。這種輸出方式在工業(yè)現(xiàn)場(chǎng)使用具備較高的抗干擾能力,,可以連接的導(dǎo)線較長(zhǎng)。由于光電編碼器的輸出為差分信號(hào),,而芯片接口要求為T(mén)TL電平信號(hào),,因此增加一片AM26LS32完成電平轉(zhuǎn)換,把差分信號(hào)轉(zhuǎn)換為T(mén)TL電平信號(hào),。光電編碼器輸出的A和/A,、B和/B、z和/Z三組差分信號(hào)接入AM26LS32芯片,轉(zhuǎn)化為A,、B,、Z三路TTL電平信號(hào)與dsPIC33FJ256MC710的正交編碼器接口模塊 (QEI)連接。A,、B為正交編碼信號(hào),,z為光電編碼器零位置信號(hào)。
dsPIC33FJ系列芯片,,具有智能化的QEI模塊,。它由QEA、QEB和INDX三個(gè)輸入通道組成,。QEA和QEB這兩個(gè)通道具有智能的正交解碼功能,。把光電編碼器輸出的A、B兩相正交編碼信號(hào)接入這兩個(gè)通道,,芯片通過(guò)解碼算法,,自動(dòng)判斷出光電編碼器的旋轉(zhuǎn)方向和旋轉(zhuǎn)相對(duì)位置。INDX通道稱(chēng)為索引脈沖,。該通道通過(guò)接入Z信號(hào),,根據(jù)絕對(duì)零位置和相對(duì)位置,就可以確定光電編碼器旋轉(zhuǎn)的絕對(duì)位置,。硬件接口原理框圖如圖1所示,。
按照微芯公司的應(yīng)用筆記,QEI初始化程序如下:
在使用調(diào)試(Debug)模式運(yùn)行程序時(shí),,用示波器可觀察到芯片53號(hào)引腳RF8上電平在每次編碼器位置過(guò)零時(shí)產(chǎn)生了翻轉(zhuǎn),。QEI模塊工作正常。而使用下載(Pro-gram)模式下載程序后,,用示波器察到芯片53號(hào)引腳RF8上電平在每次編碼器位置過(guò)零時(shí)不發(fā)生變化,,QEI模塊工作不正常。
修改初始化程序,,初始化復(fù)用引腳時(shí)增加對(duì)模數(shù)轉(zhuǎn)化模塊AD2PCFGL的配置,,就解決了這個(gè)問(wèn)題。程序修改如下:
修改后的程序在下載(Program)模式的情況下,,用示波器可以觀察到芯片53號(hào)引腳RF8上電平在每次編碼器位置過(guò)零時(shí)產(chǎn)生翻轉(zhuǎn),,QEI模塊正常工作。
實(shí)際應(yīng)用QEI模塊時(shí),,直接讀取POSCNT寄存器的值,,就可知道所測(cè)量旋轉(zhuǎn)軸的絕對(duì)位置。本文選用1024線的光電編碼器,,通過(guò)配置寄存器選擇X4模式,,POSCNT寄存器的計(jì)數(shù)范圍為0~4 096,。根據(jù)索引脈沖中斷和POSCNT寄存器的值,便可精確地知道旋轉(zhuǎn)軸的旋轉(zhuǎn)方向,、旋轉(zhuǎn)速度,、當(dāng)前旋轉(zhuǎn)軸位置等,精度可以達(dá)到1/4 096,。
2 RD15作為I/O輸出的問(wèn)題
通用I/O端口是最基本最常用的接口,,單片機(jī)、數(shù)字信號(hào)處理器通過(guò)它實(shí)現(xiàn)最基本的高低電平邏輯控制,。應(yīng)用時(shí),,dsPIC33FJ256MC710的第48號(hào)引腳作為I/O輸出時(shí),對(duì)應(yīng)為RD15,。RD15作為開(kāi)關(guān)量輸出時(shí),,軟件設(shè)置為高電平,但引腳上不能建立高電平,。通過(guò)大量的試驗(yàn)檢測(cè),,發(fā)現(xiàn)芯片第48號(hào)引腳RD15作為I/O端口時(shí)不能正常工作。為了更清楚地說(shuō)明該問(wèn)題,,引入47,、53、54號(hào)引腳RD14,、RF7,、RF8與RD15作對(duì)比。相關(guān)驗(yàn)證程序如下:
運(yùn)行上述程序,,用示波器觀察dsPIC33FJ256MC710芯片的RD14,、RF7、RF8對(duì)應(yīng)的第47,、53,、54引腳上的電平均為規(guī)律的方波信號(hào),而48引腳RD15上高電平不能正常建立,,只有極小的尖峰脈沖,波形如圖2所示,。
圖2中上部波形為用作對(duì)比的RD14對(duì)應(yīng)的第47號(hào)引腳上的電平信號(hào),,下部波形為RD15對(duì)應(yīng)的第48號(hào)引腳上的電平信號(hào)。下部波形與上部波形的控制方式是一樣的(見(jiàn)上述程序),,但是不能得到高電平信號(hào),。
修改程序的方法是在改變寄存器PORTDbits.RD15之后添加一個(gè)空操作指令asm("nop")。修改后程序如下:
運(yùn)行修改后的程序,,RD15對(duì)應(yīng)的第48號(hào)引腳上也出現(xiàn)規(guī)律的方波信號(hào),,解決了上述問(wèn)題,。這個(gè)問(wèn)題在應(yīng)用中也是不易發(fā)現(xiàn)的,查了微芯公司的應(yīng)用筆記也無(wú)相關(guān)說(shuō)明,,因此詳細(xì)寫(xiě)出來(lái)以饋?zhàn)x者,。
結(jié) 語(yǔ)
本文介紹了Microchip公司的高性能16位數(shù)字信號(hào)控制器dsPIC33FJ系列芯片的內(nèi)部資源,在應(yīng)用dsPIC33FJ256MC710芯片時(shí)遇到的兩個(gè)疑難問(wèn)題,。這些問(wèn)題可能是由于硬件設(shè)計(jì)造成,,也可能是外部干擾或軟件初始化造成的,往往是預(yù)想不到的問(wèn)題,。本文利用相關(guān)程序和波形具體闡述了這兩個(gè)問(wèn)題的現(xiàn)象和解決方法,,并附上了相應(yīng)的程序,希望對(duì)讀者能有所幫助,。