步进电机控制实践
活到老学到老,这几天对步进电机控制进行实践操作,包括硬件与软件。住要目的实践体验步进电机转动性能,转速控制。特别低转速。软件编程。
零:硬件连接:
一:步进电机控制原理:
步进电机工作原理的间单介绍。两相步进电机总共两个挠组,电机有四条线连接到驱动
器,将两个挠组在同一时刻通上相反方向的脉冲电流,步进电机向前走一步。 我手头上的电机参数,最小步距为1.8度。最高电压24V,最大电流1.5A. 这里我们只需知道步进电机控制原理与方法,步进电机内部挠组结构,磁电原理不进行深入讨论与说明。
意思也就是说,每出一个脉冲驱动,电机可以走1.8度。走一转需要 360度/1.8度=200个脉冲。 这个是个基础数据。 也是1:1没有分步。 步进电机驱动器为了更精准的控制步进距离,还有分步。 通常粗糙控制器有 1/2步,4/1步,1/8步,1/16步, 1/32步;更精密驱动芯片,例如TI 微步步进电机驱动芯片DRV8424, DRV8425 ,分步就有1/2步,4/1步,1/8步,1/16步, 1/32步,1/64步,1/128步,1/256步。最高精度可以做到1/256步。可用打印机这些精密的设备上面。
我从拼多多上面花了45元买了一个步进电机驱动模块,型号:TB6600。 输入电压9-24V, 最小分步1,最大 1/32步。 可以通过三位拨码开关设置 1:1步,1/2步,1/4步,1/8步,1/16步,1/32步。从控制信号输入端可以用PWM脉冲信号控制步进电机的转速,扭距,用高低电平控制转动的方向。
现在我们计算一下PWM如何通过频率控制步进电机转速。
我们电机最小步距是1.8度。 驱动器分步我们选1/32步。 为了方便计算说明,把分步后的最小步距用Smin表示,
Smin=1.8/32=0.05625度。
转一圈360度需要步数用ST表示:
ST=360度/Smin=360/0.05625=6400步。
根据步进电机原理一个脉冲,走一步,如果走一圈需要6400个脉冲。假设我们需要1秒钟转一圈,那我们只需要单片机一秒钟发送6400个脉冲就可以了。为了后面单片机PWM周期设定,这里我们把周期值也计算出来,用TPWM表示:
TPWM=1/ST=1/6400=156.25us.
根据以上原理,我们要通过PWM控制步进电机前进步长,转速,我们需要知道几个参数。
第一:步进电机最小步距:
第二:驱动器的分步数。
第三;步进距离,也就是转动圈数。
总结以上内容,合并以上所有计算公式最后得出一公式。PWM的周期值。
TPWM=1/【360/(Smin/分步数)】
TPWM=1/[360/(1.8/32)]=0.00015625秒
电机转动圈数通常用1分钟转多少圈来表示。
如果把圈数转动时间换成分钟。那么先计算出一秒钟转动圈数。比如:1分钟转300圈。
那么就是300/60=5圈。所需要总脉冲数就 5X(360/(1.8/32))=32000. 然后再算TPWM=1/32000=31.25微秒。
把公式按分钟变换一下: 一分钟转动圈数用N表示。
TPWM=1/[(N/60)*360/(1.8/32)]
TPWM=1/[(300/60)*360/(1.8/32)]= 31.25微秒
根据以上步进电机控制原理。问题变的很间单,我们只要根据TPWM数据用单片PWM
功能发出需要的脉冲数量就可以了,
二:设计目标:
根据步进电机的控制原理与反法,用32位单片机ZB32L032的PWM功能输出周期31。25us的PWM波,使电机转速在300转一份钟。当正转300转后,立刻反转300转。然后再正转300转。转速显示在四位LED屏上。前面第一位数表示转动方向,用F表示正转,R表示反转,后面三位数表示转速。
用32位单片机ZB32L032的31脚PA10口输出PWM波。
30脚PA09输出正反转控制信号,高电平控制正转,低电平控制反转。
29脚PA08输出使能信号,高电平打开驱动器,低电平关闭驱动器并进入低功耗待机状态。
PWM波使用ZB32L032的高级定时器1,使能PWM功能,从31脚PA10口输出PWM波,开启中断功能,在中断函数里面进行计数。计算器到达6400次,表示步进电机转了一圈。192000次表示300圈,此时从单片机30脚PA09输出低电平,控制电机反转,当反转300圈后,再从单片机30脚PA09输出高电平,使步进电机正转。
使用单片机ZB32L032的基本定时器11,定时1ms用于对LED屏显示屏进行动态扫描。扫描每位LED屏约1ms,4位LED屏约需要4ms, 扫描整整屏约250HZ.
三:软件流程:
四:部分主要代码:
int main(void){
// uint32_t PrescalerValue = 0;
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock to HIRC 24MHz*/
_SystemClock_Config();
/**
* Enable GPIO clock for configuring.
*/
gpio_init();
// PrescalerValue = (uint32_t)(HAL_RCC_GetPCLKFreq() / CONFIG_TIMx_FREQ);//0.00015625