芯片资源介绍
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):
- hal_x.c: 我司提供的统一的 HAL 层底层外设 驱动库文件,该库文件也可在我司官网下载
- adc.c / interrupt.c / io.c / tim1.c / tim3.c / : 本 应用中对相应外设的具体配置
- bsp_led.c:3 个 IO 控制 6 路 LED 例程,专门 为 PIN 脚资料有限的产品而设计
- user_param_cfg.c:系统板用户配置函数,涵 盖了用户所有需要设定的参数,并且很多参数 之间的内在关联性已提前考虑,程序支持自动 计算关联参数
- peripheral_cfg.c:调用如上函数的总接口 ·
- ADC 中断中执行相电流限幅控制、各个通道采样值的更新和反电势过零点检 测:电机控制层(MTR_CTRL):
- zero_cross_detect.c:反电势过零检测
- commutate_isr.c:换相中断执行代码
- zero_cross_detect_isr.c:、
零检测中断执行代码 ·用户层(USER):
- main.c:调用如上函数的总接口
- state_machine.c:状态机,包含各个状态跳转
- vsp_interface.c:调速接口,支持虚拟或实体 按键开关机、切换档位,支持四个档位
- commutate.c:执行电机六步换相的子函数
- speed_loop.c:速度闭环控制函数
- protect.c:堵转检测模块耗时较长,用在超高 速场合时需要针对性调整
- filter.c:滑动平均滤波模块
程序架构
- Main 主程序中执行 MCU 外设初始化和用户参数初始化
- 2mS 无限循环中执行 LED 闪灯控制、慢速状态机、转速闭环控制、按键检测 等
- TIM3 中断中执行及时换相、拍宽计算、延时换相时间的计算和电机运行异常 的检测
- ADC 中断中执行相电流限幅控制、各个通道采样值的更新和反电势过零点检 测:
|