您的位置:首页 > 其它

四旋翼电池电压与油门曲线拟合

2017-01-16 22:03 330 查看
还在继续做着咱的四旋翼,我自己的飞控板子上集成有蜂鸣器。电池12v左右的电压通过4个100k的大电阻分压,然后用stm32的AD进行数据的采集。

蜂鸣器和电池电压测量电路图如下:



航模电池基础知识补充:

3s电池,建议使用到11.1v,也就是每节电池是3.7v。我查阅了相关资料:2.75V≈0%;3.56V≈5%;3.70V≈10%;3.75V=20%;3.85V≈50%电池电压与电量的基本关系。以上电压值均为无负载情况下的电压,有负载的电压情况根据放电电流大小来具体确定。也就是说,电池在实际使用中电压很容易掉到11.1v以下,不能直接设置阈值,低于11.1v报警。这样是不对的。所以才有了今天的工作。

更多电池知识请见下面博客:

http://tieba.baidu.com/p/3752844048

之前一直都没认真搞一下电池低电压报警(注:因为航模锂电池很脆弱,听说只要电池低过最低电压,电池立马挂),由于担心自己的电池挂,又因为没花钱买个BB响,就自己画pcb的时候预留了电压检测部分电路。 之前写的代码,总是误响,遂今天花了半天时间,自己拟合了一条电池电压与油门的关系曲线。拟合曲线图如下:



红色箭头所指,即为拟合后的曲线。 我的油门数据是这样来的: 电调pwm博范围是 1000 到 2000,所以这里我设置的pwm基础值为1000,那么我油门设置的是 0 到1000。

图上各个曲线意思为:

纵坐标:我ADC采集出来的原始值 (原始值 / 4096) * 3.3 * 4 = 电池电压值。【4个100k电阻分压】

横坐标:遥控油门数据0到700范围(已经转的相当快了)

最下面的几条曲线是我在电池电压快耗尽的时候记录的数据,最上面一条是充满电测试记录的数据。

首先我飞控代码中,写了断测试程序,每秒油门+10,每秒读取一次电池电压的AD采集值,存入数组,油门最大取到了700,也就是每次采集了70次的值。我上述数据是使用jlink硬件仿真看的数组值。其实有省事的方法,直接通过串口线传到电脑上,但是我买的串口线还没到。。

就是这样,哥凭借惊人的毅力,采集整理了6组excel数据,每组70个。然后我打开了自己的MATLAB,将excel原始数据导入到MATLAB中,进行绘图如下:




各个曲线是我在电池电压不同的时候测试的,最下面的2条是在电池电压接近11.2v测试的,当时相当担心自己电池挂啊。。。。

观察曲线,发现油门110以内,电池电压基本不变(因为电机还没有转动),之后曲线近似为直线,但是我呢感觉二次可能高大上点,于是使用 ——最小二乘法 拟合曲线的时候,我将曲线拟合成了2次的。

由于MATLAB水平比较渣,语法都不熟,于是计算最小二乘法系数矩阵的时候自己 用c语言写的一个测试工程,计算各个矩阵系数。

最后再通过MATLAB的 解方程组功能,解出拟合的曲线为:

y = 3504.3 - 0.1627 * x - 0.0014 * x * x

其实数学好的,可以直接通过高斯消去法手算。。。。



MATLAB操作如下:

1、 首先导入excel数据

2、 然后根据c语言求出来的数据,写MATLAB矩阵系数,即为图上AB矩阵,注意MATLAB矩阵写法

3、 A \ B求出 a0 a1 a2

然后就能得到拟合的曲线y

4、 画出拟合的曲线和原始曲线进行 对比 (油门110以上使用)如下图:



剩下的就是将公式转换到自己的飞控中,经过测试效果很好,不存在误报现象了。哈哈

测试代码、测试数据、最小二乘法资料以及测试截图见下面链接:

http://download.csdn.net/detail/zzw5945/9739247
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息