舵机的PD控制

PID

舵机以及差速PD调节

struct PID
{
    uint8 SetPoint;  //设定目标 Desired Value
    uint16 SetSpeed;
    uint16 SumError; //误差累计
    float P;   //比例常数 Proportional Const
    float I;   //积分常数 Integral Const
    float D;   //微分常数 Derivative Const
    float LastError; //Error[-1]
    float PrevError; //Error[-2]
};
struct PID sPID;
struct PID *sptr = &sPID;

void steer_PIDInit(void)   //,常用pd控制
{
    //  sptr->SumError = 0;
    sptr->LastError = 0;    //Error[-1]
    sptr->PrevError = 0;    //Error[-2]
    sptr->P = 5;            //比例常数 Proportional Const
//  sptr->I = 0.5;          //积分常数 Integral Const
    sptr->D = 3;        //微分常数 Derivative Const
    sptr->SetPoint = 40;    //期望中心
}

int16 Steer_PIDCalc(int8 Steer_CenterLine)//位置式PID
{
    iError = sptr->SetPoint - Steer_CenterLine;//增量计算
    iIncpid =(int16)(sptr->P * iError+ sptr->D * (iError - sptr->LastError));
    //限幅
    if(iIncpid > MAX_STEER_DUTY)    iIncpid = MAX_STEER_DUTY;
    if(iIncpid < MIN_STEER_DUTY)    iIncpid = MIN_STEER_DUTY;
    sptr->LastError = iError;//存储误差,用于下次计算
    return (iIncpid);
}

可以加企鹅群 658476482 交流

  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云影点灯大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值