STM32 电机教程 4 - 直流有刷电机闭环电流控制

2023-10-27

 

前言

      有刷电机是大家最早接触的一类电机,中学时物理课堂上介绍电动机也是以它为模型来展示的。有刷电机的主要结构就是定子+转子+电刷,通过旋转磁场获得转动力矩,从而输出动能。电刷与换向器不断接触摩擦,在转动中起到导电和换相作用。

https://images2018.cnblogs.com/blog/1435508/201808/1435508-20180822191635169-1771943257.gif

有刷电机采用机械换向,磁极不动,线圈旋转。电机工作时,线圈和换向器旋转,磁钢和碳刷不转,线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

在有刷电机中,这个过程是将各组线圈的两个电源输入端,依次排成一个环,相互之间用绝缘材料分隔,组成一个像圆柱体的东西,与电机轴连成一体,电源通过两个碳元素做成的小柱子(碳刷),在弹簧压力的作用下,从两个特定的固定位置,压在上面线圈电源输入环状圆柱上的两点,给一组线圈通电。

随着电机转动,不同时刻给不同线圈或同一个线圈的不同的两极通电,使得线圈产生磁场的N-S极与最靠近的永磁铁定子的N-S极有一个适合的角度差,磁场异性相吸、同性相斥,产生力量,推动电机转动。碳电极在线圈接线头上滑动,像刷子在物体表面刷,因此叫碳“刷”。

相互滑动,会摩擦碳刷,造成损耗,需要定期更换碳刷;碳刷与线圈接线头之间通断交替,会发生电火花,产生电磁破,干扰电子设备。

有刷电机采用机械自动换向方式,控制起来特别简单,特别是直流有刷电机,只需在电机电极上通上直流电就可以让其转动起来,本节以下图所示的1718直流有刷电机为例 ,为大家展示如何用NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH让其实现电流闭环控制!

要实现电流闭环控制,就需要有电流返馈,刚好X-NUCLEO-IHM07M1 3SH板上有电流检测电路,可能通过ADC实现对电机电流的检测。说到闭环控制怎么少得了PID控制,本节将用PID控制器实现电流闭环控制。

http://5b0988e595225.cdn.sohucs.com/images/20171209/baebd11475b34efb85ba74039b46dbfe.png

关于PID控制器的详细知识请大家自行参阅其它资料或书籍,本节就不在这里介绍。

 

示例详解

本节用到ST官方推出的NUCLEO-F103RB和X-NUCLEO-IHM07M1 3SH 开发板。

 

NUCLEO-F103RB对应的大致原理接线图:

X-NUCLEO-IHM07M1 3SH部分原理图:

 

 

    1. 准备操作
      1. X-NUCLEO-IHM07M1 3SH是一款专门用于PMSM(永磁同步)或BLDC(直流无刷 )的电机驱动板(后面的章节将会给大家展示),当然也可以用于驱动直流有刷电机,本节就用它来控制直流有刷电机(1718,电压7-11V,实际使用9.6V),X-NUCLEO-IHM07M1 3SH电机驱动板驱动芯片型号为L6230(详细数据手册可在st官网下载),本节仅用IN1,IN2,和OUT1,OUT2即可!

电机电流检测,本例采用单电阻方式,跳帽端子连接图:

在50%占空时电机电流与彩样电阻两端电压波形图:

 

需要用到的信号

对应MCU引脚

EN1

PC10

IN1

PA8

EN2

PC11

IN2

PA9

Curr_fdbk2

PC1

本节将直接使能EN1及EN2引脚,PA8和PA9配置成定时器1的PWM引脚控, PC1配置为ADC引脚 ,通过PID控制器,调节PWM的占空实现对电机电流的精确控制。

 

      1. 在STM32CubeMX中,有专门的NUCLEO-F103RB工程模板,新建一个Cube工程,芯片型号为st32f103rb:

生成一个简单的工程模板实现了RCC,SYS,USART2接口的配置,同时还实现了LD2(LED)引脚的配置。接下来手动配置TIM1(产生主载波频率为72M / ( 2+1) / ( 999 +1) = 24K的PWM):

开启定时器更新事件中断:

 

