写在前面:本文主要介绍自制简易无人机两轴云台的串级pid控制系统的设计思路,有关机械结构等其他内容不做赘述

一.云台硬件组成
二.串级pid控制系统设计
三.C程序实现

一.云台硬件组成

两轴云台所需要的用的硬件有
1.两个直流无刷电机:分别做云台的yaw轴与pitch轴的执行机构。
2.主控板:这里选用stm32f1r8(一般的32芯片的性能都足以支撑此开发)。
3.陀螺仪:用作角速度反馈,这里选用mpu6050足够。
4.编码器:用作角度反馈,这里使用直流无刷电机自带的编码器,优点是误差较小且驱动方便。

二.串级pid控制系统设计

硬件平台搭好之后,那么进入正题。

自稳云台的重点在于自稳,何谓自稳呢?就是在人工不干预或受到一定的扰动的情况下,云台仍能保持着一定的姿态。如何实现自稳呢?这就需要依赖于pid控制器的帮助。

用的最为广泛且发展最成熟的控制器毫无疑问是pid控制,可是pid控制器也可以分为很多类别,这其中我们最为熟知的就是单回路pid控制,而串级pid控制,顾名思义就是两个单回路pid控制系统互相嵌套形成的pid控制器,是在简单pid上发展起来的,与简单pid控制器相比,串级控制系统的控制质量有显著的提高。

以下为本云台设计的串级pid控制模型

这一控制流程可以通过分析云台从“垂头丧气地耷拉”到“精神抖擞地挺立”经历的“艰难险阻”以一探究竟
1.电机没有电流值输入的情况时,两个电机无力矩作用,云台垂头丧气地埋着头,这时,你希望电机可以达到一定的角度并保持不动(即流程图中的期望角度)让云台抬起头,而电机编码器反馈回来的角度值与你期望的角度值一定是有差距的,这个差距就是角度误差(且在此时角度误差最大)。

2.角度误差形成后,电机则需要转动去缩小这个误差,既然要转动必然要有转动角速度,有了期望角度,那么期望角速度如何给定呢?不需要我们自己去给定,让角度PID控制器帮我们实现,如图,就是用角度误差作为角度PID控制器的输入值,输出值作为期望的角速度值。
这一过程也很好地体现了串级pid控制系统的最大的优势,即通过一个控制量去自动控制另外一个控制量。当角度误差较大时,那么期望的角速度也大,调节速度就很快,反之,云台到达期望位置时,角度误差几乎为0,那么期望角速度也为0,云台保持不动。

3.有了期望的角速度值,那么我们就只要利用这个值去驱动电机即可,而此角速度值一般较小,若直接作为驱动电机电流值就较小,所以一般用角速度PID控制器的P环节对此值做放大(也有可能缩小,具体依照程序实现)。经过角速度PID控制器的值可以用于驱动电机以改变云台姿态。

4.云台姿态在不断地改变,于是陀螺仪与编码器作为传感反馈的重要作用便体现出来,不断地反馈电机的角度值和角速度值,如此便形成了闭环,即为上图所示的控制流程图。

三.程序设计

角度环与角速度环pid控制器实现
以下两段程序是角度环程序实现
两个电机编码器反馈回电机角度在程序中即为motor_info[0].rotor_angle与motor_info[1].rotor_angle)
输入电机角度设定值(程序中为2250与2400)

pid_calc(&yaw_Angle_pid  ,2250,motor_info[0].rotor_angle);
pid_calc(&pitch_Angle_pid ,2400,motor_info[1].rotor_angle);

以下两段程序是角度环程序实现
由陀螺仪反馈回yaw轴以及pitch轴的角速度在程序中即为Speed_yaw和Speed_pit)
输入设定值即为角度环输出 (程序中为yaw_Angle_pid.output与pitch_Angle_pid.output)

pid_calc(&yaw_speed_pid  ,yaw_Angle_pid.output,Speed_yaw);
pid_calc(&pitch_speed_pid,pitch_Angle_pid.output,Speed_pit);

其中yaw_Angle_pid与pitch_Angle_pid分别为yaw轴与pitch轴的角度pid控制器结构体,yaw_speed_pid与pitch_speed_pid分别为yaw轴与pitch轴的角速度pid控制器结构体
附:程序中用到的pid控制器计算函数与pid控制器参数结构体如下
(1)pid控制器参数结构体

typedef struct _pid_struct_t
{float kp;float ki;float kd;float i_max;float out_max;float ref;      // target valuefloat fdb;      // feedback valuefloat err[2];   // error and last errorfloat p_out;float i_out;float d_out;float output;
}pid_struct_t;

(2)pid控制器计算函数

float pid_calc(pid_struct_t *pid, float ref, float fdb)    //
{pid->ref = ref;  //设定值pid->fdb = fdb;  //反馈值pid->err[1] = pid->err[0];           //err[0]为当前误差pid->err[0] = pid->ref - pid->fdb;   //err[1]为上一次误差pid->p_out  = pid->kp * pid->err[0];                   //p控制器pid->i_out += pid->ki * pid->err[0];                    //I控制器pid->d_out  = pid->kd * ( pid->err[0] - pid->err[1] );  //D控制器LIMIT_MIN_MAX(pid->i_out, -pid->i_max, pid->i_max);     //此函数用于过滤由于扰动造成的过大或过小值pid->output = pid->p_out + pid->i_out + pid->d_out;     //pid控制器输出LIMIT_MIN_MAX(pid->output, -pid->out_max, pid->out_max);return pid->output;
}

