液位系统c语言程序,基于STM32的液位控制系统设计

2023-05-16

程训明 董婷婷

0b48d6750ea5101907d43922cb098671.png

0943e62ea67eb23fccdaceca4302725e.png

cee7710cf0ce8df4d3d745f8afc695b0.png

摘 要:本文设计一种基于STM32的液位控制系统,该控制系统采用STM32作为控制核心,使用压力传感器采集水箱内的液位,通过串口触摸屏进行液位显示和给定,对水位进行有效的闭环控制。系统运用PID调节器实现液位闭环控制,通过对PID参数的整定,可以使液位保持在一个很小的误差范围内,实现液位的连续控制。

关键词:STM32;液位控制;PID控制

1 绪论

随着科学技术的不断发展,恒液位控制系统的研究也在不断进步。所谓的恒液位控制就是系统能够自动实现任意液位的精度控制,使其保持恒定的液位。在与嵌入式软件、硬件、自动控制等多项技术的紧密结合下,更能凸显出其优势。本课题的研究着重于对液位的检测与控制,以STM32作为主控制器,结合PID算法,达到对液位的精確控制。

2 硬件设计

2.1 总体方案

液位控制系统以STM32为控制核心,通过串口触摸屏发出启动信号到STM32控制器中,对传感器信号进行采集,将所得到的模拟信号通过A/D转换电路转成数字信号给STM32进行运算,根据运算结果控制调节阀进而控制液位的高度,并将结果实时在显示屏上。系统方框图如图1所示。

2.2 电路主要模块

液位控制系统除了负责传感器信号的采集和调节阀的控制外,还要运行PID算法,因此,需要对于微控制器的内部资源有一定的要求,本设计选用STM32F103RC,该微控制器具有丰富的外设资源,运算速度快,完全满足设计要求。对于电源模块,考虑到设备多应用于工业场景中,因此,设备采用DC24V供电,使用DCDC降压转换器TPS5430DDAR将24V转换为33V和5V,分别给STM32系统和串口屏供电。液位控制系统中,液位的采集是最重要的环节,液位数据的精度决定了控制效果,本设计选用TM7705设计A/D转换电路,TM7705是16位高精度模数转换器,通过串行接口与STM32通信。串口触摸屏选用迪文串口屏DMT10600C070_07W,该串口屏采用组态软件实现界面的开发,通过串口与STM32进行数据的交互,操作简单,能够极大程度上缩短开发周期。

3 软件设计

3.1 控制系统程序设计

STM32作为控制核心,控制系统功能程序使用C语言实现,主要有模拟量采集程序、PID控制程序、调节阀控制程序和串口屏通信程序。控制流程如下:串口触摸屏将给的定液位值通过串口传递给STM32。STM32接受到设定的液位值与所采集到水箱的液位高度值进行运算,将所计算的偏差量引入到所写的数字PID算法中进行运算得到结果,并控制调节阀注入水的快慢,从而完成液位的精确控制。程序流程图如图2所示。

3.2 PID控制的参数整定

PID控制器结构简单,工作稳定,鲁棒性较强,被广泛应用于各种工业过程控制领域。本文PID参数整定使用工程整定法来确定参数。工程整定法模拟控制系统,观察系统的响应曲线,按照先比例——后积分——再微分的顺序反复调试参数直到认为得到满意的响应为止。

首先,先将调节器的积分时间Ti调到最大,令Ti=SymboleB@

;将微分时间Td调节到最小,令Td=0;选择较大的比例度δ,即通过参数设定将控制器简化为纯比例环节进行控制。然后,不断减小比例度δ,当过渡过程显现具有衰减比(4∶1)的振荡过程,记录下此振荡过程中的比例度δs和衰减振荡周期Ts的值。根据测试数据的阶跃响应曲线得出振荡周期为Ts=115.76,根据经验公式,按δ=0.8δs,Ti=0.3Ts,Td=0.1Ts整定,得到整定参数为δ=4/30(即Kp=7.5),Ti=34.728,Td=11.576。将参数代入,可以计算出调节器的传递函数为:

Gc=7.5(1+134.728s+11.576s)

4 控制系统调试

通过串口屏设置目标液位的设置,然后启动液位控制系统,对实际的液位进行调节,液位控制曲线图如图3所示,液位控制系统能够快速稳定地实现液位的调节,满足本次设计要求。

5 结语

本文主要介绍了基于STM32的液位控制系统的设计,文章较为全面地解析了液位控制系统的硬件电路设计和软件设计,通过串口屏的设定和监控,能够清晰地看到液位的精确控制,直观地感受液位控制系统的作用,达到恒液位控制的效果,而且该系统相对于传统的PLC系统,成本低,容易部署,具有很广泛的应用前景。

参考文献:

[1]张小娟,高蕊,常豪豪.基于单片机液位控制系统的研究与设计[J].舰船电子工程,2018.

[2]林惠标,郭杨.变频恒压供水系统PID控制器的参数整定[J].机电工程技术,2016.

[3]崔皓天.基于PLC的液位控制系统设计[J].科技创业月刊,2017.

作者简介:程训明(1993—),男,江苏南京人。

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

液位系统c语言程序,基于STM32的液位控制系统设计 的相关文章

  • 如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

    我正在尝试从 Cortex M3 处理器 STM32 上的 RAM 执行函数 该函数会擦除并重写内部闪存 所以我肯定需要在 RAM 中 但我该怎么做呢 我尝试过的是 使用 memcpy 将函数复制到 RAM 中的字节数组 检查它是否正确对齐
  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • 优化 ARM Cortex M3 代码

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

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

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • 解决KEIL编译慢问题

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

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re

随机推荐