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

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