基于stm32单片机的直流电机速度控制——LZW

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

  • 一、实验目的
  • 二、实验方法
  • 三、实验设计
    • 1.实验器材
    • 2.电路连接
    • 3.软件设计
      • (1)实验变量
      • (2)功能模块
        • a)电机接收信号计算
        • b)电机速度计算
  • 四、实验步骤
    • 1.系统辨识
    • 2.加权函数设计
    • 3.合成控制器
    • 4.控制器降阶
    • 5. 检查闭环系统稳定性
    • 6. S/T的Bode图
    • 7. 转换为离散控制器
  • 五、实验结果
    • 1.阶跃响应
    • 2.抗阶跃干扰
    • 3.抗正弦干扰

一、实验目的

  本实验采用H∞混合灵敏度算法设计直流电机速度控制器,并通过stm32f407单片机进行实物控制,具体满足以下要求:

1.通过开发板上按键实现正反转控制,通过螺旋电位器实现电机加减速控制
2.使电机具有足够的稳定裕度和良好的跟踪性能
3.能够抑制0.1Hz以下的低频干扰

二、实验方法

  H∞控制是指设计一个控制器K使闭环系统稳定且干扰对系统期望输出影响最小,所以利用H∞范数(传递函数的H∞范数可以描述输入到输出的最大增益)作为目标函数对系统进行优化设计。
图1  H∞控制框图

图1 H∞控制框图
  图中,P为广义控制对象,P0为系统被控对象,K为控制器,v为控制器输入,u为控制器输出,w为外部输入(包括参考信号和外部扰动),z为系统输出。
  基于混合灵敏度 S /T(S 为灵敏度,T 为补灵敏度)的 H∞ 控制器设计方法折中考虑了系统摄动带来的系统稳定和系统性能问题,对于结构不确定的系统是行之有效的设计方法。为了借助计算机求解控制器,需要把混合灵敏度问题转化为标准的 H∞ 优化问题。

在这里插入图片描述

图2 S/T混合灵敏度控制框图
  在S/T混合灵敏度控制中,所得的稳定控制器必须最小化

在这里插入图片描述

其中,其中w1是S的加权函数,w2是T的加权函数。对于H∞次优控制中,上式等价于

在这里插入图片描述

  因此,S/T 加权函数w1和w2的选取成为影响控制器控制效果的重要因素。S与系统跟踪性能和抗干扰能力相关,因此需要在低频范围增大w1内使S的增益变小。T与系统的鲁棒性和抗噪声干扰能力相关,因此需要在带宽以外增大w2以降低T的幅值。

三、实验设计

  本实验设计结构框图如下:
在这里插入图片描述

图3 实验结构框图

1.实验器材

代码如下(示例):

图4 实验器材

硬件:
1.STM32F407ZGT6开发板
2.L298N电机驱动模块
3.直流空心杯电机(12V,2000线)
4.螺旋电位器
软件:
1.IDE:MDK-Keil 软件
2.MATLAB
3.串口助手

2.电路连接

在这里插入图片描述

图5 电路接线图
(1)按键KEY0与单片机PE4引脚相连,用于电机正反转控制。
(2)螺旋电位器通过单片机开发板3.3V电压供电,并与单片机PF7引脚相连,用于电机调速。
(3)H桥驱动电路通过单片机开发板3.3V电压供电,其中的IN1、IN2引脚与单片机PF3、PF5引脚相连,OUT1和OUT2引脚与直流电机IN1和IN2引脚相连,实现电机的正反转控制;H桥驱动电路使能端EN A引脚与单片机PB6引脚相连,接收单片机输出的PWM信号,实现电机的调速功能。
(4)直流电机编码器Encoder A、Encoder B引脚通过单片机开发板5V供电,并与单片机PA6、PA7引脚相连,以读取电机的速度反馈。

3.软件设计

(1)实验变量

  实验主要定义以下变量:
在这里插入图片描述

图6 实验定义的变量

  其中,输入信号scmd决定电机最终的速度,actual_speed用于表示电机实际速度,output_cmd用于记录控制器输出信号,DIR用于记录电机方向。并进行以下初始化:
在这里插入图片描述

图7 程序初始化
  其中,通过设置定时器TIM6进行中断操作(测速、计算控制器输出),中断周期为0.01s。定时器TIM4设置为PWM模式,用于控制直流电机的速度。定时器TIM3设置为编码器模式,用于读取编码器信号。初始化ADC3,通过PF7引脚读取旋螺电位器的输入电压,并转化成速度参考信号scmd。

(2)功能模块

a)电机接收信号计算

  电机接收的信号有PWM信号和方向信号,具体代码如下:
在这里插入图片描述

