标题: 关于单片机电压测量0V-100V的一个问题 [打印本页]

作者: yytda    时间: 2021-3-28 21:04
标题: 关于单片机电压测量0V-100V的一个问题
下图是一个电压测量的代码,电压测量范围比较宽,是从0V测到100V,实际测试发现,如果不用那些if语句,让temp乘以一个固定的倍数,12V的时候测的比较准,电压越高,测量结果偏差越大,50V的时候,测量偏差已经有1.5V了,就是实际电压50V,测量结果是51.5V,然后用下面这段代码进行校正,测试结果却显示有几千伏,请问是哪里出了问题?这代码我自己感觉应该没问题,就是测试结果不正常




作者: 花心的刘备    时间: 2021-3-28 21:30
顺序执行了一遍
作者: bd93181    时间: 2021-3-28 21:53
是进制问题么?
作者: yytda    时间: 2021-3-28 21:58
花心的刘备 发表于 2021-3-28 21:30
顺序执行了一遍

可当实际电压5V的时候,它并没有满足后面那些if语句的条件,为什么却能进入后面那些if语句里面呢?
作者: zsw3721    时间: 2021-3-28 22:06
除第一个if外,后面的if换成else if,不然可能重复换算
作者: liuzx66    时间: 2021-3-28 22:22
你这个程序是有问题的
不能怎么使用if
要用if ... else if...
作者: yytda    时间: 2021-3-29 07:23
谢谢啊,这个可能性很大,晚一点我试试
作者: aking991    时间: 2021-3-29 08:21
你一直用if当然会出现混乱,你要用if{}else if{},意思是如果...否则....这样的条件判断逻辑才对
作者: lmn2005    时间: 2021-3-29 08:29
上面各朋友都说得没有错
用if 和 else iif这是两种不同的结果
再例如:
前提:e==1
if(e==1)
{e=10;}
if(e==10)//上面计算的e结果会进入此条件语句进行判断
{e=100;}
上述运行结果是e=100

if(e==1)
{e=10;}
else if(e==10)
{e=100;}
上述运行结果是e=10
作者: wulin    时间: 2021-3-29 14:33
通常要想用ACD尽量准确测量远大于单片机VCC的电压不宜只用一套分压电路,要根据实际被测电压自动换挡。而不是在算法补偿下功夫。

作者: cn_zhx    时间: 2021-3-29 16:14
if 。。。else if。。。
作者: wulin    时间: 2021-3-30 05:50
yytda 发表于 2021-3-28 21:58
可当实际电压5V的时候,它并没有满足后面那些if语句的条件,为什么却能进入后面那些if语句里面呢?

由于楼主判断条件是变量e的值,符合判断条件改变的也是e的值。依次判断时就有可能前面的结果成为后面的依据而发生错误。改为if(temp<=0.14) e=temp*35;.......  或  if.......else if........else if......写法避免发生错误。
作者: TTQ001    时间: 2021-3-30 08:43
条件语句错误
作者: 蓝色弹珠    时间: 2021-3-30 09:36
提供一个最简单的改正方法,新设置一个变量c,让c=e*10;,10是你的分压倍数。这样就避免了判断失误。
作者: jkluzi    时间: 2023-12-13 15:40
用switch应该也行吧

作者: wufa1986    时间: 2023-12-13 15:54
我做过测量0-100V,并没有发现你说的如此严重的非线性问题,只需要手工校准一个系数,是不是你的硬件有问题或者软件配置ADC采样时间不符
作者: Hephaestus    时间: 2023-12-13 18:13
jkluzi 发表于 2023-12-13 15:40
用switch应该也行吧

不可以,不然你写一个让大家乐一乐?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1