主页 > 其他  > 

STM32CubeMxDRV8833驱动

STM32CubeMxDRV8833驱动

一、DRV8833驱动原理

STBY口接单片机的IO口,STBY置0电机全部停止,置1才能工作。STBY置1后通过AIN1、AIN2、BIN1、BIN2 来控制正反转。

AIN1AIN2电机状态00停止1speed反转speed1正转11停止

其中A端(AIN1与AIN2)只能控制AO1与AO2端。B端(BIN1与BIN2)只能控制BO1与BO2端。因此是双路电机驱动。speed为PWM控制的占空比,通过占空比控制电机速度。

DRV8833控制电机速度的方式,是通过将IN1与IN2接入PWM,直接通过调整PWM的占空比进行速度控制。因此要求AIN1/AIN2/BIN1/BIN2都要使用PWM功能。  

二、cubemx配置

选c6t6

打开串口调试

选择外部高速晶振

打开串口一

开启串口一接收中断

配置输出引脚10KHZ

配置时钟

生成代码

三、keil代码

#include "main.h" #include "tim.h" #include "usart.h" #include "gpio.h" void SystemClock_Config(void); //set dir1 void Motor_SetDirectionL(uint8_t dir) { if (dir == 1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // IN1 = 1(f) } else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // IN1 = 0(b) } } void Motor_SetSpeedL(uint16_t speed) { if (speed > 100) speed = 100; HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, speed); } //set dir2 void Motor_SetDirectionR(uint8_t dir) { if (dir == 1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET); // IN1 = 1(f) } else { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); // IN1 = 0(b) } } void Motor_SetSpeedR(uint16_t speed) { if (speed > 100) speed = 100; HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, speed); } // ֹͣstop void Motor_Stop() { Motor_SetSpeedL(0); // PWM = 0 Motor_SetSpeedR(0); // PWM = 0 } int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM2_Init(); MX_USART1_UART_Init(); while (1) { Motor_Stop(); HAL_Delay(1000); Motor_SetDirectionL(1); Motor_Stop(); Motor_SetSpeedL(90); //慢速衰减 可以跑的很慢(反比关系占比是100-90) HAL_Delay(3000); Motor_SetDirectionL(0); Motor_Stop(); HAL_Delay(1000); Motor_SetDirectionL(0); Motor_Stop(); Motor_SetSpeedL(60); //快速衰减 跑得快(正比) HAL_Delay(3000); Motor_Stop(); HAL_Delay(1000); } }

用的是上面中间的两组跑,实际使用需要换引脚pwm输出

chem4111 2025-03-03 23.13.27

标签:

STM32CubeMxDRV8833驱动由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“STM32CubeMxDRV8833驱动