步进电机控制

注:接线要以购买的驱动器和电机为准

1.环境搭建

1.1接线

57步进电机,变成是57cm如图 57BYG250B
在这里插入图片描述
两相四线双极性步进电机 具体的步进电机要看对应的接线
57BYG250B
在这里插入图片描述
黑色A+
绿色A-
红色B+
蓝色B-
在这里插入图片描述

1.2步进电机驱动

对大扭矩电机进行驱动
可以对进行细分
适合驱动57、42型两相、四相混合式步进电机。能达到低振动、小噪声、高速度的效果驱动电机。
在这里插入图片描述
这个驱动器的名称是中文的 可能有其它英文的如下:
在这里插入图片描述
1.2.1 电机接线
在这里插入图片描述
如图是一个接线图
在这里插入图片描述
输入信号共有三路,它们是:
①步进脉冲信号PUL+,PUL-;
②方向电平信号DIR+,DIR-
③脱机(关闭)信号EN+,EN-。
输入信号接口有两种接法,用户可根据 需要采用共阳极接法或共阴极接法。

● 共阳极接法:
分别将PUL+,DIR+,EN+连接到控制系统的电源正极上,如果此电源是+5V/3.3V则可直接接入,如果此电源大于+5V,则须外部另加限流电阻R,保证给驱动器内部光藕提供8—15mA的驱动电流。脉冲输入信号通过PUL-接入,方向信号通过DIR-接入,使能信号通过EN-接入。

● 共阴极接法:
分别将PUL-,DIR-,EN-连接到控制系统的地线(GND)上。脉冲输入信号通过PUL+接入,方向信号通过DIR+接入,使能信号通过EN+接入。如果此控制系统信号线是+5V/3.3V则可直接接入,如果此信号电压大于+5V,则须外部另加限流电阻R,保证给驱动器内部光藕提供8—15mA的驱动电流。

采用共阳接法,初始化的时候配置为开漏输出模式.
接线如下图
在这里插入图片描述
在这里插入图片描述
PA8使用的是高级定时器的CH1引脚
ENA和DIR使用的是普通引脚
在这里插入图片描述
1.2.2 设置细分
细分数设定
细分数是以驱动板上的拨码开关选择设定的,用户可根据驱动器外盒上的细分选择表的数据设定(要求在断电情况下设定) 。
细分后步进电机步距角按下列方法计算:
步距角=电机固有步距角/细分数
如:一台固有步距角 为1.8°的步进电机在4细分下步距角为1.8°/4=0.45°
实际使用的时候,细分要合理的调整
32细分数对应是转动一圈需要6400个脉冲,这在控制步进电机转动圈数非常重要。
注意:控制程序也需要根据细分数进行修改,可以说细分数与控制程序是息息相关的
在这里插入图片描述
1.2.3 电流设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置为2.84A,32细分

1.3 步进电机控制

注意:使用的是比较输出模式,而不是PWM模式
● 设置接ENA的引脚为开漏模式,默认为高电平 这样电机才可以旋转, 也就是没有电流的时候
● 设置方向,顺时针是导通,逆时针是不导通
使用的引脚:
PA8 脉冲
PB13 方向 低电平
PB14 使能 高电平

1.3.1 输出比较模式

输出的就是50%占空比的波形
● 用来控制一个输出波形,或者指示一段给定的的时间已经到时。
● 当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作:
将输出比较模式(TIMx_CCMRx寄存器中的OCxM位)和输出极性(TIMx_CCER寄存器中的CCxP位)定义的值输出到对应的引脚上。
在比较匹配时,输出引脚可以保持它的电平(OCxM=000)、被设置成有效电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。
● 设置中断状态寄存器中的标志位(TIMx_SR寄存器中的CCxIF位)。
● 若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE位),则产生一个中断。
● 若设置了相应的使能位(TIMx_DIER寄存器中的CCxDE位,TIMx_CR2寄存器中的CCDS位选择DMA请求功能),则产生一个DMA请求。
● TIMx_CCMRx中的OCxPE位选择TIMx_CCRx寄存器是否需要使用预装载寄存器。
● 在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。

输出比较模式的配置步骤:
1.选择计数器时钟(内部,外部,预分频器)。
2.将相应的数据写入TIMx_ARR和TIMx_CCRx寄存器中。
3.如果要产生一个中断请求,设置CCxIE位。
4.选择输出模式,例如:
● 要求计数器与CCRx匹配时翻转OCx的输出引脚,设置OCxM=011
● 置OCxPE= 0禁用预装载寄存器
● 置CCxP= 0选择极性为高电平有效
● 置CCxE= 1使能输出

5.设置TIMx_CR1寄存器的CEN位启动计数器
uTIMx_CCRx寄存器能够在任何时候通过软件进行更新以控制输出波形,条件是未使用预装载寄存器(OCxPE=’0’,否则TIMx_CCRx的影子寄存器只能在发生下一次更新事件时被更新)。
在这里插入图片描述

1.3.2 cube配置

1.设置时钟
2.GPIO设置
在这里插入图片描述
3.TIM 高级定时器设置
在这里插入图片描述
Presclaler 预分频:3 ->时钟为18MHZ 72 / 4 = 18
Counter Mode 计数模式:向上计数
Counter Period 计数:65535设置为最大即可
Repetition Counter (RCR - 8 bits value) 重复计数: 0
auto-reload preloa:关 可以让我们随时写入值 进行修改 否则只有完成一次计数才可以进行更新

Mode 模式:翻转 也就是达到计数就进行翻转 Toggle on match
Pulse (16 bits value) 脉冲:计数多少进行翻转 500
Output compare preloadCH Polarity:
CH ldle State:Reset 好像是和死区有关的 不用管

计算理论:18KHZ
实际测试:17.2KHZ
使能比较中断
在这里插入图片描述
详解控制方式:
这一段是中断执行的函数,也就是控制电机的脉冲的代码。

void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
	/* 定义计数值 */
  __IO uint16_t count;
	/* 获取当前的计数值保存到count */
  count = __HAL_TIM_GET_COUNTER(&htim1);
	/* 改变比较值为 count + Toggle_Pulse */
  __HAL_TIM_SET_COMPARE(&htim1 , TIM_CHANNEL_1, count + Toggle_Pulse);
}

在前面设置中:设置计数值为65535
比较值设置为:500
在程序运行开始开始计数,此时PA8引脚输出为低电平
当计数到500的时候,由于我们设置了翻转电平
因此变为高电平,然后,我们将原来的值再加500,然后到了1000,电平翻转
如此反复就形成了方波

溢出的问题:
达到了计数65100
然后会增加500,达到65600 此时会溢出,赋值给寄存器的时候不会报错,此时会将值改变为65600-65535 = 65
会将65赋值过去

因此,为什么设置计数为65535 就是因为溢出的问题计数最大为65535,
如果给了小于65535的值,在超过设定的值之后,比较值还是可以继续增大,而不会溢出,此时就不会产生比较了,因为比较值是永远大于设定值的。或许可以加一个算法解决,但是可能会显得比较麻烦。

细分数越高会提高性能,减少抖动,但是中断过于频繁。
一般在满足要求的情况下,降低细分数,更加容易控制

1.3.3 串口控制

RS232或RS485
通过串口来控制步进电机的转动

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的小熊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值