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



    前言

    主控板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工具链完成直流电机的驱动及方向控制,为后续章节的分析奠定基础。

  • 相关阅读:
    java中Random的使用
    5.1 主机扫描:路由信息的收集
    企业经营中如何降本增效,消灭内耗?
    如何测试模型的推理速度
    C++(11):tuple
    神通MPP数据库的跨库查询
    工作中的综合能力
    java中的注解
    【设计模式】Java设计模式 - 外观模式
    数电学习(十、脉冲波形的产生和整形)(二)
  • 原文地址:https://blog.csdn.net/weixin_42650162/article/details/126651584