折线 算法(C语言)

  • 格式:docx
  • 大小:33.68 KB
  • 文档页数:2

折线算法:
折线算法大多应用于非线性设备校准,例如压力传感器、扭矩传感器等等,理想的传感器,
我们都希望出厂时,输出的信号和受到的力呈线性关系,但实际上,受到硬件条件限制,大
多产品输出信号曲线与理想值有很大偏差,这时就需要将传感器进行软件校准,本文介绍的
方法是折线算法,即将传感器输出的实际信号,进行分段,每一段的输出数值跟理想线性数
值做映射,使实际输出的数值与理想值无限贴近,分段越多,处理后的数据与理想值越贴近,
具体根据自己实际项目的精度要求,进行分段,下面给出划分20段的例子程序,可根据自
己的要求,进行划分修改。

折线算法示意图
if((uint16_t)wt_buf[68]==1) //折线运算开关
{
if(torque>=cc[0]&&torquetorque = bb[0]+((torque-cc[0])/(cc[1]-cc[0]))*(bb[1]-bb[0]);
else if(torque>=cc[1]&&torquetorque = bb[1]+((torque-cc[1])/(cc[2]-cc[1]))*(bb[2]-bb[1]);
else if(torque>=cc[2]&&torquetorque = bb[2]+((torque-cc[2])/(cc[3]-cc[2]))*(bb[3]-bb[2]);
else if(torque>=cc[3]&&torquetorque = bb[3]+((torque-cc[3])/(cc[4]-cc[3]))*(bb[4]-bb[3]);
else if(torque>=cc[4]&&torquetorque = bb[4]+((torque-cc[4])/(cc[5]-cc[4]))*(bb[5]-bb[4]);
else if(torque>=cc[5]&&torquetorque = bb[5]+((torque-cc[5])/(cc[6]-cc[5]))*(bb[6]-bb[5]);
else if(torque>=cc[6]&&torquetorque = bb[6]+((torque-cc[6])/(cc[7]-cc[6]))*(bb[7]-bb[6]);
else if(torque>=cc[7]&&torquetorque = bb[7]+((torque-cc[7])/(cc[8]-cc[7]))*(bb[8]-bb[7]);
else if(torque>=cc[8]&&torquetorque = bb[8]+((torque-cc[8])/(cc[9]-cc[8]))*(bb[9]-bb[8]);
else if(torque>=cc[9]&&torquetorque = bb[9]+((torque-cc[9])/(cc[10]-cc[9]))*(bb[10]-bb[9]);
else if(torque>=cc[10]&&torquetorque = bb[10]+((torque-cc[10])/(cc[11]-cc[10]))*(bb[11]-bb[10]);
else if(torque>=cc[11]&&torquetorque = bb[11]+((torque-cc[11])/(cc[12]-cc[11]))*(bb[12]-bb[11]);
else if(torque>=cc[12]&&torquetorque = bb[12]+((torque-cc[12])/(cc[13]-cc[12]))*(bb[13]-bb[12]);
else if(torque>=cc[13]&&torquetorque = bb[13]+((torque-cc[13])/(cc[14]-cc[13]))*(bb[14]-bb[13]);
else if(torque>=cc[14]&&torque<=cc[15])
torque = bb[14]+((torque-cc[14])/(cc[15]-cc[14]))*(bb[15]-bb[14]);
else if(torque>=cc[15]&&torquetorque = bb[15]+((torque-cc[15])/(cc[16]-cc[15]))*(bb[16]-bb[15]);
else if(torque>=cc[16]&&torquetorque = bb[16]+((torque-cc[16])/(cc[17]-cc[16]))*(bb[17]-bb[16]);
else if(torque>=cc[17]&&torquetorque = bb[17]+((torque-cc[17])/(cc[18]-cc[17]))*(bb[18]-bb[17]);
else if(torque>=cc[18]&&torquetorque = bb[18]+((torque-cc[18])/(cc[19]-cc[18]))*(bb[19]-bb[18]);
else if(torque>=cc[19]&&torquetorque = bb[19]+((torque-cc[19])/(cc[20]-cc[19]))*(bb[20]-bb[19]);
}