一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 12034|回复: 19
收起左侧

[51单片机] 怎样用stc单片机的ad测大于 5v小于 50v的电压呢?

  [复制链接]
发表于 2011-5-7 22:17 | 显示全部楼层 |阅读模式
如题
      如果用电阻分压缩小十倍后再输入到单片机的输入端,然后在程序里面放大十倍这样一来分辨率却低了请问有什么好方法吗?
谢谢!
发表于 2011-5-7 23:03 | 显示全部楼层
请仔细想想,其实分辨率是一样的
假设是10位ad
如果分压十倍,则分辨率为:10*(5-0.5)/1024;
如果可以直接测量,则分辨率为:(50-5)/1024;
归根到底都是一样的,并没有分辨率降低的问题
发表于 2011-5-7 23:18 | 显示全部楼层
除了分压缩小电压没有其他办法了吧?
分辨率为什么降低呢?没有降低
 楼主| 发表于 2011-5-8 00:48 | 显示全部楼层
本帖最后由 LBQ691477940 于 2011-5-8 01:05 编辑
请仔细想想,其实分辨率是一样的
假设是10位ad
如果分压十倍,则分辨率为:10*(5-0.5)/1024;
如果可以直 ...
desertsailor 发表于 2011-5-7 23:03 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



      如果测的是 5V那么也就是 5/1024=0.00488V,相当于AD返回的值每加减一就变化了0.00488V
如果测的是50V那么也就是先要用电阻分压10倍才能输入,在程序里面同样要放大10倍才是最终的值也就是说0.00488*10=0.0488了,相当于AD返回的值每加减一就变化了0.0488V了。也就是相当于是分辨率低了??难道是我理解差了!
用了10/1分压电阻,就是要把把小数点右移了一位如果分压后输入到IC上的电压为1.543向右移一位后就变成了15.43了很明显少了一个小数位数,如果没经过分压就算返回的AD值有一位数的跳动也是在百分位和千分上跳动但是放大十倍将小数点向右移一位后就变成了十分数后百分位上跳动了
      请问如果预先要用电阻衰减了十部那么程序应该怎么处理呢?不是将AD返回的值*10吗?谢谢!
发表于 2011-5-8 10:50 | 显示全部楼层
如果测的是 5V那么也就是 5/1024=0.00488V,相当于AD返回的值每加减一就变化了0.00488V
如果测 ...
LBQ691477940 发表于 2011-5-8 00:48 [url=https://www.yleee.com.cn/images/common/back.gif
https://www.yleee.com.cn/images/common/back.gif[/quote[/url]]


         你说得没错!不过提点建议供你参考!


          一。如基准电压选择5V,STC可以用一个通道测量5V基准电压。并以测量结果对其它通道的结果进行修正。其处理公式:


                测量结果=  实测的参考电压/(0x3ff+1)


         二。ST片进行AD应用时,合适的选择转换速率。


                时钟速度越快,转换时间越短。但要牺牲转换精度作代价!


        三。50V测量。程序不能作简单的*10处理


               测量结果= 10次AD转换结果的累加。


              这样处理结果比你小数点右移一位好得多!
 楼主| 发表于 2011-5-8 15:01 | 显示全部楼层
本帖最后由 LBQ691477940 于 2011-5-8 15:08 编辑
https://www.yleee.com.cn/images/common/back.gif[/url][/quote[/url]]


         你说得没错!不过提点建 ...
倪大德 发表于 2011-5-8 10:50 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]


