电机三环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控制器各校正环节 ...
随机推荐
- vue+echarts可视化大屏,全国地图下钻,页面自适应
之前写过一篇关于数据大屏及地图下钻的文章 https://www.cnblogs.com/weijiutao/p/13977011.html ,但是存在诸多问题,如地图边界线及行政区划老旧,无法自适应 ...
- np.vectorize()和crosstab()和pivotTab()函数解释
numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None) Parameter ...
- LGP6442题解
和SP13106是双倍经验哦 我们首先发现 \(m=20\),所以一言不合先状压. 然后发现状压了之后我们实际上要求的是有多少个子集按位或的值为全集,相当于求有多少个子集按位与的值为 \(0\).(把 ...
- html 两个并列div样式
1.html 代码 <html> <head> <link rel="stylesheet" href="cs2.css"> ...
- java反射获取类的成员函数,成员变量,构造函数
package com.imooc.reflect;import javax.sound.midi.Soundbank;import java.lang.reflect.Constructor;imp ...
- UIautomatorviewer连接设备报错Unexpected error while obtaining UI hierarchy
先来看下现象哈,点击sdk/tools下uiautomatorviever.bat,点击连接设备的图标,本以为就这么简单,那你就错了: 是不是看到这个瞬间心情就不好了,那么我们该怎么解决这个问题呢,归 ...
- DDOS流量攻击
0x01 环境 包含2台主机 attact 作为攻击方,使用Centos7.2 windows_server ,用于被攻击,同时抓包分析流量 ,任意版本均可.安装wireshark,用于抓包 0x02 ...
- winform 学习之qq邮箱正则验证及常用正则
这段时间一直再做winform相关的项目,记录了一些东西 qq邮箱正则表达式: 第一种:字母和数字组合邮箱判断 string str = "justin1107@qq.com"; ...
- BUAA_DS_聊聊链表
幸福穿着节日的盛装欢迎你. --威廉•莎士比亚<罗密欧与朱丽叶> 1. 说在前面 大家在学数组的时候小脑瓜里有没有这样的疑惑:为什么数组必须是定长的?为什么数组开太长会编译错误?数组越界为 ...
- 有标号DAG计数(生成函数)
有标号DAG计数(生成函数) luogu 题解时间 首先考虑暴力,很容易得出 $ f[ i ] = \sum\limits_{ j = 1 }^{ i } ( -1 )^{ j - 1 } \bino ...