四电机控制器实战(一):系统架构与硬件设计

电子说

1.4w人已加入

描述

一个从零做到量产的四腿电动升降桌控制器:CH32L103 裸机固件 + 4 路 HT8251A H 桥驱动 + 霍尔编码器位置闭环。本文是这个系列的第一篇,讲清楚整体硬件拓扑、引脚分配和软件分层,为后面几篇(电机驱动、同步算法、位置反馈、异常检测、工程化)打底。

一、需求与硬件选型

四腿电动升降桌的核心诉求是:四根桌腿的电机要"同速同高"地升降,桌面不能歪、不能卡。看似简单,但四台电机天然存在负载差异和个体差异,这才是真正的难点。

硬件清单如下:

器件 型号 数量 作用
主控 MCU CH32L103C8T6(RISC-V RV32,96MHz,64K Flash / 20K SRAM) 1 全部控制逻辑
电机驱动 HT8251AREZ(TI DRV8251A 国产兼容,N 沟 H 桥,4.5~48V,4.1A 峰值) 4 每路驱动一台有刷直流电机
位置反馈 霍尔传感器(每电机 2 个,HAL1/HAL2 正交对) 8 方向 + 位置 + 测速
电流反馈 HT8251A 内置 IPROPI 电流镜(1575µA/A) 4 堵转/过流检测
外部存储 BL24C512A(512Kbit EEPROM,I2C2) 1 配置双备份
电源 30V 母线 → KP52140x LDO(5V/3.3V) 电机供电 + 逻辑供电
调试 WCH-LinkE(SWD) 1 烧录 + 串口

选型的两个关键决策:

MCU 用 CH32L103 而不是 STM32:RISC-V 内核 + 国产供货稳定,96MHz 跑裸机闭环绰绰有余。

驱动用 HT8251A(DRV8251A 兼容)而不是分立 MOSFET:内置电荷泵 + 电流镜(IPROPI),省掉外部采样电阻,4 路电机只需 4 颗 SOP8 芯片。

二、系统框图

 

