STM32每个芯片内部集成的温度传感器特性参数不完全相同,用户购买的My_ARM学习板可能与本节实验结果不一致。因此,建议利用该传感器测量芯片温度的相对变化,而非当前环境中的绝对温度。
如果用户坚持使用STM32内部温度传感器测量绝对温度,可以按照下面的步骤先校准一下环境温度系数。
1)运行本节实验程序,获取ADC1通道16上的温度传感器数据,记为adc_16。
2)将一支数字温度计放置在My_ARM学习板上的STM32芯片表面,读取当前温度值,记为Temp_Thermometer(TT)。
3)利用万用表测量开发板上Vref+实际参考电压值,记为Vref。
4)利用以下公式进行等效系数换算,求取STM32芯片温度传感器的V25:
其中,Avg_Slope取标准值0.0043V/℃。
1.软件架构设计
考虑到STM32芯片内部温度变化非常缓慢,无须进行快速采集,因此,选择普通while循环即可。另外,由于ADC采集回来的数据为12位无符号整数,需要根据ADC电压转换公式,将其转换为实际的模拟电压值,然后再根据ADC芯片温度转换公式,将模拟电压值进行转换,得到最终的真实温度值。
程序框架已经编写完成,接下来就是如何在LabVIEW中访问STM32上的ADC资源了。
由于本实验采集的是芯片内部通道16上面的温度传感器输出的电压值,只有ADC1能够采集,外部电路无法接入,因此,采集部分没有原理图。但是在驱动蜂鸣器的时候,需要外部电路支持,其中,蜂鸣器对应的引脚为PG11,输出方式为推挽输出。
下面重点介绍基于VI函数和EIO节点这两种方式下的程序实现过程。
3.利用ADCmx VI函数来采集芯片温度
ADCmx函数的打开、读取、关闭都是多态VI,加上芯片内部温度只有ADC1能够采集,因此,这3类多态ADCmx VII都需要选择成ADC1函数。同时,为了提高转换精度,需要将ADC转换周期设置为21μs,蜂鸣器设置为推挽输出。
4.利用EIO节点来采集芯片温度
基于EIO节点的ADC驱动实现和使用方法,下面采用ADC的EIO节点方式来读取STM32芯片内部的温度值。
首先,在虚拟文件夹“ADC温度采集实验”上右击,新建一个ADC1的EIO节点,单击“确定”按钮,将STM32_Temperature和虚拟文件夹“-蜂鸣器实验”中的BEEP两个EIO节点分别拖曳到图。