运算放大器代码_只需几行代码,即可完成IoT设备前端模拟设计!这是如何做到的?...

物联网设计常依赖模拟电路满足传感器和致动器需求,但成本和空间限制了设计。Texas Instruments的MSP430FR2355 MCU通过集成模拟外设如ADC、比较器和智能模拟组合模块,允许开发者用少量代码实现信号调节,减少外部零件。本文探讨了如何利用这类微控制器进行前端模拟信号调节,包括传感器接口、波形发生器和电流环路接口的设计,并提供了代码示例。
摘要由CSDN通过智能技术生成
5faf9de7-2e41-eb11-8da9-e4434bdf6706.svg

关键词

单片机,电路设计,模拟,可穿戴,物联网

许多针对物联网 (IoT) 的设计都依靠模拟电路,以便满足应用对传感器和致动器的信号调节、电流控制和其他功能的独特要求。虽然专用的信号链IC可以满足这种需求,但是成本和空间严格受限的设计需要一种专门方法,这种方法不但应该满足性能要求,还应该使用更少的零件来实现这一功能。

为满足这一需求,微控制器应运而生。通过集成诸如模数转换器 (ADC) 和比较器等模拟外设,微控制器可以简化传感器和致动器的接口功能特性。然而,直到最近,工程师们通常还需要添加模拟零件,来提供大多数设计所需的信号调节或输出缓冲。

通过在微控制器上添加这些模拟信号调节电路,开发人员现在只需操作几行代码,即可有效配置这些元件,从而满足可穿戴设备和其他物联网设备的各种模拟接口要求。

本文将讨论物联网连接设备对前端模拟信号调节要求的需求,然后介绍一类具有高度集成模拟功能的微控制器,并说明如何应用此类微控制器。

将传感器连接到微控制器

传感器设计通常需要一个或两个放大器来调节变送器的输出信号,然后才能到达微控制器的ADC输入。诸如用于心率监测的脉搏血氧计等较复杂器件需要多个信号链,才能产生LED激励波形,转换光电二极管输出,并最终提取脉冲数据(图1)。即使是工业应用中通常用于将传感器连至可编程逻辑控制器的简单电流环路,也需要其他设备来驱动和控制电流输出。但是,通过使用MSP430FR2355MCU中的内部模拟元件,开发人员可以实现更紧凑的设计,一般只需添加几个无源元件即可。

1e5cfb99d4184cfc16343acf49f8f9ed.png

图1:用户期待更紧凑产品能够提供更多高级功能,这意味着,开发人员需要在实现复杂信号路径(如此图中脉搏血氧计的路径)时大幅减少零件的数量。
(图片来源:Texas Instruments)

集成模拟元件

Texas Instruments MSP430FR2355 MCU基于16位RISC处理器内核,可提供许多物联网设备设计中通常需要的全套功能。作为TI MSP430FRAM系列器件之一,MSP430FR2355集成了32KB的低功耗铁电存储器 (FRAM)。FRAM非常适合物联网设计,具有闪存的非易失性存储优势,以及RAM的写入速度和耐用性。因此,开发人员可以利用FRAM的类似于RAM的性能品质,在激活模式下存储数据和程序代码,并且可以利用FRAM的非易失性功能,在休眠模式或其他需要节省电能的运行状态下保留数值。MSP430FR2355支持多种低功耗模式,旨在满足这些设计中典型的低功耗要求。

除了低功耗特性外,MSP430FR2355还可通过几个集成的模拟外设支持物联网接口要求,这些外设包括12通道12位ADC、配有集成数模转换器(DAC) 的模拟比较器以及多个片上电压基准。MSP430FR2355 MCU的最独特模拟功能是它的四个智能模拟组合 (SAC) 模块,开发人员可通过编程方式配置这些模块,以满足特定需求。

每个SAC模块均包括一个12位DAC、一个轨至轨运算放大器 (OA) 和一个可将OA转变为可编程增益放大器 (PGA) 的反馈电阻梯。每个元件的专用寄存器可控制其配置和工作模式。例如,开发人员可以简单地在SAC (SACx) 模块的OA寄存器(SACxOA) 中加载0:1位,从而将OA的正输入设置为某个外部源、DAC输出或成对的SAC源(如下所述)。

TI公司的驱动程序库将这些位操作抽象为一组直观的应用程序编程接口 (API) 调用。因此,开发人员只需几行代码(清单1),即可将SAC模块编程为通用放大器,以便完全取代传感器信号调节放大器,从而减少零件数量,缩小设计尺寸(图2)。

清单1

//Select external source for both positive and negativeinputs

SAC_OA_init(SAC0_BASE,

SAC_OA_POSITIVE_INPUT_SOURCE_EXTERNAL,SAC_OA_NEGATIVE_INPUT_SOURCE_EXTERNAL);    //Select low speed and low power mode

SAC_OA_selectPowerMode(SAC0_BASE,SAC_OA_POWER_MODE_LOW_SPEED_LOW_POWER)// Enable

OA SAC_OA_enable(SAC0_BASE);  // Enable SAC SAC_enable(SAC0_BASE);

