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

位置式PID-控制步进电机-位置环-stm32

基本原理

1、软件设计

本闭环控制例程是在步进电机编码器测速例程的基础上编写的,这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到,完整的代码请参考本章配套的工程。 我们创建了4个文件:bsp_pid.c和bsp_pid.h文件用来存放PID控制器相关程序,bsp_stepper_ctrl.c、bsp_stepper_ctrl.h 文件用来存步进电机位置环控制程序及相关宏定义。

1. 编程要点
  1. 定时器 IO 配置

  2. 步进电机、编码器相关外设初始化

  3. 位置闭环控制实现

  4. PID参数整定

代码分析

PID代码

/********************************************************************************* @file    main.c* @author  fire* @version V1.0* @date    2019-xx-xx* @brief   PID算法实现******************************************************************************* @attention** 实验平台:野火  STM32 F103 开发板 * 论坛    :http://www.firebbs.cn* 淘宝    :http://firestm32.taobao.com********************************************************************************//* Includes ------------------------------------------------------------------*/
#include "./pid/bsp_pid.h"
#include "math.h"
#include "./stepper/bsp_stepper_ctrl.h"
#include "./protocol/protocol.h"
/* 定义全局变量 */
_pid pid;
float set_point=0.0;
int pid_status=0;/*** @brief  PID参数初始化*	@note 	无* @retval 无*/
void PID_param_init()
{/* 初始化参数 */pid.target_val=0.0;				pid.actual_val=0.0;pid.err=0.0;pid.err_last=0.0;pid.integral=0.0;pid.Kp = 1.3;pid.Ki = 0;pid.Kd = 0;#if PID_ASSISTANT_ENfloat pid_temp[3] = {pid.Kp, pid.Ki, pid.Kd};set_computer_value(SEND_P_I_D_CMD, CURVES_CH1, pid_temp, 3);// 给通道 1 发送 P I D 值#endif
}/*** @brief  设置目标值* @param  val		目标值*	@note 	无* @retval 无*/
void set_pid_actual(float temp_val)
{pid.target_val = temp_val;    // 设置当前的目标值
}/*** @brief  获取目标值* @param  无*	@note 	无* @retval 目标值*/
float get_pid_a

相关文章:

位置式PID-控制步进电机-位置环-stm32

基本原理 1、软件设计 本闭环控制例程是在步进电机编码器测速例程的基础上编写的,这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到,完整的代码请参考本章配套的工程。 我们创建了4个文件:bsp_pid.c和bsp_pid.h文件用来存放PID控制器相关程序,bsp_s…...

关于Qt::BlockingQueuedConnection的死锁问题

绑定信号槽时,如果信号对象和槽对象属于不同的线程,通过Qt::BlockingQueuedConnection可以实现同步调用,即发送信号的代码等待槽函数返回才继续运行 文档的说明: Qt::QueuedConnection The slot is invoked when control returns…...

Excel for Finance 07 `FV PV` 函数

Excel 的 FV 函数用于计算一笔投资在未来的价值,基于固定的利率和定期付款。这是一个金融函数,常用来分析储蓄计划、贷款、或投资的增长。 语法: FV(rate, nper, pmt, [pv], [type])参数说明: rate(必需)&…...

驱动开发系列31 - Linux Graphics 调试 mesa 的 glDrawArrays (三)

一:概述 接着前面驱动开发系列26 - Linux Graphics 调试 mesa 的 glDrawArrays (二)-CSDN博客的文章继续分析下glDrawArrays的实现,本文介绍一下在Gallium3D HW Driver中,驱动如何将绘制命令提交给GPU执行。看下驱动层的执行逻辑:即 draw_vbo 的过程。 二:回顾下draw_vbo…...

【探花交友】day03—MongoDB基础

目录 课程介绍 1、通用设置 1.1 需求分析 1.2 查询通用设置 1.2 陌生人问题 1.3 通知设置 1.4 黑名单管理 2、MongoDB简介 1.1、MongoDB简介 1.2、MongoDB的特点 1.3 数据类型 3、MongoDB入门 2.1、数据库以及表的操作 2.2、新增数据 2.3、更新数据 2.4、删除数…...

【Vue教程】使用Vite快速搭建前端工程化项目 | Vue3 | Vite | Node.js

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🚩今天毛毛张分享的是关于如何快速🏃‍♂️搭建一个前端工程化的项目的环境搭建以及流程🌠 文章目录 1.前端工程化环境搭建&#…...

手机租赁平台开发全攻略打造高效便捷的租赁服务系统

内容概要 手机租赁平台开发,简单说就是让用户能轻松租赁各类手机的高效系统。这一平台不仅帮助那些想要临时使用高端手机的人们节省了不少资金,还为商家开辟了新的收入渠道。随着智能手机的普及,很多人并不需要长期拥有一部手机,…...

