芯片资源介绍
MM32SPIN040C 是灵动微电子新推出的针对电机驱动领域的专用 MCU,该系 列使用高性能的 Arm® Cortex®-M0 为内核的 32 位微控制器,最高工作频 率可达 48MHz , 内 置 高 速 存 储 器 , 丰 富 的 I/O 端 口 和 多 种 外 设 。 MM32SPIN040C 系列集成了 3P3N 预驱电路,性价比高,特别适用于对布板 空间要求较高的应用场合,比如风机、水泵、筋膜枪等典型应用,芯片资源可以 满足无感方波、精简版的无感 FOC 等电机控制需求。 芯片特色及资源图如下所示:MM32SPIN040C 主要特点: - Arm® Cortex®-M0 内核,主频可达 48MHz; - 16KB Flash,2KB SRAM; - 包含 12 位的 ADC,采样速度高达 1Msps; - 2 个通用定时器、1 个针对电机控制的 PWM 高级定时器; - 1 个 I2C 接口、2 个 UART 接口; - 针对电机应用内置 2 个运放、1 个比较器; - 3P3N 预驱工作电压高达 36V; - 工作温度范围(环境温度)-40℃ - 105℃; - 多种省电工作模式支持低功耗应用的需求; - 提供 TSSOP28 封装;
适用于多种应用场合: - 风机 - 水泵 - 筋膜枪
硬件设计
本文档所搭配硬件系统为筋膜枪应用专用开发板。
原理图 .
分为充电、逆变、按键、MCU、电流采样、过流报警、LED 指示、反电势检 测等八个部分,如下图:
软件设计
电机控制时序
如下图为电机控制高优先级控制时序图,具体介绍如下: SysTick 为向下计数的 24 位计数器,用于对无感六步方波控制中的拍宽计时检 测,时钟和 MCU 主频保持一致。 TIM3 设定为向上计数,是 16 位计数器,TIM3 中断用于电机换相之后续流时段 内的过零检测规避控制和 30°C 延时换相控制,中断优先级设定为最高。由于 TIM3 为 16 位计数器,在应用中配置为主频的 64 分频使用。 TIM1 设定为边沿对齐模式,向上计数,用于生成电机控制上管 PWM 信号和下 管常开、长关信号,该计数器不开启中断。 ADC 模块外部硬件触发源设定为 TIM1_CCR4,使用单周期序列采样,在 ADC 中断中更新反电势信号采样值以及电流、电压等通道的采样值,中断优先级设定 为次高。本应用过零点判定利用同时采集上管开通相和浮空相电压,释放出 PIN 脚资源给系统应用使用。
代码框架
本项目代码架构主要分为三层,板级驱动层、电机控制算法层、应用层,如图 4- 6 所示。各个层的分支功能如下: ·板级驱动层(HAL_BSP_DRV):
1) hal_x.c: 我司提供的统一的 HAL 层底层外设 驱动库文件,该库文件也可在我司官网下载
2) adc.c / interrupt.c / io.c / tim1.c / tim3.c / : 本 应用中对相应外设的具体配置
3) bsp_led.c:3 个 IO 控制 6 路 LED 例程,专门 为 PIN 脚资料有限的产品而设计
4) user_param_cfg.c:系统板用户配置函数,涵 盖了用户所有需要设定的参数,并且很多参数 之间的内在关联性已提前考虑,程序支持自动 计算关联参数
5) peripheral_cfg.c:调用如上函数的总接口 ·
4) ADC 中断中执行相电流限幅控制、各个通道采样值的更新和反电势过零点检 测:电机控制层(MTR_CTRL):
1) zero_cross_detect.c:反电势过零检测
2) commutate_isr.c:换相中断执行代码
3) zero_cross_detect_isr.c:、
零检测中断执行代码 ·用户层(USER):
1) main.c:调用如上函数的总接口
2) state_machine.c:状态机,包含各个状态跳转
3) vsp_interface.c:调速接口,支持虚拟或实体 按键开关机、切换档位,支持四个档位
4) commutate.c:执行电机六步换相的子函数
5) speed_loop.c:速度闭环控制函数
6) protect.c:堵转检测模块耗时较长,用在超高 速场合时需要针对性调整
7) filter.c:滑动平均滤波模块
程序架构
1) Main 主程序中执行 MCU 外设初始化和用户参数初始化
2) 2mS 无限循环中执行 LED 闪灯控制、慢速状态机、转速闭环控制、按键检测 等
3) TIM3 中断中执行及时换相、拍宽计算、延时换相时间的计算和电机运行异常 的检测
4) ADC 中断中执行相电流限幅控制、各个通道采样值的更新和反电势过零点检 测: