• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

ad采集后的值换算

瞎折腾 2016-10-24 浏览量:1278
电压采用芯片VCC电压,10位ad,结果出来最大1024,最小当然是0了,要把这个值换成电压应该怎么计算呢?
不用浮点的算法,是不是浮点算法比较费芯片资源啊?我用整数算的,最后都用到32为了!
求一个比较好的计算方法。

u32 z;
u16 x=5000;
z=adch*x;
z=z/1024;
z已经声明了是32位的,
写的比较乱,因为开始我用的U16,结果出来的数不对,找毛病弄得。
如果用u32的话就应该是:
u32 z;
z=adch*5*1000/1024;
放大1000倍
有没有更好的方式啊?

1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 拒绝浮点运算,所有的计算只限于简单的乘除而已,如果除不尽就采用求余运算,不要让计算机去帮你完成,你能做的一定要自己先做,比如

    x * 5000/1024 就可以先自己上下约一下,不要交给计算机就算完事,这样做下来单片机比较省力,相应速度也快,如果动用浮点运算非常浪

    费资源,算着也慢。还有第三个原则 能移位不要去除 ,比如/8 ,要右移处理,毕竟对于计算机而言,移位要远胜于乘除。

    希望帮上你的忙。

    对了,既然采用u32 ,你的程序里的数据后面要加UL,否则编译器可能不大理解。
    • 发布于 2016-10-24
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:13
  • 基本的方法就是理论上,VCC电压的ADC值就是1024,GND的ADC值就是0,这其中的数据就是根据比例进行计算出来的。
    但是由于电路布局布线、元件、电源纹波等等,ADC的精度总是达不到标称的ADC精度。一般好的会有一、两位的误差,这里要等到更准确的ADC采样值,一般采用的是过采样技术。过采样可以百度。
    也要增加一些滤波,如:http://blog.csdn.net/u010552215/article/details/50833689

    你的这个式子,按理论上是可以,如果像DSP28335那样有浮点运算最好是用浮点,只有整型时,也只有放弃一些精度了。
    这样计算是一种方法,也可以使用查表法的。使用存储空间来换取时间。
    • 发布于2016-10-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 本帖最后由 MOP 于 2016-10-25 03:20 编辑

    奇怪的是,都沒人發現範圍有問題,10Bit的話是0~1023唷,所以code就如下
    u32 z=adch*5000/1023;
    是針對您的需求,不要使用到浮點數,所以單位是mV

    如果不想被整數除法捨棄掉精準度的話,可參考以下我寫的round function
    u32 get_round(u16 adch,u8 digit)
    {
      u32 order;
      u8 i;
    
      if(digit <=5)
      {
        for(i=0; i=512)
          return (adch*5*order/1023)+1;
        else
          return (adch*5*order/1023);
      }
    
      return 0;
    }
    可選擇1位~6位精準範圍值,再往上乘會超出表示範圍,即overflow,將結果計算並且依照餘數做四捨五入

    get_round(1023,5); //500000
    get_round(1023,3); //5000
    get_round(1023,0); //5
    以上供參考,希望有幫助:)



    • 发布于2016-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • MOP 发表于 2016-10-25 01:52
    奇怪的是,都沒人發現範圍有問題,10Bit的話是0~1023唷,所以code就如下
    是針對您的需求,不要使用到浮點數,所 ...

    凌晨三点多发表的回复……:sleepy:大半夜不睡觉的么……还是说有时差?
    • 发布于2016-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 你就是想得到一个实际电压值吧,看你参考电压是多少:

    Vout = 参考电压*(采集的十六进制)/1024
    如果是 参考是3.3V ,那 采集到1024,就是3.3V, 采集到512,就是 1.65V
    • 发布于2016-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 少数浮点没关系的。。我还用过求反三角函数的。。
    • 发布于2016-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 7943603 发表于 2016-10-25 16:25
    拒绝浮点运算,所有的计算只限于简单的乘除而已,如果除不尽就采用求余运算,不要让计算机去帮你完成 ...

    你这个式子我试过,最后的的得数依然要用32位的,不然出来不行的,你可以试一下,我开始用的16位的,这个式子不成立的
    • 发布于2016-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 瞎折腾 发表于 2016-10-25 20:49
    你这个式子我试过,最后的的得数依然要用32位的,不然出来不行的,你可以试一下,我开始用的16位的,这个 ...

    你没有理解,所有的数都要转成32位处理,这个是不错的,我说处理没说放弃32位
    • 发布于2016-10-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 没有实际的需求描述,仅仅在运算上来说,很难得到你要的答案。
    • 发布于2016-10-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 楼主有满意答案,请尽快选最佳答案
    • 发布于2016-10-31
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

ad采集后的值换算