1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 51单片机通过驱动器精准控制步进电机

51单片机通过驱动器精准控制步进电机

时间:2023-07-28 16:45:26

相关推荐

51单片机通过驱动器精准控制步进电机

文章目录

51单片机驱动器控制步进电机文章简介1.驱动器简介2.驱动器和单片机接线方法3.单片机程序4.实物演示视频

51单片机驱动器控制步进电机

文章简介

本文是前段时间玩步进电机精准控制的总结,关于51单片机驱动步进电机的程序(用脉冲频率控制)及接线方法。

1.驱动器简介

如图所示,以下为两相电机驱动器实物图,ENA+为驱动器使能信号+,ENA-为驱动器使能信号-。PUL+是脉冲信号+,PUL-是脉冲信号-。DIP是方向信号。 DC接供电电源,电压为24V~42V。 驱动器还可通过拨码开关调电流和调细分,上方有PU的表格为调细分的,通过拨码开关S1,S2,S3进行控制,下方有PK的表格为调电流的,通过拨码开关S4,S5,S6进行控制。拨码开关往下拨就是ON状态(开启状态)。(其他驱动器可根据规格表对比,基本同理)

2.驱动器和单片机接线方法

驱动器上A+、A-、B+、B-端通过电机上说明,按照颜色接即可。 然后驱动器ENA-,DIP-,PUL-三个端共地,接单片机的GND

这里是驱动器拨码开关的图

接着PUL+,DIR+两个端根据代码写的端口接到单片机上,下面是实物连接图。

3.单片机程序

按键一功能是发送500个脉冲,从而精准控制一厘米,为什么是发送500个脉冲,是因为驱动器可以通过拨动开关调电流,调细分,我用的是200个脉冲转一圈的状态,经过调试200个脉冲刚好转动0.4厘米,经过换算,500个脉冲为1厘米,所以实现精准控制1厘米,同理可得,其他距离的脉冲数。

按键二的功能为使电机反转,通过转换引脚电平,给驱动器DIR口状态取反,DIR控制电机正方转,故按键二控制电机方向。

两个外部中断是响应接近开关,使电机转换方向,防止电机超过限位。

#include <stc15f2k60s2.h>#include <intrins.h>#define u8 unsigned char#define u16 unsigned intunsigned int h;//无符号整形变量sbit maichong=P1^1;//定义脉冲输出脚(PUL)sbit zhuang=P0^3;//定义方向引脚(DIR)sbit K1=P2^0;//脉冲发送sbit K2=P2^1;//转向sbit K3=P2^2;//调试按键,调试中断是否能进入,可注释掉sbit right=P3^2//右限位sbit left=P3^3;//左限位sbit yuan=P0^2;//坐标原点/**CSDN博墨**************************************//********CSDN博墨********************************//****************CSDN博墨************************//*************************CSDN博墨***************//**********************************CSDN博墨******/void Delay400us()//400微秒延时函数{unsigned char i, j;i = 5;j = 74;do{while (--j);} while (--i);}void Delay10ms()//10毫秒延时函数{unsigned char i, j;i = 108;j = 145;do{while (--j);} while (--i);}void right_EXINT0() interrupt 0//外部中断函数0{if(right==1){Delay10ms(); if(right==1){zhuang=~zhuang;}}}void left_EXINT1() interrupt 2//外部中断函数1{if(left==1){Delay10ms(); if(left==1){zhuang=~zhuang;}}}void EXINT_init()//外部中断初始化{IT0=0;IT1=0;IE0=0;IE1=1;EA =1;EX0=1;EX1=1;}void main ()//主函数{EXINT_init();P0M0=0XFF;P0M1=0X00;while(1){if (K1==0)//按键1判断{Delay10ms(); //延时if (K1==0){for(h=0;h<500;h++)//for 循环500次,发送500个脉冲{maichong=0; Delay400us();maichong=1; Delay400us();} }} if (K2==0)//判断按键2{Delay10ms(); //延时if (K2==0){zhuang=~zhuang;//引脚状态取反while(K2==0);//判断是否松开按键}}if(K3==0){if(K3==0){P1=0X00;}}else{P1=0Xff;}}}/**CSDN博墨**************************************//********CSDN博墨********************************//****************CSDN博墨************************//*************************CSDN博墨***************//**********************************CSDN博墨******/

4.实物演示视频

51单片机驱动器控制步进电机

以上是之前程序调试完的视频,文章中如果有错误的地方,欢迎各位大佬指正。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。