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 参考文献: 3.stm32f051数据手册 4.stm32f0xx 参考手册 5. stm32l1x 温度传感器例子:AN3964《STM32L1xtemperature sensor example》 file:///C:/Users/fpga/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
|