TI - MCU - MSP430使用指南32 -> SAC智能模拟组合

发布者:忠正最新更新时间:2022-09-16 来源: csdn关键字:TI  MCU  MSP430  使用指南 手机看文章 扫描二维码
随时随地手机看文章

SAC(Smart Analog Combo),即智能模拟组合,这个IP核出来的时间并不长,目前只用在了两个片子上:MSP430FR2353和MSP430FR2355。首先看一下SAC内部是个什么结构呢:

从上图可以看到,内部本质上就是一个OPA放大器,同时在运放的+和-的输入端有个选择开关,可以根据客户的需求搭建不同的电路,同时内部还集成一个12 bit的DAC模块,用于在一些使用环境下提供固定的电压,可以实现电压偏移的目的。


针对上述这个内部结构,我们进行细致的分析:


对于+输入端,有三个可以选择的通道:


00:引脚接入  


01:12 bit DAC信号  


10:内部Amp的输出,也就是其他SAC模块的输出,用于多级Amp的组合。


对于-输入端,同样也有三个可以选择的通道:


00:引脚接入(也可以选择本Amp的输出构成反馈电路,也可以直接接地)


01:可编程的增益


10:内部Amp的输出,也就是其他SAC模块的输出,用于多级Amp的组合。


那么如何使用呢,主要用在哪些方面呢:


总的一句话来说,只要是使用Amp的电路设计上,都能用到这个模块的资源,在聚焦一点的话,就是微小电流的检测,比如生物科技中的血糖仪,血氧仪,脉搏检测器等。同时也可以用于驱动一定功率的红外或者led。


下面讲述有哪几种常用的方法即连接方式:


General-Purpose Mode (通用模式)

如上图所示的通用模式,OA的正端和负端均选中位外部引脚作为输入,同时输出端不反馈,因此可直接作为一个OA使用,用户可以自己搭建外围电路。


Buffer Mode(缓冲器模式)

如上这种电路拓扑结构,是电压跟随器,电压缓冲器的连接方式(跟随器和缓冲器有一定区别,不细说),在用户要求一些输入阻抗高,输出阻抗低的情况下可以使用。


Inverting  Mode(反转模式)

反转模式,如上所示,这种电路结构应该是用户使用最多的电路了,负端作为输入,正端可以提供一个需要的偏执电压,具体公式不细说,比较简单了资料也很多。


对于正端提供的偏执电压呢,有两种方式:内部12 bitDAC和直接引入外部的电压。即位如上所示的两种结构。


Noninverting  Mode(同相模式)

这个电路拓扑是同相模式,输入端从正端输入,负端和输出通过可调节的增益相连接构成一个反馈电路。


SAC内部本质上就是运放结构,同时在输入及输出端搭配了多个选择开关,从而用户在使用过程中可以免去外部的电阻,电容等电路,节省板载空间,也可以加速用户设计。同时内部的SAC模块可以级联,进行多级放大,更便于使用。那么如何设置内部的电路结构呢?当然是操作寄存器! 下面详细讲解一下相关的寄存器设置并给出参考程序。


先整体看一下寄存器的内容,SAC模块包括6个寄存器,如下:

SACxOA

SACEN : SAC模块的使能位,1时使能所有的SAC模块,失能情况下输出位高阻状态。


OAPM : OA的模式选择,也就是可以是高速或低速的,当然高速或者低速会影响功耗,带宽,速度等,具体参数可以参考芯片的datasheet,如下图所示位FR2355的数据。


OAEN :内部OA使能,这一位用于控制SAC内部的OA模块的使能。


NMUXEN : 这一位控制着OA负端输入的使能,看内部结构框图可以看出,在OA负端输入前有两级:第一级时MUX,也就是选择输入源,第二季是使能MUX,也就是说即使选择了MUX的输入源,这个也必须使能,否则MUX与OA的负输入端会断开。


NSEL : 负端输入选择位。


PMUXEN : 这一位和负端的NMUXEN类似,控制着正端的MUX与OA的连接或断开。


PSEL : 正端输入选择位。


SACxPGA

GAIN : OA增益选择,也就是在上面讲述的图中的可调增益的设置位,有三位,配合NSEL PSEL MSEL可以实现多种模式下的增益选择。


MSEL : PGA模式的选择,控制的是如下图中的内部电路结构:

综上可以发现,电路拓扑即增益等参数与MSEL PSEL NSEL GAIN有关系,具体这些参数怎么设置呢? 下图给了一些参数的示例,在使用过程中可以根据下述资料进行寄存器的设置。

SACxDAC

