ZHCACB6 March 2023 MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G3105 , MSPM0G3106 , MSPM0G3107 , MSPM0G3505 , MSPM0G3506 , MSPM0G3507 , MSPM0L1105 , MSPM0L1106 , MSPM0L1303 , MSPM0L1304 , MSPM0L1305 , MSPM0L1306 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346
该子系统演示了如何在可编程增益放大器 (PGA) 配置中设置 MSPM0 内部运算放大器,动态更改增益,输出放大的信号以及使用 ADC 读取结果。该配置使用户能够使用具有高增益的小输入电压信号极大地提高分辨率,但随后仍然能够通过更改为较低的增益来对较大的信号进行采样。下载该示例的代码。
图 1 显示了该子系统的功能图。
该应用需要一个集成的 OPA 和 ADC。
子块功能 | 外设使用 | 说明 |
---|---|---|
增益放大器 | (1 个)OPA | 在代码中称为“OPA_0_INST” |
模拟信号捕获 | (1 个)ADC12 | 在代码中称为“ADC12_0_INST” |
根据表 1 中的要求,该示例与表 2 中的器件兼容。相应的 EVM 可用于原型设计。
兼容器件 | EVM |
---|---|
MSPM0L13xx | LP-MSPM0L1306 |
MSPM0G35xx、 MSPM0G15xx |
LP-MSPM0G3507 |
其中:
计算给定输入电压和增益下进入 ADC 的电压:
其中:
其中:
其中 HT 是上限百分比。
其中 LT 是下限百分比。
ADC 窗口比较器电平:
图 2 显示了 Dynamic_PGA_Example2 的代码流程图,该流程图说明了 ADC 如何对 OPA 输出进行采样并更改 OPA 增益。Dynamic_PGA1_Example 的软件流程图略微简化了以下流程,因为主循环在启动 ADC 后进入睡眠状态,并且不存在 ADC 中断服务例程 (ISR) 的中心 switch case。
该应用利用 TI 系统配置工具 (SysConfig) 图形界面为 OPA 和 ADC 生成配置代码。使用图形界面配置器件外设可简化应用原型设计过程。
可以在 Dynamic_PGA1_Example.c 或 Dynamic_PGA_Example2.c 文件的 main() 开头部分找到图 2 中所示流程图的代码。
以下代码片段显示了在何处调整 OPA 增益水平和转换点(与占最大 ADC 代码的百分比相关),如设计步骤 2 中所述。有关可用的 OPA 增益定义,请参阅 MSPM0 SDK 和 DriverLib 文档。
#include "ti_msp_dl_config.h"
#define HIGHMARGIN 3890 // 4095*0.75 = 75% of max ADC value
#define LOWMARGIN 1638 // 4095*0.25 = 25% of max ADC value
#define MAXGAIN DL_OPA_GAIN_N7_P8 // Maximum GAIN level of OPA wanted
#define MINGAIN DL_OPA_GAIN_N1_P2 // Minimum GAIN level of OPA wanted.
//For non-inverting PGA mode this is an OPA GAIN of 2x.See advisory in TRM for MIN GAIN.
以下代码片段显示了在何处添加自定义代码以在获取 ADC 结果后执行有用的操作。这通常是某种数学运算,将多个结果放入数组、过滤或查找表访问。
while (1) {
//This while loop waits until the next ADC result is loaded
while (false == gCheckADC) {
__WFE();
}
gCheckADC = false;
//Grab latest ADC Result
gADCResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
//Add in code to do math on ADC results.
//Scaling factors for the math will be dependent on the current OPA Gain levels.
}
以下代码片段显示了在何处根据 OPA 增益设置调整 ADC 结果解释。用户需要决定采取哪些操作以及如何关联将 ADC 结果与 OPA 增益设置和输入电压相关联。
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
case DL_ADC12_IIDX_WINDOW_COMP_HIGH:
// Entered high side margin window.Decrease OPA GAIN if possible.
tempGain = DL_OPA_getGain(OPA_0_INST);
if(tempGain > MINGAIN){
//Update OPA gain.
DL_OPA_decreaseGain(OPA_0_INST);
//For full applications, at this point you would want to adjust any math factors or
//look up tables to the new voltage ranges being captured by the ADC, or set a flag to do so in main while loop.
}
break;
case DL_ADC12_IIDX_WINDOW_COMP_LOW:
// Entered low side margin window.Increase OPA GAIN if possible.
tempGain = DL_OPA_getGain(OPA_0_INST);
if(tempGain < MAXGAIN){
//Update OPA gain.
DL_OPA_increaseGain(OPA_0_INST);
//For full applications, at this point you would want to adjust any math factors or
//look up tables to the new voltage ranges being captured by the ADC, or set a flag to do so in main while loop.
}
break;
default:
break;
}
下图显示了 OPA 输入变化和相应增益输出的屏幕截图。OPA 增益水平如下:2x、4x、8x。