配置PC10,PC11为GPIO_OUTPUT模式:

配置ADC,

并开启DMA功能:

生成工程:

 

 

      1. 打开工程,为工程加入事先准备好的pid.c和visualscope.c文件,pid.c,visualscope.c放于工程文件夹中src文件夹下,pid.h,visualscope.h放于工程文件夹中inc文件夹下,pid.c中包含本工程所需用到的PID控制器的实现,visualscope.c 中有本工程所要用到的串口示波器的校验算法:

  

在TIM.C中加入定时器更新中断开启代码:

在adc.c中加入电机平均电流计算代码,(电机电流 = 最近32个ADC采样结果的平均值):

在stm32f1xx_it.c中加入电流闭环实现代码:

在main.c中加入如下代码:

设置工程下载后自动运行:

编译代码,下载程序运行可直以看到电机成功转动起来, 程序中可以修改PidCurrent.Ref,的值来实现电机最大输出电流的不同(或最大输出力的不同)。

上位机打开VisualScope软件,设置好串口波特率和端口号,本机对应的端口号为COM10:

设置好以上参数后就可以让串口示波器RUN起来!

通过串口示波器软件,打印出电流闭环控制中的电参考(红线)和电流反馈(黄线)波形如下图所示,需要注意的在本例的测试程序中电机是空载的,要体现如下图所示的波形,需要给电机加载(可用钳子短时间夹住电机输出端)查看电流波形变化情况:

本节,由上图结果来看,电流闭环控制已成功实现, 有刷电机的速度闭环及位置闭环控制同样可以使用例的框架来实现,只不过在实现对应的闭环控制时需要有额外的外传器去获取电机的速度或位置反馈值。OK,本期实验完成!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

 

 

文中源码及资料下载,关注十三公众号:

