基于stm32与TJC3224T124_011串口屏的PID调参器(附完整工程)

        电赛在即,每次比赛调PID都是一件比较繁琐的事。每次都要在程序中改完再烧录到板子上,特别耗时。正好最近发现实验室的一块串口屏比较好玩。

                                

        于是就做了这个调PID的东西。它可以通过串口直接修改PID的值,从而达到快速调PID的目的。下面我将完整工程分享给大家。

一、串口屏

        想要详细学串口屏的同学直接点击下面的官方文档学习就行。但对于大部分同学来说,只要会用就行。

淘晶驰资料中心 — 淘晶驰资料中心 1.1.0-2024-03-19 11:50:47 文档 (tjc1688.com)

        下面就是PID调参器的主页面。(大家洗不洗欢嘞!!!)

        PID的调节可以支持21000000.00~-21000000.00以内,可支持2位小数(这个可以设置,下面会说明)

                            

二、STM32函数

int changePID(double *KP,double *KI,double *KD)
{double val=0;u8 x[3];u8 a=0;u8 sta=0;u8 fushu=0;u8 t;u8 len;if(USART_RX_STA&0x8000)//串口1接收到数据{					   len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度for(t=0;t<len;t++){
//			USART2->DR=USART_RX_BUF[t];//			while((USART2->SR&0X40)==0);//等待发送结束if(USART_RX_BUF[t]==0x0c){	//遇到0c表示数字发完,开始发KP/KI/KDsta=1;continue;}if(USART_RX_BUF[t]=='-'){	//记录负数fushu=1;continue;}if(sta==0){val=val*10+(USART_RX_BUF[t]-'0');	//读取每一位数字字符转化为数字}else{x[a++]=USART_RX_BUF[t];		//读取调节的是KP/KI/KD}}if(fushu){		//负数变号val=-val;}val=val/100;	//改为小数USART_RX_STA=0;USART_RX_STA2=0;}if(x[1]=='P'){		//KP/KI/KD赋值*KP=val;}else if(x[1]=='I'){*KI=val;}else if(x[1]=='D'){*KD=val;}else{return 0;}return 1;
}

        调用函数时,需要初始化串口1(也可以设置,下面会说)。使用函数时,传入PID三个参数的地址,成功修改会返回1,失败会返回0。

三、说明

1、修改小数点

        要修改到小数点后几位,首先修改参数vvsl,比如保留小数点后3位,就把vvsl改为3;

        然后代码部分修改此处即可,如果保留小数点后3位,就把100改为1000。我想大家都是能看懂的,就不过多解释了。

2、修改串口

        将changePID中对应的串口1标志位改为其他串口标志位就行。

3、串口屏代码下载不进去

        点击设备更改成自己屏幕的型号,然后编译一下,如果报错修改一下图片的比例。

4、波特率

        使用的都是115200。串口屏的波特率可以在Program.s里修改。

四、完整工程

        串口屏资源放在我主页的资源中了,大家可以自行下载。下面给出的是stm32主函数代码。

        最后浅浅聊一下,串口打印的乱码都给孩子整抑郁了。。。但是看到最终的成品就觉得这一切都是值得的。可能这就是嵌入式的浪漫吧。

 

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"
//ALIENTEK Mini STM32开发板范例代码3
//串口实验   
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司int changePID(double *KP,double *KI,double *KD);int main(void){	double KP=0,KI=0,KD=0;delay_init();	    	 //延时函数初始化	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2uart1_init(115200);	 //串口初始化为9600uart2_init(115200);LED_Init();		  	 //初始化与LED连接的硬件接口 while(1){if(changePID(&KP,&KI,&KD)){printf("\r\nKP=%lf KI=%lf KD=%lf",KP,KI,KD);}}	 
}int changePID(double *KP,double *KI,double *KD)
{double val=0;u8 x[3];u8 a=0;u8 sta=0;u8 fushu=0;u8 t;u8 len;if(USART_RX_STA&0x8000)//串口1接收到数据{					   len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度for(t=0;t<len;t++){
//			USART2->DR=USART_RX_BUF[t];//			while((USART2->SR&0X40)==0);//等待发送结束if(USART_RX_BUF[t]==0x0c){	//遇到0c表示数字发完,开始发KP/KI/KDsta=1;continue;}if(USART_RX_BUF[t]=='-'){	//记录负数fushu=1;continue;}if(sta==0){val=val*10+(USART_RX_BUF[t]-'0');	//读取每一位数字字符转化为数字}else{x[a++]=USART_RX_BUF[t];		//读取调节的是KP/KI/KD}}if(fushu){		//负数变号val=-val;}val=val/100;	//改为小数USART_RX_STA=0;USART_RX_STA2=0;}if(x[1]=='P'){		//KP/KI/KD赋值*KP=val;}else if(x[1]=='I'){*KI=val;}else if(x[1]=='D'){*KD=val;}else{return 0;}return 1;
}

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

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