自由学习记录(31)

Java连接MySQL 找到那个关键jar包然后导入选中,就配置好MySQL的JDBC(Java Database Connectivity)了 菜单--文件--项目结构 项目设置--模块--选择要附着的项目--选择依赖--选中模块源--选中加号添加jar包 解压之后在里面可以看到这个最关键…...

【探花交友】用户登录总结

1.发送验证码 1.发送post请求 数据封装在map 获取map的手机号码 2.调用service层将手机号码 传入过去 3.正常返回状态码200 RestController RequestMapping("/user") public class LoginController {Autowiredprivate UserService userService;/*** 获取登录验证码*…...

LabVIEW声波谐振管自动化测量系统

开发了一种基于LabVIEW的声波谐振管自动化测量系统。该系统利用LabVIEW的强大功能,实现了对声波谐振频率的精确测量,提高了实验数据的采集效率和准确性。系统主要应用于物理教学和科研中,用于研究声波在谐振管中的传播特性。 项目背景 传统的…...

elasticsearch中的倒排索引

倒排索引是搜索引擎中常用的一种数据结构,适用于全文检索,能够通过文本内容高效检索到相应的文档。 一、倒排索引的基本概念 正排索引:传统的索引方式,按照文档id顺序存储文档,通过文档id找到文档对应的词。因此当需…...

【Elasticsearch】DSL查询文档

目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.示例 1.2.4.总结 1.3.精准查询 1.3.1.term查询 1.3.2.range查询 1.3.3.总结 1.4.地理坐标查询 1.4.1.矩形范围查询 1.4.2.附近查询 1.5.复合查询 1.5.1.相关性算分 …...

接口测试Day04-postman生成测试报告ihrm项目

测试报告-利用newman插件 安装node.js 安装 双击 .msi 文件,一路下一步安装即可。无需特殊设定。测试安装成功 npm -v 安装npm 安装newman 安装newman npm install -g newman试安装成功 newman -v安装newman插件 - 扩展版 npm install -g newman-reporter-htmlex…...

常见的排序算法过程和比较分析

比较分析 排序类别排序算法时间复杂度(最好)时间复杂度(最坏)时间复杂度(平均)辅助空间复杂度稳定性插入排序直接插入排序O(n)O(n)O(n)O(1)稳定插入排序折半插入排序O(n)O(n)O(n)O(1)稳定插入排序希尔排序…...

基于Vue+SSM+SpringCloudAlibaba书籍管理系统

功能要求 一、登录功能(http://localhost:8080/#/login) 输入账号和密码(admin/admin)进行登录: 如果密码错误,给出提示信息 如果密码正确,跳转到主页 账号或密码错误: 账号密码正确:跳转到…...

生成式 AI 增强了个人创造力,但减少了新内容的集体多样性

创造力是人类的核心。生成式人工智能 (AI)(包括强大的大型语言模型 (LLM))有望让人类通过提供新想法来更具创造力,或者通过锚定生成式 AI 想法来降低创造力。我们在一项在线实验中研究了生成式 AI 想法对短篇小说制作的因果影响,其中一些作家从 LLM 那里获得了故事创意…...

【DC简介--Part1】

DC简介-Part1 1 overview1.1 DC操作步骤1.2 Steps1.2.1 Develop HDL files1.2.2 Specify libraries1.2.3 Read design1.2.4 Define design environment1.2.5 Set design constraints1.2.6 Select compile strategy1.2.7 Synthesize and optimize the design1.2.8 Analyze and r…...

Spark写入HDFS数据SUCCESS文件生成控制

Spark写入HDFS数据SUCCESS文件 1、_SUCCESS的控制2、_SUCCESS的实现 1、_SUCCESS的控制 与Hive不同,MapReduce和Spark在执行写入HDFS数据任务时,数据输出目录一般都会有一个名为_SUCCESS的空文件,该文件仅用来表示任务执行成功 但有些时候&a…...

MySQL 服务器简介

通常所说的 MySQL 服务器指的是mysqld程序,当运⾏mysqld后对外提供MySQL 服务,这个专题的内容涵盖了以下关于MySQL 服务器以及相关配置的内容,包括: 服务器⽀持的启动选项。可以在命令⾏和配置⽂件中指定这些选项。 服务器系统变…...

如何使用Python从SACS结构数据文件中提取节点数据信息并导出到EXCEL

在现代工程设计中,结构分析和数据处理是不可或缺的一部分。特别是在海洋工程、桥梁建设等领域,SACS文件被广泛应用。这种文件格式包含了结构模型的各种重要信息,包括节点(JOINT)、构件(ELEMENT)…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...