当前位置: 首页 > news >正文

二轮平衡小车3:PID速度环

使用芯片:STM32 F103 C8T6

今日继续我的二路平衡小车开发之路,今日编写的是二轮平衡小车的PID速度环,我准备了纸飞机串口助手软件来辅助测试调节PID。

本文主要贴代码,之前的文章都有原理,代码中相应初始化驱动部分也有注释~~

文章提供源码,解释以及工程下载,测试效果视频。

PID基础概念:

 这里简单介绍一下PID算法是反馈调节的算法,只需输入期望值与传感器反馈值即可实现自动调节电机PWM控制速度始终在期望值附近,即:反馈小了就加占空比,反馈大了就减占空比,但却不是简单的加减运算。

原理之前写过,这里直接贴出文章连接:

PID输出反馈回路调控算法原理_NULL指向我的博客-CSDN博客

编码器测速逻辑:

此处贴出函数,相关逻辑在之前的文章讲过:

MSP432自主开发笔记1:编码器测速_外部中断捕获法测速\测正反转_msp432编码器_NULL指向我的博客-CSDN博客

对于速度单位的理解与计算有各种各样,有喜欢算到  (cm/s) (m / s)  (rad / second )等等,需要通过不同电机转速,需求来选定。

这里我是用的电机减速比比较大,扭矩与载重大,但因此转速就慢,因此我采用每25ms采样的脉冲数作为速度来比较,使速度环闭合。

