电流电压双闭环PID控制以及C语言实现

2023-11-09

对于电流电压双闭环PID控制,我们需要先了解一下PID控制的原理。PID控制器是由比例(P),积分(I)和微分(D)三个部分组成的控制器,用于控制具有惯性和滞后响应的过程。PID控制器需要通过测量误差,计算出控制输出,以便实现系统稳定。

在电流电压双闭环PID控制中,控制器需要同时控制电流和电压,在实际应用中,可以采用电压调节器来控制电压,并通过电流反馈控制电流。下面,我们来看一下如何实现电流电压双闭环PID控制的C语言程序:

// pid控制参数定义
#define Kp 0.5
#define Ki 0.2
#define Kd 0.1

// 采样周期
#define Ts 0.01

// 目标电压值
#define Vd 10

// 反馈电压值
volatile float Vf;

// 目标电流值
volatile float Id;

// 反馈电流值
volatile float If;

// 比例误差
volatile float Ep;

// 积分误差
volatile float Ei;

// 微分误差
volatile float Ed;

// PID控制器输出
volatile float Out;

// PID控制器
void pid_control()
{
    // 计算比例误差
    Ep = Vd - Vf;
    
    // 计算积分误差
    Ei = Ei + Ep * Ts;

    // 计算微分误差
    Ed = (Ep - Ed) / Ts;

    // 计算PID控制器输出
    Out = Kp * Ep + Ki * Ei + Kd * Ed;

    // 限幅控制
    if (Out > 10) Out = 10;
    if (Out < -10) Out = -10;

    // 输出PID控制器输出
    SetOutput(Out);
}

// 电压调节器
void voltage_regulator()
{
    // 获取电压反馈值
    Vf = GetFeedback();
    
    // 调用PID控制器进行控制
    pid_control();
}

// 电流控制器
void current_controller()
{
    // 获取电流反馈值
    If = GetCurrentFeedback();

    // 计算电压目标值
    Vd = Id * ResistorValue;

    // 调用电压调节器进行控制
    voltage_regulator();
}

// 主函数
int main()
{
    // 初始化控制器
    InitController();

    // 设置电流目标值
    Id = 2;

    // 循环调用电流控制器
    while(1)
    {
        current_controller();
        delay(Ts);
    }

    return 0;
}

上面的C语言程序中,利用宏定义定义了PID控制参数、采样周期和目标电压值等。在pid_control()函数中,计算出比例误差、积分误差和微分误差,并使用PID控制器计算出输出值Out。还加入了限幅控制,以防止输出值超出控制范围。

在voltage_regulator()函数中,获取电压反馈值,并调用pid_control()函数进行电压调节控制。在current_controller()函数中,获取电流反馈值,并计算出目标电压值Vd,然后调用voltage_regulator()函数进行电流控制。

在主函数中,初始化控制器,设置电流目标值Id,并循环调用current_controller()函数控制电流。在循环中,使用delay(Ts)函数来等待采样周期,以确保控制器正常工作。

当然,实际应用中,还需要考虑许多因素,比如采样频率等。

【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
在这里插入图片描述

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

电流电压双闭环PID控制以及C语言实现 的相关文章