flowchart TB
    subgraph MCU["CH32L103C8T6 (96MHz)"]
        TIM2["TIM2 PWM
(M1/M2)"]
        TIM4["TIM4 PWM
(M3/M4)"]
        EXTI["EXTI 霍尔中断
(8路)"]
        ADC["ADC1 电流采样
(4路, DMA+EMA)"]
        I2C["I2C2 EEPROM"]
        UART["UART1 双协议"]
        CDC["USB CDC 调试"]
        ALG["运动控制
同步算法/异常检测"]
    end

    TIM2 -- >|"IN1/IN2 ×2"| DRV1[HT8251A ×2]
    TIM4 -- >|"IN1/IN2 ×2"| DRV2[HT8251A ×2]
    DRV1 -- >|"IPROPI"| ADC
    DRV2 -- >|"IPROPI"| ADC
    DRV1 -- > M1[M1/M2 有刷电机]
    DRV2 -- > M2[M3/M4 有刷电机]
    M1 -- >|"霍尔 ×4"| EXTI
    M2 -- >|"霍尔 ×4"| EXTI
    EXTI -- > ALG
    ADC -- > ALG
    ALG -- > TIM2
    ALG -- > TIM4
    I2C -- > EEPROM[BL24C512A]
    UART -- > PC[上位机工具]
    UART -- > HC[手控器]
    CDC -- > LOG[调试日志]

 

三、引脚映射

一张表看清全部资源分配(CH32L103C8T6 共 32 个可用 IO,这里几乎用满):

引脚 功能 备注
PA0~PA3 M1_IN1/M1_IN2/M2_IN1/M2_IN2 TIM2 CH1~CH4,PWM 输出
PB6~PB9 M3_IN1/M3_IN2/M4_IN1/M4_IN2 TIM4 CH1~CH4,PWM 输出
PA4~PA7 M1~M4 电流采样 ADC1 CH4~CH7,接 IPROPI
PB0/PB1 M1 霍尔 HAL1/HAL2 EXTI0/EXTI1
PB3/PB2 M2 霍尔 HAL1/HAL2 EXTI3/EXTI2
PB4/PB5 M3 霍尔 HAL1/HAL2 EXTI4/EXTI5
PA8/PA15 M4 霍尔 HAL1/HAL2 EXTI8/EXTI15
PA9/PA10 UART1 TX/RX 9600bps,双协议
PB10/PB11 I2C2 SCL/SDA 接 BL24C512A
PA11/PA12 USB D-/D+ USB CDC 调试日志
PA13/PA14 SWDIO/SWCLK 烧录调试
PC13 状态 LED RTC 域,开漏输出
PB12~PB15 无线模块预留 SPI2 复用

一个容易踩的坑:PB3/PB4 复位后默认是 JTAG 的 JTDI/JNTRST,会抢走 M2/M3 的霍尔输入。代码里必须把 AFIO->PCFR1 的 SW_CFG 切到 SWD-only 才能把 PB3/PB4 释放成普通 GPIO。

 

 

 

四、软件分层架构

固件采用裸机 + 分层设计,无 RTOS,靠 SysTick 1ms 节拍 + 主循环 10ms 调度:

模块 职责
驱动层 motor.c / hall.c / adc.c / uart.c / eeprom_i2c.c PWM、EXTI 计数、ADC 采样、串口、I2C
运动控制层 motion.c / pid.c / calibration.c 组同步、斜坡、PID、校准
安全层 handctrl.c(Live 故障检测) 堵转/掉线/限位/越界判定
协议层 protocol.c / handctrl.c(帧解析) 0xAA 上位机协议 + 0xA5 手控器协议
应用层 main.c 主循环编排、看门狗喂狗

核心运行节奏:

 

 

 

五、核心数据结构

三块最核心的内存结构:

 

 

 

全局数组 MotorInfo motors[4]、HallInfo hall_info[4],配合 m_pins[4][2] 查找表,把"4 电机 × 2 输入引脚"的重复逻辑全部参数化,避免了 switch/case 满天飞。

六、配置存储设计

配置需要断电保存,采用双后端 + 三要素校验

主存储:内部 Flash 末页 0x0800FF00(256B,packed 结构)

备份存储:外部 BL24C512A EEPROM

三要素校验:单调递增 write_count(防回滚)+ 随机 write_magic(防重复写)+ CRC32(防损坏)

一致性:上电比较两边 write_count 取最新,自动覆盖较旧后端

DeskConfig 布局(V8)节选:

字段 说明
magic / version 0x44434546 + 版本号
mcu_chipid / driver_id 安全绑定(防抄板/防替换)
motor_home_pos / travel / pulses[4] 各电机行程标定
motor_current_limit[4] 电流限值
group[0..3] 组配置(掩码/方向/速度/预设高度/同步增益)
hall_polarity[4] 每电机霍尔极性
write_count / write_magic / write_crc 完整性三要素

安全绑定用的是 CHIPID + 驱动器ID + 主密钥(0x4D4F544A),未绑定的板子无法写入配置——这在量产防呆场景很实用。

七、小结

这一篇先把骨架搭起来:一颗 96MHz 的 RISC-V MCU,配 4 颗 SOP8 的 H 桥驱动,靠 8 个霍尔传感器做位置闭环,IPROPI 电流镜做电流反馈,Flash+EEPROM 双备份存配置

后面几篇会深入最难的部分:

第二篇:HT8251A 的 PWM 控制细节,以及一个隐藏很深的坑——它到底是用"自举电容"还是"电荷泵"?

第三篇:四电机同步算法是怎么从 PID 一路演进到"追最慢者 + 连续 CCR + PI 前馈"的。

第四篇:霍尔编码器为什么用 1× 单边沿而不是 4× 正交解码。

第五篇:堵转、掉线、限位……六道防线的故障判定体系。

第六篇:协议、烧录、打包,以及那些让人想砸键盘的环境坑。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分