[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】+直流信号的高频噪声去除

[复制链接]
106202|37
手机看帖
扫描二维码
随时随地手机跟帖
mxkw0514|  楼主 | 2021-6-14 11:10 | 显示全部楼层 |阅读模式
本帖最后由 mxkw0514 于 2021-8-15 11:53 编辑

#申请原创# 引言:
   接上一次测评:https://bbs.21ic.com/forum.php?mod=viewthread&tid=3137992&page=1&extra=#pid12133510。本次的测评在继承前一篇部分测评内容的基础上,  利用 PIC18F16Q40单片机的ADCC采样外部模拟电压,并对采样后的值进行数字化的低通滤波处理(类似于数字低通滤波器),该篇测评主要包括:     
        1、测评内容:              
                   第一,围绕PIC18F16Q40单片机的ADCC模块展开,利用ADCC外设进行外部模拟信号采样和数字低通滤波。
                   第二,展示测量结果。
        2、测评心得。


一、测评内容
1.1 MCC基本配置
        利用MPLAB编译环境的MCC模块配置PIC18F16Q40单片机的System module、Pin mode、ADCC、UART和DAC,它们的配置如下图所示。首先值得注意的是,Pin mode上有一些引脚是固定引脚,是动不了的,还有一些是特殊功能引脚(选择相应的模块后会显示来),这个可以动,但是有限制范围;其次ADCC模块在配置Computation Feature那一栏,需要设置重复采样的次数(Repeat)和数字低通滤波的截至频率(Cut off frequence of LPF)。

6539660c72bbd6f29e.png

                  图1.1 System module配置

9839660c72d3717000.png
图1.2 Pin module配置

8442360c72cbcc837e.png
图1.3 ADCC配置

535060c72d7924f0e.png
图1.4 UART配置


3412460c72db1b8acc.png

图1.5 DAC配置


1.2 ADCC采样外部模拟电压                                    
        外部模拟电压用函数发生器生成,由于要用到ADCC数字低通滤波的性能,所以特意生成了这样一个波形:在1V的直流电压上叠加了1个0.5V的100KHz的正弦信号(该正弦信号模拟高频噪声),函数发生器的配置如图1.6、1.7所示,该外部模拟电压的波形如图1.6所示。点击MCC的Generate,生成各个模块的初始化函数和相应的功能函数,其中初始化函数会自动出现在源文件中,而哪些特定功能函数要根据自己需要进行添加。接下来讨论程序部分。

7507260c7314f5275a.png

图1.6 函数发生器设置(1)


1085660c7316c8927d.png

图1.7 函数发生器设置(2)


1122760c731b5964e6.png

图1.8 外部模拟信号波形

      工程的的main.c文件的程序如下图所示。该程序主要包含两个部分,第一部分是对外部模拟电压的采样【2】,第二部分是对采样的结果进行数字低通滤波处理(这个放在下一个小节讨论)。对模拟电压的采样主要包括两个函数,ADCC_DischargeSampleCapacitor()和ADCC_GetSingleConversion(),ADC采样的通道用函数ADCC_DischargeSampleCapacitor()设置,而模拟电压采样的点数用函数ADCC_GetSingleConversion()来获得,模拟电压=(点数/4096)*参考电压,4096为212,参考电压可以是VDD,也可以是FVR(Fixed Voltage Reference),根据实际需求来选择,如果是VDD,那么这里的参考电压就是3.3V。

#include "mcc_generated_files/mcc.h"
#include "stdio.h"
#include "lay.h"

uint16_t volatile adcVal;
uint16_t volatile adcFilterVal;
int DAC_BCD;
int DACx16;

void main(void)
{
    SYSTEM_Initialize();//系统初始化函数:时钟、UART、ADCC、DAC模块初始化
    INTERRUPT_GlobalInterruptHighEnable();//中断使能
    while (1)
    {
       /*将输入的模拟电压转化为数字电压,并对数字电压进行滤波,
        * 滤除高频噪声。 模拟电压的输入端为ANA0,输入引脚为RA0*/
       ADCC_DischargeSampleCapacitor();//设置ADC采样通道
       adcVal = ADCC_GetSingleConversion(channel_ANA0);//模数转换
       adcFilterVal = ADCC_GetFilterValue();//低通滤波
       printf("  adcFilterVal %d \r\n", adcFilterVal);//打印滤波前的采样点数  
       printf("  adcVal %d \r\n", adcVal);//打印滤波后的采样点数

       /*将采样模拟电压所得的12bitADC的点数转化为8bitDAC的点数,
        * 并输出模拟电压,输出端为DACOUT2,输出引脚为RA2*/
       DAC_BCD = ( adcFilterVal ) * 16;
       DAC_BCD = ( adcFilterVal ) / 4096;
       DAC_BCD = ( adcFilterVal ) / 16;
       printf("  i %d \r\n", DAC_BCD);
       DACx16 = BCD_to_HEX(DAC_BCD);//将十进制数转化为16进制数
       DAC1_SetOutput(DACx16);//将8bit采样点数进行输出
       printf("  DAC16 %d \r\n", DACx16);

       delay_ms(5);
    }
}


1.3 ADCC进行数字低通滤波         
       这里的数字滤波不是说在单片机的ADC输入引脚上并联滤波电容,也不是说用运放搭建低通滤波器对输入信号进行预处理,而是指对采样后所得的点数进行滤波,具体的算法【3】如图1.9所示,ADCRS为数字滤波的截止频率,该值越大,那么输出值到达稳定所需的时间就越长,这一点会在下一章进行讨论。简而言之,这里的数字滤波就是:先前累加器的数值(点数)+当前ADC采样的平均值(点数)- (先前累加器的数值/2截至频率),先前ADCC会对模拟电压采样100次(MCC的Repeat),让后对其求取平均值,将该平均值放入累加器,每进行一次低通滤波运算,累加器会进行移位,移除原来的平均值,吸收新的平均值作为先前累加器的数值,并与当前ADC采样的平均值参与下一次低通滤波运算。低通滤波的流程图如图1.10所示。

2859760c737d2b67e7.png

图1.9 数字低通滤波算法


764660c73bbe63988.png

图1.10 数字低通滤波流程图


二、结果展示
      对写好的程序进行编译、下载和运行,用函数发生器的探头夹连接PIC18F16Q40开发板的RA0引脚,用示波器的探头夹连接PIC18F16Q40开发板的RA2引脚,用USB-TTL工具将PIC18F16Q40开发板与电脑进行连接,打开串口调试助手进行调试。测试环境如图2.1所示。
1496960c73efbb9d60.png

图2.1 测试实物图


        运行程序以后,串口调试助手的界面如图2.2所示,动态视频如附件一所示。 adcVal是实时采样点数,adcFilterVal是对采样点数进行滤波后的数值,可以看到adcVal与adcFilterVal都是在变化,虽然DACx16变化比较大(叠加了高频噪声),但是adcFilterVal逐渐趋于稳定值(进行了低通滤波),转化后的电压近似为1V,达到了预期的效果,将经过低通滤波后的采样点数导入Excel表,绘制散点图如图2.3所示,低通滤波所需的时间取决于ADCRS。另外DACx16是将滤波后的数字点数进行模拟电压输出,该值与adcVal大小相同,只不过adcVal是10进制,而DACx16是16进制。输出后的模拟电压的变化视频如附件二所示,这是一个经过低通滤波的动态达到稳定的过程。
9931360c743683efd6.png

图2.2 串口调试助手结果展示图

8485560c74a5bb5ce7.png

图2.3 ADCC采样点动态趋于稳定曲线



三、测评心得:
       本次测评展示了ADCC模块的的低通滤波功能,该项目的程序见附件三。以我的主观观点,我觉得这是ADCC的核心特性之一,也是ADCC的活力所在,如果没有它,那么它和普通ADC也就没有太大的区别了。ADCC外设可以通过数字滤波减少芯片外围滤波电路的使用,这样一方面既可以减少生产成本,又可以缩小PCB板的面积,可谓是一举两得。ADCC还有其它的功能,只不过没有它在信号处理-低通滤波中的那么耀眼罢了。




参考文献:
【1】Microchip Technology Inc.Getting Started with ADCC for PIC18[DB/OL].(2020)[2021-06-14].https://ww1.microchip.com/downloads/en/Appnotes/TB3263-Getting-Started-with-ADCC-for-PIC18-90003263B.pdf.

【2】Microchip Technology Inc.Getting Started with ADCC for PIC18[DB/OL].(2020)[2021-06-14].https://ww1.microchip.com/downloads/en/Appnotes/TB3263-Getting-Started-with-ADCC-for-PIC18-90003263B.pdf.

【3】Microchip Technology Inc.Using PIC18F26K42's 12-bit ADC² in Low-Pass Filter Mode[DB/OL].(2020)[2021-06-14].https://ww1.microchip.com/downloads/en/Appnotes/AN2749-Using-PIC18F26K42-ADC2-00002749A.pdf.




附件二

附件二

附件一

附件一

低通滤波.X.rar

750.74 KB

附件三

使用特权

评论回复
mxkw0514|  楼主 | 2021-6-20 14:43 | 显示全部楼层
ADCRS为数字滤波的截止频率,该值越大,那么输出值到达稳定所需的时间就越长

使用特权

评论回复
lcczg| | 2021-6-21 15:49 | 显示全部楼层
滤波器,赞

使用特权

评论回复
pzsh| | 2021-6-22 09:53 | 显示全部楼层
这样的评测很用心,赞

使用特权

评论回复
奔波儿熊| | 2021-6-22 15:57 | 显示全部楼层
写的好啊

使用特权

评论回复
评论
mxkw0514 2021-7-25 00:35 回复TA
请问PIC18F16Q40和PIC18F16Q40有什么显著的区别呢? 
mxkw0514|  楼主 | 2021-6-27 20:33 | 显示全部楼层
ADCC外设确实是PIC18F16Q40单片机的主要特色之一

使用特权

评论回复
51xlf| | 2021-7-3 15:59 | 显示全部楼层
数字滤波算法吗         

使用特权

评论回复
i1mcu| | 2021-7-3 16:00 | 显示全部楼层
前端怎么做的呢   

使用特权

评论回复
评论
mxkw0514 2021-7-3 19:48 回复TA
请问你说的前端是指? 
pmp| | 2021-7-3 16:00 | 显示全部楼层
高频直接解调的吗   

使用特权

评论回复
mmbs| | 2021-7-3 16:00 | 显示全部楼层
计算的速度怎么样           

使用特权

评论回复
评论
mxkw0514 2021-7-3 19:51 回复TA
ADCRS为数字滤波的截止频率,该值越大,那么输出值到达稳定所需的时间就越长 
1988020566| | 2021-7-3 16:00 | 显示全部楼层
直流信号吗?      

使用特权

评论回复
评论
mxkw0514 2021-7-3 19:45 回复TA
是的,主要是去除直流信号的高频噪声 
lzbf| | 2021-7-3 16:01 | 显示全部楼层
能输一下参数确定的方式吗  

使用特权

评论回复
houjiakai| | 2021-7-3 16:01 | 显示全部楼层
谢谢楼主分享的内容了。   

使用特权

评论回复
youtome| | 2021-7-3 16:01 | 显示全部楼层
PIC18F16Q40怎么样   

使用特权

评论回复
cemaj| | 2021-7-3 16:01 | 显示全部楼层
这个是申请的芯片吗     

使用特权

评论回复
jimmhu| | 2021-7-3 16:02 | 显示全部楼层
ADC的采样速度怎么样   

使用特权

评论回复
mxkw0514|  楼主 | 2021-7-3 19:39 | 显示全部楼层

挺好用的,串口通信可以自由映射到GPIO口

使用特权

评论回复
mxkw0514|  楼主 | 2021-7-3 19:40 | 显示全部楼层
cemaj 发表于 2021-7-3 16:01
这个是申请的芯片吗

算是申请的开发板

使用特权

评论回复
mxkw0514|  楼主 | 2021-7-3 19:43 | 显示全部楼层
51xlf 发表于 2021-7-3 15:59
数字滤波算法吗

是的

使用特权

评论回复
mxkw0514|  楼主 | 2021-7-3 19:43 | 显示全部楼层
jimmhu 发表于 2021-7-3 16:02
ADC的采样速度怎么样

最高能达到140KSPS

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

549

帖子

5

粉丝