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

平衡车 -- 倒立摆

🌈个人主页:羽晨同学

💫个人格言:“成为自己未来的主人~” 

串级PID

串级PID的参数整定方法

代码

我们对单片机的前面部分的实现新建两个文件。

#include "app_control.h"
static PID_TypeDef pid_theta;//θ环的PID控制器
static PID_TypeDef pid_theta_dot;//θ点环的PID控制器
//
// @简介: 负责初始化平衡车控制系统
//
void App_Control_Init(void)
{PID_Init(&pid_theta,4.0f,0.0f,0.0f);//初始化θ环PIDPID_Init(&pid_theta_dot,10.0f,10.0f,0.0f);//初始化θ点环PID
}
//
// @简介: 平衡车控制系统的进程函数
//
void App_Control_Proc(void)
{}

然后我们根据上面的示意图对这个进程函数进行完善

static const float g = 9.8;
static const float lp = 0.0625;
//
// @简介: 平衡车控制系统的进程函数
//
void App_Control_Proc(void)
{PERIODIC(5) //控制程序每5ms执行一次// #1. 将外环的设定值SP设置为0PID_ChangeSP(&pid_theta,0);// #2. 读取传感器的数据float theta = App_MPU6050_GetPitch()*0.0174533;//单位radfloat theta_dot  =App_MPU6050_GetGx()*0.0174533;//单位rad// #3. 计算外环PID的输出float theta_dot_ref = PID_Compute(&pid_theta,theta);// #4. 改变内环的设定值SPPID_ChangeSP(&pid_theta_dot,theta_dot_ref);// #5. 计算内环PID的输出float theta_dot_dot_ref = PID_Compute(&pid_theta_dot,theta_dot);// #6. 倒立摆的逆解算float x_dot_dot_ref = (g*qsin(theta) - theta_dot_dot_ref*lp)/qcos(theta);}
//
// @简介: 平衡车控制系统的进程函数
//
void App_Control_Proc(void)
{PERIODIC(5) //控制程序每5ms执行一次// #1. 将外环的设定值SP设置为0PID_ChangeSP(&pid_theta,0);// #2. 读取传感器的数据float theta = App_MPU6050_GetPitch()*0.0174533;//单位radfloat theta_dot  =App_MPU6050_GetGx()*0.0174533;//单位rad// #3. 计算外环PID的输出float theta_dot_ref = PID_Compute(&pid_theta,theta);// #4. 改变内环的设定值SPPID_ChangeSP(&pid_theta_dot,theta_dot_ref);// #5. 计算内环PID的输出float theta_dot_dot_ref = PID_Compute(&pid_theta_dot,theta_dot);// #6. 倒立摆的逆解算float x_dot_dot_ref = (g*qsin(theta) - theta_dot_dot_ref*lp)/qcos(theta);// #7. 计算轮胎转速omega_ref += 1.0f/rw * x_dot_dot_ref * 0.005;// #8. 设置轮胎的转速App_Motor_SetOmega_L(omega_ref);App_Motor_SetOmega_R(omega_ref);
}


文章转载自:

http://AtvwSd26.tzkrh.cn
http://CXz2UhLJ.tzkrh.cn
http://TeIEZjy2.tzkrh.cn
http://NVg03bzd.tzkrh.cn
http://iXl60gnc.tzkrh.cn
http://HgNhLYT1.tzkrh.cn
http://YqxENnWq.tzkrh.cn
http://5seMPfCJ.tzkrh.cn
http://xjd5Bm4d.tzkrh.cn
http://zx1As6K2.tzkrh.cn
http://V4I2c4rT.tzkrh.cn
http://UhVM8rn1.tzkrh.cn
http://06vMOhQ4.tzkrh.cn
http://mSIzzd3n.tzkrh.cn
http://3C2uJzcw.tzkrh.cn
http://YhuTSRKW.tzkrh.cn
http://0yz2ibjw.tzkrh.cn
http://UfdFjXFl.tzkrh.cn
http://JUkrFEY6.tzkrh.cn
http://Aknj4LMd.tzkrh.cn
http://opOC2ZPQ.tzkrh.cn
http://gGAT1I87.tzkrh.cn
http://FJREh6sl.tzkrh.cn
http://W4fnhicg.tzkrh.cn
http://Tsgu2xjk.tzkrh.cn
http://hZfI0j1g.tzkrh.cn
http://KsEVEzri.tzkrh.cn
http://WYNA2D3u.tzkrh.cn
http://PDT7gics.tzkrh.cn
http://3R3nuJDH.tzkrh.cn
http://www.dtcms.com/a/377006.html

相关文章:

  • 利用OpenCV实现模板与多个对象匹配
  • 机器学习的发展与应用:从理论到现实
  • 软考系统架构设计师之软件系统建模
  • leedcode 算法刷题第三十一天
  • IDEA下载安装图文教程(非常详细,适合新手)
  • Spark 性能优化全攻略:内存管理、shuffle 优化与参数调优
  • 老味道私房菜订餐系统的设计与实现(代码+数据库+LW)
  • 古董装载优化:30秒破解重量限制
  • Vue2手录02-指令
  • 爬虫逆向之瑞数6案例(深圳大学某某附属医院)
  • AWK工具使用与技巧指南
  • Java程序员职业发展路径与转型选择分析报告(2025年)
  • 资产管理软件哪家口碑好
  • 【实战中提升自己完结篇】分支篇之分支之无线、内网安全与QOS部署(完结)
  • 【Qt】PyQt、原生QT、PySide6三者的多方面比较
  • 多级缓存架构
  • 多模态对齐与多模态融合
  • 【MySQL】常用SQL语句
  • 教师节组诗-我不少年师已老,无报师恩仅遥忆
  • 手把手带你推导“逻辑回归”核心公式
  • 当按摩机器人“活了”:Deepoc具身智能如何重新定义人机交互体验
  • solidity得高级语法3
  • PLM 与机器视觉协同:三维模型驱动自动光学检测标准制定
  • vuecli中使用splitchunksplugin提取公共组件,vue单组件使用less scoped处理style,打包会有css顺序冲突警告
  • 元宇宙与旅游产业:沉浸式体验重构旅行全流程
  • 城市道路落叶清扫机设计【三维SW模型】【含9张CAD
  • apache poi 导出复杂的excel表格
  • 海外盲盒APP开发:如何用技术重构“惊喜经济”
  • Linux快速安装JDK1.8
  • 高可用消息队列线程池设计与实现:从源码解析到最佳实践