|
发表于 2010-10-1 22:23:15
|
显示全部楼层
回复【14楼】shandong
/*********************************************************************************
* 函数名称: cal_u()
* 功 能: 计算电压值
* 参 数: ad采样值
* 返回值 : 电压值
**********************************************************************************/
float cal_u(vu32 x) //计算实际电压值
{
float k,b;
float fu;
k= (30.00 - 0.10) / (float)(aducal30 - aducal01);
b= 30.0 - k*aducal30;
fu=k*x + b; ......
-----------------------------------------------------------------------
这个算法是否会在实际电流=0的时候,显示0008 ?
我试了一下,电流大于8mA时,电流显示误差不大,但电流低于8mA后,就一直显示 0008 了,不知是我的问题还是这种算法就这样。
另外,这个算法的结果与我的算法一致,我也是8mA以下显示0008,我凑的代码:
//拆分各个位送显示电流 (针对于小于0.100电流显示,修改后的代码)
if(I >= ADIcal01)
{
aa = (4.000 - 0.100) / (float)(ADIcal4 - ADIcal01); //计算步长
aa = (((float)(I - ADIcal01) * aa) + 0.100)*1.005 ;//计算实际电流值,1.005是实验得出补偿系数
}
else //如果获得的AD采样值小于0.100v时的AD采样值
{
aa = (4.000 - 0.100) / (float)(ADIcal4 - ADIcal01); //计算步长
aa= (0.100-((float)(ADIcal01 - I) * aa))*1.02;//用减法计算实际电流值并乘实验得出的1.02补偿系数
*****我在代码中将aa值乘以1.02,显示值更准确,但是最小只能显示到10mA了。 |
|