问题的提出:
本屌在做项目的时候遇到这么一个问题,我需要四个同样的控制板,对同一产品某一0-5V的模拟电压,由于我使用的单片机是STC12C5A60S2不带基准电压引脚,所以当初在引脚上只是按照芯片手册上的电路进行了简单的ADC采集,但是问题来了:我用的LM2576-5.0V的输出电压并不全是5V,有些是4.88V,有些是4.92V,有些是5.08V,等等,各种电压都有,一开始以为LM2576-5.0V的稳压管有问题,经查PDF资料,才发现,这款稳压管本身输出的电压就有误差,而我得到的电压也在误差范围内,这就让我很郁闷了,控制板已经做出来了,如果要改就硬件或者换MCU也不是那么简单的,但是不改的话,不同控制板由于稳压管输出的电压不一样,会导致采集到的同一模拟电压会不一直,无奈之下,值得请求帮助!幸运的是,在论坛的QQ群里找到了一位高手“Firefly+奔跑小蜗”帮我指点了一下,总算是找到了一种成本比较小的解决方法,万分感谢!
下面就由本屌来详细介绍一下这种方法吧!
详细介绍:
首先,我手上的两块控制板LM2576-5V的输出电压如下图所示:
由于我使用的单片机没有额外的基准电压引脚,所有ADC的电压即为电源电压。
但是这样问题就来了,由于电源电压不一样,就会导致采集同一模拟电压时,不同的控制板采集到的数据不一致!比如同样的采集4.63V的模拟电压,会出现下面两种结果:
左边是稳压管5V时,采集到的电压4.63V,右边是稳压管为5.08V时采集到的电压4.56V。
当时我的临时解决方法就是不同的控制板,用程序去校准,先用万用表量的LM2576输出的实际电压,然后用实际电压跟5V电压做一个比例系数,在AD采集的时候,乘上这个系数,那么问题得到了解决!
乍一看确实问题解决了,但是如果以后控制板坏了需要重新换板呢?那岂不是又的量下板上的电压?这或许还能接受,但是要命的是,这款控制板有两三百片,如果程序都要调整的话,岂不是得弄好多套程序,而且到时候到底用那一套程序?确实还是个比较伤脑筋的事情!那么有没有只需要用到一套程序的办法呢?答案当然是肯定的!
首先蜗牛大哥告诉我用了这么一个电路:
从这个电路上我们可以看到,采集电压的范围变大了,从原来的0-5V变成了0-6V,我们可以通过调节可调电阻来实现准确的采集0-5V模拟电压!当然,在开始采集之前需要硬件校准!
首先是软件校准,将采集到的电压从0-5V,放大到0-6V,如下图所示:
接下来是硬件校准-即将软件放大后的电压校准回0-5V,原理是这样的:将上面电路图中的ADC_IN0接至标准的5V电压,然后调节可调电阻,使得AD采集到的电压显示为5V:
本例中我用的是串口输出采集到的电压值,以便于调节:
这样一来,校准就完成了,在后续控制板中,就只需要进行硬件校准就好了,而且这种硬件校准也比较简单!
校准完成之后,那么我们就该来实际采样验证了!下面我们用了一个0-5V可调的电源模块来做模拟电压输出,将电压调制4.63V,如下图所示:
然后,我们将之前电路中的ADC_IN0、ADC_IN1连到4.63V电压输出端,打开串口,我们将看到如下数据:
实时证明,两路AD采集到的模拟电压都是4.63V,与实际的电压相符!实验目的到达!
或许我讲的不是很详细,有些地方也可能分析的不对,但是最终还是得到了想要的结果了,而且这种方法确实也比较省成本,实现起来也比较简单,或许大家还有更好的方法,也欢迎大家一起来讨论!