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

news2024/11/15 1:54:06

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

目录

  • 一、实验目的
  • 二、实验方法
  • 三、实验设计
    • 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.coloradmin.cn/o/811987.html

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

相关文章

Github git clone 和 git push 特别慢的解决办法

1.在本地上使用 SSH 命令无法git push 上传 github 项目 2.使用 git clone 下载项目特别慢总是加载不了 解决办法1 将 *** 的连接模式换成:D-i-r-e-c-t(好像不太有用) 后面再找找能不能再G-l-o-b-a-l 下解决该问题 解决办法 2 mac下直接设…

Python 日志记录:6大日志记录库的比较

Python 日志记录:6大日志记录库的比较 文章目录 Python 日志记录:6大日志记录库的比较前言一些日志框架建议1. logging - 内置的标准日志模块默认日志记录器自定义日志记录器生成结构化日志 2. Loguru - 最流行的Python第三方日志框架默认日志记录器自定…

SpringBoot内嵌的Tomcat:

SpringBoot内嵌Tomcat源码: 1、调用启动类SpringbootdemoApplication中的SpringApplication.run()方法。 SpringBootApplication public class SpringbootdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootdemoApplicat…

python浅浅替代ps?实现更改照片尺寸,以及更换照片底色

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如何用代码来p证件照并且更换底色? 有个小姐姐给我扔了张照片,叫我帮忙给她搞成证件照的尺寸还得换底色 可惜电脑上没有ps只有pycharm,但下载又卸载多麻烦呀 于是,我就用代码来…

RT1052 的周期定时器

文章目录 1 PIT 周期中断定时器2 PIT定时器的使用3 PIT定时器配置3.1 PIT 时钟使能。3.1.1 CLOCK_EnableClock 3.2 初始化 PIT 定时器3.2.1 PIT_Init 3.3 设置 通道 0 的 加载值3.3.1 PIT_SetTimerPeriod 3.4 使能 通道 0 的中断3.4.1 PIT_EnableInterrupts 3.5 开启 PIT 定时器…

在登录界面中设置登录框、多选项和按钮(HTML和CSS)

登录框(Input框)的样式: /* 设置输入框的宽度和高度 */ input[type"text"], input[type"password"] {width: 200px;height: 30px; }/* 设置输入框的边框样式、颜色和圆角 */ input[type"text"], input[type&q…

测试|测试分类

测试|测试分类 文章目录 测试|测试分类1.按照测试对象分类(部分掌握)2.是否查看代码:黑盒、白盒灰盒测试3.按开发阶段分:单元、集成、系统及验收测试4.按实施组织分:α、β、第三方测试5.按是否运行代码:静…

100行代码写一个简易QT点名程序

照例演示一下: 分享一个简易的Qt点名程序,满打满算一百行代码(还要什么自行车)。 UI界面比较丑,按钮是自己做的,背景是AI作画生成的,大家可以自行更换背景以及按钮。 内容也是非常的简单,就是…

JWT登录认证

JWT认证流程 跨域认证解决方案,JWT的流程为: 客户端发送账号和密码请求服务端收到请求,验证用户名密码是否通过验证成功后,服务端会生成唯一的token,将其返回给客户端客户端收到token,会将其存储在cookie…

拓扑排序详解(带有C++模板)

目录 介绍: 实现原理: 简答来说: 例子 模板(C) 介绍: 拓扑排序(Topological Sorting)是一种针对有向无环图(DAG)的节点进行排序的算法。DAG是一个图&…

Android 之 使用 MediaRecord 录音

本节引言 本节是Android多媒体基本API调用的最后一节,带来的是MediaRecord的简单使用, 用法非常简单,我们写个例子来熟悉熟悉~ 1.使用MediaRecord录制音频 运行结果: 实现代码: 布局代码:activity_main.…

自动化测试如何做?真实企业自动化测试流程,自动化测试分类...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 企业自动化测试流…

一文讲清楚地图地理坐标系

前言 我最近在做一个和地图有关的项目,这里本人地图采用的是mapbox,其中涉及一个功能需要根据用户输入的地点直接定位到地图上的对应的位置,本人开始想的是直接调用百度的接口根据地名直接获取坐标,发现在地图上的位置有偏移不够…

C++——模板的作用2:特例化

目录 模板的形式: 一.模板的多参数应用: 例: 错误使用1:使用不标准的模板形参表 ​编辑 错误使用2:使用变量作为实参传递给函数模板 二.模板的特例化: 类模板: 针对模板的特化步骤&am…

乌班图22.04安装wireguard实现异地组网

1. 前言: wireguard是新型的异地组网工具,在此之前,又已经被抛弃的pptp,l2tp,有配置复杂的openvpn,wireguard被linux作者linus赞叹优雅,于linux 5.6合并至linux内核主线。 2. 安装过程&#…

文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题

文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题 七、试说明如何使用优先队列来实现一个先进先出队列,以及如何使用优先队列来实现栈(队列和栈的定义见 10.1 节。) 文心一言: 优先队列是一种数据结构,其中…

干货|一次完整的性能测试,测试人员需要做什么?

作者介绍 邓宝菊(Kiki Deng),10 年软件测试经验,4 年团队管理经验,当前任职研发部架构质量工程部,整体负责研发部测试团队的效能、工具流程建设和人才培养。 前言 一、 规范性能测试实施流程的意义 规范…

Qt: 查看qmake相关参数设置

Qt开发中,经常会遇到qmake相关问题,比如同时安装了多个Qt版本的情况。比如我的情况是系统自带了Qt 5.12.8, 但是开发中遇到一些兼容性问题,于是又手动安装了5.9.8。 查看qmake版本,qmake -v, 虽然项目中已经指定了5.9.8, 但是系统…

通过String字符生成base64编码在生成图片

* base64转图片 //对字节数组字符串进行Base64解码并生成图片 * param base64str base64码 * return // param savePath 图片路径private static final String savePath"image_ver\\verifyCode"; 判断是否为base64编码 public static void mainDD…

关闭深度学习训练/推理进程的方法

引言 设想有一种情况,在ssh服务器训练/推理的时候,突然断线,再次打开ssh的时候,发现后台在运行,此时无法使用 ctrlc 终止,从而,可以用一个很简单的办法来结束:手动关闭进程。 方法 输…