相关文章

C++学习笔记(lambda函数)

C learning note 1、lambda函数的语法2、lambda函数的几种用法 1、lambda函数的语法 lambda函数的一般语法如下&#xff1a; [ capture_clause ] ( parameters ) -> return_type {function_body }capture_clause&#xff1a;需要捕获的变量&#xff0c;但要求该变量必须在…

【办公类-16-07-07】“2023下学期 中班户外游戏2(有场地和无场地版,每天不同场地)”(python 排班表系列)

作品展示 背景需求&#xff1a; 2024年2月教务组发放的是“每周五天内容相同&#xff0c;两周10天内容相同”的户外游戏安排 【办公类-16-07-05】合并版“2023下学期 大班户外游戏&#xff08;有场地和无场地版&#xff0c;两周一次&#xff09;”&#xff08;python 排班表系…

探索未来智能的奥秘

文章目录 前言 前言 随着科技的不断进步&#xff0c;人工智能(AI)已逐渐渗透到我们生活的方方面面。而在AI的众多分支中&#xff0c;大模型技术无疑是一个备受瞩目的领域。本文将带领大家走进AI大模型的世界&#xff0c;一同探索其奥秘。 AI大模型&#xff0c;顾名思义&#…

YOLOv7 | 注意力机制 | 添加ECA注意力机制

目录 原理简介 代码实现 yaml文件实现&#xff08;tips&#xff1a;可以添加不同的位置&#xff09; 检查是否添加执行成功 完整代码分享 论文创新必备&#xff08;可帮忙做实验&#xff09; 启动命令 ECA是通道注意力机制的一种实现形式&#xff0c;是基于SE的扩展。…

Data Interpreter: An LLM Agent For Data Science 论文解读

论文地址&#xff1a;https://arxiv.org/abs/2402.18679 Github&#xff1a;MetaGPT: The Multi-Agent Framework 数据解释器&#xff08;Data Interpreter&#xff09;是一个基于大型语言模型&#xff08;LLM&#xff09;的代理&#xff0c;专门为解决数据科学问题而设计。它…

互联网摸鱼日报(2024-03-21)

互联网摸鱼日报(2024-03-21) 36氪新闻 金山云Q4营收17.22亿元&#xff0c;技术创新驱动收入规模和盈利能力双增长 iOS 18是苹果AI的答卷&#xff1f;你或许并不懂手机AI 2024年&#xff0c;广告主市场预算真的继续下滑&#xff1f; 降价潮反倒劝退消费者&#xff0c;想买车…

数据丢失大救星:格式化后如何高效恢复文件

一、格式化危机&#xff1a;如何逆转数据流失 在数字时代&#xff0c;数据丢失无疑是一场灾难。当我们的电脑硬盘、手机或闪存盘不慎被格式化后&#xff0c;重要文件仿佛在一瞬间消失得无影无踪。面对这一突发状况&#xff0c;很多人会陷入迷茫和焦虑之中。那么&#xff0c;格…

Django(三)-搭建第一个应用(2)

一、编写更多视图 问题详情页——展示某个投票的问题和不带结果的选项列表。问题结果页——展示某个投票的结果。投票处理器——用于响应用户为某个问题的特定选项投票的操作。 # 1.问题详情页&#xff1a;展示某个投票的问题和不带结果的选项列表 def detail(request,questi…

放弃 Rust 选择 Zig,Xata 团队推出 pgzx —— 计划使用 Zig 开发基于 PG 的分布式数据库

