用dsPIC30F的QEI模塊測量交流電機速度和位置(05-100)

本文引用地址:http://dyxdggzs.com/article/91537.htm
圖6 由標志模式復位
用QEI計算角速度
在一個(gè)周期性中斷中執行速度計算,因為角速度在一個(gè)固定時(shí)間周期中是增長(cháng)的數字,這個(gè)中斷間隔,必須小于最大轉速的1/2轉所需時(shí)間。電機的轉速是3450RPM,所以在這個(gè)實(shí)例中選用4000RPM,以避免在任何速度計算時(shí)溢出。下式用于計算時(shí)間間隔:
實(shí)例3是定時(shí)器1的初始化,用于產(chǎn)生周期性中斷,dsPIC DSC運行在14.75MIPS。
實(shí)例3:定時(shí)器1初始化,產(chǎn)生0.0075秒ISR周期
void InitTMR1(void)
{
TMR1=0; //復位定時(shí)器計數器
T1CONbit.TON=0; //關(guān)閉定時(shí)器1
T1CONbit.TSIDL=0; //睡眠期間連續工作
T1CONbit.TGATE=0; //禁止進(jìn)入精確定時(shí)器
T1CONbit.TCS=0; //使用Tcy作為時(shí)鐘源
T1CONbit.TCK=2; //Tcy/64作為輸入時(shí)鐘
PR1=1728 ;
//用64預分頻器確定中斷周期=0.0075秒
IFSobit.T1IF=0; //清定時(shí)器1中斷標志
IECobits.T1IE=1; //允許定時(shí)器1中斷
T1CONbits.TON=1; //打開(kāi)定時(shí)器1
turn;
}
實(shí)例4是在周期性ISR中計算速度變量:
實(shí)例4:角速度計算實(shí)例
#define MAX_CNT_PER_REV(500*4-1)
#define MAXSPEED (unsigned int)(((unsigned long)MAX_CNT_PER_REV*2048)/125)
#define HALFMAXSPEED (MAXSPEED>>1)
int Speed;
void_attribute_((_interrupt_))_T1Interrupt(void)
{
IFSobits.T1IF=0;//清定時(shí)器1中斷標志
PositionCalculation();
Speed=AngPos[0]- AngPos[1];
If(Speed>=0)
{
if (Speed>=(HALFMAXSPEED)
Speed=Speed-MAXSPEED;
}
else
{
if (Speed<-(HALFMAXSPEED)
Speed=Speed+MAXSPEED;
}
Speed*=2;
Return;
}
結語(yǔ)
從本文的編碼實(shí)例,可以得到表1所示數據。
如果測量的速度和角位置需要比較高的分辨率,可以用下列方法:
用比較長(cháng)地時(shí)間周期精確計數。必須避免脈沖計數器寄存器POSCN溢出,所以在這種情況下推薦使用POSCN寄存器的精度。
使用輸入捕捉通道代替轉換每轉計數周期測量。
用每轉產(chǎn)生更多脈沖地增量計數器。
代碼實(shí)例選用dsPIC30F6010 DSC,開(kāi)發(fā)工具是MPLAB IDE7.11和MPLAB C30 v1.31?!?/p>
(郭盛利)
分頻器相關(guān)文章:分頻器原理
評論