代码拉取完成,页面将自动刷新
简介
F450
电调控制线
颜色 | 说明 |
---|---|
红色 | 5V+ |
黑色/棕色 | GND |
黄色 | 信号线 |
电调上电后会输出5V,所以红色可以不接
电调启动流程:
50HZ PWM,上电输出2ms脉宽,听到滴滴两声后改为1ms脉宽(最小量程),完成解锁,随后输入1-2ms脉宽控制电机转速。
单极PID适合线性系统,当输出量和被控制量呈线性关系时单极PID能获得较好的效果,但是四轴不是线性系统,现代学者认为,四轴通常可以简化为一个二阶阻尼系统。为什么四轴不是线性系统呢?首先,输出的电压和电机转速不是呈正比的,其次,螺旋桨转速和升力是平方倍关系,故单极PID在四轴上很难取得很好效果,能飞,但是不好飞。 为了解决这个问题,我们提出了串级PID这个解决方法。
数字 PID 控制的实现必须用数值逼近的方法.
当采样周期相当短时, 用求和代替积分, 用后向差分代替微分, 使模拟 PID 离散化变为差分方程.
数字 PID 算法总体分为位置型控制算法和增量型控制算法.
外环PID
计算被控轴( Pitch, Roll, Yaw )角度误差 (实际角度 - 期望角度)
积分项
微分项
外环输出
P
x 当前误差 + 积分系数 I
x 积分项 + 微分系数 D
x 积分项保存上一次角度值
内环PD
p
x 比例项 + 微分系数 d
x 微分项先定义结构体以及结构体指针, 把运算过程使用的大量变量封装起来, 在专属函数中对其解析和利用
typedef struct {
float InnerLast; //保存内环旧值以便后向差分
float OutterLast; //保存外环旧值以便后向差分
float *Feedback; //反馈数据, 实时的角度数据
float *Gyro; //角速度
float Error; //误差值
float p; //比例项(内环外环共用)
float i; //积分项(仅用于外环)
float d; //微分项(内环外环共用)
short output; //PID输出, 用来修改PWM值, 2字节
__IO uint16_t *Channel1;//PWM输出, 通道1
__IO uint16_t *Channel2;//PWM输出, 通道2
} pid_st, *pid_pst;
void pid_SingleAxis(pid_pst temp, float setPoint) {
temp->Error = *temp->Feedback - setPoint;
//Outter Loop PID
temp->i += temp->Error;
if (temp->i > PID_IMAX) temp->i = PID_IMAX;
else if (temp->i < PID_IMIN) temp->i = PID_IMIN;
temp->d = *temp->Feedback - temp->OutterLast;
temp->output = (short)(OUTTER_LOOP_KP * (temp->Error) + OUTTER_LOOP_KI * temp->i + OUTTER_LOOP_KD * temp->d);
temp->OutterLast = *temp->Feedback; //Save Old Data
//Inner Loop PD
temp->p = temp->output + *temp->Gyro;
temp->d = *temp->Gyro - temp->InnerLast;
temp->output = (short)(INNER_LOOP_KP * temp->p + INNER_LOOP_KD * temp->d);
if (*temp->Channel1+temp->output > THROTTLE_MAX) *temp->Channel1 = THROTTLE_MAX;
else if (*temp->Channel1+temp->output < THROTTLE_MIN) *temp->Channel1 = THROTTLE_MIN;
else *temp->Channel1 += (short)temp->output;
if (*temp->Channel2-temp->output > THROTTLE_MAX) *temp->Channel2 = THROTTLE_MAX;
else if (*temp->Channel2-temp->output < THROTTLE_MIN) *temp->Channel2 = THROTTLE_MIN;
else *temp->Channel2 -= (short)temp->output;
temp->InnerLast = *temp->Gyro;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。