【外设篇】STMG4芯片内部运放、外部运放的STM32CubeMx配置(基础工程)
运算放大电路,可以用于观测较小的电压,通过将其放大,再用ADC读取信号即可,其分为内部运放(芯片内部的运算放大器)和外部运放(外部设备),本文将详细介绍这两种运放如何使用,运算放大器的种类,放大系数如何选择,及其它参数如何设计。
引言:运算放大电路,可以用于观测较小的电压,通过将其放大,再用ADC读取信号即可,其分为内部运放(芯片内部的运算放大器)和外部运放(外部设备),本文将详细介绍这两种运放如何使用,运算放大器的种类,放大系数如何选择,及其它参数如何设计。
1.HAL库函数
| 序列 | HAL库函数 | 作用 |
|---|---|---|
| 1 | HAL_OPAMP_Start(&hopamp1); | 启动内部运算放大器 |
2.运算放大器的种类及原理
2.1运算放大系数的计算
首先需要理解什么是虚短、虚断
(1)虚短:差模输入电压约为0,即u+ = u_(要求工作在线性区)
(2)虚断:输入电流约等于0,即i+ = i_ = 0
注:只在FOC常用的差分运放讲解如何使用
2.2反相比例

2.3同相比例

2.4反相加法运算

2.5同相加法运算

2.6差分运算电流
先上结论

原因:由虚断,相对于放大器的两个输入电流为0可知
由虚短,两个输入电压相等,再经解方程可知,放大系数如上。
是不是很简单,都用虚短虚短都能解出。
3.内/外运放设计
对于芯片来说,内部运算放大器,就是放大器集成到了芯片内部,使用起来只算芯片的功耗,不占MCU计算资源;外部运算放大器,就是在板子上添加外设,对电流起放大作用
3.1外部运算放大器设计
(1) 运算放大系数计算

这个1.65V可以是3.3V过俩等值的电阻接GND得到,我用的型号是TLC2274AIDR,一个芯片带4个运放,我只用了其中的3个。
两图对照,ui1 = 0,ui2 = U_CURRENT, R1 = 1K, R2 = 10K , R3 = 4.7K , RF = 100K, u0 = ADC_U ,则 u0 = 32.29 * ui2 , 即ADC_U = 32.29 * U_CURRENT
(2)怎么反应到三相电流上

ADC分辨率为12位,芯片的参考电源VDDA为3.3V,则ADC的数值1代表3.3/2^12
ADC_U = ADC读到的值* 3.3/2^12 = 32.29 * U_CURRENT
流过R29的电流 = (U_CURRENT - 0)/(0.7*10^-3) = (ADC读到的值 * 3.3 / 2^12 / 32.29) /(0.7 * 10^13) = 0.03564412 * ADC读到的值
(3)运算放大系数怎么选
准则:ADC能读取的信号是0~3.3V,所以保证放大后的信号在3.3V内就行(即放大器的线性工作区间)
计算过程就是上个问题的逆向推算,先估计一下你电机的相电流是多少,比如我电机的线电流(正常电机都标功率和线电压) = 30A ,而电机一般是星型连接(三角连接一般是三相异步电机),则有效相电流 = 30 / 根号2 = 21.21A,峰值相电流 = 30 * 根号2 = 42.43A,用这个峰值相电流逆推运算放大系数
3.2内部运算放大器使用
注:来源于欧拉电子工作室的电路板设计



计算方式同上,但是三相全桥这个电容一定要慎重添加,因为会延误ADC读取三相电流,如果要加也要加一个小电容,pf级别的
4.内部运放在STM32cubemx上的配置

建议就是正常模式吧,因为可以字节焊电阻随意设置放大系数,也可以用户定义放大系数。
5.代码说明
HAL_OPAMP_Start(&hopamp1);
很简单,开启一下内部运放就OK,不占用mcu计算资源。
代码会最后挂在gitup上供大家使用
感谢指正,谢谢关注
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)