基于DSP芯片TMS320F240的步進(jìn)電機(jī)的調(diào)焦系統(tǒng)設(shè)計(jì)
int table[ ]= { 25,800,255, //第1行
. . . . . . } //第n行
其中25為電機(jī)步數(shù);800為定時(shí)器周期寄存器值;255每兩步間所要進(jìn)入定時(shí)器中斷的次數(shù)。實(shí)現(xiàn)準(zhǔn)確地控制步進(jìn)電機(jī)控制器關(guān)鍵在于由F240 I/O口產(chǎn)生規(guī)定的脈沖信號,提供給步進(jìn)電機(jī)控制器從而驅(qū)動(dòng)步進(jìn)電機(jī)正確轉(zhuǎn)動(dòng),程序中包括F240初始化、電機(jī)正轉(zhuǎn)、等待、電機(jī)反轉(zhuǎn)幾個(gè)程序模塊。程序流 程圖如圖2所示:
圖2 程序流程圖
以下是實(shí)現(xiàn)電機(jī)正轉(zhuǎn)的程序。程序中變量解釋:step:用于存儲(chǔ)數(shù)組中電機(jī)步數(shù);every step:用于存儲(chǔ)數(shù)組中每兩步間所要進(jìn)定時(shí)中斷的次數(shù);flag:數(shù)組行數(shù)標(biāo)志(程序假設(shè)需正轉(zhuǎn)36組)。
void interrupt INT2_ISR()
{ while (*EVIVRA==0x0027) //是否是定時(shí)器中斷
{ if(flag36) //用來完成正轉(zhuǎn)
{
if (steptotal==step) //是否走完數(shù)組每行規(guī)定的步數(shù)
{ flag++; //數(shù)組行標(biāo)志加1
steptotal=0; //電機(jī)轉(zhuǎn)動(dòng)步數(shù)清零
step=table[++j]; //更新電機(jī)運(yùn)行步數(shù)數(shù)據(jù)
*T1PR=table[++j]; //更新定時(shí)器定時(shí)周期
everystep=table[++j]; //更新需要進(jìn)入定時(shí)器中斷次數(shù)
*T1CNT=0; } //從零開始計(jì)時(shí),啟動(dòng)定時(shí)器
i++; //循環(huán)標(biāo)志位加1
if(i==1) *PADATDIR=0xff05; // 提供下降沿,正轉(zhuǎn),不脫機(jī)
else{ if (i==everystep)
評論