成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

MCP4922

MCP4922 是双模拟DAC - 缓冲电压输出 设备由SPI串行接口控制。它输出一定比例的 输入电压。自呢's a 12bit device its 分辨率是VREF / 4096。所以你可以选择分割的非常好的步骤 from the reference.


此设备类似于其他DAC芯片: MCP4725 , MCP4726 , MCP4728 .

有三种重要差异:

  1. 使用spi。
  2. 没有EEPROM。
  3. 没有内部参考。

所以这的后果是:

  1. 它比提到的其他DAC更快。
  2. 它无法通过掉电/向上记住电压。
  3. 使用VDD作为参考电压。
提示: MCP4822具有内部电压参考(C.F.MCP4728)。

该芯片在中找到了相同的同步功能 MCP4728 (LDACN控制信号)允许您同时更新输出。

MCP4922 框图

 MCP4922 框图
                            [Source: Datasheet]

MCP4922 引脚向导

该芯片采用标准14针PDIP,SOIC和TSSOP。

 MCP4922 引脚向导

                    [Source: Datasheet]

MCP4922 数据表

下载MCP4922数据表 这里 .

MCP4922 规范

  Parameter
MCP4922
  Voltage Supply (Vs)
2v7〜5v5
  Abs. Max V DD.
-0v3〜6v5
  Interface
spi.
  SPI rate
到20MHz.
  Resolution
12 bit
  掉电I(H / W,S / W)(典型,最大)
(0.3ua,2ua)(3.3ua,6ua)
  没有负载电流(典型,最大@ 5V) 350ua,700ua.
  短路(Vout = GND)(典型值,最大)
15mA,24mA
  偏移错误(典型,最大)
±0.02,1.00%FSR
  偏移误差漂移(-45〜25,25〜85°C,典型值) ±0.16ppm,-0.44ppm
  INL (typ,max) LSB
±2,±12 [3]
  DNL(MIN,TYP,MAX)LSB
-0.75,±0.2,±0.75 [1]
  增益错误(典型,最大)%fsr -0.1,1
  Gain error drift
-3 ppm /ºC
  Phase margin
66º
  电容式负载稳定性(5K负载)
ns.
  Slew rate
0.55V /美国
  输出电压稳定时间
4.5us
  工作温度
-40°C〜125°C
    [1]低于1 LSB的数字意味着未错过代码。

MCP4922 使用

该芯片在MCP4725的能力中非常相似,并且因为 this it 将具有类似的用途 - 除了拥有的最重要的差异 没有EEPROM并给你两个输出,就是它有能力的 非常高的速度操作。

如果你看看结果 MCP4725 - 即使仅具有非常低的速度波形,它是一种斗争 使用和Ardunio Uno(218Hz)的16个步骤,输出甚至是 使用更多步骤慢(除非使用更快的微控制器和使用 高速I2C)。即使使用Arduino UNO作为控制器,MCP4922也能够更快的操作。

芯片有几种用途:

  • 校准(偏移和设定点)。
  • 精确选择的电压参考。
  • 高速波形生成。
  • 电机控制反馈(快速SPI =比 MCP4725 )。
  • 乘数和分频器。

LDACN使用率

对于MCL4922,您必须将LDACN连接到控制信号,否则输出将不会更新。

为了 MCP4728 有一个软件同步更新UDACN或硬件 同步更新LDACN。

警告: 您必须将LDACN连接到微控制器控制信号。

如果你不'关心受控同步然后是最简单的 这样做的方法是将LDACN连接到芯片选择CSN。这将意味着 输出在每个写入序列的末尾更新到A或B. registers.

arduino. 与MCP4922的示例

软件

arduino. IDE:1.8.9+版

arduino. 图书馆

  • 图书馆:无
对于此芯片,只有16位SPI写入,这很容易足够的库是不需要的。

唯一的行动是:
  • 使用缓冲区。
  • 选择频道A或B.
  • 发送DAC值。

