步进电机控制实验
一、实验目的
1、学习步进电机驱动原理;
2、掌握通过CPU控制步进电机的方法。
二、实验内容
1、了解步进电机的运行控制;
2、了解步进电机运行速度的控制方法;
3、了解步进电机运行方向的控制方法。
三、实验设备DM2410B十实验系统;PC机;JTTAG仿真器;串口线。
2、软件:
PC机操作系统(WINDOWS 2000);
ARM Developer Suite v1.2;
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实验环境的操作流程。
技术专区
- 从行业到技术,一位嵌入式er带你清晰总览嵌入式行业职业规划
- 三分钟看透!ARM9的交通违章抓拍系统的开发
- 看看大神是怎么做LPC中的中断处理
- 大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源
- 嵌入式C的主要特点以及嵌入式C与标准C异同冲区重用