你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

悬赏:内部温度传感器HAL库得到电压值,如何得到12bit数字量

[复制链接]
wsyzxxnsjz 提问时间:2019-10-30 13:59 /
悬赏20ST金币未解决

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);
               
  }

收藏 评论12 发布时间:2019-10-30 13:59

举报

12个回答
radio2radio 回答时间:2019-10-30 14:25:17
你这个680本身就是ADC转换出来的数据,相对于参考电压的(参考电压=4095),不知道为什么你认为他是电压值,ADC数据范围,如果不符合要求的范围,需要采用线性插值变换,参考:
https://www.stmcu.org.cn/module/forum/thread-618342-1-1.html

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

废鱼 回答时间:2019-10-30 14:52:18
HAL_ADC_GetValue读取到的确实是数字量,读取的是ADC转换后的结果寄存器。因为参考电压不同,计算电压的结果不同。不知道楼主为什么说是读取到的是电压值呢?

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

七哥 回答时间:2019-10-30 23:53:37
以上两层楼说的对
但是这个系列的片子比较恶心。手册上说,得测出两个温度点的AD码值,然后按正比例算出当前温度。
wsyzxxnsjz 回答时间:2019-10-31 08:50:09
感谢各位的回复。
按我贴的程序去测量温度,温度从-40℃~105℃变化时,AD值变化范围约为500~720;变化范围太小,分辨率太低。
请问怎么将将ADC的参考电压配置为 该芯片的内部参考电压(1.2V)。这样来提高采集到的温度值范围和分辨率。(硬件不允许外接电压基准,还有我不需要温度的电压值,仅需要数字量)。
废鱼 回答时间:2019-10-31 09:34:12
要考虑你温度传感器的电压范围,如果超过1.2V,使用1.2V的参考电压会溢出。
mylovemcu 回答时间:2019-10-31 09:49:15
wsyzxxnsjz 发表于 2019-10-31 08:50
感谢各位的回复。
按我贴的程序去测量温度,温度从-40℃~105℃变化时,AD值变化范围约为500~720;变化范 ...

外部电压变化太大  可以考虑采用内部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
wsyzxxnsjz 回答时间:2019-10-31 09:57:35
温度传感器的是芯片的内部温度传感器,看datasheet如下图:130℃ 的电压是670mv。应该不会溢出;hal库如何配置为内部1.2V的参考电压呢? cankaodianya.jpg
wsyzxxnsjz 回答时间:2019-10-31 10:05:52
mylovemcu 发表于 2019-10-31 09:49
外部电压变化太大  可以考虑采用内部1.2V基准
使用方法

谢谢!请问只能这样,自己去采集两个通道值,去计算吗?不能像msp430一样,直接通过语句把ADC的参考电压配置为内部参考电压。然后直接读取采样结果吗?
mylovemcu 回答时间:2019-10-31 10:17:22
wsyzxxnsjz 发表于 2019-10-31 10:05
谢谢!请问只能这样,自己去采集两个通道值,去计算吗?不能像msp430一样,直接通过语句把ADC的参考电压 ...

没用过这种操作
radio2radio 回答时间:2019-10-31 10:25:43
提高分辨率,可以使用过采样技术,比如将12bit的硬件分辨率变成16bit的软件分辨率。
Glenxu 回答时间:2019-11-1 10:45:12
片内温度测量一般都没有你要求的12位分辨率,一般满足0.5℃绝对误差就不容易,如果你需要更高,请自己做个小量程外部测量电路,然后AD。
即使如此,目前一般手段和元件最高测量绝对误差都在0.2℃,高了就价格和电路离谱,不是你能控制的

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

Glenxu 回答时间:2022-11-28 09:37:58
注意手册上的公式是错我,用下面公式:
Current_Temp=(ADC_ConvertedValue-  V25)/AVG_SLOPE+25

V25和芯片有关,但基本在0.7~0.9V之间,AVG_SLOPE = 0.0043
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版