【M32】F103CBTx 内部温度传感器和内部参考电压采集

ADC 双通道 DMA 采集内部温度和内部参考电压

1.配置

勾选温度传感器通道和参考电压通道
在这里插入图片描述

开启连续转换模式
在这里插入图片描述

转换通道数为2,通道1为温度传感器通道,通道2参考电压通道
在这里插入图片描述
配置DMA为循环传输,半字数据位宽,外设到存储器,存储器传输地址指针递增(增量值取决于所选的数据宽度)
在这里插入图片描述

2.实现

在主函数中定义结构体数组存储采集值

#define AVMAX 10
struct
{
  uint16_t temp;
  uint16_t vref;
} AdcValue[AVMAX];

开启采集,HAL_ADCEx_Calibration_Start一定要在HAL_ADC_Start_DMA前进行使用,校准采集的电压值,不然误差很大

HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&AdcValue, sizeof(AdcValue) / sizeof(uint16_t));

计算采集电压的平均值,此处平均值类型一定要是有符号数

int32_t temp = 0.0, vref = 0.0;
for (uint8_t i = 0; i < AVMAX; i++)
{
  temp += AdcValue[i].temp;
  vref += AdcValue[i].vref;
}
temp /= AVMAX;
vref /= AVMAX;

打印计算温度,计算公式:
温度(℃)= (当前电压值 - 25℃时的电压值)/平均斜率 + 25

查阅数据手册,在温度传感器特性表格中,获取25℃时的电压值和平均斜率,注意计算单位

在这里插入图片描述

此处使用毫伏转温度计算:

printf("MCU Temperature : %.5f\r\n", ((temp * 3300.0 / 4096 - 1410) / 4.2 + 25));

打印内部参考电压

printf("Vrefint value = %1.3fV \r\n", vref * 3.3f / 4096);

3.实验

✔正确操作:
通过校准后,符合实际温度数值
在这里插入图片描述

❌错误操作:
当注释掉校准,测量值偏差较大

在这里插入图片描述
当启动后校准,数值完全错误
在这里插入图片描述

交流

项目仓库:https://github.com/dissor/F1-Link.git

git clone https://github.com/dissor/F1-Link.git
cd F1-Link
git reset --hard aa91d96983ab290c8fb13207b22920ced71a73e5

微信公众号:物联指北
B站:物联指北
千人企鹅群:658685162

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西洛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值