步進電機控制實驗
一、實驗目的
1、學習步進電機驅動原理;
2、掌握通過CPU控制步進電機的方法。
二、實驗內容
1、了解步進電機的運行控制;
2、了解步進電機運行速度的控制方法;
3、了解步進電機運行方向的控制方法。
三、實驗設備DM2410B十實驗系統;PC機;JTTAG仿真器;串口線。
2、軟件:
PC機操作系統(WINDOWS 2000);
Multi-ICE V2.2.5;
DNW 2410(或超級終端)。
程序解析:
本實驗系統使用5302410的工/0口的GPF的0, 4, 5, 6四個端口。對應的驅動如下:
///////////////////////////////////////////////////////////////////////////////////
// GPF4 GPF0 GPF5 GPF6
//
//A 1 0 0 0
//
//AB 1 1 0 0
//
//B 0 1 0 0
//
//BC 0 1 1 0
//C 0 0 1 0
//CD 0 0 1 1
//D 0 0 0 1
//DA 1 0 0 1
/////////////////////////////////////////////////////////////////
下面的程序段是對各步驅動的設置:
void Avoid)
{
rGPFDAT= rGPFDAT|0x10;//GPF4=1
rGPFDAT= rGPFDAT&0xfe;//GPF0=0
rGPFDAT= rGPFDAT&0xdf;//GPF5=0
rGPFDAT= rGPFDAT&0xbf;//GPF6=0
}
void B(vvid)
{
rGPFDAT=rGPFDATI0xef;//GPF4=0
rGPFDAT=rGPFDAT|0x1;//GPF0=1
rGPFDAT=rGPFDAT&0xdf;//GPF5=0
rGPFDAT=rGPFDAT&0xbf;//GPF6=0
}
void C(void)
{
rGPFDAT=rGPFDAT&0xfe;//GPF0=0
rGPFDAT=rGPFDAT&0xef;//GPF4=0
rGPFDAT=rGPFDAT|0x0;//GPF5=1
rGPFDAT=rGPFDAT&Oxbf;//GPF6=0
}
void D(void)
{
rGPFDAT=rGPFDAT&0xfe;//GPF0=0
rGPFDAT=rGPPDAT&0xef;//GPF4=0
rGPFDAT=rGPFDAT&0xdf;//GPF5=0
rGPFDAT=rGPFDAT|0x40://GPF6=1
void AB(void)
{
rGPFDAT=rGPFDATI0x10;//GPF4=1
rGPFDAT=rGPFDATI0x1;//GPF0=1
rGPFDAT=rGPPDAT&0xdf;//GPF5=0
rGPFDAT=rGPFDAT&0xbf;//GPF6=0
}
void BC(void)
{
rGPFDAT=rGPFDAT&0xef;//GPF4=0
rGPFDAT=rGPFDATI0x1;//GPF0=1
rGPFDAT=rGPFDATI0x20;//GPF5=1
rGPFDAT=rGPFDAT&Oxbf://GPF6=0
}
Void BC(void)
{
rGPFDAT=rGPFDAT&0xfe;//GPF4=0
rGPFDAT=rGPFDAT&0xef; //GPF0=1
rGPFDAT=rGPFDAT|0x20;//GPF5=1
rGPFDAT=rGPFDAT|0x40;//GPF6=0
}
void DA(void)
{
rGPFDAT=rGPFDATI0x10;//GPF4=l
rGPFDAT=rGPFDAT&0xfe;//GPF0=0
rGPFDAT=rGPFDAT&0xdf;//GPF5=1
rGPFDAT=rGPFDAT|0x40;//GPF6=l
}
下面的程序段通過調用上面的函數實現8拍的驅動:
void Moter_ Test(void)
{int z,i,j=7;
int begin,end,direction,x;//direction麥示轉向左句
int time=20;1/time表示延遲時間,決定速度
Step_Ini t () ; //保護步進電機與驅動電路
//GPFOW GPF0 [1:0]二01:Output
//GPFOW GPF4 [1:0]二01:Output
// GPFOW GFF5 [1:01=01:Output
//GPFOW CPF6 [1:0]=01:Output
rGPFCON=INkrGPF07N&Oxd5fd;
rGPFCON=rGPFCGNI0x1501;
Uart Printf(“nINPUT DELAY TIME :1一1000:”
time=Uart_GetIntNum();
Uart Printf(“nINPUTDERECTION:I/0:”
direction=Uart _GetIntNum();
if (direction=1)
(
begin=1;
end=8;
x=1;
)
else
begin=8
end=1;
x=1:
Uart_ Printf(“nPRESSANY KEY功STOP.”);
wh ile(!Uart_GetKey())//被PC機上的任意鍵停止
{
i=begin;
while(!(i=end+x))//是否完成一個相位循環
{
Step_8(i);
Delay(time);
i=i十x;
}
Step_Init();//保護步進電機與驅動電路
Uart_ Printf(“nTEST FINISHED!!”);
}
//*********************************************
//功能:step_8
//名稱:確定各拍的相位
//參數:s
//返回值:void
//**********************************************
void Step_8(int s)//4褶8者
[switch(s)
f
case(1):A(); break;
case(2):AB();break;
case(3):B(); break;
case(4):BC();break;
case(5):C(); break;
case(6):CD();break;
case(7):D(); break;
case(8):DA();break;
注意:不同于使用專用驅動芯片驅動步進電機,我們為了演示驅動步驟采用了通用驅動芯片L293D,同時驅動的CPU引腳是復用的。這樣存在一個問題:當步進電機不處在驅動狀態時有可能在某一個相位長時間加上驅動電流,因為步進電機沒有旋轉,阻抗極小,非常容易損壞驅動電路和步進電機。為此,我們在擴展板上設置了步進電機控制開關,進行其它實驗時應確保開關處在。FF的位置,僅當驅動步進電機的程序運行后才可撥至ON的位置。
四、實驗步驟
1、仔細閱讀實驗說明部分,熟悉步進電機的原理及驅動機制;
2、將實驗系統光盤中“ADS實驗指導步進電機驅動實驗”目錄拷貝到本地硬盤,用ADS組件中的CodeWarrior for ARM Developer Suite S具軟件打開其中的MOTER.mcp T -程文件。用實驗一中的方法選用相對地址中的:cat. scf文件;
3、在DebugRel目標路徑下編譯源文件。(詳見實驗一),分析并熟悉程序。
4、按實驗二的方法正確連接硬件并打開”Multi-ICE Server“和”AXDDebugger”對CPU進行初始化,導入本地硬盤上“ADS實驗指導步進電機驅動實驗”中“MOTERDatalDehugRellmoter.axf“文件或光盤上的實驗項目文件。(詳見實驗一);
5、打開DNW2410. exe并建立PC機與實驗系統的連接(見實驗二)。運行程序并根據DNW241D.exe串口終端提示進行操作。運行中首先輸入延遲時間以決定旋轉時間,然后輸入數字1或0決定旋轉方向。實驗中的運行界面如圖14-7:
五、實驗心得與體會
此次實驗讓我了解了如何使用C語言編程驅動步進電機,。掌握通過CPU控制步進電機的方法,步進電機的運行控制,步進電機運行速度的控制方法,了解步進電機運行方向的控制方法。通過看指導書,也讓我熟悉了步進電機的驅動原理,熟悉了ADS實驗環境的操作流程。
評論
查看更多