赞
踩
1)实验平台:正点原子APM32E103最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban
本章介绍使用ADC采集APM32E103内部温度传感器输出的电压值,并根据该电压值计算出APM32E103芯片的大致温度。通过本章的学习,读者将学习到ADC、内部温度传感器的使用。
本章分为如下几个小节:
36.1 硬件设计
36.2 程序设计
36.3 下载验证
36.1 硬件设计
36.1.1 例程功能
/** * @brief 获取内部温度传感器温度值 * @param 无 * @retval 温度值(扩大了100倍,单位:℃) */ int16_t adc_get_temperature(void) { uint16_t adcx; int16_t result; double temperature; /* 读取内部温度传感器通道,10次取平均 */ adcx = adc_get_result_average(ADC_TEMPSENSOR_CHX, 20); temperature = (double)adcx * (3.3 / 4095); /* 转化为电压值 */ temperature = (1.43 - temperature) / 0.0043 + 25;/* 计算温度 */ result = temperature *= 100; /* 扩大100倍. */ return result; }
从上面的代码中可以看到,在获取温度传感器的输出电压后,需要将电压值转换为实际的温度值,转换公式涉及内部温度传感器的物理特性,由芯片的设计厂家给出。
36.2.3 实验应用代码
本章实验的应用代码,如下所示:
int main(void) { int16_t temp; NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4); /* 设置中断优先级分组为组4 */ sys_apm32_clock_init(15); /* 配置系统时钟 */ delay_init(120); /* 初始化延时功能 */ usart_init(115200); /* 初始化串口 */ led_init(); /* 初始化LED */ lcd_init(); /* 初始化LCD */ adc_init(); /* 初始化ADC */ lcd_show_string(30, 50, 200, 16, 16, "APM32", RED); lcd_show_string(30, 70, 200, 16, 16, "Temperature TEST", RED); lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED); lcd_show_string(30, 120, 200, 16, 16, "TEMPERATE: 00.00C", BLUE); while (1) { temp = adc_get_temperature(); /* 得到温度值 */ if (temp < 0) { temp = -temp; /* 显示负号 */ lcd_show_string(30 + 10 * 8, 120, 16, 16, 16, "-", BLUE); } else { /* 无符号 */ lcd_show_string(30 + 10 * 8, 120, 16, 16, 16, " ", BLUE); } /* 显示整数部分 */ lcd_show_xnum(30 + 11 * 8, 120, temp / 100, 2, 16, 0, BLUE); /* 显示小数部分 */ lcd_show_xnum(30 + 14 * 8, 120, temp % 100, 2, 16, 0x80, BLUE); LED0_TOGGLE(); /* LED0闪烁,提示程序运行 */ delay_ms(100); } }
本章实验的应用代码很简单,在完成包括ADC之内的初始化后,便重复通过函数adc_get_temperature()获取内部温度传感器采集的温度值,并在LCD上实时显示。
36.3 下载验证
在完成编译和烧录操作后,便可看到LCD上不断地刷新显示APM32E103内部温度传感器采集到的温度值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。