光電編碼器位置檢測程序_第1頁
光電編碼器位置檢測程序_第2頁
光電編碼器位置檢測程序_第3頁
光電編碼器位置檢測程序_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、typedef struct int16 ElecTheta;int16 MechTheta;Uint16 DirectionQep;Uint16 QepCountIndex;Uint16 RawTheta;Uint32 MechScaler;Uint16 LineEncoder;Uint16 PolePairs;int16 CalibratedAngle;Uint16 IndexSyncFlag; void (*init)();void (*calc)();void (*isr)();1. 位置檢測,計算過程中的變量的定義/*Define the structure of the QEP (

2、Quadrature Encoder) Driver Object*/ Output: Motor Electrical angle (Q15)/ (輸出的電角度?)/ Output: Motor Mechanical Angle (Q15)/ (輸出的機(jī)械角度?)/ Output: Motor rotation direction (Q0)/ (電機(jī)轉(zhuǎn)向?)/ Variable: Encoder counter index (Q0)/ (編碼器輸出的脈沖數(shù)?)/ Variable: Raw angle from Timer 2 (Q0)/ (某一時刻轉(zhuǎn)子對于定子A相的絕對角度?)/ Para

3、meter: 0.9999/total count (Q30)/ (每個脈沖所轉(zhuǎn)過的機(jī)械角度?)/ Parameter: Number of line encoder (Q0)/ (編碼器每轉(zhuǎn)輸出的脈沖個數(shù)?)/ Parameter: Number of pole pairs (Q0)/ (極對數(shù))/ Parameter: Raw angular offset between encoder/index and phase a (Q0)/翻譯過來是編碼器與定子A相之間的角度偏量,/但不知道到底這個偏移量是指什么,請教高人/ Output: Index sync status (Q0)(?)/

4、Pointer to the init function/ (初始化函數(shù))/ Pointer to the calc function/ (位置測量,計算函數(shù))/ Pointer to the isr function/ (Z信號的捕獲中斷) QEP;上面的漢語解釋不知道對不對,請高人過目,指出問題。2、變量的初始化#define QEP_DEFAULTS 0x0, 0x0,0x0,0x0,0x0,0x00020C4A,0x0,4,-1250,0x0,(void (*)(Uint32)F281X_EV1_QEP_Init,(void (*)(Uint32)F281X_EV1_QEP_Calc,

