文章目录
前言
主控板STM32F302R8+驱动板X-NUCLEO-IHM07M1+直流减速电机37GB3530,实现电机的正反转驱动。区别于上两章节,本章节工具链采用STM32CubeMX+Matlab/Simulink+Keil,在STM32CubeMX中配置底层,在Matlab/Simulink写应用层,在Keil环境中写应用层与底层的代码接口,并完成程序的集成。
一、STM32F302R8+X-NUCLEO-IHM07M1驱动直流电机
1.1.功能需求
驱动直流电机转动,并实现直流电机的换向控制;按下一次按键电机正转,LED亮;再按一次按键电机停止,LED灭;再按一次按键电机反转,LED亮;再按一次按键电机停止,LED灭,以此循环。用到的控制信号与控制板STM32F302R8对应的引脚关系如下表所示。
1.2.硬件设计
控制板:STM32F302R8
驱动板:X-NUCLEO-IHM07M1
直流电机:37GB3530,额定功率10W,额定电压12V,额定电流0.3A
二、软件编程
2.1.底层配置
1、RCC设置为外接时钟,72MHz
2、PA8、PA9、PC10、PC11设置为推挽输出,无上下拉电阻,高速,初始化状态值为0;PB13设置为推挽输出,下拉电阻,高速,初始化状态值为0;PC13设置为输入,无上下拉电阻。
3、IDE设置为MDK-RAM,在Keil环境中编写应用层与底层的接口函数,并在Keil环境中完成应用层代码与底层代码的集成。
2.2.应用层与底层的接口开发
2.3.应用层开发
编程思路:检测按键状态,通过按键状态执行不同的电机运行状态
2.3.1按键检测
当检测到按键的下降沿时,Mode++,Mode可能的值为:0,1,2,3,通过不同的Mode值执行不同的电机运行状态。
2.3.2状态切换
默认在停止状态并使能桥臂1和桥臂2,如果Mode=1,电机正转;Mode=2,电机停止;Mode=3,电机反转;如果Mode=4电机停止,以此循环。
2.3.3仿真验证
设定了5个下降沿,Mode值得变化为:1 2 3 0 1 ,电机依次正转 停止 反转 停止 正转
经过仿真验证,符合自己的逻辑设计需求
2.3.4输入输出信号类型设置
底层与应用层接口信号的名称及数据类型已经在Keil环境设置完成,设置如下输入输出信号类型:
其余输出信号均参考EN1_State设置
2.3.5代码生成设置
STM32F302R8芯片为ARM Cortex-M4内核
求解器设置为离散
2.3.6代码生成
Ctrl+B进行代码生成
注:因为在Stateflow中使用了falling函数,代码生成文件多了rt_zcfcn.c;rt_zcfcn.h;zero_crossing_types.h三个文件
2.4.应用层与底层的代码集成
将Matlab生成的代码文件夹复制到底层生成的工程下:APP_DCMotor
在工程中将APP_DCMotor目录中的.c文件都添加进工程
添加头文件路径
注:此时编译会报错,未定义“solver_zc.h”头文件,该头文件在Matlab安装路径下面,可以直接把该文件粘贴复制到APP_DCMotor文件夹下,也可以将改文件的路径进行添加。
编写驱动函数
在主函数中调用Matlab生成代码中的函数,APP_Motor_initialize()为模型初始化函数;APP_Motor_step()模型函数(执行该函数一次,相当于在Matlab中运行该模型一次),根据APP_Motor_step()函数的运算结果,进行MCU引脚赋值进行电机驱动,在Matlab中设置模型10ms运行一次,所以在工程下也要确保APP_Motor_step()函数10ms运行一次,在While循环里加入10ms延时,近似模拟10ms运行APP_Motor_step()函数一次
2.5.下载验证
总结
本章节采用STM32CubeMX+Matlab/Simulink+Keil工具链完成直流电机的驱动及方向控制,为后续章节的分析奠定基础。