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

2024-03-27 05:04

本文主要是介绍基于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;
}

这篇关于基于stm32与TJC3224T124_011串口屏的PID调参器(附完整工程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851023

相关文章

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con