//定时器3中断服务程序	  (编码器捕获脉冲数)
void TIM3_IRQHandler(void)
{ if(TIM_GetITStatus(TIM3, TIM_IT_CC1)) //通道1发生捕获事件{	Wheel[2].CAPTURE++;TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);}	  //每次进入中断都要清空中断标志,否则主函数将无法正常执行if(TIM_GetITStatus(TIM3, TIM_IT_CC2)) //通道2发生捕获事件{Wheel[2].CAPTURE++;TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);}		//每次进入中断都要清空中断标志,否则主函数将无法正常执行	if(TIM_GetITStatus(TIM3, TIM_IT_CC3)) //通道3发生捕获事件{Wheel[1].CAPTURE++;TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);}		//每次进入中断都要清空中断标志,否则主函数将无法正常执行	if(TIM_GetITStatus(TIM3, TIM_IT_CC4)) //通道4发生捕获事件{Wheel[1].CAPTURE++;TIM_ClearITPendingBit(TIM3, TIM_IT_CC4);}	  //每次进入中断都要清空中断标志,否则主函数将无法正常执行
}void calculate_speed(void)
{uint16_t tt;tt=50;if(SPEED_flag==1){SPEED_flag=0;Wheel[1].SPEED=Wheel[1].CAPTURE;Wheel[2].SPEED=Wheel[2].CAPTURE;//		printf("V1=%d,V2=%d\r\n",Wheel[1].SPEED,Wheel[2].SPEED);printf("P1=%d,P2=%d\r\n",Wheel[1].PWM_DIV,Wheel[2].PWM_DIV);PRINT(plotter, "%d, %d, %d",Wheel[1].SPEED,Wheel[2].SPEED,tt);				PID_guide_peed(tt,tt);set_wheels(Wheel[1].PWM_DIV,Wheel[2].PWM_DIV,1,1);Wheel[1].CAPTURE=0; Wheel[2].CAPTURE=0;}
}

PID算法贴出:

 参数需要自己调,玄学调参......

#include "PID.h"PID_TYPE suduhuan1;
PID_TYPE suduhuan2;//PID 1~4号轮设置期望速度
void PID_guide_peed(uint16_t w1,uint16_t w2)
{Pid_increment_Cal(&suduhuan1,w1,Wheel[1].SPEED);Pid_increment_Cal(&suduhuan2,w2,Wheel[2].SPEED);	Wheel[1].PWM_DIV=suduhuan1.OutPut;Wheel[2].PWM_DIV=suduhuan2.OutPut;
}PID_结构体  target_目标  measure_当前值
void Pid_increment_Cal(PID_TYPE *PID, int target, int measure)
{PID->Error = target - measure;                                            // 误差PID->Pout = PID->P * (PID->Error - PID->PreError);                        // 比例控制PID->Iout = PID->I * PID->Error;                                          // 积分控制PID->Dout = PID->D * (PID->Error - 2 * PID->PreError + PID->PrePreError); // 微分控制// 比例 + 积分 + 微分总控制if (PID->Iout > PID->Irang) // 积分限幅PID->Iout = PID->Irang;if (PID->Iout < -PID->Irang) // 积分限幅PID->Iout = -PID->Irang;PID->OutPut += PID->Pout + PID->Iout + PID->Dout;PID->PrePreError = PID->PreError;  // 记忆e(k-2)PID->PreError = PID->Error;       // 记忆e(k-1)}void PidParameter_init(void)
{suduhuan1.P =38;suduhuan1.I=18;suduhuan1.D=0;suduhuan1.PreError=0;suduhuan1.PrePreError=0;suduhuan1.Irang=12;suduhuan1.OutPut=0;suduhuan2.P =38;suduhuan2.I=18;suduhuan2.D=0;suduhuan2.PreError=0;suduhuan2.PrePreError=0;suduhuan2.Irang=12;suduhuan2.OutPut=0;
}
#ifndef _PID_H_
#define _PID_H_#include "headfire.h"typedef struct PID
{int P;         //参数int I;int D;float Error;     //比例项e(k)float Integral;  //积分项int Differ;    //微分项int PreError;   //e(k-1)int PrePreError;//e(k-2)float Ilimit;float Irang;int Pout;int Iout;int Dout;int OutPut;uint8_t Ilimit_flag;    //积分分离
}PID_TYPE;extern PID_TYPE suduhuan1;
extern PID_TYPE suduhuan2;PID_结构体  target_目标  measure_当前值
void Pid_increment_Cal(PID_TYPE *PID, int target, int measure);
void PidParameter_init(void); //PID参数初始化 //PID 设置期望速度
void PID_guide_peed(uint16_t w1,uint16_t w2);#endif

相关文章:

二轮平衡小车3:PID速度环

使用芯片&#xff1a;STM32 F103 C8T6 今日继续我的二路平衡小车开发之路&#xff0c;今日编写的是二轮平衡小车的PID速度环&#xff0c;我准备了纸飞机串口助手软件来辅助测试调节PID。 本文主要贴代码&#xff0c;之前的文章都有原理&#xff0c;代码中相应初始化驱动部分也…...

C语言之练习题

欢迎来到我的世界 希望这篇文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 前言编程题第一题&#xff1a;珠玑妙算第二题&#xff1a;寻找奇数第三题&#xff1a;寻找峰值第四题&#xff1a;数对 总结 前言 这是暑假题目的收尾文章&am…...

没钱,没人,没经验?传统制造型企业如何用无代码实现转型

2023年&#xff0c;国家市场监督管理总局发布了三项重要标准&#xff0c;包括《工业互联网平台选型要求》、《工业互联网平台微服务参考框架》和《工业互联网平台开放应用编程接口功能要求》。这些标准的发布对于完善工业互联网平台标准体系&#xff0c;提升多样化工业互联网平…...

CentOS ARM 部署 kubernetes v1.24.6

1.背景 之前安装的kubernetes版本为v1.19.0 树莓派使用(CentOS7.9 armv71 Kubernetes1.19.0), 由于版本过低&#xff0c;一些HPA相关的功能支持不是特别好&#xff0c;因此需要将版本升级&#xff0c;本次会将版本升级为v1.24.6. 2. 如何upgrade 2.1. 优雅升级 kubeadm自带…...

LeetCode 725. Split Linked List in Parts【链表】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

云计算中的负载均衡技术,确保资源的平衡分配

文章目录 1. 硬件负载均衡器2. 软件负载均衡器3. DNS负载均衡4. 内容分发网络&#xff08;CDN&#xff09; &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;云计算 ✨文章内…...

探索 SOCKS5 代理在跨境电商中的网络安全应用

随着全球化的发展&#xff0c;跨境电商成为了商业界的一颗新星&#xff0c;为企业提供了无限的发展机遇。然而&#xff0c;随之而来的是网络安全的挑战&#xff0c;特别是在处理国际网络流量时。在这篇文章中&#xff0c;我们将探讨如何利用 SOCKS5 代理和代理 IP 技术来加强跨…...

全网独家:编译CentOS6.10系统的openssl-1.1.1多版本并存的rpm安装包

CentOS6.10系统原生的openssl版本太老&#xff0c;1.0.1e&#xff0c;不能满足一些新版本应用软件的要求&#xff0c;但是它又被wget、mysql-libs、python-2.6.6、yum等一众系统包所依赖&#xff0c;不能再做升级。故需考虑在不影响系统原生openssl的情况下&#xff0c;安装较新…...

【go】异步任务解决方案Asynq实战

文章目录 一.Asynq介绍二.所需工具三.代码示例四.Reference 一.Asynq介绍 Asynq 是一个 Go 库&#xff0c;一个高效的分布式任务队列。 Asynq 工作原理&#xff1a; 客户端&#xff08;生产者&#xff09;将任务放入队列服务器&#xff08;消费者&#xff09;从队列中拉出任…...

掌握 Android 自动化测试框架 UiAutomator UiAutomator2

掌握 Android 自动化测试框架 UiAutomator & UiAutomator2 一、UiAutomator 简介二、UiAutomator2 的诞生三、UiAutomator2 的应用实践总结你是否曾经在进行 Android 应用开发时,对于如何进行全面、有效的自动化测试感到困惑?你是否想要更高效地进行 UI 测试,而不是一遍…...

c#抽象类(abstract)

概述&#xff1a; C#中的抽象类是一种特殊类型的类&#xff0c;它不能被实例化&#xff0c;只能被继承。抽象类用于提供一个共享的基类&#xff0c;其中定义了一些方法和属性的签名&#xff0c;但没有具体的实现。这些方法和属性可以在派生类中进行实现。 使用抽象类的主要目…...

语义分割实践思考记录(个人备忘录)

一、任务管理器、NVDIA的GPU利用率显示[1][2] 若需要在任务管理器中查看基于Pytorch框架的GPU利用率&#xff0c;那么&#xff0c;我们需要将监控面板监测内容调整为cuda。图一&#xff08;左&#xff09;即为英伟达命令行工具面板。 图一 英伟达GPU使用率监控 二、基于混淆矩阵…...

Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局

在 9 月 6 日&#xff0c;The Digital Asset Summit ’23&#xff08;利比亚大会&#xff09;在尼日利亚首度阿布贾的 NAF 会议中心举办&#xff0c;该会议对 Web3 领域在非洲地区的发展进行了探索&#xff0c;旨在推动非洲地区区块链产业的进一步发展&#xff0c;据悉该会议室…...

随机流-RandomAccessFile

RandomAccessFile RandomAccessFile 基本操作案例 RandomAccessFile 基本操作 案例 import java.io.*;public class TestMain09 {public static void main(String[] args) throws Exception {insert("D:\\home\\product\\aa.txt",2,"ni");}public static…...

单例和静态类

C#中的单例&#xff08;Singleton&#xff09;和静态类&#xff08;Static Class&#xff09;是两种不同的设计模式&#xff0c;它们各自有不同的用途和特点。 单例模式是一种设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点。通常&#xff0c;单例…...

PMP-项目风险管理的重要性

一、什么是项目风险管理 项目风险管理旨在识别和管理未被其他项目管理过程所管理的风险。如果不妥善管理&#xff0c;这些风险有可能导致项目偏离计划&#xff0c;无法达成既定的项目目标。因此&#xff0c;项目风险管理的有效性直接关乎项目成功与否。 每个项目都在两个层面…...

学习的心得

文章目录 第一节课心得**学会了敲写数学公式** 第一节课心得 老师讲得非常好&#xff0c;我们下载了xmind&#xff0c;如何制作思维导图 学会了敲写数学公式 ∫ 10 20 ( x 2 − 3 x 2 ) d x \displaystyle\int_{10}^{20}(x^2-3x2)dx ∫1020​(x2−3x2)dx...

Python网络爬虫中这七个li标签下面的属性值,不是固定的,怎样才能拿到他们的值呢?...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 愚以为宫中之事&#xff0c;事无大小&#xff0c;悉以咨之&#xff0c;然后施行&#xff0c;必能裨补阙漏&#xff0c;有所广益。 大家好&#xff0c;我…...

白鲸开源 DataOps 平台加速数据分析和大模型构建

作者 | 李晨 编辑 | Debra Chen 数据准备对于推动有效的自助式分析和数据科学实践至关重要。如今&#xff0c;企业大都知道基于数据的决策是成功数字化转型的关键&#xff0c;但要做出有效的决策&#xff0c;只有可信的数据才能提供帮助&#xff0c;随着数据量和数据源的多样…...

(其他) 剑指 Offer 65. 不用加减乘除做加法 ——【Leetcode每日一题】

❓ 剑指 Offer 65. 不用加减乘除做加法 难度&#xff1a;简单 写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内不得使用 “”、“-”、“*”、“/” 四则运算符号。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负数或 0结果不会溢出 …...

RestTemplate 的用法

1.引入对应依赖 2.private final RestTemplate restTemplate; 3.上代码 Service Slf4j public class CspWarehouseServiceImpl implements ICspWarehouseService { private final RestTemplate restTemplate;public CspWarehouseServiceImpl() {this.restTemplate new Rest…...

postgresql-使用plpgsql批量插入用户测试数据

目的 使用plpgsql批量插入用户测试数据 ❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤我是分割线❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤ 我的环境 客户端&#xff1a;windows 版pgadmin4 服务端&#xff1a;linux版PostgreSQL 15.4 ❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤…...

通过Siri打造智能爬虫助手:捕获与解析结构化数据

在信息时代&#xff0c;我们经常需要从互联网上获取大量的结构化数据。然而&#xff0c;传统的网络爬虫往往需要编写复杂代码和规则来实现数据采集和解析。如今&#xff0c;在苹果公司提供的语音助手Siri中有一个强大功能可以帮助我们轻松完成这项任务——通过使用自定义指令、…...

【电源专题】典型设备的接地设计

在文章:【电源专题】接地的类型 中我们讲到不同的历史时期接地概念是不同的,有为了安全的电气接地和物理接地,也有为了提供参考电位的接地。 那么在设备接地的设计中,我们会怎么进行操作呢? 在文章【电源专题】接地的类型讲到一个混合接地的例子,我们可以把大功率的地接…...

LeetCode-216-组合总和Ⅱ

题目链接&#xff1a; LeetCode-216-组合总和Ⅱ 解题思路&#xff1a;回溯算法 注意事项注释中有 代码实现&#xff1a; class Solution {/*** 和为 n&#xff0c;个数为 k* 求的是组合&#xff0c;不要求顺序* 递归的深度是 k*/public List<List<Integer>> combin…...

[技术杂谈]几款常用的安装包制作工具

下面是几款常用的安装包制作工具&#xff1a; Inno Setup&#xff1a;Inno Setup 是一款免费开源的 Windows 平台上的安装包制作工具&#xff0c;支持多种自定义选项和脚本编写&#xff0c;提供了可视化的界面和易于使用的向导引导。它可以创建用户友好的安装程序&#xff0c;…...

旋转屏幕显示方向-rk3568

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 步骤屏幕旋转处理旋转后触摸问题下面将操作如何旋转RK3568的屏幕显示 步骤 屏幕旋转 屏幕旋转包括俩个部分:Android 显示旋转和 Recovery 显示旋转,如果我们想要物理横屏显示为竖屏,物理竖屏…...

07 Linux补充|秋招刷题|9月6日

目录 Linux 结构体内存字节对齐 静态变量static 空指针 Linux 结构体内存字节对齐 结构体内存字节要对⻬&#xff1a; 32位系统&#xff1a;4 8 32&#xff1b;64位系统&#xff1a;8 16 24 字节对⻬&#xff1a;字节对⻬是指在计算机中&#xff0c;各种类型数据按照⼀定…...

【JavaGuide学习笔记】Day.1

目录 Java基础常见面试题&#xff08;上&#xff09; 1.JDK&#xff1f;JRE&#xff1f;JVM&#xff1f; 2.为什么说Java语言是“编译与解释并存”&#xff1f; 3.Java基本数据类型 4.基本类型和包装类型的区别 5.包装类型的缓存机制 6.自动装箱与拆箱了解吗&#xff1f;…...

大数据课程K18——Spark的ALS算法与显式矩阵分解

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的ALS算法与显式矩阵分解; ⚪ 掌握Spark的ALS算法原理; 一、ALS算法与显式矩阵分解 1. 概述 我们在实现推荐系统时,当要处理的那些数据是由用户所提供的自身的偏好数据,这些…...

网站建设公司无锡/在线观看的seo综合查询

下午在一台win10系统的开发机上&#xff0c;爆出了一个这样的错误&#xff1a; No translation files found for 犯懒&#xff0c;上网查解决方案&#xff0c;结果都不对。最后发现是win10的System进程&#xff08;PID为4&#xff09;占用了80端口所致。 解决办法&#xff…...

ftp服务器搭建设置网站信息/企业网站模板图片

收集一些有用的博客&#xff0c;造福全人类&#xff1a; http://fullstack.info/ 不知道是谁&#xff0c;好像很吊的样子http://substack.net/ substack nodejs大神&#xff0c;贡献了几百个nodejs模块http://blog.izs.me/ nodejs巨屌http://lucumr.pocoo.org/ Flask作者http:…...

西客站网站建设/百度下载免费安装

我觉得我很亲近&#xff0c;但我无法解决这个问题。我只想打印字段tpnc的数值结果。只有一个数字要打印。在 我的代码是&#xff1a;import httplib, urllib, base64, json, requests headers { # Request headers Ocp-Apim-Subscription-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX…...

北京个人网站建设/百度官方客户端

项目中&#xff0c;有时会遇到需要遍历生成多个内容&#xff0c;可以构建一个简单的数组&#xff0c;每个元素只要有值即可。 Array.prototype.keys() [...Array(5).keys()] -> [0, 1, 2, 3, 4]// 使用伪数组转的真数组也是一个道理 [...Array.from({length: 5}).keys()] -&…...

杭州杭州网站建设公司/营销推广策划及渠道

序列号内容链接1前端知识面试题 - http&https&#xff08;2022版&#xff09;https://blog.csdn.net/qq_43061290/article/details/1266517832前端知识面试题 - 浏览器&#xff08;2022版&#xff09;https://blog.csdn.net/qq_43061290/article/details/1267765383前端知识…...

河间市做网站/徐州百度seo排名

&#x1f4e2;前言&#x1f332;原题样例&#xff1a;Excel 表列序号&#x1f33b;C#方法&#xff1a;深度优先搜索&#x1f33b;Java 方法一&#xff1a;二分查找&#x1f4ac;总结&#x1f680;往期优质文章分享&#x1f4e2;前言 &#x1f680; 算法题 &#x1f680; &…...