STM32自学笔记14:步进电机驱动项目教程(TB67H450驱动)

目前的项目是一种2相4线步进电机的闭环驱动电路,使用的电机驱动芯片是TB67H450,再使用磁编码器MT6816,使用FOC算法,基于STM32F1单片机。
这一节是步进电机的驱动芯片驱动研究

  1. 首先研究驱动芯片TB67H450的datasheet
    这是一个PWM斩波电机驱动芯片,内部框图可以看出来内含一个H桥全桥驱动电路,而芯片的输出Out1Out2即H桥的两个输出口

    H桥电路驱动单相步进电机是很基础的知识,芯片通过IN1IN2的输入来控制输出的高低电平,但是下面的这个逻辑表是针对直流电机的,不需要看Mode这一列,只要看Out1和Out2的电平。

    我们使用的是2相4线电机,所以需要2个TB67H450,即4个Out端口来直接连接电机的A+,A-,B+和B-,同样输入也需要4个(即芯片的2个输入 x2),简单画了个图,就是通过OutA+~OutB-四个端口的脉冲组合来驱动电机的各种动作。最简单的让电机转动1周的电平变化是1000,0100,0001,0001,即顺次高电平。根据上面的逻辑表就可以推导出需要的输入信号的电平,例如Out1为高,其他为低,则IN1为H,IN2为L,IN3为H,IN4为H。
  2. 控制方法
    这个芯片和常用的步进电机驱动器不太相同,并没有DIR、ENA这些引脚。它共8个引脚,我们来看下pin定义:

    其中4pinVREF引脚和7pinRS引脚共同设置电机的最大电流,RS引脚连一个电阻接地,流入电机线圈的电流峰值由datasheet page10里这个公式来计算:

    RRS为RS引脚连的电阻阻值,例如RRS选0.1欧,Vref(gain)按datasheet是1/10,则可算出Iout = VrefVref引脚可以接单片机的PWM输出,通过调节PWM占空比来调Vref电压,从而调节驱动电机的输出电流,继而控制步进电机的力矩,这就是这个芯片最重要的功能之一。
    芯片的接线图比较简单,但主要单片机的定时器过来的PWM信号要搭一个滤波器滤波,其他就是直连即可:IN1-IN4接GPIO输出,OUT1-OUT4接步进电机线4根线,VM接电机的驱动电压,例如24V。
    芯片的接线图:(另外一个也是同样这么接)

    PA4和PA5为GPIO输出,通过高低电平来控制电机线的输出,可以用一个函数来表明输入的高低关系
void SetInputA(bool _statusAp, bool _statusAm)
{
    _statusAp ? (GPIOA->BSRR = GPIO_PIN_5) : (GPIOA->BRR = GPIO_PIN_5);  //IN_AP为高或低
    _statusAm ? (GPIOA->BSRR = GPIO_PIN_4) : (GPIOA->BRR = GPIO_PIN_4);  //IN_AM为高或低
}

如果需要IN1高,IN2低,则使用SetInputA(true, false)即可。

  1. 整个系统其实最关键的部分是磁编码器的驱动、FOC算法的实现、电流采样等接下去的实现,接下去继续学习和实践。
    未完待续
物联沃分享整理
物联沃-IOTWORD物联网 » STM32自学笔记14:步进电机驱动项目教程(TB67H450驱动)

发表评论