均方根检波
- 1.均方根检波技术
- 2.高精度采样技术
- 3.STM32的ADC
- 4.程序工程文件
1.均方根检波技术
1.均值检波电路通常采用电容充放电电路作为平均值电路。
2.由于输出为整流平均值,要求电容充放电时间常数相等。
3.电容充放电时间常数取决于电阻。
4.充电时,电阻越大,电容越大,流过电阻的电流越小,电容充电电流越大,充电越快。
5.放电时,电阻越大,电容越大,放电越慢。为了使充放电速度相同。
6.因此,只有在电阻与电容符合特定关系时,才能使充放电速度相同。
均方根值,顾名思义,就是在输入信号的整数周期内,对输入信号进行平方,相加平均再开方。我们采用均方根值算有效值的流程通常是先将输入信号转化为电压信号,再根据信号的频率选用高速AD对信号进行采样,最后,我们将采样值输入单片机中进行算法处理,得到信号的有效值。
这里有两点要特别注意:
① 对于频率较高的信号,我们最好选用采样率足够高的AD和主频足够高的FPGA来进行处理,否则的话,算出来的有效值误差会非常大。
② 在采样时,最好是按照周期的整数倍来进行采样和数据处理,如果数据处理时不是按照整数个周期来处理的话,得到的值将会是一个跳动的数字。
2.高精度采样技术
实现高精度采集需要有三点:①AD的选择 ②采样电路 ③滤波算法
AD的选择:
根据A/D转换器的转换原理可以把A/D转换器分为两大类:直接型A/D和间接型A/D。
直接型(将输入的模拟电压通过比较直接转换为数字量):逐次逼近式A/D转换器、流水线A/D转换器
间接型(模拟电压先被转换为一种中间变量,然后再把中间量转换成数字量):双积分A/D转换器和V/F变换A/D转换器
AD转化器的性能指标:
(1)分辨率
分辨率表示输出数字量变化一个数字量,输入的模拟电压的变化量。
(2)转换速率
转换速率是指A/D转换器完成一次数据转换所需要的时间。
(3)量化误差
量化误差是指量化结果和被量化模拟量的差值
(5)偏移误差
偏移误差是指输入信号为零时,输出信号不为零的值,也叫做零值误差。
(6)输入电压范围
A/D转换器一般都有规定的输入电压范围,使用过程中尽量不要超出范围,因为这样会造成对A/D的永久损坏。
(7)注意:
在正常使用中,A/D转换芯片可能会电流突然增大、突然发热,这是可控硅现象,是所有CMOS集成电路在使用中都可能发生的现象。出现这种情况以后,要切断电源,然后重新打开,又会回复正常工作。为防止这种现象发生可采取一下措施:
1.尽量避免较大电流干扰窜入电路;
2.加强电源稳压滤波措施,在A/D转换芯片的电源入口处加去耦电路。为防止窄脉冲窜入,应加一个高频滤波电容(0.01µF左右);
3.在A/D转换芯片的电源端串一个100~200Ω的限流电阻,可在出现可控硅现象时有效地限定电流,保护芯片。
采样电路:
最简单,最直接的采样方法:判断采样电压的峰值是否在AD的采样范围之内,如果信号范围和AD采样范围相吻合,滤波后直接送入AD采样口进行采样,这里滤波可以用简单的LC或者RC滤波。如果信号的范围超出了AD的采样范围,可以用电阻分压之后再将信号送入AD采样口进行采样。如果分压之后信号幅值太小,可以用运放将信号放大之后再送入AD采样口采样。
3.STM32的ADC
主要特征:
(2)逐次逼近型模拟数字转换器
(2)12位ADC
(3)18个通道,可测量16个外部和2个内部信号源。
(4)各通道的A/D转换可以单次、连续、扫描或间断模式执行。
(5)ADC的输入时钟不得超过14MHz。
(6)ADC供电要求: 2.4V到3.6V
(7)规则通道转换期间有DMA请求产生。
DMA请求产生:
定时器触发ADC采样,是属于外部触发转换的一种方式。在《STM32中文参考手册》中,找到了关于这部分的内容:
可以看出,STM32的ADC1和ADC2用于规则通道的外部触发可以有以上6个事件信号,本文使用TIM2_CH2触发ADC1。
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2; //使用外部触发模式
ADC_ExternalTrigConvCmd(ADC1, ENABLE); //设置外部触发模式使能
同时注意一下外部触发的触发条件:当外部触发信号被选为ADC规则或注入转换时,只有它的上升沿可以启动转换。
如何有上升沿呢?定时器配置为PWM输出模式,完成对TIM2_CH2的PWM配置。
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = 1000; //加载比较值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
TIM_OC2Init(TIM2, & TIM_OCInitStructure); //初始化外设TIM2_CH2
4.程序工程文件
本程序先通过STM32的ADC_DMA对正弦信号进行采集,再对采集到的信号进行处理、算法运算,最后用DAC_DMA输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)