电子说
电压电流采样测量是常常见到的mcu应用,电压的测量相对容易。电流测量则要麻烦一些。尤其是考虑到微小电流(ua级)和较宽的测量范围,往往需要对电流采样电阻上的电压差进行高倍率的放大,或者需要改变取样电阻以获得不同的测量范围。电路的复杂性和成本就会较高。模拟前端则需要专门设计的电流放大器,通常就是仪表放大器,适用的共模电压范围也不是很宽。
如果是低端要求不高的测量那就可以使用通用运放,一级或者两级放大,在低端采样不需要考虑共模电压,实现起来比较简单。这样的低成本电压电流测量,用国民技术的N32G435系列微控制器就很合适了。国民技术的N32G435有着较高的集成度,带有高性能的ADC和集成OPA,很适合电流放大测量,价格又不高。可以节省运放成本和减少PCB占用。能够实现低成本,电路简洁的电压电流测量。
下面让我们来探索一下如何实现:
设计的目标是低成本,简洁实现~~
那么电压测量使用电阻分压到ADC的输入范围就行了。电流测量其实也就是测量电流采样电阻上的微小电压差,所以需要有放大。G435芯片里面有2个OPA,可以配置成PGA,程序就可以控制放大倍数了,这就非常灵活方便了。
让我们从官方例程开始,N32G435库里面的例程,有个OpaAdByTim,看起来非常合适。
keil里面安装好支持包,打开此例程,编译通过,下载运行,一切顺利……嗯……应该是吧,结果在哪儿看呢?串口也没有回传~~还是得去读读代码啦。
主程序里前面就是各部分配置函数,主循环只有更改PGA增益,其他就没了。
所以应该在中断里~ADC中断函数里有这样的:
ADC_ConvertedValue[0][0] = ADC_GetInjectedConversionDat(ADC, ADC_INJ_CH_1) & MASK_AD_BITS;
ADC_ConvertedValue[0][1] = ADC_GetInjectedConversionDat(ADC, ADC_INJ_CH_2) & MASK_AD_BITS;
别处就没有对ADC_ConvertedValue的处理了。所以就只能进入调试状态,断点到此,看看数据啦~没错,官方例程就是这样简洁!
这样不够直观,要看数据变化也繁琐了点,所以还是需要稍微更改一下。
为了简单起见,加个串口传送的部分,就可以用各种串口软件查看了。
可以参考另外一个例程,USART下面的Printf例程。把里面的头文件包上,配置代码也复制过来,RCC配置,GPIO配置都复制过来,别忘记fputc函数,这是重定义到串口输出的关键。一番复制粘贴然后编译……哦……出错了,什么什么USARTx未定义!好吧,查找了一番发现这些是在串口例程那边的main.h里,复制过来到这边(OpaAdByTim)的main.h里.编译成功!
接着就可以用printf回传到PC了。至于涉及到变量引用、转换的需要又多搞了几个全局变量来,然后在主程序循环中又对ADC结果做了多点平均,这些大家都会的操作就不必多说了。
回传时顺便做了个数值转换,测得开发板VCC电压是3.25V,所以 数据*3250/4096 就可以得到测量数据的电压值(mv)。
代码中可以看到OPA1的正输入端连在PA4上,OPA2的正输入端连在PA7上。
默认的OPA模式是跟随模式,没有放大。改成PGA模式,下面的增益设置才能起作用:
OPAMP_Initial.Mod = OPAMP_CS_PGA_EN; //OPAMP_CS_FOLLOW;//OPAMP_CS_PGA_EN;
OPAMP_Initial.Gain = OPAMP_CS_PGA_GAIN_32;
PC端使用了一个叫serial port plotter的软件,不但可以看到数据,还能绘制图形。
只是上传的数据要符合其格式要求,也就是这样的:
printf("$%d %d;",datasum_i,datasum_j);
前面$,中间空格,结尾;。
数据一旦可视化就直观多了。nice!
这次就用电阻分压出一个小电压信号,用PGA放大来测量(以此实现电流测量):
以上是锂电池输出经过100k欧可调电阻/100欧 电阻分压出的低电压,PGA倍数32(最大),测得210/32=6.56mv,万用表测量6.8mv。
可以看到稳定性稍差,这是因为用了20厘米以上的杜邦线连接,自然会有些干扰了。
经过256数据平滑处理就会稳定多了。
再把PGA设为8倍,无平滑处理。测得52/8=6.5mv.说明PGA倍数准确。
接下来设定为2倍,调整一下电阻比例,测得380/2=190mv.万用表测量190mv。
以上是OPA1的测量结果,那么OPA2如何呢?
32倍时测得72/32=2.25mv,万用表测量1.9mv。
OPA1测量结果偏小,OPA2偏大。那么输入接地,可测得OPA1为0,OPA2为16/32=0.5mv。
这也就是offset了。OPA1的offset为负值,ADC采样不到。
如果要搭建其他方式的运放电路,可以选择通用模式,运放端子引出到引脚,内部无连接(除了ADC)。或者只是缓冲一下选择跟随器模式就好。不过PGA模式最简洁低成本方便可调,要求不太高的话真是再合适不过了。看手册里的参数指标比起358还是要好一些的。
另外,手册里输出范围的说明,输入是轨到轨,输出并不是,而是缩减0.15V。
但实际测量不会这样,还是可以实现轨到轨输出,所以是哪样呢?!
总之,经过以上测试,验证了N32G435内部OPA和ADC的性能,官方的库和例程也工作稳定,非常不错。完全适合做低成本的电压电流测量应用。非常值得推荐!
审核编辑 黄昊宇
全部0条评论
快来发表一下你的评论吧 !