1. STM32内部温度传感器温度计算公式 根据AN3964《STM32L1x temperature sensor example》文档中的公式Temp = (TC2 – TC1) ⁄ (ValC2 – ValC1) × (ValTS – ValC1) + TC1 ValC1 ValC2是厂商生产时,标准电压(3.3V)下,TC1温度 和 TC2温度下ADC采样的值,存储在一个固定的地址中。例如我采用的芯片为STM32F051C8T6,则TC1=30 oC,TC2= 110oC,ValC1的数据存储在0x1FFFF7B8地址中,ValC2的数据存储在0x1FFFF7C2地址中。ValTS为通道16即温度通道的采样值,Temp为计算出来的温度值,单位为oC。 理论上根据以上的公式就能计算出温度的值,但是如果STM32供电电压跟厂商生产是的标准电压不一致时,就需要对ValTS进行缩放。 2. 供电电压与标准电压不一致时,对采样到的值进行缩放 先说明几个名词,例如Val的代表ADC通道采样的值,V接其他英文字符的代表电压值,Val*cal代表厂商存储在flash上的,标准电压下的通道采样的值。 a) 将当前供电电压下采样的值转换为标准供电电压下采样的值在同一个供电电压下,电压与ADC采样的值为一定比率关系,Vch16 = Val_ch16*Vdda/4096;在供电电压为3V下算出的通道上的电压值为Vch16 = Val_ch16_3 * 3/4096,在标准供电电压3.3V算出的通道上的电压值为Vch16 = Val_ch16_3p3 * 3/4096;则将3v下的ADC通道采样值转换到3.3v下ADC通道采样的值为:Val_ch16_3p3 = 3 * Val_ch16_3 / 3.3,当前的供电电压用Vdda 替换则:Val_ch16_3p3 = Vdda * Val_ch16_3 /3.3 b) 计算Vdda的值在相同的供电电压下,ADC通道上电压的值与ADC通道采样值比率一致,即内部参考电压的通道(通道17)上:Vdda/4096 = Vref / Val_ref,则Vdda = 4096 * Vref / Val_ref;根据出厂时,记录下来的参考电压通道采样值为Val_refcal(存储在地址0x1FFFF7BA上),即:Vref / Val_refcal = 3.3 / 4096,两条公式中和得出:Vdda = 3.3*Val_refcal / Val_ref;
结合a)和b)最后一条公式,得出:Val_ch16_3p3 = Vdda * Val_ch16_3 / 3.3 = (3.3*Val_refcal/ Val_ref) * Val_ch16_3 / 3.3
= Val_ch16_3 *Val_refcal / Val_ref 将Val_ch16_3p3替换到1公式中的ValTS 参考文献:1.
利用ST MCU内部基准参考电压监测电源电压及其它:http://www.51hei.com/bbs/dpj-40944-1.html2. 使用STM32的内部温度传感器:https://www.lijingquan.net/index.php/2016/08/11/stm32-internal-temp-sensor/3.stm32f051数据手册4.stm32f0xx 参考手册5. stm32l1x 温度传感器例子:AN3964《STM32L1xtemperature sensor example》 file:///C:/Users/fpga/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
一周热门 更多>