电机三环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控制器各校正环节 ...
随机推荐
- CF809E题解
给定一个排列 \(a_i\) 和一棵树,求: \[\frac 1 {n(n-1)}\sum_{i=1}^n\sum_{j=1}^n \varphi(a_i \times a_j) \times dis ...
- ArcGIS进行视域分析及地形图制作
问题说明 开发商要在本区域建造观景亭,希望在观景亭上能看到优美的景色.根据提供的数据,完成以下要求. 一. 数据说明(见"题目3"文件夹) 1. DEM.tif:研究区域的数据高 ...
- Net中事件的用法之二
1.委托与事件的区别 事件对权限做了控制 1.委托可以直接调用 事件不可以直接调用 2.委托允许外面直接赋值 事件不允许外面直接赋值 2.事件与委托的实例比较 using System; using ...
- 阿里云服务器搭建vulhub靶场
阿里云服务器搭建vulhub靶场 环境 服务器:阿里云服务器 系统:centos7 应用:vulhub 步骤 vulhub需要依赖docker搭建,首先安装docker. 使用以下方法之一: # cu ...
- web服务器-nginx配置文件
web服务器-nginx配置文件 一 nginx配置文件 #启动子进程程序的默认用户 #user nobody #一个主进程和多个工作进程.工作进程是单进程的,且不需要特殊授权即可运行:这里定义的是工 ...
- 线程 Threading
import time from threading import Thread def func(): while True: time.sleep(0.5) print(123) def func ...
- 罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程
罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程 为了帮助同学们更好地参与开源,Casbin 决定做一期访谈节目,由小编作为一名开源初学者,用访谈的形式与北京大学工学博士.Casbin作者.Npca ...
- sql注入之查询方式及报错注入
当进行sql注入时,有很多注入会出无回显的情况,其中不回显的原因可能是sql语句查询方式的问题导致的,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知器sqkl语句 ...
- 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...
- 哪一个List实现了最快插入?
LinkedList和ArrayList是另个不同变量列表的实现.ArrayList的优势在于动态的增长数组,非常适合初始时总长度未知的情况下使用.LinkedList的优势在于在中间位置插入和删除操 ...