cubemx +IAR。单片机型号:STM32L011K4.
hal库adc采样温度传感器的值。要求采集到的温度值,对绝对温度没有要求,必须要一个数字量(0~4096)。实际运行后得到一个电压值,室温约680.
请大神帮忙,怎么才能得到0~4096范围的温度数字量。
比较紧急,还请知道的大神们,能指点迷津。
一下是程序和截图
/* USER CODE BEGIN 0 */
unsigned int adc_v;
double adcx;
double temp;
/* USER CODE END 0 */
int main(void)
{
HAL_Init();
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_ADC_Init();
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_ADC_Start(&hadc);
adc_v = HAL_ADC_GetValue(&hadc);
https://www.stmcu.org.cn/module/forum/thread-618342-1-1.html
评分
查看全部评分
评分
查看全部评分
但是这个系列的片子比较恶心。手册上说,得测出两个温度点的AD码值,然后按正比例算出当前温度。
按我贴的程序去测量温度,温度从-40℃~105℃变化时,AD值变化范围约为500~720;变化范围太小,分辨率太低。
请问怎么将将ADC的参考电压配置为 该芯片的内部参考电压(1.2V)。这样来提高采集到的温度值范围和分辨率。(硬件不允许外接电压基准,还有我不需要温度的电压值,仅需要数字量)。
外部电压变化太大 可以考虑采用内部1.2V基准
使用方法
内部参照电压VREFINT和ADC1_IN17相连 采集通道17的AD值AD1,在采集温度的AD值AD2,那么AD2的电压值就是V=AD2*1.2/AD1 根据电压值换算成温度值就可以了
如果要0-4096的变化值就是value=AD2*1.2*4096/AD1/3.3
谢谢!请问只能这样,自己去采集两个通道值,去计算吗?不能像msp430一样,直接通过语句把ADC的参考电压配置为内部参考电压。然后直接读取采样结果吗?
没用过这种操作
即使如此,目前一般手段和元件最高测量绝对误差都在0.2℃,高了就价格和电路离谱,不是你能控制的
评分
查看全部评分
Current_Temp=(ADC_ConvertedValue- V25)/AVG_SLOPE+25
V25和芯片有关,但基本在0.7~0.9V之间,AVG_SLOPE = 0.0043