四旋翼电池电压与油门曲线拟合
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硬件仿真看的数组值。其实有省事的方法,直接通过串口线传到电脑上,但是我买的串口线还没到。。
各个曲线是我在电池电压不同的时候测试的,最下面的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
蜂鸣器和电池电压测量电路图如下:
航模电池基础知识补充:
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
相关文章推荐
- 曲线拟合 公式已与excel2007直线趋势图对比过。
- MATLAB中利用cftool导出代码实现一张图中拟合多条平滑曲线
- matlab曲线拟合
- Fityk-曲线拟合工具
- 曲线拟合的开源组件 Math.NET Numerics
- 最小二乘法多项式曲线拟合
- 1stOpt——世界领先的非线性曲线拟合,综合优化分析计算软件平台
- 曲线拟合(曲线平滑)
- 关于用ARM 自带ADC 测量电池电压存在的问题
- Matlab中数据处理和多项式插值与曲线拟合
- 曲线拟合——(2)拉普拉斯/瑞利/对数正态 曲线
- Matlab曲线拟合
- Matlab的曲线拟合工具箱CFtool使用简介
- 算法系列之二十一:实验数据与曲线拟合
- 利用最小二乘法拟合任意次函数曲线(C#)
- MATLAB利用散点进行函数曲线拟合
- Matlab 曲线拟合
- 股票量化分析(13)——直线拟合、曲线拟合、方差计算
- opencv学习——利用轮廓画矩阵、外接圆、拟合曲线
- 最小二乘法曲线拟合