STM32G0开发笔记-Platformio+libopencm3-NTC温度采集
使用Platformio平台的libopencm3开发框架来开发STM32G0,以下使用ADC进行NTC温度采集。
1 新建项目
- 建立ntc_temp项目
在PIO的Home页面新建项目,项目名称ntc_temp,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;
- 项目建立完成后在src目录下新建main.c主程序文件;
- 修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:
1 | upload_protocol = cmsis-dap |
- 为了能使用printf的浮点功能,可以加入如下配置:
1 | build_flags = |
2 编写程序
2.1 ADC设置
1 | void adc_setup() |
ADC设置按照之前文章介绍的方法设置PA0为ADC输入;
2.2 ADC读取
1 | uint16_t adc_sample() |
2.3 ADC与NTC的温度转换
- 首先根据所选的NTC规格的温度-电阻对应表得到其ADC值的关系表:
这里的NTC分压电阻为10K,ADC分辨率为12位,因此ADC采集值为:(NTC电阻 x 4095) ÷ (NTC电阻 + 10K),即可得到如下所示的表格:
在EXCEL中计算出ADC采样数值-温度对应表,为了简单ADC进行取整,就可以得到电阻-55到125摄氏度的ADC对应表:
1 | const uint16_t ntcDATA[] = { |
- 然后根据表格获取温度,即每个ADC对应的索引即为温度值,如4040为索引0,对应第一个温度-55℃;
- 表格中数据是有序的,因此这里可以使用二分法查找,对于两个数中间值则取其相近的那个值:
1 |
|
- 然后根据索引得到温度:
1 |
|
表格中的温度是1度进行变化的,如果需要稍微精确的,这里在1度中间的值近似看做线性进行计算;
这里为了减小计算误差,先对其扩大十倍计算,显示时候再转为小数:
1 | uint16_t adc = adc_sample(); |
3 连接硬件并测试
3.1 连接硬件
按照如下图,将NTC和10K电阻连接到PA0脚:
3.2 测试
打开串口,当手放在NTC上可以看到温度变化:
著作权归本网站(https://makerinchina.cn)所有,转载请注明来自 MakerInChina.