基于AVR单片机: 两轮自平衡智能车(2)-PID控制器


之前写了一篇我之前做的基于AVR单片机自平衡智能车的文章,当时用的控制器只是简单的一个P控制。实现自平衡控制实在是很难。今天我就来说说自平衡的PID控制。不得不说PID是个好算法,加上以后自平衡车就很稳定了。

个人原创,转载请注明原文出处,并保留原文链接:

http://www.embbnux.com/2014/05/15/avr_self_balancing_car_pid/

   1、 首先讲讲PID算法:

这里的PID当然指的是数字PID,因为我们是要放到AVR单片机上运行的,数字PID算法是要放到定时器中断里面,每个一定的间隔进行刷新一次,进行一次运算。我这里的定时器中断是10ms.也是采样频率,根据卡农定理采样频率至少要大于被采集频率的最高频率的两倍,才能保证不失真。

数字PID分为位置型PID和增量型PID,其实尝试了一下,位置型PID和增量型PID的效果是一样的。我这里采用的是通过增量型PID得出位置型PID的算法。

   2、 PID算法:

<span style="font-size:14px;">int angle_pid[3];
 
int angle_P=40;
 
int angle_I=0;
 
int angle_D=30;
 
int angle_pid(int angle_delta){
 
int anglePID,angle_add;
 
angle_pid[2]=angle_pid[1];
 
angle_pid[1]=angle_pid[0];
 
angle_pid[0]=angle_delta;
 
angle_add = angle_P*(angle_pid[0]-angle_pid[1]) +angle_I*angle_pid[0]+angle_D*(angle_pid[0]-2*angle_pid[1]+angle_pid[2]);
 
anglePID= angle_pid[1]+ angle_add;
 
return  anglePID;
 
}</span>

这里的输入参数 angle_delta是指设定的角度和测得角度差,也就是控制理论的e(t).这里设定的角度为0度,也就是静态平衡。

关于PID参数调节,请参见原文博客:

http://www.embbnux.com/2014/05/15/avr_self_balancing_car_pid/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值