Summary Xata 公司在基于 PostgresSQL 开发自己的分布式数据库&#xff0c;出于 Zig 和 C 语言以及 PostgreSQL 的 API 有更好的互操作性的考虑&#xff0c;他们选择了 Zig 而非当红炸子鸡语言 Rust。他们的博客文章中对 pgzx 进行了介绍。让我们来看下他们对 Zig 和 Rust 语言…

clickhouse学习笔记02(小滴课堂)

ClickHouse核心基础-常见数据类型讲解 插入数据&#xff1a; decimal类型的数据&#xff0c;整数部分超了会报错&#xff0c;小数部分超了会截取。 查看表结构&#xff1a; 查询&#xff1a; 插入&#xff1a; 更新操作&#xff1a; 这个和mysql的语句不太一样。 删除语句和my…

【算法】冒泡、选择和插入排序

目录 1. 简介2. 冒泡排序2.1 步骤2.2 C语言编码3. 选择排序步骤C语言编码4. 插入排序步骤C语言编码1. 简介 在经典排序算法中 排序算法平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性冒泡排序O ( n 2 ) O{\left(n^{2} \right)} O(n2)O ( n ) O{\left(n\right)} O(n)…

Kafka总结问题

Kafka Kafka Kafka Kafka的核心概念/ 结构 topoic Topic 被称为主题&#xff0c;在 kafka 中&#xff0c;使用一个类别属性来划分消息的所属类&#xff0c;划分消息的这个类称为 topic。topic 相当于消息的分配标签&#xff0c;是一个逻辑概念。主题好比是数据库的表&#xff0…

【SpringBoot】实现一个简单的图片上传

前端上传表单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form enctype"multipart/form-data" method"post" action&q…

MCGS学习——弹框报警

弹框报警的制作流程 先绘制一个弹框窗口&#xff0c;在弹框窗口里绘制弹框标志&#xff0c;记得绘制完成之后点击合成单元&#xff0c;此外&#xff0c;打开报警信息按钮中是打开报警界面 绘制好之后&#xff0c;如果我们想让弹窗出现在我们想让他出现的位置&#xff0c;那我…

Likeshop回收租赁系统:回收租赁超方便!

尊敬的各位&#xff0c;很高兴有机会向大家介绍一款备受瞩目的系统——全新的Likeshop回收租赁系统。 无论是电子产品、衣服还是书本&#xff0c;越来越多人选择在二手平台上进行交易或租用&#xff0c;商品回收、租赁的需求越来越大&#xff0c;很多想入场的兄弟们都苦于没有…

(分享)一个图片添加水印的小demo的页面,可自定义样式

有时候想给某张图片添加一个自己的水印&#xff0c;但是又懒的下载相应软件&#xff0c;用js canvas制作一个静态页面&#xff0c;对于单张图片添加自定义文字水印&#xff0c;大小 间距&#xff0c;角度可调。 页面如下&#xff1a; 选择图片&#xff0c;设置相应参数&#x…

公众号超牛鼻的爆文仿写机器人,原创三篇只需6分钟,篇篇是爆文基因

大家好&#xff0c;我是大胡子&#xff0c;专注于RPA提效​&#xff0c;今天就介绍一款公众号超牛鼻的爆文仿写机器人​。 和以前的公众号爆文机器人不太一样&#xff0c;以前的爆文机器人需要手动插入图片、添加封面、插入话题&#xff0c;然后今天这个机器人就完全解决这几个…

代码随想录算法训练营第五十五天|583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 刷题https://leetcode.cn/problems/delete-operation-for-two-strings/description/文章讲解https://programmercarl.com/0583.%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C.html视频讲解https://…

Python装饰器教学

Python装饰器教学 一、装饰器简介 在Python中&#xff0c;装饰器是一种高级语法特性&#xff0c;允许你修改或增强函数、方法或类的行为&#xff0c;而无需修改其源代码。装饰器本质上是一个接受函数作为参数的函数&#xff0c;并返回一个新的函数对象。 二、装饰器的基本用…

详解:写作和赚钱的 4 个关系!看完你一定会忍不住想开始写!

飞书文档的加密很强&#xff0c;也没有和自家的豆包大模型融合&#xff0c;所以只能通过其他方式获取文档的内容。 &#xff08;1&#xff09;将飞书文档转换为PDF&#xff0c;要用到浏览器插件&#xff1a; GoFullPage - Full Page Screen Capture - Microsoft Edge Addons …