需要stm32源程序或有指正意见的朋友可评论或私聊交流!

基于串级pid控制系统的两轴无人机云台设计相关推荐

  1. 基于数据融合和串级PID的小型四旋翼无人机高度测量与控制系统

    作者:Tomy 摘要:简单介绍了一种基于 Mahony 算法无人机姿态解算算法,并在这个的基础上设计了一 种融合惯导加速度计和气压计的小型无人机高度测量系统, 同时利用该高度测量系统设计了 基于串级 ...

  2. 基于串级PID的直立车控制算法研究

    徐厚华 何哲嘉 向颖锋 2020-10-31 Saturday 00摘要   直立平衡车因其动力学系统同时具有多变量,非线性,不稳定,强耦合等特性,传统的单环PID控制平衡已经略显吃力.本文将采用内环 ...

  3. 基于串级PID的箱体自动恒温控制系统

    目 录 引言 1 1 系统整体框架 2 1.1系统设计要求 2 1.2系统设计思路 2 1.3 驱动器方案介绍 3 1.3.1 PWM脉冲宽度调制原理介绍 3 1.3.2 PID自动控制算法介绍 3 ...

  4. 基于串级PID的平衡小车

    一般的平衡小车是以速度环为外环,外环输出作为内环角度输入的反馈,与期望角度叠加,通过角度的浮动控制实现速度闭环,本次平衡小车结合了四轴无人机的串级PID 方法,引入角速度环,方便参数调节.主控采用st ...

  5. 基于串级 PID 控制算法的四旋翼无人机控制系统设计与实现

    1.内容简介 略 489-可以交流.咨询.答疑 2.内容说明   无人机,英文名称UAV C Unmanned Aerial Vehicle,是一种特殊的飞行器, 可以按照预先设定的轨迹进行各种运动, ...

  6. 串级PID的直立控制

    基于串级PID的直立车控制算法研究 摘要:直立平衡车因其动力学系统同时具有多变量,非线性,不稳定,强耦合等特性,传统的单环PID控制平衡已经略显吃力.本文将采用内环角速度PI控制.外环角度PD控制及最 ...

  7. PID超详细教程——PID原理+串级PID+C代码+在线仿真调参

    目录 前言 仿真调参环境 案例引入--小球位置控制 抛开案例--更专业地理解PID 由虚到实--代码编写 最后一步--PID参数调整 总结--使用PID的步骤 更进一步--串级PID 前言 很多人应该 ...

  8. 对串级PID控温算法的解析

    ​​​​​​​目录 前言 单级PID 串级PID 系统分析 算法分析 总结 前言 笔者在做项目的过程中,需要对一个目标物体做精确控温,精度要求±1℃,需要在两分钟内使用电阻发热贴将温度由20控制到41 ...

  9. PID算法(三)串级PID

    串级PID 如果说前一次的衍生PID,是在基础PID算法的横向上变形的话,那本片的串级PID就是在基础PID的算法上,做纵向的嵌套. 与单级PID的不同 与单级PID不同的是,串级PID,需要两个实际 ...

  10. 基于大疆RM3508电机的串级PID(角度环+速度环)

    1.前言 最近参加ROBOCON,我负责编写传球机器人,由于传球机构需要一个电机转固定角度来带动球,所以便用大疆3508电机通过串级PID来实现,不得不说3508电机还是真的强,先看一下效果吧. 视频 ...

最新文章

  1. 使用Redis存储Nginx+Tomcat负载均衡集群的Session
  2. python3 collections模块_Python3之collections模块
  3. pytorch 预处理
  4. 读取excel文件内容代码
  5. CSS和JavaScript在线代码压缩工具推荐
  6. Hadoop_NameNode_代码分析_目录树(2)
  7. codefoces 939E Maximize!好题
  8. 第一次连接mysql失败_MySQL 远程连接失败
  9. 在linux中添加字体
  10. LIBRARY_PATH和LD_LIBRARY_PATH
  11. .net反编译工具reflector5.0 的介绍及使用
  12. 微pe不识别nvme固态硬盘_微pe工具箱2.0下载|微PE2.0支持注入NVMe固态硬盘M2SSD驱动版 下载_当游网...
  13. matplotlib绘制圆饼图
  14. VC密码正确无法登陆。证书过期。处理。
  15. mysql中的order语句_【MySql】1.2 mysql中 Order By 语句的用法
  16. oracle 统计标准误差,标准偏差和标准误差的区别
  17. JavaScript系列---for循环(打印星星)
  18. ATS667LSG:真零速、高精度齿传感器 IC
  19. ubuntu 16.04怎么更改文件夹里面所有子文件权限
  20. 2021Java高级面试题,剖析Java开发未来的出路在哪里

热门文章

  1. mysql5.7 jmeter_JMeter5连接Mysql数据库
  2. C#导入有道词典单词本到扇贝
  3. MODIS R包下载数据
  4. Reeder 5 for Mac(RSS阅读器)
  5. 地球上最厉害的字体:Helvetica
  6. Debian上如何打开关闭端口
  7. Linux与网络基础知识
  8. Python实时爬取斗鱼弹幕
  9. stm32+ucos,si4438调试
  10. 职业技能鉴定 八大工种 广州紧缺工种 培训考证