历史上的今天
今天是:2024年08月28日(星期三)
2020年08月28日 | arm实验报告——步进电机
2020-08-28 来源:elecfans
一、实验目的
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实验环境的操作流程。
史海拾趣
|
这是我自己设计的51单片机学习开发板,可以供初中级单片机爱好者学习和实验.包含了几乎所有的基本实验和常见的外围器件.有以下器件: 1.双核CPU,AT89C52和AT89C4051 2.16X2液晶显示器 3.数码管和发光二极管 4.ADC0804 5.DAC0808 6.DS18B2 ...… 查看全部问答> |
|
对于一款运动型家轿而言,为驾驶者提供操控乐趣,自然也和为乘车者带来舒适享受同样重要。奇瑞A3不仅采用了与AVL公司联合开发的ACTECO发动机,保证了车辆在行驶时的充沛动力,同时搭载了多项高端的智能配置,在保证行车安全的同时,也让操控变得驾 ...… 查看全部问答> |
|
Generating Code... Linking... CVTRES : fatal error CVT1102: out of memory; 42 bytes required LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt Error executing link.exe. hello.exe - 2 error ...… 查看全部问答> |
|
各位大虾好!小弟最近做一个pda开发,需要把服务器端的视音频通过gprs请求过来,然后在手机上播放,打算基于IE播放视音频,不知道WinCE的IE浏览器支不支持呢?或者有更好的办法?大家指点一下。… 查看全部问答> |
|
最近小弟在学习 SDRAM ,有些资料讲到“发出SelfRefresh命令时,将CKE置于无效状态,就进入了SR模式,此时不再依靠系统时钟工作,而是根据内部的时钟进行刷新操作。在SR期间除了CKE之外的所有外部信号都是无效的(无需外部提供刷新指令),只有重新 ...… 查看全部问答> |
|
8M晶振,9分频后单片机频率还是8M同样程序换个单片机,为72M。频率由RCC_GetClocksFreq(&Clock);测得想问下什么原因,硬件原因可能性大不大?… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:34 编辑 我用的是28系列芯片,CAN通讯,发送数据很多,COB-ID也不一样,只用一个发送邮箱完成不同数据的发送,每次发送数据前,先要重新配置此邮箱的COB-ID、数据长度等,不知道这样做有没有问题? 现在我遇 ...… 查看全部问答> |
|
下面的图是我写的一个程序的仿真结果,本来程序中式希望在clk的上升沿将y1的值赋值给y_out,结果却出现了图中所示的情况,很奇怪,y_out不仅不是在时钟的上升沿被赋值,而且中间还出现了很多多余的变量~~~~~~不知道有没有同仁遇到过,帮忙答疑解惑~… 查看全部问答> |




