直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)

文章目录

  • 前言
  • 一、STM32F302R8+X-NUCLEO-IHM07M1驱动直流电机
    • 1.1.功能需求
    • 1.2.硬件设计
  • 二、软件编程
    • 2.1.底层配置
    • 2.2.应用层与底层的接口开发
    • 2.3.应用层开发
        • 2.3.1按键检测
        • 2.3.2状态切换
        • 2.3.3仿真验证
        • 2.3.4输入输出信号类型设置
        • 2.3.5代码生成设置
        • 2.3.6代码生成
    • 2.4.应用层与底层的代码集成
    • 2.5.下载验证
  • 总结


前言

主控板STM32F302R8+驱动板X-NUCLEO-IHM07M1+直流减速电机37GB3530,实现电机的正反转驱动。区别于上两章节,本章节工具链采用STM32CubeMX+Matlab/Simulink+Keil,在STM32CubeMX中配置底层,在Matlab/Simulink写应用层,在Keil环境中写应用层与底层的代码接口,并完成程序的集成。

一、STM32F302R8+X-NUCLEO-IHM07M1驱动直流电机

1.1.功能需求

驱动直流电机转动,并实现直流电机的换向控制;按下一次按键电机正转,LED亮;再按一次按键电机停止,LED灭;再按一次按键电机反转,LED亮;再按一次按键电机停止,LED灭,以此循环。用到的控制信号与控制板STM32F302R8对应的引脚关系如下表所示。
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第1张图片

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环境中完成应用层代码与底层代码的集成。
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第2张图片
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第3张图片

2.2.应用层与底层的接口开发

直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第4张图片
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第5张图片
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第6张图片

2.3.应用层开发

编程思路:检测按键状态,通过按键状态执行不同的电机运行状态
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第7张图片
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第8张图片

2.3.1按键检测

直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第9张图片
当检测到按键的下降沿时,Mode++,Mode可能的值为:0,1,2,3,通过不同的Mode值执行不同的电机运行状态。

2.3.2状态切换

直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第10张图片
默认在停止状态并使能桥臂1和桥臂2,如果Mode=1,电机正转;Mode=2,电机停止;Mode=3,电机反转;如果Mode=4电机停止,以此循环。

2.3.3仿真验证

直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第11张图片
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第12张图片
设定了5个下降沿,Mode值得变化为:1 2 3 0 1 ,电机依次正转 停止 反转 停止 正转
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第13张图片
经过仿真验证,符合自己的逻辑设计需求

2.3.4输入输出信号类型设置

底层与应用层接口信号的名称及数据类型已经在Keil环境设置完成,设置如下输入输出信号类型:
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第14张图片
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第15张图片
其余输出信号均参考EN1_State设置

2.3.5代码生成设置

直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第16张图片
STM32F302R8芯片为ARM Cortex-M4内核
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第17张图片
求解器设置为离散
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第18张图片
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第19张图片

2.3.6代码生成

Ctrl+B进行代码生成
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第20张图片
注:因为在Stateflow中使用了falling函数,代码生成文件多了rt_zcfcn.c;rt_zcfcn.h;zero_crossing_types.h三个文件
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第21张图片

2.4.应用层与底层的代码集成

将Matlab生成的代码文件夹复制到底层生成的工程下:APP_DCMotor
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第22张图片
在工程中将APP_DCMotor目录中的.c文件都添加进工程
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第23张图片
添加头文件路径
注:此时编译会报错,未定义“solver_zc.h”头文件,该头文件在Matlab安装路径下面,可以直接把该文件粘贴复制到APP_DCMotor文件夹下,也可以将改文件的路径进行添加。
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第24张图片
在这里插入图片描述
编写驱动函数
直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第25张图片
在主函数中调用Matlab生成代码中的函数,APP_Motor_initialize()为模型初始化函数;APP_Motor_step()模型函数(执行该函数一次,相当于在Matlab中运行该模型一次),根据APP_Motor_step()函数的运算结果,进行MCU引脚赋值进行电机驱动,在Matlab中设置模型10ms运行一次,所以在工程下也要确保APP_Motor_step()函数10ms运行一次,在While循环里加入10ms延时,近似模拟10ms运行APP_Motor_step()函数一次直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第26张图片

2.5.下载验证

直流有刷电机驱动基于STM32F302R8+X-NUCLEO-IHM07M1(三)_第27张图片

总结

本章节采用STM32CubeMX+Matlab/Simulink+Keil工具链完成直流电机的驱动及方向控制,为后续章节的分析奠定基础。

你可能感兴趣的:(MBD(Model-Based,Design),电机控制,STM32,stm32,Matlab/Simulink,MBD,电机控制)