1736|2

1553

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【HC32F4A0开发板测评】+ADC数据采集与温度测控 [复制链接]

 
本帖最后由 jinglixixi 于 2023-3-12 11:42 编辑

在HC32F4A0开发板上,配有3个ADC数据采集通道,并在一个通道上配有10K的电位器来调节模拟信号,其电路如图1所示。在使用时,需将开关J13拨到AVCC一侧。

此外,值得称赞的是该开发板是一款面向应用而设计的产品,这从它的上下钳位电路即可看出,在一般的采样电路上是不会这样细心的。

图1 通道3接口电路

 

在该电路的基础上,只需为其添加一个OLED屏就可构成一个数字式电压表。

其以巡回方式采集数据的函数为 :

static void AdcPolling(void)
{
    uint16_t u16AdcValue;
    int32_t iRet = LL_ERR;
    __IO uint32_t u32TimeCount = 0UL;
    ADC_Start(ADC_UNIT);
    do {
        if (ADC_GetStatus(ADC_UNIT, ADC_EOC_FLAG) == SET) {
            ADC_ClearStatus(ADC_UNIT, ADC_EOC_FLAG);
            iRet = LL_OK;
            break;
        }
    } while (u32TimeCount++ < ADC_TIMEOUT_VAL);
    if (iRet == LL_OK) {
        u16AdcValue = ADC_GetValue(ADC_UNIT, ADC_CH);
	   	OLED_ShowNum(20,6,ADC_CAL_VOL(u16AdcValue),4,16);
    } else {
        ADC_Stop(ADC_UNIT);
        DDL_Printf("ADC exception.\r\n");
    }
}

 

完成显示功能的主程序为:

int32_t main(void)
{
    LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU);
	LED_Init();
	OLED_Init();
    OLED_Clear();
	OLED_ShowString(20,0,"HC32F4A0SITB",16);
	OLED_ShowString(20,2,"ADC & NTC",16);
	OLED_ShowString(20,4,"voltage:(mV)",16);
    DDL_PrintfInit(BSP_PRINTF_DEVICE, 19200U, BSP_PRINTF_Preinit);
    AdcConfig();
    LL_PERIPH_WP(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU);
    for (;;) {
        AdcPolling();
        DDL_DelayMS(500UL);
    }
}

 

经编译下载,通过调节电位器即可产生图2至图4所示的检测效果。

图2  满量程状态

 

图3  中间值状态

 

图3  零值状态

 

那我们该如何来使用其它2个检测通道呢?

我们可以通过图4所示的接口来引入外部的检测信号,具体的使用是接如一个NTC热敏电阻来检测温度。

图4  模拟信号接口

 

为使用通道ADC3_IN18来进行检测,需对以下定义项加以修改:

#define ADC_UNIT            (CM_ADC3)

#define ADC_PERIPH_CLK      (FCG3_PERIPH_ADC3)

#define ADC_CH             (ADC_CH18)

#define ADC_CH_PORT        (GPIO_PORT_H)

#define ADC_CH_PIN          (GPIO_PIN_04)

#define t_max               20

 

然后再将寻回采集函数加以修改,修改后的内容为:

static void AdcPolling(void)
{
    uint16_t u16AdcValue,u,V;
    int32_t iRet = LL_ERR;
    __IO uint32_t u32TimeCount = 0UL;
    ADC_Start(ADC_UNIT);
    do {
        if (ADC_GetStatus(ADC_UNIT, ADC_EOC_FLAG) == SET) {
            ADC_ClearStatus(ADC_UNIT, ADC_EOC_FLAG);
            iRet = LL_OK;
            break;
        }
    } while (u32TimeCount++ < ADC_TIMEOUT_VAL);
    if (iRet == LL_OK) {
        u16AdcValue = ADC_GetValue(ADC_UNIT, ADC_CH);
	   	OLED_ShowNum(20,4,ADC_CAL_VOL(u16AdcValue),4,16);
		u=ADC_CAL_VOL(u16AdcValue);
		if((u<=2042)&&(u>1644)) u=0+(2042-u)/4;
        if((u<=1644)&&(u>1268)) V=10+(1644-u)/37;
        if((u<=1268)&&(u>947)) V=20+(1268-u)/32;
        if((u<=947)&&(u>692)) V=30+(947-u)/25;
        OLED_ShowNum(60,6,V,3,16);
		if((V > t_max)  GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_03);
		else     GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_03);
    } else {
        ADC_Stop(ADC_UNIT);
        DDL_Printf("ADC exception.\r\n");
    }
}

 

对应的温度测控主程序为:

int32_t main(void)
{
    LL_PERIPH_WE(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU);
    LED_Init();
	OLED_Init();
    OLED_Clear();
	OLED_ShowString(20,0,"HC32F4A0SITB",16);
	OLED_ShowString(20,2,"voltage:(mV)",16);
	OLED_ShowString(20,6,"temp=    C",16);
    DDL_PrintfInit(BSP_PRINTF_DEVICE, 19200U, BSP_PRINTF_Preinit);
    AdcConfig();
    LL_PERIPH_WP(LL_PERIPH_GPIO | LL_PERIPH_FCG | LL_PERIPH_PWC_CLK_RMU);
    for (;;) {
        AdcPolling();
        DDL_DelayMS(500UL);
    }
}

 

经下载测试,即可得到图5和图6所示的检测结果,因此可见该开发板是很有实用价值的。

图5  室温检测

 

图6  体温检测    

最新回复

这个例子非常经典,是学习的好例子!   详情 回复 发表于 2023-3-12 12:43
点赞 关注
 
 

回复
举报

7097

帖子

11

TA的资源

版主

沙发
 

这个例子非常经典,是学习的好例子!

点评

感谢支持!!!  详情 回复 发表于 2023-3-13 00:19
 
 
 

回复

1553

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
lugl4313820 发表于 2023-3-12 12:43 这个例子非常经典,是学习的好例子!

感谢支持!!!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表