清单1:在该示例中,要实现通用放大器,开发人员只需调用几次Texas Instruments驱动程序库,初始化SAC OA输入 (SAC_OA_init),然后将其功耗模式 (SAC_OA_selectPowerMode)设置为低功耗,最终启用OA和SAC即可。

(代码来源:Texas Instruments)

67d5fa3243d9cc420c252358bde0233c.png

图2:开发人员可以使用MCU四个智能模拟组合 (SAC) 模块的其中一个,通过Texas Instruments MSP430FR2355MCU内部实现的运算放大器来取代外部运算放大器。

(图片来源:Texas Instruments)

要充当输出波形发生器,SAC模块需要接入更多元件(图3)。在这种情况下,开发人员可通过编程方式,将数据加载到可设置内部DAC输出的专用数据寄存器 (SACxDAT) 中,从而实现波形控制。DAC输出随即可为OA提供基准电压。在此配置中,开发人员可将PGA寄存器 (SACxPGA) 中的0:1位 (MSEL) 设置为缓冲模式 (01b),以此增强OA的驱动强度,缓冲模式 (01b) 对应于浮动输入。要配置此工作模式,开发人员只需多执行几次API调用(清单2)即可——与上述通用配置所需的调用相比。

7a264b77b895adb29e77f39d7aca9160.png

图3:开发人员可使用SAC模块的数模转换器和运算放大器元件,实现可编程波形发生器。
(图片来源:Texas Instruments)

清单2

//Select internal shared reference as DAC referencevoltage SAC_DAC_selectRefVoltage(SAC0_BASE, SAC_DAC_SECONDARY_REFERENCE);   //Select the load trigger for DAC data latch//DAC always loads data from DACDAT at the positive edge of Timer output TB2.1SAC_DAC_selectload(SAC0_BASE, SAC_DAC_LOAD_DEVICE_SPECIFIC_0);   //Enable DAC InterruptSAC_DAC_interruptEnable(SAC0_BASE);  //Write data to DAC Data Register SACxDAT //DAC_data is an unsigned inttype variable defined by user SAC_DAC_setData(SAC0_BASE, DAC_data);   //Enable DAC SAC_DAC_enable(SAC0_BASE);   //Select internal DAC for positive input andPGA source for negative input SAC_OA_init(SAC0_BASE,SAC_OA_POSITIVE_INPUT_SOURCE_DAC,     SAC_OA_NEGATIVE_INPUT_SOURCE_PGA);  //Select Buffer Mode SAC_PGA_setMode(SAC0_BASE, SAC_PGA_MODE_BUFFER);   //Enable OA SAC_OA_enable(SAC0_BASE);   //Enable SAC SAC_enable(SAC0_BASE);

清单2:要将SAC模块配置为波形发生器,除了用作通用放大器所需的API调用之外,开发人员只需多执行几次API调用即可。
(代码来源:Texas Instruments)

多级应用

在许多情况下,开发人员需要使用多个放大器构建的信号条件或输出链。例如,传感器系统设计人员通常可级联放大器,以缓冲变送器输出,并放大缓冲信号,从而与位于信号链一端的ADC的满量程响应相符。同样,输出接口的开发人员通常需要级联放大器来生成波形,并控制栅极驱动器。例如,为了构建电流环路接口,开发人员可使用配置为DAC模式的SAC模块来提供调制信号电压。通过将第二个SAC模块配置为OA模式,可以使用外部晶体管将信号电压转换为电流(图4)。

2a1613b8c98b9c2b636e6151512fb57e.png

图4:为了构建电流环路接口,工程师可以使用一个配置为DAC模式的SAC模块来生成调制信号电压,然后使用第二个配置为OA模式的SAC模块来驱动晶体管,从而产生环路电流 ILOOP (I1 + I2)。

(图片来源:Texas Instruments)

MSP430FR2355 MCU为级联放大器提供了更高效的方法。对于不需要其他外部元件的设计,开发人员可利用内置路由,在内部将 SAC 模块互连成两对:SAC0内部连接到 SAC2,SAC1连接到SAC3。

这种互连可应用于传感器系统,例如需要将光电二极管的电流输出转换为电压电平以进一步进行转换的烟雾探测器。开发人员只需几行代码,即可通过一对SAC模块来实现这一信号链(清单3)。在本电路图中,SAC2被配置为跨阻放大器,可将光电二极管的电流输出转换为电压,而成对的SAC0可为下游ADC放大该电压(图5)。如清单3所示,SAC2和SAC0之间的内部连接仅在API调用 (SAC_OA_init) 中创建,以便通过将PGA用作OA的负输入源 (SAC_OA_NEGATIVE_INPUT_SOURCE_PGA),将成对OA用作正输入源 (SAC_OA_POSITIVE_INPUT_SOURCE_PAIR_OA) 来初始化 SAC0 (SAC0_BASE)。

清单3

