PID控制电机转速简单测试

2023-11-01 10:40

本文主要是介绍PID控制电机转速简单测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

傅里叶变换与不确定性 卓晴

速度采样频率 卓晴

在线拟合工具

新概念:积分限幅。在物理量达到期望值之前防止误差积分越来越大使得没有稳定的反而作用相反了。而有了积分限幅之后在积分误差达到幅值的时候将会保持不变,其目的是让PID控制函数不会输出一个很大的值,这样就能让物理量稳定下来。

从机

uint8_t start_flag = 0;
uint8_t finish_flag = 0;
uint8_t cnt = 0;
uint8_t data_to_receive[2];
void UART4_IRQHandler(void)
{//接收数据帧if(start_flag == 1 && finish_flag == 0) {if (cnt < 2)data_to_receive[cnt++] = USART_ReceiveData(UART4);if (cnt == 2)finish_flag = 1;}//检测是否为帧头if (start_flag == 0) {uint8_t start_byte = USART_ReceiveData(UART4);if (start_byte == 0xAA)start_flag = 1;}//检测帧尾if (finish_flag == 1) {uint8_t finish_byte = USART_ReceiveData(UART4);if (finish_byte == 0x11 && cnt == 2) {finish_flag = 0;start_flag = 0;cnt = 0;int16_t data = *((int16_t *)data_to_receive);int pwm = (int)((data + 36.705882) / 2.111569);MotorRun(data, data);}}}

主机

  1. 增加了速度方向的显示。
  2. 检测标志位来判断方向不稳定,会有毛刺出现。
    通过一个现实不可能达到的阈值来检测方向,效果不错。

开环测试PWM占空比与转速的关系

初始图像
在这里插入图片描述
提取的数据

x(非占空量)y(rps * 100)
100168
125225
150273
175331
200388
225437
250495
275552
300600
325658
350706
375760
400811
425860
450911
475965
5001005

进行线性拟合
在这里插入图片描述
函数方程表达式为: F ( x ) = 2.11156862745098 ∗ x − 36.70588235294107 F(x) = 2.11156862745098*x-36.70588235294107 F(x)=2.11156862745098x36.70588235294107
拟合误差: 0.9995420363644586 0.9995420363644586 0.9995420363644586

PID调节(速度采样和控制间隔均为20ms)

kp = 0.80, ki = 2.50, kd = 0.00, SetSpeed = 6.0
在这里插入图片描述

这篇关于PID控制电机转速简单测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