【直流无刷电机 DBC】一 电机驱动

前言:

声明:学习笔记来自正点原子B站教程,仅供学习交流!!

一 基本原理

1.1 左手定则

        左手定则是判断通电导线处于磁场中时,所受安培力 F (或运动)的方向、磁感应强度 B的方向以及通电导体棒的电流 I 三者方向之间的关系的定律。

        左手定则的具体内容: 将左手四指并拢伸直,使拇指与其他四指在平面内垂直,手掌方向代表磁场的方向(从 N 级到 S 级),四指代表电流的方向(从正极到负极),那拇指所指的方向就是受力的方向

1.2 电机转动原理

 直流有刷电机的工作原理:

        直流有刷电机,其实就是直接最简单的方式利用安培力,给导线通电,然后在磁场中运动。

  •  如图a,电流从A流向B,通过左手定则,可以得到ab段得到的力从右指向左,而dc段的力从左指向右,所以电机做逆时针运动
  •  如图b,电流从B流向A,通过左手定则,可以得到dc段得到的力从右指向左,而ab段的力从左指向右,所以电机做逆时针运动

        注意:这种是直流有刷电机的基本原理,换向器用于保证电机能够在越过中点时继续往下运动。不难发现,这种电机有一个很明显的缺点,就是速度不稳定。当线圈转动到不同的位置时,受到的安培力大小不同,所以速度也不同

        因此,在实际的应用中,转子通常都会有三匝或以上的线圈,它的受力情况会复杂很多,但是基本的原理是相通的。

1.3 调速原理

        根据洛伦兹力的表达公式:F=BIL(B为磁场强度,I为电流强度,L为导线强度),可以知道转子线圈的受力与电流成正比关系,也就是说我们只需要改变电压,即可以电机转速。

1.4 换向原理

        根据直流有刷电机的工作原理可知,当转子线圈中电流的方向发生变化,线圈的受力情况也会发生改变,因此,我们只需要改变转子线圈中的电流方向即可实现电机换向

二 电机驱动

1.1 H桥驱动原理

        上图的 H 桥搭建全部使用的是 NPN,导通逻辑都是基极为高电平时导通。如果 Q1和 Q4 三极管导通,那么电机的电流方向是从点 a 到点 b,假设此时电机正转;如果 Q2 和 Q3三极管导通,那么电机的电流方向是从点 b 到点 a,此时电机就反转了。上述就是 H 桥控制电机正反转的逻辑原理。在驱动电机时,必须保证 H 桥的同一侧三极管不会同时导通,否则将会发生短路,比如: Q1 和 Q2 同时导通或者 Q3 和 Q4 同时导通,这都是不可取的

         

        上图是一个完整的全桥驱动点图,从左到右,首先利用单片机产生两路互补的PWM信号,比如UH为1时UL为0,进入高速光耦EL0631(TA),光耦有隔离保护的作用,输出后PWM波与输入相反,比如UH为0、UL为1;这两路信号会分别进入上下两个半桥芯片(黄色),芯片的输入输出逻辑逻辑表如上(SD低电平时输出无效,也叫刹车/停止引脚)

功能实现:

  • 电机启停:IO控制半桥芯片SD引脚的输入电平
  • 电机正反转:最简单的就是利用两个IO进行翻转,但是需要注意死区时间
  • 电机调速:一个IO固定输出,另一个使用PWM输出(改变占空比)
  • 电机正反转、调速实现: PWM互补输出,即两个IO固定输出与PWM输出交替进行

1.2 H桥驱动程序

  • 定时器初始化函数:初始化通道IO,配置定时器、PWM互补输出以及死区控制
  • 电机初始化函数:初始化SD引脚IO,默认拉低SD
  • 电机启动函数:开启定时器和拉高SD引脚,开启定时器函数:HAL_TIM_Base_Start
  • 电机停止函数:关闭定时器和拉低SD引脚,关闭定时器函数:HAL_TIM_Base_Stop
  • 电机正反转函数:先关闭两个通道的PWM输出,正转就开启主通道,反转就开启互补通道,关闭PWM输出函数:HAL_TIM_PWM_Stop、HAL_TIMEx_PWMN_Stop

1.2.1 硬件设计

 PWM_UH--------------------------- PA8(TIM1 主输出通道)

 PWM_UL--------------------------- PB13(TIM1 互补输出通道)

 SD(刹车)------------------------ PF10

1.2.2 软件设计

        为了实现电机正反转功能与调速功能,需要使用到STM32的互补输出和死区插入

  • STM32引脚配置

  • 定时器基本配置

设置TIM1模式为定时器互补输出,并设置为计数周期为50us(将计数周期设置足够的小,电机运行流畅一点),死区设置为0x0F。

  • 电机正反转控制

        根据上述说明,控制电机正反转是根据控制电流(电压)方向实现的,根据H桥的原理,我们通过控制两个PWM通道的输出控制电流(电压)的方向

void motor_dir_ctrl(Direction_E dir)
{
	HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
	HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
	
	if(dir == CW)
	{
		dc_motor.dir = CW;
		HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
	}
	else
	{
		dc_motor.dir = CCW;
		HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
	}
}
  • 电机的速度控制

        电机的转速是通过电压的大小进行控制的,我们通过PWM波形的占空比,实现控制电压的大小

void motor_pwm_set(int32_t pwm)
{
	dc_motor.pwm = pwm;
	
	if(pwm <= __HAL_TIM_GetAutoreload(&htim1) - 0x0F)
	{
		__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm);
	}
}
  • 电机的刹车控制

         IR2104STRPBF芯片有个/SD引脚,当该引脚为低电平时,IR2104STRPBF芯片所有输出为低,此时电机没有驱动电压;当该引脚为高电平时,输出正常。所以我们通过控制该引脚实现刹车功能

void motor_sw_ctrl(Status_E sw)
{
	if(sw == Start)
	{
		dc_motor.status = Start;
		DC_MOTOR_START;
	}
	else
	{
		dc_motor.status = Stop;
		DC_MOTOR_STOP;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值