警告: LDACN必须连接到微控制器控制信号。

硬件

成分

  • arduino. Uno R3 / Arduino Nano。
  • MCP4922。
  • 无焊接面包板。
  • 连接线。

连接

用于测试使用Arduino Uno并将其连接如下:

arduino. MCP4922
  5V
VDD.
  GND
GND.
  11 (MOSI)
SDI.
  12 (MISO)
N / C.
  13 (SCK) SCK.
  10 (CS)
CSN.
  10(CS)或其他UC引脚
LDACN.
  VCC
Shdnn.

由于无法从MCP4922读取数据't connect MISO.

示例程序

第一个示例使用BUIT调查性能速度 SPI硬件模块,而第二个调查使用Arduino shiftOut() function.

示例程序1

下面的这草图是在完整的正弦波中使用32间隔(从上到下的16步)来设置。所以 输出经过360/32度,并获得每个的DAC结果 angle.

它生成一个正弦波,有16个步顶到底部。这是为了允许比较 MCP4725 结果.

注意:中断熄灭,因此波形没有"wobble". The first example uses the "fast"内部SPI模块,而第二个使用 位撞击函数。

// MCP4922 Demo code sinewave at 16 res top to bot.
// For comparison to MCP4725 operation (DAC_RESOLUTION=-5).
#include <SPI.h>

#define DAC_RESOLUTION    5
#define DAC_ARRAY_INDICES (pow(2,DAC_RESOLUTION))

 spi. Settings settingsA(16000000, MSBFIRST,  spi. _MODE0);  // At 16 = SPI Clock = 8MHz.

const PROGMEM uint16_t SineLookup_5bits[32]
{
2048, 2447, 2831, 3185, 3495, 3750, 3939, 4056,
4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447,
2048, 1648, 1264,  910,  600,  345,  156,   39,
   0,   39,  156,  345,  600,  910, 1264, 1648
};

 在 t RCLKPin  = 10;   // pin 12 on the 74hc595 latch - nSS
 在 t SRCLKPin = 13;  // pin 11 on the 74hc595 shift register clock - SCK
 在 t SERPin   = 11;    //  MOSI
#define MARKER 4
//////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(115200);        // Start serial port (debug).

  pinMode(RCLKPin,  OUTPUT);   // Set SPI control PINs to output.
  pinMode(SRCLKPin, OUTPUT);
  pinMode(SERPin,   OUTPUT);
  pinMode(MARKER,   OUTPUT);

   spi. .begin();

  Serial.println("MCP4922 SPI Dual DAC SPI hardware mode");
  noInterrupts();
}

//////////////////////////////////////////////////////////////////////////////
// 0 - A, 1 - B
//
void writeMCP4922_AB(byte AB, uint16_t v) {

    v |=0xf000;             // B15(A/B)=1 B, B14(BUF)=1 on, B13(GAn) 1=x1  B12(SHDNn) 1=off
    if (!AB)  v &= ~0x8000; // When zero clear B15 for A.

     spi. .beginTransaction(settingsA);
    digitalWrite(RCLKPin, LOW);
     spi. .transfer( (0xff00 & v)>>8 );
     spi. .transfer(      0x00ff & v );
    digitalWrite(RCLKPin, HIGH);
     spi. .endTransaction;
}

void loop() {
   for ( 在 t i = 0; i < DAC_ARRAY_INDICES; i++) {
      digitalWrite(MARKER, HIGH);
      digitalWrite(MARKER, LOW);
      writeMCP4922_AB( 0, pgm_read_word(&(SineLookup_5bits[i])) );
   }
}

            [素描:MCP4922-SPI-Module.ino]

示波器设置为每分为1V并显示输出 频率 of 1.475kHz.

 MCP4922  SPI模块

时基:100US / div,黄色1V / div。

