[N32G43x] 低成本电压电流测量,国民技术N32G435很适合

电压电流采样测量是常常见到的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。
但实际测量不会这样,还是可以实现轨到轨输出,所以是哪样呢?!


以上实验代码均在main.c和main.h里,如下
 OpaAdByTim.zip (9.46 KB)

总之,经过以上测试,验证了N32G435内部OPA和ADC的性能,官方的库和例程也工作稳定,非常不错。完全适合做低成本的电压电流测量应用。非常值得推荐!
---------------------
作者:lcdi
链接:https://bbs.21ic.com/icview-3209268-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值