SACxDAC寄存器显而易见是用来控制SAC内部那个12bit DAC模块的,那么内部这个DAC模块的电路结构是什么样子的呢?

那么我们对着这张DAC内部的结构图就可以很容易的看懂这个寄存器里每一位的含义了。


DACSREF : 这一位决定着DAC的参考电压,有两个选项:primary和secondary,每一项的参考源在芯片的datasheet中可以查看到,如下图是FR2355的信息。

DACLSEL : 从上面结构上可以看到,这一位决定着设置的DAC值是否进入DAC CORE,当设置的数据进入DAC CORE后,则会驱动相应电压输出,也就是说这一位决定着DAC内核电压改变的频率,可以是实时的,也可以是脉冲控制的。


DACDMAE : DAC内部DMA请求使能,当DAC数据更新时,如果此位使能的情况下,则会有一个DMA的请求。


DACIE : DAC中断的使能信号,在DAC数据更新时可以产生一个中断信号给CPU。


DACEN : DAC使能位。


SACxDAT

这个寄存器是用于设置DAC电压值的,DAC的输出电压值是多少呢? 根据下面这个公式进行计算:

SACxDACSTS

这个寄存器是DAC的状态标志寄存器,目前只有0位用于DACIFG,其他均是预留的。


DACIFG是DAC数据更新的标志位。


SACxIV

DAC中断向量寄存器,只读寄存器,和DAC内部数据更新产生的中断有关系。当产生中断时,会触发中断向量处的程序,进而可以执行用户的中断服务程序。


好啦,在描述完SAC的所有寄存器后,提供几个例程以供大家参考使用(MSP430FR2355):


General Purpose Mode:

#include

 

int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop watch dog timer

 

  P1SEL0 |= BIT1 + BIT2 + BIT3;             // Select P1.1 P1.2 P1.3 OA function

  P1SEL1 |= BIT1 + BIT2 + BIT3;             // Select P1.1 P1.2 P1.3 OA function

 

  SAC0OA |= NMUXEN + PMUXEN;                // Enable negative and positive input

  SAC0OA |= OAPM;                           // Select low speed and low power mode

  SAC0OA |= SACEN + OAEN;                   // Enable SAC and OA

 

  __bis_SR_register(LPM3_bits);             // Enter LPM3

}

 


Buffer Mode:

#include

 

int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop watch dog timer

 

  P1SEL0 |= BIT1 + BIT3;                    // Select P1.1 P1.3 as external OA function

  P1SEL1 |= BIT1 + BIT3;                    // Select P1.1 P1.3 as external OA function

 

  SAC0OA |= NMUXEN + PMUXEN + NSEL_1 + OAPM;// Enable negative and positive input

                                            // Select PGA source as OA negative input

                                            // Select low speed and low power mode

  SAC0PGA |= MSEL_1;                        // Set as Unity-Gain Buffer Mode

  SAC0OA |= SACEN + OAEN;                   // Enable SAC and OA

 

  __bis_SR_register(LPM3_bits);             // Enter LPM3

}


Inverting  Mode:

#include

 

int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop watch dog timer

 

  // Disable the GPIO power-on default high-impedance mode

  // to activate previously configured port settings

  PM5CTL0 &= ~LOCKLPM5;

 

  // Configure reference module

  PMMCTL0_H = PMMPW_H;                    // Unlock the PMM registers

  PMMCTL2 = INTREFEN | REFVSEL_0;         // Enable internal 1.5V reference

  while(!(PMMCTL2 & REFGENRDY));          // Poll till internal reference settles

 

  P1SEL0 |= BIT1 | BIT2 | BIT3;             // Select P1.1 P1.2 P1.3 OA function

  P1SEL1 |= BIT1 | BIT2 | BIT3;             // Select P1.1 P1.2 P1.3 OA function

 

  SAC0DAC = DACSREF_1;                       // Select 1.5V int Vref as DAC reference

  SAC0DAT = 0x0FFF;                         // Set SAC DAC data to 1.5V

  SAC0DAC |= DACEN;                         // Enable DAC

  SAC0OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_1;//Select positive and negative pin input

  SAC0OA |= OAPM;                           // Select low speed and low power mode

  SAC0PGA = GAIN2 + MSEL_0;                 // Set inverting PGA mode with Gain=8

  SAC0OA |= SACEN + OAEN;                   // Enable SAC and OA

 

  __bis_SR_register(LPM3_bits);             // Enter LPM3

}


Non-inverting  Mode:

#include

 

