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

【CuriosityNano测评报告】+ADCC模块+温度传感器测评

[复制链接]
134410|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 mxkw0514 于 2021-7-12 21:11 编辑

引言:
   之所以想申请测试PIC18F16Q40Curiosity Nano评估工具包,是因为PIC18F16Q40单片机有一个特色—带计算功能的12位的数模转换器ADCC,该模块将内部或者外部的模拟电压值转换为数字电压,同时能对该数值进行平均值或低通滤波等直接操作,完成简单的数字信号处理【1】。收到开发板以后,熟悉了一下PIC18F16Q40单片机的软硬件,开始对MCC模块进行测评。本次的测评内容包括:        
        1、开箱展示。包括PIC18F16Q40Curiosity Nano评估工具包的软硬件结构。        
        2、测评内容:              
                   第一,围绕PIC18F16Q40单片机的ADCC模块展开,利用ADCC和内部温度传感器测量温度。
                   第二,展示测量结果。
        3、测评心得。




一、开箱展示:
  这次的PIC18F16Q40Curiosity Nano评估工具包中的板卡面积比之前申请的几款要小很多,这是因为PIC18F16Q40单片机只有20个引脚,所以不需要引出那么多的邮票孔,实物图如图1.1和图1.2所示,分别为板卡的正反面。上面我还额外焊了几个排针,方便后面的测评调试。关于PIC单片机的开发环境有AVRstudio和MPLAB两个主要的编译调试软件,但是随着MCC的出现,MPLAB被越来越多的人使用,本次测评活动的首页也是首推MPLAB,可见Microchip对其重视程度。本次也尝试使用MPLAB的MCC配置底层寄存器自动生成初始化函数,完成对PIC18F16Q40单片机的ADCC模块的测评。

       图1.1 PIC18F16Q40板卡正面



          图1.1 PIC18F16Q40板卡正面


                                                        图1.3 MPLAB的ADCC界面

     这看了一下PIC18F16Q40 Curiosity Nano Schematics手册中的电源模块,发现单片机的VDD电压是3.3V,在使用中就需要注意一些事项,尤其是串口通信部分,必须保证通信部分的电平保持一直,这样才能保证通信设备的正常工作。
                                                                                                                                                                       
                                                                 图1.3 电源模块原理图



二、测评内容:
      ADCCAnalog-to-Digital Converter with Computation的缩写,从字面上就可以知道,它本质上还是ADC,与普通ADC不同的是,这个外设附带了平均,低通滤波等硬件计算功能,节约了在软件层面的开销,同时也减少了编写嵌入式程序的工作量【3】。PIC18F16Q40单片机的ADCC外设框图如图2.1所示,从该外设中,可以看到ADC的输入信号有两个来源【4】,一个是内部信号输入,例如单片机内部的温度传感器的模拟电压信号;另一个是外部模拟信号输入,这个就比较广泛了。本次测评分别就内部输入信号的处理和外部输入信号的处理完成本次的关于ADCC模块的测评,第一篇测评就就内部输入信号的处理进行测评。


                                        图2.1 ADCC外设框图

2.1 初始化配置
       PIC18F16Q40单片机内部有一个温度传感器,该传感器并不是用来测量外部环境温度的,而是用来测量内部工作稳定,实现单片机内部温度阈值检测【5】,主要基于安全考虑。在得到内部温度传感器的模拟输出电压的数字采样值后,温度的转化结果可以是华氏温度也可以摄氏温度,用户可以自行选择。内部温度传感器的框图如图2.2所示。接下来开始具体的测评步骤。

           图2.2 内部温度传感器框图

        打开MPLAB软件,点击tool菜单栏,选择embeded,之后出现MPLAB Code Configurator(MCC),点击之后就出现MCC的配置界面了。一般配置顺序为:1、配置System module,主要包括系统时钟、看门狗和编程方式的配置。 2、配置Pin Mode,选择想要使用的单片机的引脚。3、选择Available Resouse。配置想要使用的单片机外设,如ADCC模块、UART模块等。本次对内部模拟信号的测评用到的模块分包括ADCC模块、UART模块、FVR模块。ADCC的配置界面如图2.3所示,配置ADCC的时钟、参考电压、输入信号的渠道(内部温度传感器)等;UART配置界面如图2.4所示,配置串口通信的引脚、波特率、数据位等;FVR配置界面如图2.5所示,配置增益、使能等;Pin Mode配置界面如图2.6所示,主要选择要用到的一些引脚(串口1映射到其它GPIO上了),这个功能挺实用的。配置完以后,点击generate按钮,就能自动生成要用到的模块的.c和.h文件,方便用户直接调取库函数。

                                                  图2.3 ADCC配置界面图

                                                  图2.4 UART配置界面图

                                                  图2.5 FVR配置界面图


        图2. 6 芯片引脚配置图

