- 积分
- 3537
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2014-11-13
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
写在开篇:忙里偷闲来学习,顺带再发个贴。众所周知,处理器内部是完全的数字信号,二我们好多时候是需要来测量外部的模拟信号的,such as:vlotage,current,temperature,light,humidity,etc.但好多的各种模拟量,我们最终都会通过各种方法转换成电压或是频率来进行测量,我们最常用的还是电压转换法。这正好完全可以使用STM片内自带的12高精度ADC.
一:“听说我啥都不用接就可以测温度":
没错,STM32片内自带温度传感器,在adc的channel16,因此,我们可以先来个简单好玩的,用它来测测温度耍耍。
对于此次编程,我们依旧采取最简单原则,用到什么看什么写什么。
二:前提准备:
芯片的datasheet是必不可少的,这要用来提供我们查找需要使用的资源资料。之前的帖子因为太简单,就没作如此说明。大家都说stm的温度传感器是在ADC1 的16通道上,我这个是不是呢?听说别人的不一定正确,自己眼见为实,试验过后才是自己所掌握的。所以凡事我们要多看多做。而不是只听不做。
打开pdf, ctrl+f ,找到温度传感器:
根据文档说明,发现其实是16和18通道都可以。那温度怎么计算呢?
计算方法这里也有详细说明,如此我们便可以进入编程阶段了。
三:软件编写
1、依旧使用STM32CubeMX
只选中我们使用的温度传感器通道。另外串口之前已设置过,这里不再叙述。
最后生成工程文件打开编译无任何问题。
2、串口的重定向
因为在串口使用中,我们更习惯使用printf来输出串口调试信息或者结果,于是添加如下代码:
3、温度传感器的使用
重定向做好后,就需要去看看软件是否将温度传感器的初始化等配置好
找到如下图所示程序,我们发现在通道配置哪里使用的是ADC_CHANNEL_TEMPSENSOR;
这是不是就是16通道呢?我手动改为16通道行不行呢?答案是不行的,为什么?看截图:
软件已配置好默认使用18通道作为温度传感器通道,而16通道是作为普通adc来使用的
关于计算,由于参考PDF文档,程序如下:
这里为什么是使用3.3V来计算呢?而不是3300来计算?这个留给感兴趣的自行思考。。
4、软件滤波
这里参考了网速的滤波程序,选用了两种试验,程序如下:
即一阶滤波和中值滤波。
效果感觉都差不多(一阶滤波调整参数变化明显),不用的话,波动会大一些,
好像到此所要做的就完成了,下面就是结果检验了。
四:结果验证
其实这都是调试了好几回的才达到如下截图效果,挺稳定的了
测得也差不多是环境温度,和公司空调显示环境温度一致,误差根据文档,+-1.5℃
分辨率的话,12位AD(2.5mV/℃),在0.4℃左右。
总结:程序功能看似很简单,但是要组合起来也不是说分分钟就调的有多好,是需要试验的,我之前也没用过内部温度传感器,所以程序中有错误的地方还望高手不吝赐教
|
|