int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop watch dog timer

 

  P1SEL0 |= BIT1 + BIT2 + BIT3;             // Select P1.1 P1.2 P1.3 OA function

  P1SEL1 |= BIT1 + BIT2 + BIT3;             // Select P1.1 P1.2 P1.3 OA function

 

  SAC0OA = NMUXEN + PMUXEN + PSEL_0 + NSEL_1;//Select positive and negative pin input

  SAC0OA |= OAPM;                           // Select low speed and low power mode

  SAC0PGA = GAIN0 + GAIN2 + MSEL_2;         // Set Non-inverting PGA mode with Gain=17

  SAC0OA |= SACEN + OAEN;                   // Enable SAC and OA

 

  __bis_SR_register(LPM3_bits);             // Enter LPM3

}

 


DAC Buffer Mode : 就是把DAC数据输出,将SAC当作DAC使用

#include

 

unsigned int DAC_data=0;

 

int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop watch dog timer

 

  P1SEL0 |= BIT1;                           // Select P1.1 as OA0O function

  P1SEL1 |= BIT1;                           // OA is used as buffer for DAC

 

  PM5CTL0 &= ~LOCKLPM5;          // Disable the GPIO power-on default high-impedance mode

                                 // to activate previously configured port settings

 

  // Configure reference module

  PMMCTL0_H = PMMPW_H;                      // Unlock the PMM registers

  PMMCTL2 = INTREFEN | REFVSEL_2;           // Enable internal 2.5V reference

  while(!(PMMCTL2 & REFGENRDY));            // Poll till internal reference settles

 

  SAC0DAC = DACSREF_1 + DACLSEL_2 + DACIE;  // Select int Vref as DAC reference

  SAC0DAT = DAC_data;                       // Initial DAC data

  SAC0DAC |= DACEN;                         // Enable DAC

  SAC0OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_1;//Select positive and negative pin input

  SAC0OA |= OAPM;                            // Select low speed and low power mode

  SAC0PGA = MSEL_1;                          // Set OA as buffer mode

  SAC0OA |= SACEN + OAEN;                    // Enable SAC and OA

 

  // Use TB2.1 as DAC hardware trigger

  TB2CCR0 = 100-1;                           // PWM Period/2

  TB2CCTL1 = OUTMOD_6;                       // TBCCR1 toggle/set

[1] [2] [3]
关键字:TI  MCU  MSP430  使用指南 引用地址:TI - MCU - MSP430使用指南32 -> SAC智能模拟组合

上一篇:TI - MCU - MSP430使用指南14 -> I2C通信(eUSCI)
下一篇:TI - MCU - MSP430使用指南5 -> ICC中断控制器

推荐阅读最新更新时间:2024-11-12 18:55