//Configure Op-Amp functionality     GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P3,                                                GPIO_PIN1 | GPIO_PIN3 | GPIO_PIN2,                                                GPIO_TERNARY_MODULE_FUNCTION);       //Select external source for both positive and negative inputs     SAC_OA_init(SAC2_BASE, SAC_OA_POSITIVE_INPUT_SOURCE_EXTERNAL,                 SAC_OA_NEGATIVE_INPUT_SOURCE_EXTERNAL);       //Select low speed and low power mode     SAC_OA_selectPowerMode(SAC2_BASE, SAC_OA_POWER_MODE_LOW_SPEED_LOW_POWER);       SAC_OA_enable(SAC2_BASE);                  // Enable SAC2 OA     SAC_enable(SAC2_BASE);                     // Enable SAC2       //Select external source for both positive and negative inputs     SAC_OA_init(SAC0_BASE, SAC_OA_POSITIVE_INPUT_SOURCE_PAIR_OA,                 SAC_OA_NEGATIVE_INPUT_SOURCE_PGA);       SAC_OA_enable(SAC0_BASE);                  // Enable SAC0 OA     SAC_enable(SAC0_BASE);                     // Enable SAC0 

清单3:开发人员只需初始化MSP430FR2355 MCU的一对SAC模块,并规定下游级的输入端需将成对OA用作其来源 (SAC_OA_POSITIVE_INPUT_SOURCE_PAIR_OA),即可创建一个两级信号链。
(代码来源:Texas Instruments)

c0d25982a85cd9bbb6496171733cdbbd.png

图5:通过配置MSP430FR2355 MCU的成对SAC模块,实现典型烟雾探测器输入信号链中所需的跨阻放大器 (TIA) 和可编程增益放大器(PGA),开发人员可以有效地消除烟雾探测器设计中对外部模拟IC的需求。

(图片来源:Texas Instruments)

使用这种方法,开发人员几乎可实现物联网设计及可穿戴设备所需的全套模拟输入和输出电路。例如,开发人员可使用MSP430FR2355 SAC模块,将复杂的模拟设计(如图1所示的脉搏血氧计)简缩成更紧凑的版本(图6)。除了LED、光电二极管和相关电阻器外,设计人员只需MCU即可实现同样的功能。

dd4234473021e991a3852b76f105959e.png

图6:开发人员可以使用MSP430FR2355 MCU及其SAC模块,在需要多个输出激励源和多级输入信号链的脉搏血氧计等设计中,大幅减少零件的数量。

(图片来源:Texas Instruments)

要评估MSP430FR2355 MCU及其SAC模块的用途,开发人员可利用Texas Instruments MSP-EXP430FR2355LaunchPad开发套件。该电路板设计用于加快原型开发,包括基于MSP430FR2355的完整系统,系统配有光传感器、LED、按钮(用于与简单示例应用程序交互)以及用于软件开发的板载调试探头。

Grove连接器可连接各种基于Grove的附加组件,TI BoosterPack连接器则可让开发人员通过RF BoosterPacks轻松扩展基础平台,从而实现无线连接。TI还提供一组示例软件应用程序,这些程序设计用于在LaunchPad套件上立即运行。除了运行LaunchPad开发板之外,示例软件还演示了基本设计模式,例如清单3代码片段中显示的SAC模块互连方法。

本文小结

任何与现实世界交互的器件一般都需要模拟接口。然而,在针对可穿戴设备和物联网设备的许多设计中,构建这些接口所需的附加元器件与更紧凑设计和减少零件数量的要求背道而驰。 通过配置集成在TexasInstruments MSP430FR2355 MCU中的模拟元件,开发人员通常只需添加几个无源元件,即可实现这些设计所需的信号链功能。

6bc83af527283e8c3f85874a93204f34.png
C++信号放大器 (1) 运用二叉树的定义将左孩子、右孩子、结点值、权值即与父结点的衰减量、以及当前结点的最大衰减量联系起来。 (2) 设置信号放大器函数 该函数主要实现判断是否超过容忍值并在合适位置放置信号放大器使其数量最少。 首先将当前结点最大衰减量D初始化,当只有右子树时即左子树为空,计算出当前结点的最大衰减量,判断当超过容忍值时则放置信号放大器并输出;当只有左子树时即右子树为空,计算出当前结点的最大衰减量,判断当超过容忍值时则放置信号放大器并输出;当左右子树都存在并左子树的衰减量大于右子树时则计算当前结点最大衰减量D并判断是否超过容忍值并输出,继续进一步比较其右子树的当前最大衰减量与右子树的衰减量之和和其左子树的衰减量,若大于则更新D,并判断是否超过容忍值并输出,再进一步比较其右子树的衰减量与其左子树的衰减量,若大于则再更新D;当左右子树都存在且右子树的衰减量大于左子树时,比较方法与前者相似,颠倒左右即可。 通过此算法可将放置的放大器数目最少。 (3) 主函数 主函数中包括输入信息时的声明及相关函数的调用。 四 调试分析 该程序在设置信号放大器的比较算法上有些麻烦,要进行很多比较。结点信息的输入也比较麻烦,很浪费时间,还有就是输出结果时最好将二叉树的具体结构一同输出便于检查,并且形象直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值