所以这种方法比MCP4725快得多。但是它仍然是 受Arduino Uno的速度有限。即使16MHz SPI时钟是 要求它只能达到8MHz。还记得这是一个低点 分辨率波形。添加更多步骤会慢下来。

以下波形显示8MHz的SPI时钟(即使是16MHz 被要求Arduno Uno只能提供8MHz - 合理的 Arduino的主时钟是16MHz):

 arduino.  SPI时钟使用SPI模块

时基:200ns / div,黄色2v / div。

示例计划2.

MCP4922 2使用换档时的能力是多少?

ShiftOut功能是一个磁线串行输出发生器 可以以不同的方式配置。例如,您可以选择MSB或 LSB第一操作。 muti-functional的问题是那个时间 用于处理这些额外。

以下代码生成一个正弦波,具有16个步骤顶部到底部。这是为了允许比较 MCP4725 结果.

// MCP4922 Demo code sinewave at 16 res top to bot.
// For comparison to MCP4725 operation (DAC_RESOLUTION=-5).

#define DAC_RESOLUTION    5
#define DAC_ARRAY_INDICES (pow(2,DAC_RESOLUTION))

const PROGMEM uint16_t SineLookup_5bits[32]
{
2048, 2447, 2831, 3185, 3495, 3750, 3939, 4056,
4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447,
2048, 1648, 1264,  910,  600,  345,  156,   39,
   0,   39,  156,  345,  600,  910, 1264, 1648
};

 在 t RCLKPin  = 10;   // pin 12 on the 74hc595 latch - nSS
 在 t SRCLKPin = 13;  // pin 11 on the 74hc595 shift register clock - SCK
 在 t SERPin   = 11;    //  MOSI
#define MARKER 4
//////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(115200);        // Start serial port (debug).

  pinMode(RCLKPin,  OUTPUT);   // Set SPI control PINs to output.
  pinMode(SRCLKPin, OUTPUT);
  pinMode(SERPin,   OUTPUT);
  pinMode(MARKER,   OUTPUT);

  Serial.println("MCP4922 SPI Dual DAC");
}

//////////////////////////////////////////////////////////////////////////////
// 0 - A, 1 - B
//
void writeMCP4922_AB(byte AB, uint16_t v) {

    v |=0xf000;             // B15(A/B)=1 B, B14(BUF)=1 on, B13(GAn) 1=x1  B12(SHDNn) 1=off
    if (!AB)  v &= ~0x8000; // When zero clear B15 for A.
    digitalWrite(RCLKPin, LOW);
    shiftOut(SERPin, SRCLKPin, MSBFIRST, (0xff00 & v)>>8);
    shiftOut(SERPin, SRCLKPin, MSBFIRST,  0x00ff & v);
    digitalWrite(RCLKPin, HIGH);
}

void loop() {
   for ( 在 t i = 0; i < DAC_ARRAY_INDICES; i++) {
      digitalWrite(MARKER, HIGH);
      digitalWrite(MARKER, LOW);
      writeMCP4922_AB( 0, pgm_read_word(&(SineLookup_5bits[i])) );
   }
}


            [素描:MCP4922-ShiftOut.ino]

注意:正弦表来自 //github.com/adafruit/Adafruit_MCP4725/blob/master/examples/sinewave/sinewave.ino 您可以在哪里找到更多表(最多9位)。

在完整的正弦波中使用32间隔设置此草图(从上到下16步)。所以 that 正在经历360/32度,并为每个人获得DAC结果 角度。示波器设置为每分为1V并显示输出 频率为130Hz.。因此,该位撞击方法比MCP4725慢,而不是使用SPI硬件慢10倍。

 MCP4922  ShiftOut Singe波形

时基:1ms / div,黄色1v / div。

MCP4725 规范VS MCP4922

  Parameter
MCP4725
MCP4922
  Voltage Supply (Vs)
2v7〜5v5 相同的
  Abs. Max V DD.
