Files
wangbeihong 48a443c6c1 Update FreeRTOS configuration and enhance upper computer AI documentation
- Increased total heap size in FreeRTOSConfig.h from 10000 to 18000.
- Modified stack sizes for various tasks in freertos.c to improve performance:
  - initTask: 128 to 256
  - CarCtrlTask: 256 to 1024
  - timerTask: 512 to 1024
  - sr04Task: 128 to 512
  - rc522Task: 128 to 512
- Added comprehensive upper computer AI guide for TCP client implementation, detailing protocol contracts, command sets, telemetry, architecture requirements, and error handling strategies.
- Introduced a Python web upper computer AI guide with a recommended tech stack and project structure.
- Created a Chinese version of the upper computer AI guide for local developers.
- Updated STM32 project configuration to reflect new task stack sizes and heap settings.
- Adjusted configuration files for various tools to ensure compatibility with the new project structure.
2026-04-17 22:15:54 +08:00
..
2026-04-14 23:40:46 +08:00
2026-04-14 23:40:46 +08:00

BSP Motor 驱动说明 (AT8236-MS)

该驱动模块用于通过 STM32 的硬件 PWM 功能控制 4 路直流电机,适配 AT8236-MS 驱动芯片。

硬件连接

电机 ID 信号定义 STM32 引脚 定时器通道
MOTOR_1 M1_W / M1_S PE9 / PE11 TIM1_CH1 / TIM1_CH2
MOTOR_2 M2_W / M2_S PE13 / PE14 TIM1_CH3 / TIM1_CH4
MOTOR_3 M3_W / M3_S PA15 / PB3 TIM2_CH1 / TIM2_CH2
MOTOR_4 M4_W / M4_S PA2 / PA3 TIM2_CH3 / TIM2_CH4

霍尔传感器 (由于是一根线,仅限频率测速)

传感器 ID STM32 引脚 模式 功能
HALL_1 (M1) PD9 (M_I_1) GPIO_EXTI 脉冲计数 / 测速
HALL_2 (M2) PD8 (M_I_2) GPIO_EXTI 脉冲计数 / 测速
HALL_3 (M3) PB15 (M_I_3) GPIO_EXTI 脉冲计数 / 测速
HALL_4 (M4) PB14 (M_I_4) GPIO_EXTI 脉冲计数 / 测速

使用方式

1. 硬件初始化 (main.c)

main.c 的循环前调用电机和霍尔的初始化函数:

/* USER CODE BEGIN 2 */
motor_init();
hall_init();
/* USER CODE END 2 */

2. 中断绑定 (stm32f1xx_it.c)

在外部中断回调函数中加入脉冲统计:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    hall_pulse_callback(GPIO_Pin);
}

3. 控制电机

调用 motor_set_speed 函数控制电机转动:

// 电机1正转中等速度
motor_set_speed(MOTOR_1, 2000); 

// 电机2反转全速
motor_set_speed(MOTOR_2, -3599); 

4. 获取测量结果

在 FreeRTOS 任务或主循环中读取脉冲数或计算转速:

uint32_t count = hall_get_count(MOTOR_1);
printf("Motor 1 Pulses: %ld\r\n", count);

预期结果

  1. 电机控制

    • 给予正数速度时,对应电机的 W 引脚输出 PWMS 引脚为低,电机正向旋转。
    • 给予负数速度时S 引脚输出 PWMW 引脚为低,电机反向旋转。
    • 速度数值越大,电机转速越高,最大有效值为 3599。
  2. 霍尔测量

    • 电机每旋转一圈,对应的 pulse_count 会根据编码器磁极对数增加。
    • 通过观察 hall_get_count 的数值增长,可以确认传感器信号捕获正常。

驱动逻辑 (AT8236-MS)

驱动器通过两路电平差控制方向:

  • 正转: W引脚输出 PWMS引脚输出低电平(0%)。
  • 反转: W引脚输出低电平(0%)S引脚输出 PWM。
  • 停止/刹车: W和S引脚均输出低电平(0%)。

核心 API

1. 初始化

void motor_init(void);

  • 开启 TIM1 和 TIM2 的所有对应 PWM 通道。
  • 初始电机状态为停止。

2. 设置电机速度

void motor_set_speed(motor_id_t motor_id, int16_t speed);

  • motor_id: MOTOR_1MOTOR_4
  • speed: 范围为 -35993599(对应 20kHz 频率下的 ARR 重装载值)。
    • 正数:正转。
    • 负数:反转。
    • 0停止。

3. 停止电机

void motor_stop(motor_id_t motor_id);

  • 立即将对应电机的两路占空比清零。

注意事项

  • 使用前请确保 MX_TIM1_Init()MX_TIM2_Init() 已在 main.c 中正常调用。
  • 定时器的 Period(重装载值值)决定了最大速度的分辨率,当前配置为 16 位65535