2.2 程序编写
        内部温度传感器的供电电压VDD不一样,那么在相同的温度下输出信号也不一样,所以需要从相关数据手册中找到某一个VDD下的温度与传感器输出电压对于关系【6】,这里选择PIC18F16Q40单片机的FVR(Fixed Voltage Reference)模块作为内部温度传感器的电源。2.1节中配置选择的FVR增益模式为X2,找到的特性曲线图如图2.7所示,公式如图2.8所示。得到这些资料以后就可以编写程序了。

       图2. 7 FVR的X2增益下的特性曲线

    图2. 8 温度-输出电压公式


      从图2.8中的公式可以看出函数的自变量包括ADCMEAS 、Offset、Gain,它们可以从MCC生成的ADCC的.c文件中调用函数得到,Device Information Area的部分展示如图2.9所示。其中Gain和Offset通过读取程序空间的专用区域得到,因为VDD=3.3V>2.5V,在FVR配置中选用Hi_range模式,所用FLASH_ReadWord()读取TSHR1中的值获得Gain的值,用FLASH_ReadWord()读取TSHR3中的值获得Offset;ADC采样温度传感器的输出电压的数值count可以由 adcc_meas = ADCC_GetConversionResult();转换得到,如此一来,内部工作温度就出来了。具体程序如下所示:

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

void main(void)
{
    SYSTEM_Initialize();
    INTERRUPT_GlobalInterruptEnable();
    while (1)
    {
        ADPCH = channel_Temp;
        gain = FLASH_ReadWord(DIA_TSHR1);
        offset = FLASH_ReadWord(DIA_TSHR3 );
        ADCC_GetSingleConversion(channel_Temp);
        adcc_meas = ADCC_GetConversionResult();
        tempC = (int24_t) adcc_meas * gain;
        tempC = tempC / 256;
        tempC = tempC + offset;
        tempC = tempC / (10);
        printf(" tempC %d \r\n", tempC);
        printf(" gain %d \r\n", gain);
        printf(" offset %d \r\n", offset);
        printf(" adcc_meas %d \r\n", adcc_meas);   
        delay_ms(50);
    }
}

                                                     图2. 9 Device Information Area表


2.3 测评结果             
      对写好的程序进行编译下载和运行,打开串口调试助手,选好串口号和波特率,在串口调试助手上面就可以看到PIC18F16Q40单片机向电脑端传输的内部工作摄氏温度数值,如图2.10所示。开发板上的串口用不了,于是用来一个USB转TTL工具,并重映射了一下单片的UART引脚(将UART1映射到了其它GPIO口),实现电脑PIC18F16Q40的通信。这里需要注意的是,PIC18F16Q40的RXD连接USB转TTL工具的TXD,PIC18F16Q40的TXD连接USB转TTL工具的RXD,具体原因很好理解,发射口连接到接收口。一发一收蛮。测评实物连接图如图2.10所示,测评结果图如图2.11所示,动态结果图如附件所示。


                                     图2.10 实物连接图



                                            图2.11 温度打印值


