在利用MM32 MOTOR - DK开发板和MDK开发平台,结合MM32SPIN0230_FOC驱动无感电机时,若遇到软件编写困难,使用示例代码是一个很好的起点。示例代码通常提供了基本的框架和配置,使得开发者可以更快地理解和实现功能。
进行测评:
理解示例代码:
仔细阅读示例代码的注释和文档,理解其工作原理和配置。
分析代码中的关键部分,如初始化、中断处理、FOC算法等。
硬件连接检查:
确保电机和MM32 MOTOR - DK开发板之间的连接正确无误。
检查电机的电源和信号线是否连接正确,没有短路或断路。
软件配置:
根据示例代码,检查MDK开发平台中的项目配置是否正确,如时钟设置、引脚分配等。
根据电机规格,调整FOC驱动器的参数,如PWM频率、电流限制等。
编译与调试:
使用MDK编译示例代码,确保没有编译错误。
使用调试工具逐步执行代码,观察电机驱动过程中的变量变化和输出信号。
功能验证:
检查电机是否能够正常启动和停止。
验证电机的速度和方向控制是否准确。
观察电机运行过程中的稳定性和噪声情况。
实际开发板连接照片
代码:
/* 配置系统时钟 */ Systick_Init(SystemCoreClock / 1000); /* 延时200毫秒 */ Systick_Delay(200); /* 初始化电机控制参数 */ Init_Parameter(&Motor_1st); /* 初始化所有GPIO */ Bsp_Gpio_Init(); /* 初始化所有已配置的外设 */ Peripheral_Init(); /* 初始化中断 */ Interrupt_Init(); /* 无限循环 */ while(1) { /* 重新加载看门狗计数器 */ IWDG_RELOAD_COUNT(); /* 如果慢循环标志被设置 */ if(Motor_1st.USER.bSlowLoopFlag) { /* 执行慢循环状态机 */ s_STATE_SLOW[eM1_MainState](); /* 清除慢循环标志 */ Motor_1st.USER.bSlowLoopFlag = 0; } }
代码段主要做了以下几件事情:
配置了系统时钟,使用了Systick_Init函数,并将系统核心时钟除以1000来初始化SysTick定时器。
延时了200毫秒,可能是为了确保某些初始化操作完成后,系统有足够的时间稳定下来。
初始化了电机控制参数,调用Init_Parameter函数,并将Motor_1st的地址传递给它。
初始化了所有的GPIO,确保GPIO端口处于正确的配置状态。
初始化了所有已配置的外设,可能是初始化了一些外设模块,如串口、I2C、SPI等。
初始化了中断,确保中断处理函数正确注册,并准备好处理中断事件。
进入了一个无限循环,在循环中不断检查Motor_1st.USER.bSlowLoopFlag标志。如果这个标志被设置,则执行慢循环状态机,并清除该标志。
在循环中,还不断调用IWDG_RELOAD_COUNT函数来重新加载看门狗计数器,防止系统因为某些原因进入死锁状态而没有被及时复位。
开发板性能:
输入电压范围:12V - 30V
使用 60V / 40A N-MOS 管
使用GBW 10MHz 高速运放 x 2
MCU 使用 5V 供电
支持 28 Pin MM32SPIN 系列 MCU
支持无霍尔,方波/弦波驱动
支持 1 / 2 Shunt R 三相电流采样
支持 BEMF 电压回授
支持 DC Bus 电压,总电流测量
使用 MCU 内置模拟比较器作为过电流保护
运行波形:
视频连接:
灵动微MM32Spin0230驱动电机_哔哩哔哩_bilibili
<iframe src="//player.bilibili.com/player.html?aid=361699227&bvid=BV1r94y1e7jZ&cid=1217984675&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>