基于AVR单片机: 两轮自平衡智能车(3)-控制算法

最近做了个九轴的传感器,利用之前博文的卡尔曼算法得出了传感器的三轴的姿态角。想利用这个传感器来做自平衡智能车和四轴飞行器,这篇博文主要讲诉两轮自平衡车的制作,由于两轮自平衡车的详细内容之前讲过了,这里就主要讲控制算法,涉及两轮平衡车的角度平衡控制以及速度控制。

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

https://www.embbnux.com/2015/06/16/avr_self_balancing_car_controller/

一、 新的两轮平衡智能车

这里先展示一下我的新车,变成大轮的了,哈哈:

 

二、平衡控制算法

在用到平衡控制算法之前需要你能获得平衡车的姿态角,可以用加速度计和陀螺仪进行传感器融合得到,这里我用我的九轴传感器利用卡尔曼算法来得到三轴姿态角。

平衡控制框图:

11.pic

 

 

其中平衡角为人工设定,可以实验测得车子的平衡角,比如0度,通过pid运算控制电机的运动,进而控制整车的角度。

三 速度控制算法

刚才的平衡控制只能控制车子不倒,还不能控制车子的速度,所以现象是车子会前后运动,但是不倒。这里也可以发现车子的速度其实是由车子的倾角决定的,车子角度向前倾,车子就往前跑,来保证不倒。所以我们控制速度只要控制车子的角度就可以了。为了做反馈控制,这里还需要知道车子的速度,所以需要个编码器或者码盘来测车子的速度,这里我直接用一个512线的码盘来得到电机的速度。

所以结合刚才的角度控制,现在的控制框图如下:

122.pic

 

设定速度为认为输入,比如设定速度0,则小车子在平衡角的位置静止,输入-5则车子往后走。

所以设定好平衡角和输入速度0则小车子就能稳定的站住了。

这里我只用了pid控制,其实还有很多的控制算法,比如模糊控制等,欢迎探讨。比较重要的是两个控制环的pid参数要调好,不然还是不稳定的。先调试平衡控制的pid,调好再调速度控制的pid.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据