基于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

相关文章

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

Python FastAPI实现JWT校验的完整指南

《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、