三、测评心得:
       本次测评是奔着PIC18F16Q40单片机的ADCC外设去的,想体验一下ADCC与ADC有什么不同,但是本次关于ADCC的测评并没有显著用到滤波、平均、调采样电容之类的,反倒是熟悉了使用MCC自动生成程序的流程与方法,这应当是本次收获最大的,其次就是利用ADCC采样内部温度传感器的模拟输出电压,这里还发生了一点小插曲。我直接用USB转TTL连接单片机和电脑后,发现通信十分不稳定,测了一下VDD电压,发现是4.2V,这与3.3V不符,用示波器看了一下,发现VDD抖动得十分厉害,于是接了另外一个3.3V的电源模块给USB转TTL模块供电,才解决这个问题。 ADCC模块的亮点是它自带了硬件计算功能,在下一篇测评中,可以尝试利用ADCC采样外部模拟电压来充分体验它的特性。




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

【3】Microchip Technology Inc. Channel Sequencing and Context Saving Using the ADCwith Computation and Context Switching Module[DB/OL].(2020)[2021-06-8].https://ww1.microchip.com/downloads/en/Appnotes/Channel-Sequencing-and-Context-Saving-Using-the-ADC-with-Computation-and-Context-Switching-Module-DS90003267A.pdf?utm_source=MCHP_Web&utm_medium=21IC_forum&utm_campaign=21IC_Peripheral&utm_term=21IC_Metrics&utm_content=21IC_ADCCC

【4】【5】Microchip Technology Inc.PIC18F06/16Q40 Datasheet[DB/OL].(2020)[2021-06-8].https://ww1.microchip.com/downloads/en/DeviceDoc/PIC18F06-16Q40-Data-Sheet-40002216C.pdf.

【6】Microchip Technology Inc.Temperature Indicator Module on 8-Bit PIC®Microcontrollers[DB/OL].(2020)[2021-06-9].https://ww1.microchip.com/downloads/en/Appnotes/TB3165-Temperature-Indicator-Module-on-8-bit-MCU-90003165B.pdf.




















温度动态输出.gif (37.63 KB )

温度动态输出.gif

使用特权

评论回复
沙发
mxkw0514|  楼主 | 2021-6-7 01:30 | 只看该作者
本帖最后由 mxkw0514 于 2021-6-13 21:51 编辑

ADCC本质上还是属于ADC的范畴

使用特权

评论回复
评论
mxkw0514 2021-6-14 10:30 回复TA
开始下一篇的测评 
板凳
dql2015| | 2021-6-14 14:16 | 只看该作者
gain为啥是负数,完整工程能分享一份吗

使用特权

评论回复
地板
mxkw0514|  楼主 | 2021-6-14 17:59 | 只看该作者
本帖最后由 mxkw0514 于 2021-6-15 18:42 编辑
dql2015 发表于 2021-6-14 14:16
gain为啥是负数,完整工程能分享一份吗

因为温度特性的拟合曲线的斜率是负的,这个曲线类似于线性的一次函数,该曲线的斜率是gain,截距offset

使用特权

评论回复
5
mxkw0514|  楼主 | 2021-6-14 18:01 | 只看该作者
dql2015 发表于 2021-6-14 14:16
gain为啥是负数,完整工程能分享一份吗

你好,这个是原工程,请多多指教

Temperature.X.rar

677.04 KB

使用特权

评论回复
6
hbthgsli| | 2021-6-25 10:58 | 只看该作者
资料不错,赞一下

使用特权

评论回复
7
mxkw0514|  楼主 | 2021-7-25 00:34 | 只看该作者
dql2015 发表于 2021-6-14 14:16
gain为啥是负数,完整工程能分享一份吗

请问PIC18F16Q40和PIC18F16Q41有什么显著的区别呢?

使用特权

评论回复
8
shuiyuehan| | 2022-6-19 10:44 | 只看该作者
正需要,谢谢

使用特权

评论回复
9
eefas| | 2022-7-9 12:35 | 只看该作者
ADCC模块精度怎么样

使用特权

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

本版积分规则

32

主题

572

帖子

5

粉丝