电机三环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控制器各校正环节 ...
随机推荐
- MySQL8.0降级安装5.7
本文旨在自我学习使用,如有任何疑问请及时联系博主 前言 基于OpenHarmony的FA数字管家服务端 默认情况下,Ubuntu20.04安装MySQL的版本为8.0.但8.0更加严格的加密规则,使得 ...
- 运营商的三大数据域——B域,O域,M域
O域(运营域).B域(业务域).M域(管理域)特指电信行业大数据领域的三大数据域. B域(业务域)= business support system的数据域, O域(运营域)= operation s ...
- crash_for_windows_pkg远程代码执行漏洞
漏洞详情 crash_for_windows_pkg由 Electron 提供支持.如果 XSS 负载以代理的名义,我们可以远程执行受害者计算机上的任何 JavaScript 代码. 受影响的冲突版本 ...
- DC-1
靶机准备 导入虚拟机设置网络为NAT kali:192.168.164.137 扫描获得靶机ip:192.168.164.182 netdiscover -r 192.168.164.0/24 渗透测 ...
- Android Studio Gradle project sync failed
使用Android Studio 1.1.0创建新项目后,运行报以下错: Error:Unable to start the daemon process. This problem might be ...
- SpringMVC 和SpringBoot中的注解是如何起作用的,如何实现的
SpringMVC源码解读 - HandlerMapping - RequestMappingHandlerMapping初始化 https://www.cnblogs.com/leftthen/ ...
- Java时间处理类LocalDate和LocalDateTime常用方法
Java时间处理类LocalDate和LocalDateTime常用方法 https://blog.csdn.net/weixin_42579074/article/details/93721757
- 解释一下Spring AOP里面的几个名词?
(1)切面(Aspect):被抽取的公共模块,可能会横切多个对象.在Spring AOP中,切面可以使用通用类(基于模式的风格)或者在普通类中以@AspectJ注解来实现. (2)连接点(Join p ...
- Java 中的同步集合与并发集合有什么区别?
同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发 集合的可扩展性更高.在 Java1.5 之前程序员们只有同步集合来用且在多线程并发 的时候会导致争用,阻碍了系统的扩展性.Jav ...
- Python - 异常处理初步