基于 MM32SPIN040C 的无感方波筋膜枪应用方案

芯片资源介绍

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 中断中执行相电流限幅控制、各个通道采样值的更新和反电势过零点检 测:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于灵动微电子MM32F5277微控制器,您可以使用STM32的HAL库来与RFID-RC522模块进行通信。以下是一个示例代码,演示如何在MM32F5277上使用SPI与RFID-RC522模块进行通信: ```C #include "mm32f103.h" #include "mm32f103_rcc.h" #include "mm32f103_gpio.h" #include "mm32f103_spi.h" #include "rfid_rc522.h" void SPI1_Init(void) { SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); //使能SPI1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟 //配置SPI1引脚 GPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE); //配置SPI1的SCK、MISO、MOSI引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //配置NSS引脚作为普通GPIO输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //SPI1参数配置 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); //使能SPI1 SPI_Cmd(SPI1, ENABLE); } void Delay(__IO uint32_t nCount) { for (; nCount != 0; nCount--); } int main(void) { uint8_t status; uint8_t str[MAX_LEN]; //初始化SPI1 SPI1_Init(); //初始化RFID-RC522模块 RFID_RC522_Init(); while (1) { status = RFID_RC522_Request(PICC_REQIDL, str); //寻卡 if (status == MI_OK) { status = RFID_RC522_Anticoll(str); //防冲撞 if (status == MI_OK) { //卡片UID获取成功,执行相应操作 printf("Card UID: "); for (int i = 0; i < 5; i++) { printf("%X ", str[i]); } printf("\r\n"); } } Delay(0x3FFFFF); } } ``` 请注意,这只是一个基本的示例代码,仅包含RFID-RC522模块的初始化和基本读取卡片UID的操作。您可能需要根据实际需求进行更多的功能扩展和错误处理。 在使用此代码之前,请确保已正确连接RFID-RC522模块到MM32F5277板上的SPI引脚,并根据需要进行相应的引脚配置。 希望对您有所帮助!如果您有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值