步进电机控制原理与方法

步进电机控制实践

活到老学到老,这几天对步进电机控制进行实践操作,包括硬件与软件。住要目的实践体验步进电机转动性能,转速控制。特别低转速。软件编程。

零:硬件连接:

一:步进电机控制原理:

步进电机工作原理的间单介绍。两相步进电机总共两个挠组,电机有四条线连接到驱动

器,将两个挠组在同一时刻通上相反方向的脉冲电流,步进电机向前走一步。 我手头上的电机参数,最小步距为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值