直流有刷电机基本驱动实验

功能实现:按键控制刹车,调速,正反转

基础知识点:TIM , PWM ,电机驱动原理 ,STM32CubeIDE参数设置,常用HAL库函数

  1. TIM :本次采用高级定时器TIM1输出两路互补PWM波驱动电机驱动板
  2. PWM:采用TIM1通道CH1/CH1N
  3. 电机驱动原理:采用H桥电路,AT8236芯片。

H桥电路图如下,由四个MOS管连接电机组成,MOS管接收高电平时导通,低电平时关闭,由此可知Q1与Q4导通时电机启动(设此时为正转),那么Q3与Q2导通时电机为反转,故只需在Q1与Q4端口连接CH1通道,Q3与Q2端口连接CH1N通道,通过选择CH1/CH1N通道使与关闭便可控制电机正反转。同时调节PWM波形占空比即可控制直流有刷电机转速;

配合电机驱动板厂家给出参数控制表,我们便可得出电机驱动的思路(基本驱动):

  1. IN1接口接CH1输出,IN2接口接CH1N输出。
  2. 正转:CH1通道正常输出PWM波,CH1N通道关闭输 出PWM波并置低电平。
  3. 反转:CH1N通道正常输出PWM波,CH1通道关闭输出PWM波并置低电平。
  4. 通过更改CH1与CH1N通道输出的PWM波占空比来调节电机转速。

  1. STM32CubeIDE 定时器参数设置与说明

补充:

  1. TIM定时器溢出事件计算方法(单位S):

T =(ARR + 1)*(PSC + 1)/ F

F :启用APBx总线时钟频率

  1. TIM定时器频率计算方法(单位Hz):

频率 = 1 / T

  1. PWM占空比计算方法:

占空比 = Pulse / ARR * 100 %

  1. 分辨率计算方法:

频率 / F(启用总线频率)

  1. 常用HAL库函数

定时器启动函数:HAL_TIM_Base_Start();

定时器关闭函数:HAL_TIM_Base_Stop();

CH1通道PWM输出启动函数:HAL_TIM_PWM_Start();

CH1N通道PWM输出启动函数:HAL_TIMEx_PWMN_Start();

CH1通道PWM输出关闭函数:HAL_TIM_PWM_Stop();

CH1N通道PWM输出关闭函数:HAL_TIMEx_PWMN_Stop();

更改占空比函数:__HAL_TIM_SetCompare();

  1. 程序源码实例(仅电机驱动函数):

uint8_t direction = 0;										//电机状态标志位   1 正转    0 反转
uint8_t STAO = 0;   										//启停标志位      1 启动    0 停止
uint16_t velocity = 299;									//速度变量

void motor_start_stop()   									//电机停止
{
		HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);			//关闭CH1通道输出
		HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);			//关闭CH1N通道输出
}

void motor_advance()										//电机前进
{
	HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);				//关闭CH1N通道输出
	HAL_Delay(50);											//延时
	HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);				//开启CH1通道输出
	direction = 1;											//电机状态标志位置 1
	__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,299);			//给定初始速度(占空比10%)
	velocity = 299;											//加速变量 复位
}

void motor_Back()											//电机后退
{
	HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);				//关闭CH1通道输出
	HAL_Delay(50);											//延时
	HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);			//开启CH1N通道输出
	direction = 0;											//电机状态标志位置 0
	__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,299);			//给定初始速度(占空比10%)
	velocity = 299;											//加速变量 复位
}
void motor_hasten()											//电机加速
{
	if(velocity <= 999)										//判断占空比是否为100%
	{
		velocity += 100;									//更改占空比(增加10%)
		__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,velocity);//每次增加10%
	}
}

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值