图8 电机PWM信号和方向信号计算代码
  根据输入速度信号(速度参考信号scmd、控制器输出信号output_cmd)的正负判断电机速度,并用变量DIR记录。当DIR=0时,电机正转,单片机PF3引脚置位,PF5引脚复位;当DIR=1时,则相反。根据输入速度信号的模值计算PWM占空比,用变量PWMVal记录,并通过定时器TIM4产生所需的PWM脉冲,从PB6引脚输出到电机驱动模块。

b)电机速度计算

在这里插入图片描述

图9 电机速度计算代码

  实验中定时器周期为0.01s,每个周期需要计算电机每分钟转速,因此将PA6、PA7接收到的脉冲信号乘以6000,电机编码器为2000线,4倍频后为8000,所以再除以8000计算每分钟转速。

四、实验步骤

1.系统辨识

  实验中通过向电机输入伪随机二进制序列(PRBS),并通过最小二乘法计算直流电机传递函数,共采取1200组输入、输出数据:

在这里插入图片描述

图10 电机输入PRBS信号与输出速度
  假定该直流电机为5阶,利用上述数据使用最小二乘法(LSM)计算出该直流电机传递函数为

在这里插入图片描述
  该系统的Bode图为在这里插入图片描述

图11 直流电机Bode图

2.加权函数设计

  根据实验目标,设计以下加权函数:
在这里插入图片描述

|w1|-1 和|w2|-1和的Bode图如下:
在这里插入图片描述

图12 |w1|^-1和|w2|^-1的Bode图

3.合成控制器

根据图2,采用H无穷混合灵敏度方式合成控制器,使用matlab计算出的控制器传递函数为

在这里插入图片描述

4.控制器降阶

  在嵌入式应用程序中,资源是有限的。高阶意味着计算复杂度,采样周期更长。因此,需要降低控制器的阶数,而不显著失去它的属性,本实验采用平衡截断的方式(balanced truncation)将控制器降到4阶:
在这里插入图片描述

5. 检查闭环系统稳定性

  计算闭环传递函数的极点,如果全在负半轴,则系统稳定

在这里插入图片描述

图13 系统闭环极点

6. S/T的Bode图

  将降阶后的控制器(4)带入整个闭环系统,画出S/T(灵敏度/灵敏补)的Bode图:
在这里插入图片描述

图14 灵敏度和灵敏补的Bode图

7. 转换为离散控制器

  将控制器(4)转换为离散控制器,采样周期和控制器中断周期相等(T=0.01s):
在这里插入图片描述

五、实验结果

  将上述控制器(5)通过stm32f407zgt6单片机实现以控制直流电机速度,结果如下。

1.阶跃响应

  阶跃响应效果如下:

在这里插入图片描述

图15 阶跃响应效果

  其中,红线为速度参考信号,黄线为实际电机速度。

2.抗阶跃干扰

  为测试所设计的H∞控制器的抗干扰能力,应用该算法的直流电机启动后5秒后,加入1V阶跃干扰,实验效果如下:

在这里插入图片描述

图16 抗阶跃干扰效果(阶跃响应5s后加入1V阶跃干扰)

3.抗正弦干扰

  电机启动后在控制器后加入频率为0.1Hz、幅值为1V的正弦干扰,结果如下所示:
在这里插入图片描述

图17 抗0.1Hz、1V正弦干扰

  从上图可以看出,该H∞控制器基本可以抑制0.1Hz、1V的正弦干扰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java【Spring】项目创建、存储和获取 Bean 的基本方式

文章目录 前言一、创建 Spring 项目1, 创建 Maven 项目2, 添加 Spring 依赖3, 创建启动类 二、存储 Bean 的基本方式1, 创建 Bean2, 存储 Bean 三、获取 Bean 的基本方式1, 获取上下文对象2, 获取 Bean3, 使用 Bean 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的…

Python基础入门教程(上)

目录 一、你好Python 1.1、Python安装 win版 Linux版 1.2、第一个Python程序 二、Python基本语法 2.1、字面量 2.2、注释 2.3、变量 2.4、数据类型 type()函数 字符串类型的不同定义方式 2.5、数据类型转换 ​编辑 2.6、标识符 2.7、运算符 2.8、字符串扩展 …

Vue2基础五、工程化开发

零、文章目录 Vue2基础五、工程化开发 1、工程化开发和脚手架 (1)开发 Vue 的两种方式 核心包传统开发模式:基于 html / css / js 文件,直接引入核心包,开发 Vue。工程化开发模式:基于构建工具&#xf…

【Python】数据分析+数据挖掘——探索Pandas中的索引与数据组织

前言 在数据科学和数据分析领域,Pandas是一个备受喜爱的Python库。它提供了丰富的数据结构和灵活的工具,帮助我们高效地处理和分析数据。其中,索引在Pandas中扮演着关键角色,它是一种强大的数据组织和访问机制,使我们…

【Unity2D】角色动画的切换

动画状态转换 第一种方法是设置一个中间状态,从中间状态向其余各种状态切换,且各状态向其他状态需要设置参数 实现动作转移时右键点击Make Transition即可 实现动画转移需要设置条件 点击一种动画到另一种动画的线 ,然后点击加号添加Condi…