谢谢!回复,我也是用一个通道作为基准源,实际连接是P1.2口接基准源的,R17是个可调电阻(如果不接C7/C8/R18效果更差),但结果好像不太理想比如你输入的是 15V然后调节R17让其显示的值跟万用表相等但然后再输入10V以下的电压却显示值会比万用表 > 0.1V的样子,如果输入的是20V以上又会比万用表 < 0.1V左右。也就是线性度相当差请问有什么方法能控制吗?
GandF原创M8数控电源所用的M8里面的AD位不比STC12A60S2的位高呀!(AD性能应该是M8的高,哈哈!)为何GandF版的线性那么好呢??
未命名.jpg
//=============================== AD转换程序 ======================================
//功能:各通道AD转换通用程序
//入口: uchar channels 可 = 0/1/2/3/4/5/6/7 分别对应为P1.0~P1.7 为AD输入通道
//出口:返回对应通道的转换结果
//设计: LBQ691477940   2011-02-19
//=================================================================================
uint ADC(uchar channels)   //AD转换程序  
{
  uchar AD_finished=0;  //存储 A/D 转换标志
  ADC_RES = 0;
  ADC_RESL = 0;
  channels &= 0x07;   //0000,0111 清0高5位
  ADC_CONTR = AD_SPEED;
  nop;
  ADC_CONTR |= channels;  //选择 A/D 当前通道
  nop;
  ADC_CONTR |= 0x80;   //启动 A/D 电源
  delay(1);     //使输入电压达到稳定
  ADC_CONTR |= 0x08;   //0000,1000 令 ADCS = 1, 启动A/D转换,
  AD_finished = 0;
  while (AD_finished ==0 ) //等待A/D转换结束
   {
    AD_finished = (ADC_CONTR & 0x10); //0001,0000 测试A/D转换结束否
   }
  ADC_CONTR &= 0xE7;              //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,
  return (ADC_RES*256+ADC_RESL+1);  //返回 A/D 转换结果
}
//==========================ADC转换30次的平均数=====================================
uint ADC_Filter(uchar IOd) //软件算术平均滤波
{
  ulong sum = 0;
  uchar count;
  for(count=0;count <32;count++)
   {
    sum += ADC(IOd);
    delay(1);
    return   (uint)(sum /32);
}  
//============================= 检测 V1 =================================
void TEST_V1()  //22V-24.2V   19.6V-22.2V
{
  V1_OK = 0;
  ADC_result2 = ADC(2); //P1.2接LM385_BZ1.2稳压实测为1.241V作基准电压
  //voltage = (ADC_Filter(0) * 50000.0/1024);//外部已缩小了10倍故*10
  voltage = ADC_Filter(0)*1.0/ADC_result2*1241;; //P1.0 为 A/D 当前通道
  if(V1_H_L)//判断是测V1的22~24.2V还是19.6~22.2V
  {   
   if((voltage >= 22100)&&(voltage <= 24100))  //收严为22.1v~24.1v
   {
    V1_OK = 1;//在规格范围则将V1_OK置1
   }
  else
   {   
    if((voltage < 22100)&&(voltage > 24100)) //收严为22.1v~24.1v
     V1_OK = 0; //不在规格范围则将V1_OK置0   
   }
  }  
  if(!V1_H_L)//判断是测V1的22~24.2V还是19.6~22.2V
  {   
   if((voltage >= 19700)&&(voltage <= 22100))  //收严为19.7v~22.1v
   {
    V1_OK = 1;//在规格范围则将V1_OK置1
   }
  else
   {   
    if((voltage < 19700)&&(voltage > 22100)) //收严为19.7v~22.1v
     V1_OK = 0; //不在规格范围则将V1_OK置0   
   }
  }
}
发表于 2011-5-8 15:10 | 显示全部楼层
GandF  的M8的AD性能好像比标称要高2位在用
 楼主| 发表于 2011-5-9 13:08 | 显示全部楼层
高手们都跑哪去了请指点下
R17是个可调电阻(如果不接C7/C8/R18效果更差),但结果好像不太理想比如你输入的是 15V然后调节R17让其显示的值跟万用表相等但然后再输入10V以下的电压却显示值会比万用表 < 0.1V的样子,如果输入的是20V以上又会比万用表 > 0.1V左右。也就是线性度相当差请问有什么方法能控制吗
发表于 2011-5-9 17:11 | 显示全部楼层
回复 8# LBQ691477940



             用STC片制作一个电压表看似容易,但要制成高精度的电压表确实并非易事!

       如不作任何处理,实验发现:绝对精度:+ —2LSB     非线性度:1LSB

       尤其是AD曲线是二头小,中间大。(这也许和硬件也相关)


              做过类似的实验,仅供参考!


        一。一次化线性校正处理


              利用多余的AD口对零位检测。公式为:


              测量=(通道电压测量值-零位测量值)* 50V  / (基准电压测量值-零位测量值)


              这样处理后发现,除线性有所改善外,最后一位的波动很小。


      二。多点校正处理


            对太大的量化误差:可利用键盘进行多点校正:如选择:10v   20v   30v  40v   50v

          实际上是在二个校正点之间。利用内插法(分段直线拟合)来提高准确度!


               可查阅相关资料!
发表于 2011-5-10 09:47 | 显示全部楼层
谢谢!回复,我也是用一个通道作为基准源,实际连接是P1.2口接基准源的,R17是个可调电阻(如果不接C7/C8/R18效果更差),但结果好像不太理想比如你输入的是 15V然后调节R17让其显示的值跟万用表相等但然后再输入10V以下的电压却显示值会比万用表 > 0.1V的样子,如果输入的是20V以上又会比万用表 < 0.1V左右。也就是线性度相当差请问有什么方法能控制吗?
GandF原创M8数控电源所用的M8里面的AD位不比STC12A60S2的位高呀!(AD性能应该是M8的高,哈哈!)为何GandF版的线性那么好呢??LCD,LED,电源,充电器,可调电源,液晶模块,VFD,套件,1602,1604,2402,2004,12864,数控电源,白菜白光,avr,18650电池,LED手电,点阵,创意DIY,单片机制作,电池,秀,淘宝,论坛. t) R/ z/ l2 g" o: D4 F# `$ s; J
https://www.yleee.com.cn/images/default/attachimg.gif 466 下载 (76.77 KB)
2011-5-8 14:51



...
LBQ691477940 发表于 2011-5-8 15:01



个人觉得您的这个校准方法不妥,造成了“线性不好”的现象。R16/R17组成的分压组合,是起到一个“变压器”的作用,应该保证其变比始终和程序内使用变比完全一致(注:理想状态,电阻标称误差、温漂等情况不在讨论范围内),这样实际AD读数X变比=实际电压。关于变比斜率的讨论,请参见冯老师此帖(https://www.yleee.com.cn/viewthread.php?tid=691&extra=page%3D1&page=16)316楼,而您是在某一点校准时,通过修改变比(调R17)来使显示值与万用表的测量值相等,这样做的结果是改变了变压曲线的斜率(即变比),这样的变比与程序内的变比不相等了,只是两条曲线在这一点重合而已,不同的变比代表两条不同斜率的曲线,仅仅是在这个电压处重合,但在其它电压点就肯定是不重合的,就造成了“AD线性差”的假象。

解决的办法:精确测量出R16/R17实际的准确值,然后算出变比,写到程序中,这两个电阻再也不要动了,如果测出的电压与实际万用表测量值有误差,将STC测出值与万用表测出值相除求得一个系数,在程序中乘上这个系数作补偿即可。这个方法在M8 R-2R电源程序里试验效果比较满意,建议您试一下

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-3-29 21:40 , Processed in 0.065889 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表