5、(void (*)(Uint32)F281X_EV1_QEP_Isr QEP qep1 = QEP_DEFAULTS;/ Applied-motion PMSM motor: 24-v, 8-pole, 2000 line encoder, CalibratedAngle = -1250 / MechScaler = 1/8000 = 0X00020C4A (Q30)主程序里還有QEP模塊的初始化,與上面的初始化有一點點重復(fù)的地方。/ Initialize QEP moduleqep1.LineEncoder = 2000;qep1.MechScaler = _IQ30(0.25/qep1.L

6、ineEncoder);qep1.PolePairs = P/2; qep1.CalibratedAngle = -1250; qep1.init(&qep1);此處要請教高手指導(dǎo)的問題就是:CalibratedAngle到底是什么東西?3、功能模塊程序 3、1在進(jìn)行正交編碼,捕獲 Z之前對2812的寄存器進(jìn)行初始化,設(shè)置定時器2為QEP電路提供基準(zhǔn)時鐘 void F281X_EV1_QEP_Init(QEP *p) EvaRegs.CAPCONA.all = 0X9004;/ Set up capture unitsEvaRegs.T2CON.all = 0X9870;/ Set u

7、p capture timerEvaRegs.T2PR = 4*p->LineEncoder; / Init Timer 1 period Register EvaRegs.EVAIFRC.bit.CAP3INT = 1;/ Clear CAP3 flagEvaRegs.EVAIMRC.bit.CAP3INT = 1;/ Enable CAP3 InterruptEALLOW;/ Enable EALLOWGpioMuxRegs.GPAMUX.all |= 0x0700;/ Set up the capture pins to primaryfunctionsEDIS;/ Disable

8、 EALLOW此處要請教高手問題就是:EvaRegs.T2PR = 4*p->LineEncoder ,根據(jù)上面初始化的定義,4*2000=8000個脈沖對應(yīng)的就應(yīng)該是一個360度的機(jī)械角度,也就該是一個定時周期,此時一個周期計算完畢,超過360度的角度就從新開始?假如此時的角度是 200度,是不是對應(yīng) 的脈沖數(shù)就該是 8000*200/360=4444個脈沖?3、2void F281X_EV1_QEP_Calc(QEP *p) int32 Tmp;/ Check the rotational directionp->DirectionQep = 0x4000&EvaReg

9、s.GPTCONA.all;/(GPTCONA的第14位為定時器2的狀態(tài),只讀,如果是遞增記數(shù)就是電機(jī)正轉(zhuǎn),遞減就 是電機(jī)反轉(zhuǎn)?和4000相與就是為了只保留第14位信號?)p->DirectionQep = p->DirectionQep>>14;/得到電機(jī)的轉(zhuǎn)向,是 0是1就知道是正轉(zhuǎn)還是反轉(zhuǎn)?/ Check the timer 2 counter for QEPp->RawTheta = EvaRegs.T2CNT + p->CalibratedAngle;按照定義RawTheta為轉(zhuǎn)子即時的位置對應(yīng)的脈沖,那就應(yīng)該是轉(zhuǎn)子對應(yīng)定子A相的初始位置的角度+轉(zhuǎn)

10、過的相對角度,在 TI的例程里定義的轉(zhuǎn)子對應(yīng)定子 A相的初始位置的角度為0嗎?如果是那此處就應(yīng)該是p->RawTheta =EvaRegs.T2CNT+0。為何有 CalibratedAngle ?/ Compute the mechanical angle in Q15Tmp = _qmpy32by16(p->MechScaler,p->RawTheta,31);/ Q15 = Q30*Q0p->MechTheta = (int16)(Tmp);/ Q15 -> Q15p->MechTheta &= 0x7FFF;/ Wrap around 0X0

11、7FFF/_qmpy32by16()我好象沒找到是什么含義,理解起來應(yīng)該是p->MechScaler*p->RawTheta ,再轉(zhuǎn)換格式對吧?能否請高人說下 /p->MechTheta為何要和0X7FFF相與?按我的理解, TMP已經(jīng)計算得到了即時的機(jī)械角 度,消除第0到11位,保留高位的15為,這樣不僅對整個角度的大小沒有大的影響,并 /且轉(zhuǎn)換成了 Q15格式,而Q15格式里,7FFF最大,代表360度,也代表的是1,相與是 /是為了將大于360度的角度轉(zhuǎn)換過來。此處我還是不大清楚。煩請高人解釋下下。/ Compute the electrical angle in Q1

12、5p->ElecTheta = p->PolePairs*p->MechTheta;/ Q0*Q15 = Q15/計算電角度,電角度=極對數(shù)*機(jī)械角度p->ElecTheta &= 0x7FFF;/ Wrap around 0X07FFF void F281X_EV1_QEP_Isr(QEP *p)(p->QepCountIndex = EvaRegs.T2CNT; / Get the timer 2 counter for one mechanical revolutionEvaRegs.T2CNT = 0;p->IndexSyncFlag = 0

13、x00F0;/ p->IndexSyncFlag 是個什么信號?/ Reset the timer 2 counter/ Set the index flag按照道理,PMSM應(yīng)該有個初始定位的過程,采用最簡單的6個區(qū)的定位,也就是針對編碼器發(fā)出的UVW信號判斷在哪個 60度的區(qū),然后再給定角度完事,這段程序應(yīng)該放在主 程序里系統(tǒng)初始化之后吧?假設(shè)此時UVW信號為101,這時候轉(zhuǎn)子在第一個區(qū),也就是0-60度范圍之內(nèi),那么就設(shè)定轉(zhuǎn)子在相對于定子A相30度的地方,這樣做有最大30度的誤差,會導(dǎo)致電機(jī)可能不會以最大轉(zhuǎn)矩啟動,但啟動是沒問題。此時是不是應(yīng)該把這些角度轉(zhuǎn)換為脈沖個數(shù),送給 Eva

14、Regs.T2CNT做為初始角度去計算?/轉(zhuǎn)子初始定位if(GpioDataRegs.GPADA T.bit.GPIOA8=1&&GpioDataRegs.GPADAT.bit.GPIOA9=0&&Gpio DataRegs.GPADAT.bit.GPIOA10=1)InitAngle=30 度;if(GpioDataRegs.GPADA T.bit.GPIOA8=1&&GpioDataRegs.GPADA T.bit.GPIOA9=0&&Gpio DataRegs.GPADAT.bit.GPIOA10=0)InitAngle=9

15、0;if(GpioDataRegs.GPADA T.bit.GPIOA8=1&&GpioDataRegs.GPADAT.bit.GPIOA9=1&&Gpio DataRegs.GPADAT.bit.GPIOA10=0)InitAngle=150;if(GpioDataRegs.GPADA T.bit.GPIOA8=0&&GpioDataRegs.GPADA T.bit.GPIOA9=1&&Gpio DataRegs.GPADAT.bit.GPIOA10=0)InitAngle=210;if(GpioDataRegs.GPADA T.bit.GPIOA8=0&a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論