一、伺服电机的双环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大的时候,目标范围附近高频抖动,对误差敏感。

对于速度环和角度环的关系可以是通过减速比和电机的转矩来解释。

减速比,即减速装置的传动比,是传动比的一种,是指减速机构中瞬时输入速度与输出速度的比值,用符号“i”表示。
一般减速比的表示方法是以1为分母,用 “:” 连接的输入转速和输出转速的比值,如输入转速为1500r/min,输出转速为25r/min,那么其减速比则为:i = 60:1。一般的减速机构减速比标注都是实际减速比,但有些特殊减速机如摆线减速机或者谐波减速机等有时候用舍入法取整,且不要分母,如实际减速比可能为28.13,而标注时一般标注28。

二、伺服电机的三环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控制及调试经验的更多相关文章

  1. 两轮自平衡小车双闭环PID控制设计

                                                                                            两轮自平衡小车的研究意义 ...

  2. SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  3. PID控制最通俗的解释与PID参数的整定方法

    转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...

  4. STM32—PID控制在直流电机中的应用

    文章目录 一.PID控制算法 1.什么是PID 2.PID系数的理解 Ⅰ.比例(P)部分 Ⅱ.积分(I)部分 Ⅲ.微分(D)部分 3.PID的数字化处理 二.位置闭环控制 三.速度闭环控制 一.PID ...

  5. (转)CMOS Sensor的调试经验分享

    CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一些调试经验. 首先,要认识CMOS摄像头的结构.我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头.感应器和图像信号处 ...

  6. CMOS Sensor的调试经验分享

    转自:http://bbs.52rd.com/forum.php?mod=viewthread&tid=276351 CMOS Sensor的调试经验分享 我这里要介绍的就是CMOS摄像头的一 ...

  7. CMOS Sensor的调试经验分享【转】

    转自:https://blog.csdn.net/yapingmcu/article/details/37817727 转自:http://bbs.52rd.com/forum.php?mod=vie ...

  8. PID控制及整定算法

    一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...

  9. 经典PID控制及应用体会总结

    经典PID控制及应用体会总结 PID控制原理 PID是一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制方案: 重点关注相关算法是如何对偏差进行处理的: PID控制器各校正环节 ...

随机推荐

  1. BeautifulSoup图片爬取

    ------------恢复内容开始------------ BeautifulSoup介绍: 简单来说,Beautiful Soup 是 python 的一个库,最主要的功能是从网页抓取数据.官方解 ...

  2. Scipy的stats模块包含了多种概率分布的随机变量,随机变量分为连续和离散两种。+忽略程序中警告信息+np.newaxis解释

  3. 基于python 实现冒泡排序算法

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/11/17 14:42 # @Author : gylhaut # @Site ...

  4. oracle数据库导入导出语句

    一.导出: 导出语句: expdp sanyayun/sanyayun@syerpdb directory=DMP dumpfile=fooderp.dmp content=all SCHEMAS=s ...

  5. java-数据类型拓展

    import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;public class Demo03 { public static ...

  6. JavaWeb——Tomcat使用

    官方下载地址:https://tomcat.apache.org/download-90.cgi 选择安装包: 64-bit Windows zip (pgp, sha512) 注:tar.gz后缀的 ...

  7. S7-1200在博途V16中新建数据块(DB)

    硬件环境: S7-1200 CPU V4.4(6ES7 212-1AE40-0XB0) 软件环境: (1)Windows 10 Professional SP1 64位 (2)STEP7 V16 SP ...

  8. 反射操作dll类库之普通类和各种方法调用

    一.使用方法 查找DLL文件, 通过Reflection反射类库里的各种方法来操作dll文件 二.步骤 加载DLL文件 Assembly assembly1 = Assembly.Load(" ...

  9. RPC框架 和 fegin原理

    打个比方,你有一些想法,你把他们变成文字写在信纸上,这是http 你把这个信纸塞进信封,这个信封是tcp 你把这个信封写上地址交给邮局,这地址是IP 一层套一层 会话层,表示层,应用层归到一起  就是 ...

  10. 请简述下你在哪些场景下会选择 Kafka?

    日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop.HBase.Solr等. 消息系统:解耦和生产者和消费者.缓 ...