历史上的今天
返回首页

历史上的今天

今天是:2025年03月30日(星期日)

正在发生

2020年03月30日 | MSP430使用指南32 -> SAC智能模拟组合

2020-03-30 来源:eefocus

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

推荐阅读

史海拾趣

Connective Peripherals Pte Ltd公司的发展小趣事

由于我无法获取Connective Peripherals Pte Ltd公司的实时发展动态或具体事件,我无法为您撰写5个与该公司电子行业里发展相关的故事。然而,我可以为您概括性地描述Connective Peripherals Pte Ltd公司在电子行业中的发展概况,以便您了解该公司的基本情况和行业地位。

Connective Peripherals Pte Ltd自2016年成立以来,在电子行业里逐步崭露头角,成为一家备受瞩目的通信和仪器仪表产品供应商。该公司专注于基于USB、CAN和RS232/RS422/RS485接口的串行连接解决方案,凭借卓越的技术实力和创新能力,在行业中树立了良好的口碑。

随着科技的飞速发展,电子行业对高效、稳定的通信和仪器仪表产品需求日益增长。Connective Peripherals Pte Ltd紧跟行业趋势,不断推出创新产品,满足市场需求。从提供USB到串行接口连接的适配器板和电缆,到开发基于USB的示波器、数据记录器和逻辑分析仪等高端产品,Connective Peripherals Pte Ltd的产品线日益丰富,质量也逐步提升。

在市场竞争激烈的电子行业,Connective Peripherals Pte Ltd凭借其卓越的产品质量和完善的售后服务,赢得了众多客户的信赖和支持。该公司与多家知名企业建立了长期稳定的合作关系,产品远销海内外,为公司的快速发展奠定了坚实的基础。

此外,Connective Peripherals Pte Ltd还注重技术研发和人才培养。公司拥有一支高素质的研发团队,不断投入资金进行技术研发和创新,为公司的持续发展提供了强大的技术支持。同时,公司还积极开展人才培训和引进工作,吸引了一批优秀的行业人才加入公司,为公司的长远发展注入了新的活力。

总之,Connective Peripherals Pte Ltd在电子行业里凭借卓越的技术实力、丰富的产品线和完善的售后服务,逐步发展成为一家具有影响力的企业。未来,随着电子行业的不断发展,Connective Peripherals Pte Ltd有望继续保持其领先地位,为行业的进步和发展做出更大的贡献。

请注意,以上内容仅为概括性的描述,并未涉及具体的故事或事件。如果需要更详细的故事或事件描述,建议查阅相关的行业报告、公司年报或新闻报道,以获取更准确和具体的信息。

B+B SmartWorx公司的发展小趣事

B+B SmartWorx一直致力于产品创新,不断推出符合市场需求的新产品。其中,光纤转换器、3G/4G无线路由器以及Wzzard系列无线感测装置等产品受到了市场的广泛认可。这些产品不仅填补了研华在某些领域的空白,也展示了B+B SmartWorx在物联网和工业网通领域的强大实力。此外,公司还积极开发风扇配件、AC插座等电力元件产品线,进一步丰富了其产品体系。

德立电子(DDY)公司的发展小趣事

在稳固国内市场的同时,德立电子积极开拓国际市场。公司凭借优质的产品和完善的售后服务,赢得了赛尔康、伟易达、TCL等众多知名企业的青睐。此外,德立电子还加强品牌建设,通过参加国内外电子展会、举办技术研讨会等方式,提升品牌知名度和影响力。

Global Specialties公司的发展小趣事

随着电子技术的快速发展,教育和培训成为了Global Specialties的另一个重要领域。公司敏锐地捕捉到这一市场需求,推出了一系列针对教育的试验板和套件。这些产品不仅帮助学生更好地理解电子原理,还激发了他们的创造力和实践能力。通过与多所高校和职业院校的合作,Global Specialties成功地将自己的品牌深入到教育市场的每一个角落。

FEMA Electronics Corporation公司的发展小趣事

