标题: 51单片机步进电机转角+方向控制 [打印本页]
作者: xs3396 时间: 2018-9-20 11:55
标题: 51单片机步进电机转角+方向控制
STC15W4K58S4单片机串口控制步进电机转角,串口发送角度值,大于零正转,小于零反转,只是速度过快的时候,由于惯性作用,会有误差累积
单片机源程序如下:
- #include "stc15w.h"
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include "uart.h"
- #include "motor.h"
- /***********函数变量定义声明*************/
- void IO_Init();
- double AngVal=0.0;
- int pul_cut=0;
- /**************主函数******************/
- void main()
- {
- IO_Init();
- Uart1_Init(); //串口1初始化
- Timer0Init(); //定时器0初始化
- DIR=1; //初始化电机方向
- EN=0; //初始化电机使能
- TR0=0; //定时器初始化不计时
- while(1)
- {
- if(RecvFlag==1) //判断串口接收标志
- {
- RecvFlag=0; //清接收标志
- AngVal=atof(Val); //字符串转浮点
- printf("%5.2f\n",AngVal);//打印输出角度
- EN=1; //步进电机使能
- if(AngVal>0) //判断电机转向
- {
- DIR=1;
- }
- else if(AngVal<=0)
- {
- DIR=0;
- }
- TR0=1; //定时器0开始计时
- pul_cut=fabs(AngVal/0.1125); //通过角度计算脉冲个数
- }
- if(num>=pul_cut) //脉冲个数判断
- {
- num=0; //脉冲个数清零
- TR0=0; //关闭定时器0
- }
- }
- }
- /**************IO口初始化函数******************/
- void IO_Init() //IO口初始化,P5口推晚输出,其余口设置为准双向
- {
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P5M0 = 0xff;
- P5M1 = 0x00;
- }
复制代码
所有资料51hei提供下载:
串口控制步进电机角度.rar
(53.22 KB, 下载次数: 130)
作者: admin 时间: 2018-9-20 16:52
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者: xs3396 时间: 2018-9-21 09:44
补充说明.doc
(144.5 KB, 下载次数: 44)
作者: xs3396 时间: 2018-9-21 09:47
对昨天的程序做一个更全面的补充
-
-
补充说明.doc
144.5 KB, 下载次数: 40, 下载积分: 黑币 -5
补充说明
作者: xs3396 时间: 2018-9-21 09:51
补充说明:
电机选用57两相步进电机,驱动器使用雷塞的ME432,采用共阳极接法,单片机控制引脚低电平有效(控制引脚无需接限流电阻,公共正端即是单片机的VCC)。接线图如下:
对应程序管脚定义:
使能信号:EN--> P5.3
方向脉冲:DIR-->P5.4
脉冲信号:PUL-->P5.5
注:管脚可根据自己使用的单片机更改,但一定设置为推晚输出,才能驱动控制器。
此外,驱动电机的脉冲频率(即电机转速)要根据单片机定时器的定时时间去修改,频率过快或者过慢都会使电机无法转动,要根据实际情况适当调整。还有,驱动器的细分会影响电机转角,细分为多少,电机转一圈就需要多少个脉冲。假设细分为800,电机转一圈(360°)需要800个脉冲,一个脉冲就转0.45°。要注意的是,在脉冲频率确定后,细分越大,精度越高,转速越慢,要提高转速,此时可以修改脉冲频率,即定时器初值。
步进电机和驱动器的资料大家可以在淘宝上找,在宝贝详情里都有资料可下载。
作者: 测控系吴~ 时间: 2019-8-1 09:59
大佬牛逼了
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |