电机三环pid控制及调试经验
一、伺服电机的双环pid
双环pid在正常底盘运动的控制中已经足够了,但是对于双轴云台的控制来说,双环pid的云台控制的响应速度是远远不够的,所以加入了电流环的控制。
两篇大佬的文章——这是我学习pid和电机控制的入门
https://www.cnblogs.com/sasasatori/p/12227708.html
https://www.cnblogs.com/sasasatori/p/11672918.html
双环pid
之前对电双环pid的调试,总结了一些经验。
当时的理解比较粗浅,对于电机的理解就只是会转的电机。
现在我对pid的理解大概是:
比例P-基础运行能力。
Kp小的时候不能达到目标,Kp大的时候会超出目标,也就是超调。
积分I-补足Kp的问题,对于小的偏差量有效果。
当Ki小的时候不能达到目标,即小的偏差量不能回正,当Ki大的时候,会超出目标,系统表现迟钝。
微分D-阻止超出目标。
当Kd小的时候会超出目标,当Kd大的时候,目标范围附近高频抖动,对误差敏感。
对于速度环和角度环的关系可以是通过减速比和电机的转矩来解释。
二、伺服电机的三环pid——电流环
电机的电流环作为最内环,角度环(位置环)作为最外环。
将电机角度环计算的输出作为电机速度环的期望,将电机速度环的输出作为电流环的期望。
1 void Yawcontrol()
2 {
3
4 Motor_SetAngleFdb(&Motor_Yaw,Motor_Yaw.encoder.consequent_angle);//反馈
5 Motor_SetSpeedFdb(&Motor_Yaw,IMU.IMUdata.SpeedYaw);
6 //角度环和速度环
7 Motor_SetMotorRef(&Motor_Yaw, Slope_CalcSlopeRef(Motor_Yaw.pid[1].fdb,0, &Slope_paraYaw));
8 Motor_CalcSelfMotorOutput(&Motor_Yaw);
9 //电流环
10 PID_SetRef(&Motor_Yaw.pid[2],Motor_Yaw.pid[0].output);
11 PID_SetFdb(&Motor_Yaw.pid[2],Motor_Yaw.encoder.current);
12 PID_Calc(&Motor_Yaw.pid[2],&Motor_Yaw.pid_param[2]);
13
14 /*电机输出*/
15 Motor_SetMotorOutput(&Motor_Yaw, -Motor_Yaw.pid[2].output);
16 }
17
18 /**
19 * @brief 设置电机PID目标值
20 * @param pmotor: 指向电机对象的指针
21 * @param ref: 目标值
22 * @retval 无
23 */
24 void Motor_SetMotorRef(Motor_t* pmotor, float ref) {
25 if ( pmotor->pid_type == MOTOR_PID_NONE) return ;
26 if ( pmotor->pid_type == MOTOR_PID_SPEED) {
27 PID_SetRef(&(pmotor->pid[0]), ref);
28 }
29 else if (pmotor->pid_type == MOTOR_PID_ANGLE) {
30 PID_SetRef(&(pmotor->pid[1]), ref);
31 }
32 }
33
34 void PID_Calc(PID_PIDTypeDef* pid, PID_PIDParamTypeDef* pparam) {
35 float dError,Error;
36
37 Error = pid->ref - pid->fdb; //计算误差
38 pid->sum = pid->sum + Error; //累积误差
39 pid->err_last = pid->err; //更新结构体历史误差
40 pid->err = Error; //更新结构体误差
41 dError = pid->err - pid->err_last; //计算微分
42
43 //积分限幅
44 pid->sum = limit(pid->sum, pparam->sum_max,-pparam->sum_max);
45
46 //计算输出
47 pid->output = pparam->kp * Error + pparam->ki * pid->sum + pparam->kd * dError;
48
49 //输出限幅
50 pid->output = limit(pid->output, pparam->output_max, -pparam->output_max);
51 }
三.三环pid调试经验
清明假期进行了哨兵云台pitch轴三环pid的调试,开始的时候因为速度环的Kp给的过大导致电机发生抖动,有响声。但是在这种情况下pitch轴还是比较软,最后减小的速度环的Kp,加大了电流环的Kp,最终实现了在保证电机响应和角度闭环足够的情况下,尽量减小因为抖动产生的响声。
电机三环pid控制及调试经验的更多相关文章
- 两轮自平衡小车双闭环PID控制设计
两轮自平衡小车的研究意义 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- PID控制最通俗的解释与PID参数的整定方法
转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...
- STM32—PID控制在直流电机中的应用
文章目录 一.PID控制算法 1.什么是PID 2.PID系数的理解 Ⅰ.比例(P)部分 Ⅱ.积分(I)部分 Ⅲ.微分(D)部分 3.PID的数字化处理 二.位置闭环控制 三.速度闭环控制 一.PID ...
- (转)CMOS Sensor的调试经验分享
CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处 ...
- CMOS Sensor的调试经验分享
转自:http://bbs.52rd.com/forum.php?mod=viewthread&tid=276351 CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一 ...
- CMOS Sensor的调试经验分享【转】
转自:https://blog.csdn.net/yapingmcu/article/details/37817727 转自:http://bbs.52rd.com/forum.php?mod=vie ...
- PID控制及整定算法
一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...
- 经典PID控制及应用体会总结
经典PID控制及应用体会总结 PID控制原理 PID是一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制方案: 重点关注相关算法是如何对偏差进行处理的: PID控制器各校正环节 ...
随机推荐
- vue3-异步组件的使用
我们通常会在实际开发中,将项目进行分包处理,以此加快项目的速度 即使用异步组件 //异步组件,分包处理 import {defineAsyncComponent} from "vue&quo ...
- 分布式 PostgreSQL 集群(Citus)官方安装指南
单节点 Citus Docker (Mac 与 Linux) Docker 镜像仅用于开发/测试目的, 并且尚未准备好用于生产用途. 您可以使用一个命令在 Docker 中启动 Citus: # st ...
- GitLab 常用命令
1. 进入本地仓库访问位置之后执行命令 1) 远程仓库相关命令检出仓库:$ git clone git://github.com/jquery/jquery.git查看远程仓库:$ git remot ...
- java垃圾处理机制
java文件通过编译器(javac命令)生成class文件(字节码文件),其通过java命令启动虚拟机将字节码文件转换成平台能够理解的方式运行. 类存在于源文件里面,方法存在于类中,语句存在与方法中. ...
- web自动化之svg标签定位
今天在定位元素的时候,发现页面有一个svg标签需要进行定位. 于是便使用常规的xpath定位方法试了一下,很明显结果是不行的,哈哈哈... 错误定位方法://div[@class="oper ...
- 【文件系统】dumpe2fs命令
dumpe2fs - dump ext2/ext3/ext4 filesystem information dumpe2fs prints the super block and blocks gro ...
- CVE-2015-5531(目录遍历漏洞)
vulhub漏洞环境搭建 https://blog.csdn.net/qq_36374896/article/details/84102101 启动docker环境 cd vulhub-master/ ...
- 学习SpringMVC必知必会(3)~springmvc的请求和响应
一.处理器方法响应处理 ▷ Controller方法该怎么返回.Controller数据该怎么进行共享 返回void/ModelAndView/String 1.Controller方法返回void ...
- Java 中 sleep 方法和 wait 方法的区别?
虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件 ...
- 客户端回调 Watcher ?
客户端 SendThread 线程接收事件通知,交由 EventThread 线程回调 Watcher. 客户端的 Watcher 机制同样是一次性的,一旦被触发后,该 Watcher 就失效了.