打印
[学习笔记]

【杰发科技AC7802x测评】+ADC测试,显示内部温度传感器值

[复制链接]
775|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一.前言
接上回,成功驱动液晶进行显示后,准备测试ADC功能。
官方已经有现成的例子,直接移植到工程就行,对于ADC功能在实际项目中使用的还是很多,类似于采集电压,采集一些模拟量的传感器都能用的上。
二.ADC相关资料和初始化ADC
void ADC_Sample_init(void)
{
    ADC_ConfigType adcConfig;                    /*! ADC初始化配置*/
    memset(&adcConfig, 0x00, sizeof(adcConfig)); /*! 清空结构体*/
    /*! ADC输入端口(电位器)配置*/
    GPIO_SetFunc(GPIOA, GPIO_PIN10, GPIO_FUN2); /*! PA10复用为FUN2,为ADC_IN1 ,对应电位器VR1*/
    /*! ADC配置
    ADC固定为12位分辨率,工作模式为MODE3(工作模式内容见参考手册8.4.2章节),规则组扫描+注入组扫描模式多通道单次转换,规则组长度为3,注入组长度为0
    每触发一次进行一次ADC转换,每次转换规则组中的3个通道。
    */
    adcConfig.clkPsc                     = ADC_CLK_PRESCALER_2;  /*! ADC时钟分频设置,Set ADC Clk = APB时钟频率/(clkPsc + 1) = 16M/2 = 8M */
    adcConfig.scanModeEn                 = ENABLE;               /*! 模式配置SCAN:扫描模式使能位 多通道需使能扫描模式,单通道则不需要使能*/
    adcConfig.continuousModeEn           = DISABLE;              /*! 模式配置CONT:连续模式使能位 0:触发一次后只转换一次,1:触发后可连续转换*/
    adcConfig.regularDiscontinuousModeEn = DISABLE;              /*! 模式配置DISCEN:打开规则组间断转换模式*/
    adcConfig.injectDiscontinuousModeEn  = DISABLE;              /*! 模式配置IDISEN:打开注入组间断转换模式*/
    adcConfig.injectAutoModeEn           = DISABLE;              /*! 模式配置IAUTO:自动注入模式*/
    adcConfig.intervalModeEn             = DISABLE;              /*! 模式配置INTERVAL:注入组为间隔转换模式*/
    adcConfig.regularDiscontinuousNum    = 0;                    /*! 规则组子组长度,用于Mode7Mode8*/
    adcConfig.interruptEn                = DISABLE;              /*! 总中断使能*/
    adcConfig.voltageRef                 = ADC_VOLTAGEREF_VDDA;  /*! ADC参考源选择 */
    adcConfig.regularTriggerMode         = ADC_TRIGGER_INTERNAL; /*! 规则组触发源类型选择*/
    adcConfig.injectTriggerMode          = ADC_TRIGGER_INTERNAL; /*! 注入组触发源类型选择*/
    adcConfig.regularSequenceLength      = 3;                    /*! 规则组长度*/
    adcConfig.injectSequenceLength       = 0;                    /*! 注入组长度*/
    adcConfig.dataAlign                  = ADC_DATA_ALIGN_RIGHT; /*! 数据右对齐*/
    adcConfig.callBack                   = NULL;                 /*! ADC回调函数*/
    adcConfig.powerMode                  = ADC_POWER_ON;         /*! ADC上电*/
    ADC_Init(ADC0, &adcConfig);                                  /*! ADC works Mode Config*/
    /*!
        ADC转换率计算公式:
        总转换时间=(SPT+ 12)/ADC时钟频率+5APB时钟周期
        备注:
        1.SPT为采样周期个数,具体见下面ADC_SPT_CLK_x
        2.ADC时钟频率 = APB时钟频率 /(分频系数+1)
        3.7802x ADC支持的最高采样率为250Ksps(即转换时间不低于4us),如果配置采样率高于该值,可能会导致采样结果精度显著减低。
    */
    /*规则组通道转换序列和转换速率配置*/
    ADC_SetRegularGroupChannel(ADC0, ADC_CH_1, ADC_SPT_CLK_33, 0);   /*! 采样&转换时间= (33+12)/8000000 + 5/16000000 ≈ 5.94us */
    ADC_SetRegularGroupChannel(ADC0, ADC_CH_1, ADC_SPT_CLK_33, 1);   /*! 采样&转换时间= (33+12)/8000000 + 5/16000000 ≈ 5.94us */
    ADC_SetRegularGroupChannel(ADC0, ADC_CH_VIN, ADC_SPT_CLK_33, 2); /*! 采样&转换时间= (33+12)/8000000 + 5/16000000 ≈ 5.94us */
    /*! BandgapT-sensor内部通道配置*/
    ADC_SetInternalChannel(ADC0, ADC_INTERNAL_TSENSOR); /*! 内部电压信号选择(仅在使用了ADC_CH_VIN 时配置) */
    ADC_SetVBufEnableFlag(ADC0, ENABLE);                /*! BandgapT-sensor内部通道使能(仅在使用了ADC_CH_VIN 时配置) */
}
三.温度计算和显示
                ADC_TriggerTest(); /*! 触发ADC数据转换并打印 */
                VTEMP25 = 0.705f;
                Slope = (-1.709f);
                VSENSE = (float)((float)g_adc_RegularArray[2]*3.3f)/4096.0f;
                printf("T电压:%f\r\n",VSENSE);
               
                Tempbuf = ((VTEMP25 - VSENSE) / Slope)*1000 + 25;
                printf("温度:%f\r\n",Tempbuf);
                Clear_Screen();
                LCD_P16x16Ch(0,2,21);                                               //  
                LCD_P16x16Ch(16,2,22);                                              //  
                SetCursor(32, 2);
                Printf(":");
                SetCursor(40, 2);
                Printf("%4.1f", Tempbuf);
                LCD_P16x16Ch(103, 2, 25);
把程序更新到开发板,进行验证。

使用特权

评论回复

相关帖子

沙发
tpgf| | 2023-7-6 09:40 | 只看该作者
在使用adc采集的时候需要先进行校准吗

使用特权

评论回复
板凳
磨砂| | 2023-7-6 10:07 | 只看该作者
如果只是用来显示内部温度的话 是不是就不需要外部采集什么数据了啊

使用特权

评论回复
地板
八层楼| | 2023-7-6 10:32 | 只看该作者
ADC的内部温度传感器是用来对adc进行温度补偿的吗

使用特权

评论回复
5
guanjiaer| | 2023-7-6 11:21 | 只看该作者
有没有尝试使用不同的采样频率对这个温度传感器进行采集呢

使用特权

评论回复
6
晓伍| | 2023-7-6 18:01 | 只看该作者
实际上能检测到温度传感器采集的误差大概能有多大吗

使用特权

评论回复
7
观海| | 2023-7-6 18:32 | 只看该作者
看数据的话  刚开始跳动比较大 后来还是比较稳定的

使用特权

评论回复
8
laocuo1142|  楼主 | 2023-7-10 08:21 | 只看该作者
磨砂 发表于 2023-7-6 10:07
如果只是用来显示内部温度的话 是不是就不需要外部采集什么数据了啊

对啊

使用特权

评论回复
9
laocuo1142|  楼主 | 2023-7-10 08:22 | 只看该作者
guanjiaer 发表于 2023-7-6 11:21
有没有尝试使用不同的采样频率对这个温度传感器进行采集呢

还没仔细看,目前是验证了一下功能

使用特权

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

本版积分规则

1172

主题

5132

帖子

12

粉丝