- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
让步进电机转起来
让步进电机转起来
? 步进电机项目:让步进电机一直向某个方向一步步转动
最终效果图:
此项目练习的目的:
(1)认识步进电机的特性
(2)掌握基本的步进电机控制步骤
完整代码:
#include reg52.h
sbit MOTOR_A = P1^5; // 步进电机的 A 相位
sbit MOTOR_B = P1^6; // 步进电机的 B 相位
sbit MOTOR_C = P1^7; // 步进电机的 C 相位
sbit MOTOR_D = P3^5; // 步进电机的 D 相位
/*延时函数*/
void Delay(unsigned int n)
{
unsigned int i,j;
for(i=0;in;i++)
{
j = 50;
while(j--);
}
}
/*主函数,实现步进电机转动*/
void main(void)
{
while(1)
{
/* 说明:单片机引脚输出 0,步进电机对应相位为高电平;
反之则为低电平 */
MOTOR_A = 0; // A 相输出高电平
MOTOR_B = 1;
MOTOR_C = 1;
MOTOR_D = 1;
Delay(100); // 延时
MOTOR_A = 1;
MOTOR_B = 0; // B 相输出高电平
MOTOR_C = 1;
MOTOR_D = 1;
Delay(100); // 延时
MOTOR_A = 1;
MOTOR_B = 1;
MOTOR_C = 0; // C 相输出高电平
MOTOR_D = 1;
Delay(100); // 延时
MOTOR_A = 1;
MOTOR_B = 1;
MOTOR_C = 1;
MOTOR_D = 0; // D 相输出高电平
Delay(100); // 延时
}
}
长见识:
步进电机外观及接口定义
步进电机的机身内部有磁性材料及线圈构成,外部为金属外壳,它的轴上可
以固定某些机械装置, 左右的两个固定孔可用来将电机固定。 其接口共有 5 根线,
即电源线 VCC、A 相、B 相、C 相、D 相,开发板只需与这些接口相连即可控制
电机的转动。
上图中的接口与开发板上的接口刚好是一一对应, 我们只需将其连接到电机
驱动模块 I 的接口即可使用。
开发板上的电机驱动模块
看到上面这个驱动芯片了吗?一般电机需要的电流都比较大, 而单片机自身
的引脚提供的电流都很小, 不足以驱动电机, 所以需要有把电流放大的电路 (也
就是这里的驱动芯片)来驱动电机的运行。
下面我们来看,项目功能需要涉及到哪些东西:
1 51 单片机
2 电机驱动芯片 ULN2003
3 步进电机
简化框图:
接下来我们通过原理框图理顺思路,并进行相应代码的编写。
从框图我们了解到,功能的实现总共和 2 个东西有关,分别是步进电机和单
片机,我们暂且不用管驱动芯片 ULN2003,认为就是单片机直接控制步进电机
的。
现在我们一起看到这个抽象原理框图, 单片机与步进电机之间共有 4 根连线
(分别为 A 相、B 相、C 相、D 相) ,单片机通过控制这些引脚来实现步进电机的转动。
对于步进电机,它主要是属于定位式电机,说得通俗些就是只要确定当前的
ABCD 保持固定值,那么步进电机就会停在这个固定的位置,变换一下 ABCD
的输出,步进电机就会变到另一个位置,很显然,在这个切换的过程中,步进电
机进行了微小的转动, 那么如果我们不断地切换 ABCD, 那么步进电机自然也就
会不断转动,这里要注意的是,控制信号 ABCD 不可切换过快,因为机械的动
作总是有时间上的延迟,所以我们需要等机械动作完毕后才能进行下一次动作,
当然这个时间还是可以蛮短的。
下面我们按照步骤来写:
? 第一步:配置 IO 口
#include reg52.h
sbit MOTOR_A=P1^5; // 步进电机的 A 相位
sbit MOTOR_B=P1^6; // 步进电机的 B 相位
sbit MOTOR_C=P1^7; // 步进电机的 C 相位
sbit MOTOR_D=P3^5; // 步进电机的 D 相位
? 第二步:编写延时子函数
正如之前所说,步进电机的动作需要时间,所以我们需要定义一个延时函数
来保证它每步动作的完毕,我们可以采用 for 循环或者 while 循环来实现延时,
延时是最常用的函数之一, 所以大家要非常熟悉地将其写出, 以后会经常用到的。
? 第三步:编写 main 函数
main 函数中我们只在 while 的无限循环中进行操作,里面共分为 4 小块,每
块形式相同, 只是引脚的值有变化。 这里实现的是最基本的单四拍操作, 具体步
骤如下。
A 相输出高电平,其他几相输出低电平;
延时等待步进电机动作完毕
B 相输出高电平,
文档评论(0)