-0v3〜6v5
相同的
  Interface
I2C
spi.
  I2C rate
100khz,400khz,3.4mhz20MHz
  Resolution
12 bit 相同的
  Power Down I (V DD. = 5v5典型,最大值)
0.06ua,2ua
0.3ua,2ua
  没有负载电流(典型,最大) 210ua,400ua.
350ua,700ua.
  短路(VOUT = GND)(MN,TP,MX)
7mA,15mA,24mA
同样没有min.
  偏移错误(典型,最大)%fsr ±0.02,0.75  ±0.02,1.00
  Offset error drift (-45〜25,25〜85℃,典型)ppm
±1,±2 ±0.16,-0.44
  INL (typ,max) LSB
±2,±14.5 [3] ±2,±12
  DNL(min,典型,最大)LSB [2] -0.75,±0.2,±0.75 
相同的
  增益错误(min,典型,最大)%fsr -2,-0.1,2
X,-0.1,1
  Gain error drift
-3 ppm /ºC
相同的
  Phase margin
66 Â 相同的
  电容式负载稳定性(5K负载)
1000pF ns.
  Slew rate
0.55V /美国
相同的
  输出电压稳定时间
6us
4.56us
  I2C地址(H / W被选中= 8off)
0x60,0x61 [1] N / A.
  工作温度
-40°C〜125°C
相同的
    [2]低于1 LSB的数字意味着没有错过代码。

理论最大速度

这芯片大约有多快地生成32位的SineWave?

SineWave通过Max到Min的32位周期,然后再次到最大值,因此从上到下有16个步骤。

忽略转换速率,和稳定时间,以及处理器时间。来自 波形您可以看到必须输出16位。如果时钟为20MHz(Max SPI速度) 那么这将需要16 *(1/20e6)= 800ns。

生成32个段将需要32 * 800E-9 = 25.6us

产生1 / 25.6e-6 = 39kHz的频率。

警告: 这是一个低分辨率的正弦波。更多步骤=较慢。

这是最大的理论正弦波 - 记住这是一个低位 分辨率正弦波,如果需要更多的细分,则会减速。

以上计算仅用于一个注册更新。对于两个通道更新,速率将减少到19.5kHz

警告: 计算假设处理器专用于此任务!

笔记: 最大理论单通道更新:39kHz。 LOW RES

结论

MCP4922 是用于生成特定控制的有用装置 电压e.g.用于设定点或偏移校准。你可以使用它 用于数字可编程电压或电流输出电路。

该设备比I2C等价物更快,但对于波形 发电很难获得高音频频率(高步 size).

速度

MCP4922 是一种能力的设备,并且操作速度快 所有I2C版本。您可以使芯片速度快,但有一个 arduino uno它相当慢。这些例子显示出非常低的分辨率 波形输出为1.4kHz,更多的步骤将需要更长时间减少 output frequency.

如果您正在寻找高速操作,您需要更快 处理器如DSP处理器。但是即使是最大值 频率输出为39kHz,仍然仅为16步波形。

波形输出的简单替代方案是 AD9833 (然而,这不是DAC并仅生成单个凸起)。 另一种替代方案是平行的DAC。 DAC08。更多细节是 这里 .

记忆

与I2C版本不同,此芯片没有EEPROM,因此无法保持电源后的相同输出。

电压参考

该芯片没有内部电压参考 - 您可以获得具有参考的MCP4822。

输出

MCP4922 具有两个输出。如果速度不是一个问题,你需要大量的输出 MCP4728 在I2C总线上有四个。

面包板

这种芯片易于在无焊接面包板上使用,因为它也是如此 配有标准的PDIP包,并为您控制两个模拟 outputs.


新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


 ezoic. 报告此广告

访问我们的Facebook页面:

   点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino. 模拟输出...易模拟输出生成

    arduino. 模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超 极好的 ."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
Matt_tr. <at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。 "


- Anon.

回到顶部