在公众号里给十三发送 “下载|STM32 电机教程4” :

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 电机教程 4 - 直流有刷电机闭环电流控制 的相关文章

  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • 优化 ARM Cortex M3 代码

    我有一个 C 函数 它尝试将帧缓冲区复制到 FSMC RAM 这些函数将游戏循环的帧速率降低至 10FPS 我想知道如何分析反汇编的函数 我应该计算每个指令周期吗 我想知道CPU把时间花在哪里 在哪个部分 我确信该算法也是一个问题 因为它的
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • rt-thread studio中新建5.02版本报错

    先吐槽一下 rt thread studio出现BUG真多 好多时间都是在找BUG 但里面用好多控件还是挺好用的 真是又爱又恨 所以一般使用功能不多的话还是用keil多一点 创建5 02版本工程之后直接进行编译 直接会报下面这个错误 资源
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • fabric中链码关于缺少go的包依赖问题的解决方法

    我们可以在cmd中下载依赖包 go get github com hyperledger fabric common util v1 4 go get github com hyperledger fabric core chaincode
  • dubbo 负载策略,容错策略等常见问题

    目录 一 dubbo 概述 dubbo中的角色分析 dubbo 以 Zookeeper作为注册中心时的执行流程 dubbo 负载均衡策略 xml 方式配置负载均衡策略 SpringBoot yml 文件配置 dubbo 负载配置示例 dub
  • react实现拖拽排序(菜单+视频+图片等)

    DOM结构部分 拖动菜单部分 div div menuList length gt 0 menuList map item i gt div div
  • 刷题笔记-数组---求一个数组中第三大的数

    题目 求取一个数组中第三大的数 数组中至少有一个数据 eg 输入 a 1 2 3 输出 1 第三大的数为1 输入 a 1 2 输出 2 当数组中的数据少于三个时 输出最大的数据 输入 a 1 1 3 2 3 4 输出 2 解题思路 给出的一
  • 【神经网络】神经网络架构大全剖析(附原始论文地址)

    随着新的神经网络架构不时出现 很难跟踪这些架构 知道所有缩写 DCIGN BiLSTM DCGAN anyone 起初可能有点压倒性 所以我决定编写一个包含许多这些体系结构的备忘单 这些大多数是神经网络 有些是完全不同的野兽 虽然所有这些体
  • PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.4 BCD解密

    import java util Scanner public class Main public static void main String args Scanner sc new Scanner System in
  • Listener监听器与web.xml相关配置

    Listener监听器 在JavaWeb中有个叫监听器的东西 这监听器主要用来监听三大对象 HttpServletRequest HttpSession ServletContext 每个对象对应着各自的监听器接口 监听器可以监听这三个对象
  • ORA-28547:连接服务器失败,可能是Oracle Net管理错误

    网上有很多很杂的文章 我找到一个比较可以解决这个问题的方案 分享出来 真的这个Oracle的安装 plsql的安装 虚拟机的链接 数据库的连接这两天真的能把我搞的生不能 求死不能 差点就放弃当程序员了 不过还好的是 我的一直足够坚定 其实昨
  • 【开发工具】Mac电脑彻底删除Idea(卸载)

    将应用移至废纸篓进行删除 删除缓存和日志文件 打开 终端命令行 iterm 然后使用命令行执行如下命令 上面的 xxx 对应你的电脑当前使用用户名 记得更换上面的日期版本 IntelliJIdea202x x 旧版本 cd Users xx
  • 计算机网络原理_第7章 应用层 IP地址与域名

    IP 地址由32位 即4字节 二进制组成 为书写方便起见 常将每个字节作为一段并且以十进制表示 每段间用 分隔 一 IP地址由网络标识和主机标识两部分组成 常用的IP地址有A B C三类 每类均规定了网络标识和主机标识在 32 位中所占的位
  • android app闪退原因总结分析

    存储不够 缓存过多 剩余空间不够 针对内存 后台任务太多 导致运存不够 针对运存 App和SDK版本不兼容 sdk版本明显低于app 高版本app调用低版本SDK没有的API 不同版本间API 对象或类加载器等差异导致调用异常 程序运行时异
  • IDEA+maven搭建web框架

    一 安装maven 配置环境变量 M2 HOME D maven apache maven 3 3 3 path M2 HOME bin 修改本地仓库地址 进入到apache maven 3 3 3 conf 修改settings xml文
  • GitHub热榜登顶:开源版GPT-4代码解释器,可安装任意Python库,本地终端运行

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • 高并发与高可用知识总结

    文章目录 高并发与高可用知识总结 高并发与高可用知识总结 究竟啥才是互联网架构 高并发 一 什么是高并发 高并发 High Concurrency 是互联网分布式系统架构设计中必须考虑的因素之一 它通常是指 通过设计保证系统能够同时并行处理
  • 【接口声明与接口实现需文件分离】

    接口声明与接口实现需文件分离 定义一个ADT时 类型定义放在头文件中 类型接口的实现 一定要放在同名cpp文件中 否则就会报错 实现一定不能放在头文件中
  • ubuntu安装ROS melodic(最新、超详细图文教程)

    Ubuntu 安装 ROS ROS安装 准备 方法一 推荐 使用小鱼ROS一键安装 方法二 使用官方教程 配置rosdep 方法一 推荐 使用小鱼ROS一键安装 方法二 通过修改文件 ROS简介 ROS 是一个适用于机器人的开源的元操作系统
  • QT5.12编译MQTT

    使用mingw81 64进行编译安装 超级便捷的方法 几步即可完成 源码传送门 https github com emqx qmqtt git 打开下图编译器控制台 打开后如下图所示 步骤一 进入下载的mqtt源码目录 qtmqtt 5 1
  • C语言单链表的建立

    1 头文件 include
  • codeforce刷题 1

    1 Sequence Pair Weight 题目大意 给定一个长度为 n 的数组 a 规定 i lt j 且 ai aj 为一个数对 求数组 a 的 所有连续子序列中有多少个这样的数对 输出总数 解题思路 易得如果一个一个子序列去遍历的话
  • STM32 电机教程 4 - 直流有刷电机闭环电流控制

    前言 有刷电机是大家最早接触的一类电机 中学时物理课堂上介绍电动机也是以它为模型来展示的 有刷电机的主要结构就是定子 转子 电刷 通过旋转磁场获得转动力矩 从而输出动能 电刷与换向器不断接触摩擦 在转动中起到导电和换相作用 有刷电机采用机械