玩转LaTeX(三)【数学公式(基础)、​矩阵、多行公式】

数学公式基础 导言区(引包) \usepackage{amsmath} %带星号的eqution 正文区 \begin{document}%数学公式初步 \section{简介} \LaTeX{}将排版内容分为文本模式和数学模式。文本模式用于普通文本排版,数学模式用于数学公式排版。 …

【LeetCode】206.反转链表

题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3: …

oracle,获取每日24*60,所有分钟数

前言: 为规范用户的时间录入,因此我们采用下拉的方式,让用户选择需要的时间,因此我们需要将一天24小时的时间拆分为类似00:00,00:01...23:00,23:01,23:59。因此我们需要生成24*601440行的下拉复选值。具体效果如下图所示。 思路 1…

【Golang 接口自动化03】 解析接口返回XML

目录 解析接口返回数据 定义结构体 解析函数: 测试 优化 资料获取方法 上一篇我们学习了怎么发送各种数据类型的http请求,这一篇我们来介绍怎么来解析接口返回的XML的数据。 解析接口返回数据 定义结构体 假设我们现在有一个接口返回的数据resp如…

❤ yarn 和npm 的使用

❤ yarn 和npm 的使用 yarn 版本1的使用 yarn 简介 Yarn是facebook发布的一款取代npm的包管理工具。 yarn特点: 1,速度超快。 Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因…

【代理模式】了解篇:静态代理 动态代理~

目录 1、什么是代理模式? 2、静态代理 3、动态代理 3.1 JDK动态代理类 3.2 CGLIB动态代理类 4、JDK动态代理和CGLIB动态代理的区别? 1、什么是代理模式? 定义: 代理模式就是为其他对象提供一种代理以控制这个对象的访问。在某…

华为nat64配置

1.前期环境准备 环境拓扑 拓扑分为两个区域,左边为trust区域,使用IPv4地址互访,右边为untrust区域,使用IPv6地址互访 2.接口地址配置 pc1地址配置 pc2地址配置 FW接口配置 (1)首先进入防火墙配置界面 注:防火墙初始账号密码为user:admin,pwd:Admin@123,进入之后…

8.docker仓库

文章目录 Docker仓库本地私有仓库Docker HarborDocker harbor部署访问页面创建用户下载私有仓库镜像harbor同步 Docker仓库 本地私有仓库 ##先下载 registry 镜像docker pull registry##修改配置文件,在 daemon.json 文件中添加私有镜像仓库地址vim /etc/dock…

SQL-每日一题【1070. 产品销售分析 III】

题目 销售表 Sales: 产品表 Product: 编写一个 SQL 查询,选出每个销售产品 第一年 销售的 产品 id、年份、数量 和 价格。 结果表中的条目可以按 任意顺序 排列。 查询结果格式如下例所示: 示例 1: 解题思路 前置知…

Python爬虫的urlib的学习(学习于b站尚硅谷)

目录 一、页面结构的介绍  1.学习目标  2.为什么要了解页面(html)  3. html中的标签(仅介绍了含表格、无序列表、有序列表、超链接)  4.本节的演示 二、Urllib  1.什么是互联网爬虫?  2.爬虫核心  3.爬虫…

【MySQL】复合查询

复合查询目录 一、基本查询二、多表查询三、自连接四、子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 在from子句中使用子查询4.5 合并查询4.5.1 union4.5.2 union all 五、实战OJ 一、基本查询 --查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的…

LLaMA模型论文《LLaMA: Open and Efficient Foundation Language Models》阅读笔记

文章目录 1. 简介2.方法2.1 预训练数据2.2 网络架构2.3 优化器2.4 高效的实现 3.论文其余部分4. 参考资料 1. 简介 LLaMA是meta在2023年2月开源的大模型,在这之后,很多开源模型都是基于LLaMA的,比如斯坦福大学的羊驼模型。 LLaMA的重点是比…

从Vue层面 - 解析发布订阅模式和观察者模式区别

目录 前言一、发布订阅模式什么是发布订阅模式?应用场景 二、观察者模式1)什么是观察者模式?2)应用场景3)vue中的观察者模式观察者(订阅者) - Watcher目标者(发布者) - D…

剑指 Offer 46.! 把数字翻译成字符串(动态规划,青蛙跳台问题的变形)

剑指 Offer 46. 把数字翻译成字符串 中等 588 相关企业 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字…

rtthread的idle线程不应该长时间堵塞

RT-Thread是一个实时嵌入式操作系统,它的空闲线程(Idle Thread)是在系统中没有其他任务需要执行时运行的线程。空闲线程通常用于执行一些低优先级的任务或者进行系统的休眠等操作。 RT-Thread的空闲线程不能在线程中堵塞的原因是为了确保系统…