步进电机基础(5.1)-步进电机的驱动与控制-恒压驱动、恒流驱动

前言

基本信息

名称描述说明
教材名称步进电机应用技术
作者坂本正文
译者王自强

前言说明

根据我读的《步进电机应用技术》这本书,进行的学习过程中的知识记录和心得体会的记录。

步进电机的驱动与控制

  本章介绍步进电机的主要驱动方式和控制方法。步进电机性能除了电机本体外,还会根据驱动方式和控制方法不同而受到很大影响。选择步进电机的时候,同时要着重考虑驱动方式和控制方法。

5.1 恒电压驱动

1 . 使用外加电阻的驱动

  步逬电机的绕组使用粗导线时,线圈电阻Rw值很小,如图5. 1 所 示 。在各相线圈中,串联外部电阻R,为的是限制绕组流过的电流小干额定电流 I 。限制绕组流过电流的方法,可采用降低电源电压和串联外部电阻R的两种方法。
在这里插入图片描述
  假设步进电机的线圈电感为L,绕组电阻为Rw,电气时间常数为τ,外加电阻R时,电气时间常数公式如下
在这里插入图片描述
  外加电阻使时间常数τ变小,电流上升比较快,从而使步进电机的驱动脉冲频率变快,图5. 1所示为尤外部电阻与带外部电阻R的电流上升曲线的比较t1时刻,没冇电阻R时,电流只上升到I1,有电阻R时,电流上升到I2,使高速时的转矩得到很大的改善;缺点是铜耗增大。近几年都使用恒电流斩波驱动,恒压方式已不常用。

2 . 无外加电阻的驱动

  步进电机只有运行在低速下,才不需要外加电阻,线圈直接用电源电压外加功率半导体作恒电压驱动,此时步进电机的绕圈导线半径较细,匝数较多,电阻值较大。此方法多用于小电流驱动方式。

3 . 电压驱动

  驱动步进电机时使用外加电压,例如图5. 2所示的方式,当驱动电压为24V时,达到位置后停止转动,将其电压切换为5V,则总损耗功率下降。这便是二电压控制方式。也可以根据负载的种类,为保持定位的精度,稍加一定的电流。另一种方法是,在低速时用低的电压驱动,而高速时,即在一定速度以上就切换到髙电压驱动的方法。
在这里插入图片描述

5.2 恒电流驱动

  恒电流斩波器驱动(chopper)原理如图5, 3所示。
  额定电流或设置的驱动电流值为I0时,加电压在绕圈上,若超过所设定的电流值I0,则把所加的电压V关断,使电流减少,若低于所设定的电流值I0,则把所加电压V打开,使电流再增加至所设定的电流值I0……如此反复,使I0为恒定电流。图5. 3中, V以及I表 示 1 相 关 断 的 电 压 、电流,1相电压加到t1秒时间区间。
  如果步进电机低速转动时,不用恒电流斩波器驱动,当流过电机线圈的电流超过额定电流时,电机会产生很高的温升,有可能会烧毁。在高速运行时,1相绕组电压所加的时间若在图5. 3的t0以下,使电源不能保证提供设定的电流I0值,此时变成恒压驱动。即在高速运行中,有斩波才能变成恒电流驱动。
在这里插入图片描述
在这里插入图片描述
  电流测量值与设定电流I0相对应的基准电压Vr用差动放大器比较,使其达到设定的电流值,施加到电机的电压斩波器的控制端。此处,恒电流斩波电路使用恒电压电路。同一步进电机的恒电压与恒电流脉冲频率-转矩特性曲线比较如图5. 5所示。
在这里插入图片描述
  两者在同一额定电流约10pps以内时,具有相同的转矩,但低速时恒电流斩波驱动器产生转矩较大。稳态电流值两者虽然相同,但由于恒电流斩波驱动器其电流上升快,所以其值略高于平均电流值,使用上需要注意上述问题。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
步进电机28BYJ-48是一种4相5线式步进电机,可以使用ULN2003芯片来驱动。ULN2003是一种集成了7个开关型晶体管的芯片,可以方便地控制步进电机,具有低功耗、高可靠性等优点。 以下是使用stm32f103c8t6控制步进电机ULN2003驱动步进电机28BYJ-48的步骤: 1. 确定步进电机28BYJ-48的相序和控制信号,根据相序表将ULN2003的输出端口与步进电机连接。 2. 在stm32f103c8t6的开发环境中编写C语言程序,使用GPIO控制ULN2003的输出端口,从而控制步进电机的运动。 3. 根据需要设置步进电机的转速、方向等参数,调整程序代码,实现步进电机的精准控制。 下面是一个简单的示例程序,用于控制步进电机28BYJ-48以顺时针方向旋转一个圈: ```c #include "stm32f10x.h" #define IN1 GPIO_Pin_0 #define IN2 GPIO_Pin_1 #define IN3 GPIO_Pin_2 #define IN4 GPIO_Pin_3 #define DELAY 5 void delay_ms(uint16_t ms) { while(ms--) { uint16_t i = 5000; while(i--); } } void step(uint8_t i) { switch(i) { case 0: GPIO_ResetBits(GPIOA, IN1); GPIO_ResetBits(GPIOA, IN2); GPIO_ResetBits(GPIOA, IN3); GPIO_SetBits(GPIOA, IN4); break; case 1: GPIO_ResetBits(GPIOA, IN1); GPIO_ResetBits(GPIOA, IN2); GPIO_SetBits(GPIOA, IN3); GPIO_ResetBits(GPIOA, IN4); break; case 2: GPIO_SetBits(GPIOA, IN1); GPIO_ResetBits(GPIOA, IN2); GPIO_ResetBits(GPIOA, IN3); GPIO_ResetBits(GPIOA, IN4); break; case 3: GPIO_ResetBits(GPIOA, IN1); GPIO_SetBits(GPIOA, IN2); GPIO_ResetBits(GPIOA, IN3); GPIO_ResetBits(GPIOA, IN4); break; } } int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = IN1 | IN2 | IN3 | IN4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); for(int i = 0; i < 512; i++) { step(i % 4); delay_ms(DELAY); } return 0; } ``` 在本程序中,首先定义了步进电机28BYJ-48的4个控制信号IN1、IN2、IN3、IN4,然后使用GPIO初始化这些端口。在主函数中,使用step函数循环控制步进电机旋转一个圈。 step函数根据相序表依次控制ULN2003的输出端口,从而实现步进电机的旋转。为了让步进电机旋转得更平稳,还加入了一个延时函数delay_ms,以等待一定时间后再进行下一步操作。最后,程序返回0,结束执行。 需要注意的是,在实际使用过程中,还需要根据具体的步进电机型号和应用场景进行优化和调整。例如,可以通过增加步进电机的电压和电流来提高转速和扭矩,或者使用更高级别的控制算法来实现更精准的控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值