随机推荐

  • C++11多线程之条件变量

    文章目录 一 关于多线程的同步 二 初始条件变量 三 关于条件变量的例题 四 生产者消费者模型 一 关于多线程的同步 函数被调用 分配相应的栈帧 进行现场保护 void func char c char filename 20 sprint
  • elementUI table组件渲染问题

    elementUI table组件渲染问题 1 问题 问题描述 页面内 使用选项卡 进行内容显示的切换 切换后 原本高度合适的表格出现白边 以及滚动条 检查Dom会发现 el table组件内 发现了一个类名为 is scrolling n
  • 分布式文件存储Minio学习入门

    文章目录 一 分布式文件系统应用场景 1 Minio介绍 Minio优点 2 MinIO的基础概念 3 纠删码ES Erasure Code 4 存储形式 5 存储方案 二 Docker部署单机Minio 三 minio纠删码模式部署 四
  • html空格符号代码及特殊符号

    一 html空格符号代码 nbsp 一个字符的半角的不断行的空格 如果需要在网页中插入多个空格 可以将 nbsp 代码写多遍 ensp 一个字符的半角的空格 也可以将 写多遍来插入多个空格 emsp 两个字符的全角的空格 也可以将 emsp
  • Flask框架入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

    Flask框架 一 简介 Flask是一个非常小的PythonWeb框架 被称为微型框架 只提供了一个稳健的核心 其他功能全部是通过扩展实现的 意思就是我们可以根据项目的需要量身定制 也意味着我们需要学习各种扩展库的使用 二 概要 1 安装
  • 【学习笔记】python实现excel数据处理

    概述 Excel固然功能强大 也有许多函数实现数据处理功能 但是Excel仍需大量人工操作 虽然能嵌入VB脚本宏 但也容易染上宏病毒 python作为解释性语言 在数据处理方面拥有强大的函数库以及第三方库 excel作为主要基础数据源之一
  • MySQL中的事务(隔离性详解)

    1 什么是事务 事务是指逻辑上的一组操作 组成这组操作的各个单元 要么全部成功 要么全部失败 通俗的说一组SQL语句 要么全部执行成功 一条语句出错则全部出粗 在不同的环境中 都可以有事务 对应在数据库中 就是数据库事务 2 为什么使用事务
  • RobotFramework学习系列--(一)

    测试工作需要用到了RobotFramework 之前只是使用 用了一段时间后 决定深入研究一下它 使用平台为Windows Linux 由于是基于Linux 系统方面的测试工作 使用的RobotFramework版本为2 8 5 先简单介绍
  • 强力推荐:Atom入坑必备插件

    You are my warm gloves my cloud beer my sun kissed shirt my day after day dreams 你是我温暖的手套 冰冷的啤酒 带着阳光味道的衬衫 日复一日的梦想 强力推荐 A
  • vue 快速入门--快速使用vue2

    关于mvvm的理解 说到mvvm 就要提到vue的优点了 vue有什么优点呢 更改变量很容易 具有即时性 这是我们广泛所知道的 vue的优点 在原来只有jquery的时候 我们改变一个元素的值的时候 我们需要深入到原代码里 重新绑定元素啦
  • C51数码管显示

    一 数码管简介 LED数码管 数码管是一种简单 廉价的显示器 是由多个发光二极管封装在一起组成 8 字 型的器件 管按段数可分为七段数码管和八段数码管 八段数码管比七段数码管多一个发光二极 管单元 也就是多一个小数点 DP 这个小数点可以更
  • 通过关键词模拟百度搜索并爬取前30页的URL

    想快速获取到百度搜索结果原始URL 一次一次输入搜索太慢了 所以就写了一个小爬虫 效率提升10000倍 平均耗时一个关键词爬取百度搜索结果前30页的链接耗时4秒内 1 你要准备一些搜索词 我的环境下我的搜索词是放在 key file pat
  • ini文件的读取

    ini文件 每行末尾有换行符 每个section之间有一空行 文件 0 id 0 key2 def key start 456 end 78 1 id 1 key1 abc key start 123 end 456 代码示例 includ
  • 2023-数仓建设规范指南

    一 数据模型架构原则 1 数仓分层原则 优秀可靠的数仓体系 往往需要清晰的数据分层结构 即要保证数据层的稳定又要屏蔽对下游的影响 并且要避免链路过长 那么问题来了 一直在讲数仓要分层 那数仓分几层最好 目前市场上主流的分层方式眼花缭乱 不过
  • MySQL中神奇的show命令详解

    show binary logs 列出服务器上的二进制日志文件 show binlog events 显示二进制日志中的事件 show character set 显示所有可用的字符集 show collation 列出服务器支持的排序规则
  • 全网最全的Postman接口自动化测试(史实级攻略)

    背景 该篇文章针对已经掌握 Postman 基本用法的读者 即对接口相关概念有一定了解 已经会使用 Postman 进行模拟请求的操作 当前环境 Window 7 64 Postman 版本 免费版 Chrome App v5 5 3 不同
  • Laravel项目线上服务器docker化部署实战全过程记录指导(转 2021-04-02)

    最近 笔者终于在重重困难之下 完成了自己的第一个laravel项目 有什么感受呢 当然就是laravel虽然体型大 但是功能也更全了 总起来说 是一个在php后端领域值得深入挖掘 日积月累的框架 项目的本地开发和测试都已经完成 那么接下来面
  • MySQL常用函数、关键字解析。

    目录 引言 一 数据库简介 二 SQL语句 三 MySQL常用函数 数学函数 日期函数 MySQL其他命令 四 Navicat快捷键 引言 暂时只想起来这些 有需要补充的或者文章内出现的错误欢迎指正 评论 or 私信 请努力提升自己 划重点
  • 一次另类的由kjournald日志进程引起的磁盘io问题的解决

    http www 5ilinux com 2012 11 kjournald io html 最近linode的服务器做cacti的监控测试 偶尔发现服务器最近几周的io成几何级增长 而同期的cpu负载却发现无太明显的几何级的增长 好在li
  • 电流电压双闭环PID控制以及C语言实现

    对于电流电压双闭环PID控制 我们需要先了解一下PID控制的原理 PID控制器是由比例 P 积分 I 和微分 D 三个部分组成的控制器 用于控制具有惯性和滞后响应的过程 PID控制器需要通过测量误差 计算出控制输出 以便实现系统稳定 在电流