ST推出两款汽车微控制器
中国,2014年5月20日 ——意法半导体进一步扩大汽车级微控制器产品阵容,新推出两款极具价格竞争力、封装尺寸精巧的微控制器。20 MIPS的处理性能和专门为车身控制模块和驾乘舒适性优化的外设接口是新产品主要特色。 基于意法半导体的高能效24MHz STM8A 8位处理器内核,新产品 STM8AF6223和 STM8AF6226集成通信接口、时序控制、模拟外设等智能功能,适用于空间受限的车身控制模块,例如座椅控制器、车窗升降控制器、暖通空调(HVAC)控制器或车身总线网关。拓宽的工作温度范围使这款新的达到发动机组件应用标准。 芯片上集成8KB闪存、640B真数据EEPROM (读写次数高达30万次)、1KB RAM和包括
[汽车电子]
MSP430实现的嵌入式因特网终端设计
本文详细描述了用TI公司的MSP430单片机实现嵌入式因特网终端的设计,包括硬件和软件两大部分。MSP430微控制器控制以太网控制器CS8900A实现本地局域网的功能,通过TCP/IP协议提供与因特网进行连接的应用接口,使用该应用接口,可以建立新的任务或改变现有的任务,实现与因特网中其它终端间的通信。在本文中,给出了硬件原理图,说明了部分模块的工作流程。 1. 介绍 计算机通信系统尤其是因特网在日常生活中的作用越来越重要,并且呈加速发展的趋势。如今,上网不再是个人电脑和网络工作站的专利,很多用微控制器(或称单片机)控制的嵌入式系统也成为了因特网网络节点中的一员,通常,这种嵌入式系统可称为嵌入式因特网终端。试想,如果通过网页浏览
[单片机]
用<font color='red'>MSP430</font>实现的嵌入式因特网终端设计
如何使用PIC单片机来调试LCD控制器
使用PIC来调试LCD应用可能会有两个方面的问题。第一,LCD控制器会在器件暂停时停止。第二,在PIC16F946/917/916/914/913 MCU上ICD引脚与段共用。 在进行调试时,器件会在断点处和用户按暂停按钮时暂停。如果ICD配置为暂停器件的外设,则LCD控制器将暂停,并向LCD显示屏施加直流电压。 随着时间的推移,直流电压会对显示屏造成损坏:但对于大多数调试情形,不需要考虑这一点。 PIC18F LCD MCU具有一个特性,允许当器件在调试期间暂停时,LCD模块继续工作。对于要在器件暂停时检查显示图像,以及防止在器件暂停很长时间的情况下损坏显示屏.该特性很有用。 PIC16F946/917/916
[单片机]
如何使用PIC<font color='red'>单片机</font>来调试LCD控制器
AVR单片机的I/O寄存器和端口操作
1.在头文件 sfr_defs.h 中定义的宏 _BV(bit) 也常用来实现位操作。 其中,宏 _BV(bit) 的定义为: #define _BV(bit) (1 (bit)) 例子: DDRD = _BV(PD0) | _BV(PD1) //在相应器件的ioxxxxxxx.h中PD0定义为0,PD1定义为1 所以,DDRD = _BV(PD0) | _BV(PD1) 等价于DDRD=0x03. 2.ATmega128每个I/O端口都有3个寄存器来控制,分别是: 方向寄存器DDRx、数据寄存器PORTx和输入引脚寄存器PINx。 其中,方向寄存器DDRx和数据寄存器PORTx是可读可写寄存器,而PINx为只
[单片机]
MSP430的手持式仪器核心模块设计
引 言 手持式仪器是嵌入式系统应用开发的重要领域,手持式仪器具有便于携带、操作方便、LCD显示清晰等优点。本文结合手持式电量测量仪开发项目,设计了以MSP430F449为核心的手持式仪器。系统采用16位A/D转换器AD7705和128×64像素LCD图形显示器设计互动式图形用户界面,用于显示测量结果数字和图形。符合人体工程学的按键和易于操作的菜单,实现了仪器的4按键图形菜单操作。设计了对测量数据进行分析处理并实时存储的应用软件。仪器具有测量精度高、数据处理能力强、信息容量大、智能化、体积小、功耗低等特点,适合于电池供电的工作环境。 1 核心模块硬件设计 1.1 16位嵌入式处理器MSP430F449单片机 德州仪器
[单片机]
<font color='red'>MSP430</font>的手持式仪器核心模块设计
STC51系列单片机免掉电下载(热启动下载)
相信喜欢单片机的朋友都用过STC的单片机,用过STC单片机的朋友都有这种感受:实惠、易用、功能强大!就是每次下载都要冷启动特别恶心,相信很多朋友的开发板上的电源键都按烂了。 其实STC单片机可以不用免掉电下载,想要知道怎样才能免掉电下载,我们先要了解STC单片机是怎样实现串口下载的,其实STC单片机出厂时就预置了一段ISP监控程序,我们称作ISP引导码,这段ISP监控程序就好比电脑硬盘的系统引导区。我们对STC单片机上电启动时,单片机首先执行ISP引导码检测串口是否下载程序的命令,如果上位机在对单片机下载程序时,单片机检测到下载数据流就启动ISP下载功能对单片机进行程序下载,这就是我们平时实验时点击下载后按开发板电
[单片机]
STC51系列<font color='red'>单片机</font>免掉电下载(热启动下载)
基于51单片机的串口控制led灯的亮灭源程序
/*注意设置波特率为4800,向串口不断输入0,便可实现led的亮灭*/ #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit led0=P2^0; sbit led1=P2^1; sbit led2=P2^2; /******************************************************************************* * 函数名 :UsartInit() * 函数功能 :设置串口 * 输入
[单片机]
如何学习51单片机/心得/KEIL4/DXP
什么是单片机 学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 有人觉得要先学汇编。不过我个人觉得,学习51单片机,还是从C语言入手,一来方便,二来容易上手,仁者见仁,智者见智吧。 关于学习51单片机的书籍,市场上有很多,大家可以择优选取。 那么,如何用程序控制单片机的呢? 我开始学单片机的时候也曾有过这样的困惑啊,ok,下面帮大家整理一下思路。 怎么在Keil里写程序?keil怎么安装破解? 用过VC6.0的同学都知道,VC6.0是一个编译环境。什么是编译环境?简单地说,就是你写代码的地方。 那么,同理,单片机的编译环境就是Ke
[单片机]
如何学习51<font color='red'>单片机</font>/心得/KEIL4/DXP
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved