【智能车】软件检波

什么是硬件检波

智能车上广泛使用的祖传方案为倍压检波,先由运放放大半波或抬升后的信号,然后由两个肖特基剪掉负半周后用RC滤成直流给ADC采样。

什么是软件检波

将ADC采集到的原始数据给单片机计算出想要的信息。
有卓大大的参考方案

为什么采用软件检波

便宜?

一点也不便宜,不仅没有省掉最贵的运放,还需要更强的算力。
卓老师给出的优点是无死区、真线性,而我选择换成软件的主要原因是干扰

软件检波怎么抗干扰

祖传倍压检波会将完整信号全部转换成直流,当ADC采集到的电压升高时你无法区分是因为干扰增加了还是离电磁线更近了。而软件检波将完整信号读入单片机后只提取出有用的20kHz分量,其他干扰一律丢掉。

检波公式

卓老师在上述参考方案中给出的第二个公式是错误的
虽然看不明白卓老师想怎么写,但我知道DFT是酱婶滴:
X k = ∑ n = 0 N − 1 x n e − j 2 π n N k X_k = \sum_{n=0}^{N-1}x_n e^{-j \frac{2\pi n}{N} k} Xk=n=0N1xnejN2πnk
式中N为数据长度,k为要取的频率(20kHz)。例如,当采样率200kHz时,采集200个点(也就是20个周期),得到的DFT频域分辨率为200k/200=1kHz,也就是式中的k每加1代表频率加1k;这样一来,我们要取的20kHz,就将20代入式中的k即可。

运算量(可行性)分析

逐飞的1064核心板有15路ADC、主频600MHz、ADC时钟150MHz。
电磁AI需要至少7路ADC,每一路ADC采样时间至少200ns,这样1.4微秒即可采样1组,而1个周期是50微秒,这样每个周期35.7个点不方便计算而且太多余。理想情况下定时5微秒转换1组即可,这样采样环节净占用CPU时间28%.
接下来是软件检波环节,上述公式的时间复杂度为O(N),但N较小而常数巨大,不好精确计算,只能估计。首先使用欧拉公式将复指数形式展开,然后对实部和虚部分别求和最后取模,大概每次需要五六次乘法和两次加法吧?满打满算也就几百纳秒,乘上7路也不过1微秒嘛,还是小菜一碟。可以将这部分代码放入TCM中执行,响应会更快。

MATLAB仿真

Fs = 200000;
x = importdata('1.txt');

x = (x - mean(x))';
L = 900;
n = 1 : L;
t = (n - 1) / Fs;
k = 20000 / Fs * L;
a = exp(-1i * 2 * pi * n / L * k);
S = sum(x(1:L) .* a);
Uk = abs(S / L)
plot(t,x(1:L))

附数据

猜你喜欢

转载自blog.csdn.net/weixin_44560710/article/details/106658619
今日推荐