代码解读四 文件名“Ano_AttCtrl.c”

这部分是关于匿名串级PID的,我觉得有需要的同学可以直接移植,不需要自己写了,确实有点麻烦,基本上代码里面都注释的很清楚了,且由于本人水平有限,所以也不是都很懂,只能做到这里了。#include "Ano_AttCtrl.h"#include "Ano_Imu.h"#include "Drv_icm20602.h"#include "Ano_MagProcess.h"#include "...
摘要由CSDN通过智能技术生成

这部分是关于匿名串级PID的,我觉得有需要的同学可以直接移植,不需要自己写了,确实有点麻烦,基本上代码里面都注释的很清楚了,且由于本人水平有限,所以也不是都很懂,只能做到这里了。

#include "Ano_AttCtrl.h"
#include "Ano_Imu.h"
#include "Drv_icm20602.h"
#include "Ano_MagProcess.h"
#include "Drv_spl06.h"
#include "Ano_MotionCal.h"
#include "Ano_FlightCtrl.h"
#include "Ano_LocCtrl.h"
#include "Ano_MotorCtrl.h"




/*

在这里需要纠正一个概念,基于C语言实现的PID输出就是反馈,而基于控制系统实现的PID最终输出是作用于电机上的
即输出跟反馈并无直接联系
匿名”Ano_Pid.c“文件中PID函数有几个重要的入口参数,
期望值,反馈值,最后在结构体指针里面还有输出值。在这里,遥控器打杆值作为期望,
姿态解算测得的欧拉角作为反馈,经过PID最终输出一个不断接近我们期望的值,
通过PWM驱动电机,同时姿态改变,不断进行上述过程直至最后稳定。

*/




//1->内环即角速度环
//2->外环即角度环



//经过查看这些变量的定义发现,其是来源于”Ano_Pid.h“中的结构体,再滑到下面看到有好多个”Ano_Pid.c“
//中PID函数的引用,不难想到定义这些变量是为了给下面PID函数调用提供初始化,事实上确实是这样
//但是”Ano_Pid.c“中的PID函数除了这两个比较重要的参数外,还有PID的期望值和反馈值也很重要
//到"Ano_AttCtrl.h"中查看,果然可以看到定义有包含有期望值和反馈值的结构体,

//角度环控制参数
_PID_arg_st arg_2[VEC_RPY] ; 

//角速度环控制参数
_PID_arg_st arg_1[VEC_RPY] ;


//角度环控制数据
_PID_val_st val_2[VEC_RPY];

//角速度环控制数据
_PID_val_st val_1[VEC_RPY];


/************************************************************************
*************************************************************************
*************************************************************************
*************************************************************************
*************************************************************************
*************************************************************************/


//PIT ROW YAW 各有一套PID吗?
//初始化为下面调用”Ano_Pid.c“中的PID函数做准备
/*角度环PID参数初始化*/
void Att_2level_PID_Init()
{
	arg_2[ROL].kp = Ano_Parame.set.pid_att_2level[ROL][KP];
	arg_2[ROL].ki = Ano_Parame.set.pid_att_2level[ROL][KI];
	arg_2[ROL].kd_ex = Ano_Parame.set.pid_att_2level[ROL][KD];
	arg_2[ROL].kd_fb = Ano_Parame.set.pid_att_2level[ROL][KD];
	arg_2[ROL].k_ff = 0.0f;
	
	arg_2[PIT].kp = Ano_Parame.set.pid_att_2level[PIT][KP];
	arg_2[PIT].ki = Ano_Parame.set.pid_att_2level[PIT][KI];
	arg_2[PIT].kd_ex = Ano_Parame.set.pid_att_2level[PIT][KD];
	arg_2[PIT].kd_fb = Ano_Parame.set.pid_att_2level[PIT][KD];
	arg_2[PIT].k_ff = 0.0f;

	arg_2[YAW].kp = Ano_Parame.set.pid_att_2level[YAW][KP];
	arg_2[YAW].ki = Ano_Parame.set.pid_att_2level[YAW][KI];
	arg_2[YAW].kd_ex = Ano_Parame.set.pid_att_2level[YAW][KD];
	arg_2[YAW].kd_fb = Ano_Parame.set.p
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值