FEMA在追求经济效益的同时,也积极履行社会责任。公司积极参与公益事业和慈善活动,为社会做出了积极贡献。同时,FEMA还注重环保和可持续发展,努力降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。在履行社会责任的过程中,FEMA实现了经济效益和社会效益的双赢。

Arduino公司的发展小趣事

Arduino平台从一开始就秉持着开源和合作的理念。它的源代码、硬件设计和文档都是公开的,鼓励开发者们共同参与和贡献。这种开放的精神吸引了大量的开发者加入Arduino社区,共同推动Arduino平台的发展。同时,Arduino也与许多企业和机构建立了合作关系,共同推动电子行业的发展和创新。

问答坊 | AI 解惑

半导体型号命名方法

、 中国半导体器件型号命名方法     半导体器件型号由五部分(场效应器件、半导体特殊器件、复合管、PIN型管、激光器件的型号命名只有第三、四、五部分)组 成。五个部分意义如下:     第一部分:用 ...…

查看全部问答>

以单片机与FPGA为核心的数字示波器

本帖最后由 paulhyde 于 2014-9-15 03:29 编辑 毕业设计题目:基于单片机与FPGA的高速数据采集系统; 设计要求:采集正弦波,三角波,方波信号,经单片机控制,FPGA内RAM存储波形采集数据,再经DAC输出显示; 各们朋友,临近毕业,毕业设计很 ...…

查看全部问答>

RS232串口(COM口)控制(10位)A/D模数转换控制板

本串口控制A/D模数转换控制板具有6路10位(精度±1LSB)高速A/D转换通道,可同时对外部输入的6路模拟量(直流0-5V)进行模数转换,转换后的结果(每通道转换后的结果为2字节数据)通过串口快速输出(默认波特率9600,可定做其它波特率),供电脑上位机 ...…

查看全部问答>

请问谁有高通(qualcomm)的技术网站https://support.cdmatech.com的账号或者是高通的Organization number

请问谁有高通(qualcomm)的技术网站https://support.cdmatech.com的账号或者是高通的Organization number. 我想在这个网站里面下载一些芯片的资料.但是没有\"组织号\"就注册不了. 那位有这个网站的账号或者组织号,可不可以共享给我用一下..我的邮 ...…

查看全部问答>

CE 用什么控件显示数据

我想在设备上对数据库中进行显示,查询等操作,但CE下不能使用datagridview控件, 请教下大家在开发时候都用什么控件或者什么方法 对数据进行数据显示和查询的操作的。…

查看全部问答>

vs 2005基于智能设备的socket编程

char *aa; j=m_recv.Receive(aa,2,0); if(aa==\"ff\") {                        KillTimer(1); } 用的vs2005 基于智能设备的程序 我写的关于socket 的接收程序,就是那些字 ...…

查看全部问答>

XF-S3011

请问有谁使用过XF-S3011语音芯片?有没有MCU为51系列芯片的相关C语言程序?让我参考一下。…

查看全部问答>

STM32DEBUG问题

调试STM32F103VB 时出现*** error 34, line 15: undefined identifier无法进入单步调试,不知道为什么?…

查看全部问答>

仙猫快过来 如何产生负电源

本帖最后由 dontium 于 2015-1-23 12:42 编辑 小弟最近需要做个电源 : 要将+28输入转换为+-12v输出, 且+-12v要 能提供300mA左右的输出电流,且由于板子面积较小,放不下DC-DC模块,猫猫能不能给点电路,或者推荐一些芯片(芯片体积最好要小哦, ...…

查看全部问答>

德州仪器最新高精度设计库助力简化模拟设计

德州仪器 (TI) 宣布推出一款高精度模拟设计库,其提供完整的板级及系统级精确设计,不但可帮助工程师快速评估和定制系统,同时还可为其扩展模拟知识面。该 TI 高精度设计库包含参考、验证及认证设计等类别,可为客户提供快速评估和定制系统所需的所 ...…

查看全部问答>