单片机AD采样请教

2020-01-18 18:49发布

请教一下大家一个8位单片机采样,我用的单片机是12位AD,现在对AD采样,采样处理后转换出来的温度要精确到小数点后一位即转换出来是AA.X,      AA.X是处理好后看到的十进制温度值。因为12位AD中是分两个寄存器存放的,一个存放8位AD值,另一个存放4位AD值,现在我把8位AD值采样32次求得平均值用作AA,即整数部分显示,把另外4位用作.X显示,问题出来了,那4位转换成10进制数后跳动很很厉害,一时间显示个“0”,又一舜间显示个“9”或8 或其它数,请问大家有没有什么好的方法处理一下这个4位AD?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
four_zhg
1楼-- · 2020-01-19 08:20
如果跳的历害,有二种方法,一种是采用软件滤波看能不能做到,另一种是用12位进行采样后,降低精度(当然前提是降下来的精度是你产品能接受的)。还有一种,是在进行显示更新的时候,可以进行延时更新,在感观上是可以看到显示变化不那么历害的
vampirejing
2楼-- · 2020-01-19 08:30
BOERLBH 发表于 2015-12-4 09:52
12位 算不算什么高精度  一般单片机里面集成的ADC  INL 和 DNL 不超过 4LSB 。跳的 厉害 可能是你的 传感器 ...

太对了,何况跳动又怎么样,在误差范围内就可以了
weimas
3楼-- · 2020-01-19 11:43
我也遇到过同样的情况,由于中间太忙就没怎么弄,至今还未解决。不过当时试了坛里前辈们的一些办法,我用的是中值滤波,有所改善。
小Z
4楼-- · 2020-01-19 15:11
取十次,分别去掉最大值和最小值,再求平均值
zxq_9781
5楼-- · 2020-01-19 17:44
 精彩回答 2  元偷偷看……
luybpotter
6楼-- · 2020-01-19 20:46
数据总线 发表于 2015-12-4 09:38
luybpotter ,能不能文字说明具体点
  1. unsigned int getad(void) {
  2.     unsigned int adres_ad0 = 0;
  3.     ADON = 1; //使能AD
  4.     NOP();
  5.     NOP();
  6.     NOP(); //采样电容充电
  7.     ADGO = 1; //开启AD
  8.     while (ADGO);   //等待AD转换完成
  9.     adres_ad0 = ADRESH; //00000000 00001111  12位AD的高4位存到adres_ad0
  10.     adres_ad0 = adres_ad0 << 8 | ADRESL;    //取完整的12位结果
  11.     ADON = 0;//关AD
  12.     return (adres_ad0);//返回12位AD值
  13. }
复制代码
LZ取AD值有问题,要完整取出12位。
如果抖动厉害的话,可以加上软件滤波,如限幅平均值法

一周热门 更多>