本帖最后由 〽️〽️〽️ 于 2021-3-8 15:53 编辑
我用的没这么复杂,这个看着好复杂,GD32 能几ms内计算完成吗? 因为考虑串口modbus通信,不能阻塞大量时间计算。
ln计算还是挺耗时的 cpu不带硬件浮点计算因此我的方法是这样的
1. A B C D E F G 这7段 都是1ms一段,每段有100个 adc采集值
2. 将G噪声段 去掉最大,去掉最小做平均
3. A B C D E F 数据全部减去G的平均值,然后600个数据全部归一处理
4. A段100个数据平滑累加得到一个值, B也是,依次到F,
5. I0 就是第一个取的3000值,他是动态的 3000 ±1%
6. 然后t1=T1/ (lnI0-ln A) , t2=T2/(lnI0-ln B), 。。。。算法t6 。Tx就是I0时间开始的一段一段加大值
7. 得到 t1 t2 t3 t4 t5 t6
8. 以F段的最后一个数据为I0, 反过来倒退计算 6段t, t7=T7/ (lnXX-ln F).... 得到t7 t8 t9 t10 t11 t12
( t1 t2~~~~~t12 理论上在指数曲线上,那么按指数衰减点上 这样计算全都是比如3500,但实际存在双指数曲线问题,噪声等等
有差异的,特别是刚开始采用的A段指数计算,还有尾巴的中间的比较平稳些,其实这部分算法我还是没彻底高清怎么处理才能更平稳到小数点)
9. 再t1~t12进行去最大最小后求平均,得到要的最终t值
12位的ADC 和DAC 闭环控制这个系统,需要-50°C到200°C 做到 0.1精度 ,稳定下来。
|