This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DAC121C081:Energia和TIVA C系列中的DAC编程问题

Guru**** 2560180 points
Other Parts Discussed in Thread: TPL0401A-10, ENERGIA, DAC121C081, TPL0102-100

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/591378/dac121c081-issue-with-dac-programming-in-energia-and-tiva-c-series

部件号:DAC121C081
主题中讨论的其他部件:EnergiaTPL0102-100TPL0401A-10REF5030

大家好
我对DAC编程有问题。
首先,我的项目有一部分需要从-1.5v到1.5v的线性模拟电压。我的想法是使用数字电位计获得0->3V的电压,然后用1.5v的同相输入电压馈入运算放大器,以便将其“分割”成一半和中 结束获取-1.5V <-> 1.5V。
模拟电路部分工作非常顺利,但我无法获得0->3V的电压。
我试过TPL0401A-10,它的工作原理非常好 (我正在使用TIVA C系列平台和Energia进行控制)。问题是TPL0401A-10有128个分路器,最终分辨率非常低。这就是为什么我使用相同的代码(当然, 地址已更改,数字Val为255)最后,我从图片中得到了一些信息(我使用的是10k上拉电阻,与TPL0401A-10相同)。


然后我换了DAC121C081并制作了小型评估板,其中DAC由REF5030供电,它具有10K上拉电阻器。 (我再次使用TIVA C和 Énergia带有Adafruit MCP4725库用于DAC,它可以正常工作,问题是DAC上的最小电压是0V,这是可以的,但我得到的最大电压是0.2V?? (参见图DAC,其中TIVA直接驱动DAC并记录ADC值)。


有人能帮我解决DAC121C081和TPL0102-100的编程端问题吗?
我希望发援会有更好的解决方法,但 我也想知道 TPL0102-100有甚么问题。
提前向大家表示感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Gabriel:

    我在设想电路时遇到了问题。  您认为您可以分享一个原理图吗?  此外,如果您可以捕获通信的示波器图像,这也会很有帮助。  

    谢谢!

    保罗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Paul

    感谢您的快速响应。

    我将用一些总的原理图来说明。

    对于 TPL0102-100 A0是GND,A2是V+(5V),我尝试将A1作为GND或V+,这不会改变任何事情。 H端子为V+,L为GND,测量雨刷器(V输出)。

    对于DAC121C081,我已使ADR0处于浮动状态。 我还使用示波器测量了DAC输出,它与TIVA ADC读取的输出相同,正如人们所期望的那样。


    目前我无法提供通信的屏幕截图,但我很快就会。
    谢谢你
    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gabriel

    我怀疑您的通信存在问题,因为传输功能是线性的。 我将验证您的TIVA代码是否正确,并且您的位顺序没有问题或数学中的任何错误。 我还会验证您没有意外写入任何设备的断电功能。 I2C帧的范围捕获信息非常丰富。

    此外,您可能需要在DAC发生变化时使用范围来测量您的耗材。 如果您看到较大的瞬变,可能是电源的当前驱动能力存在问题,或者某处存在串联电阻。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Paul

    我从范围中得到这个数字。
    CH1是SCL线,CH2是SDA。 (但我认为没有必要提及这一点)。

    我也测试过电源,这里的数字也是(CH1是DAC输出,CH2是DAC输入处的电压,它与去耦盖之间的电压为0.1uf)

    我将把我为该DAC采用的代码与原始库一起包含在内。

    如果你能说明这一点,那将是最有帮助的

    谢谢你

    此致
    e2e.ti.com/.../DAC_5F00_code-and-Library.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gabriel

    我看起来您正在使用的I2C的Sends库正在发送4字节帧,其中第二字节是MCP4725的命令字节。 在您的示波器镜头中,您可以看到起始位之间的时钟脉冲太多。 DAC121s081使用三字节帧,因此将DAC代码的MSB字节写入DAC的LSB字节。 您应该尝试使用Arduino "Wire"库并设置自己的3字节帧的格式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    保罗
    是的,我看到了这个问题,回顾一下数据表,我发现有必要有3字节帧。
    我曾尝试使用"Wire"库,但不幸的是,我只获得了两字节帧,但未成功。
    老实说,我对 自己能解决这个问题没有信心。
    我要求您给我发送此DAC的代码示例是否太多?
    提前感谢您的参与

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Gabriel

    我敢打赌,你使用电线 库时遇到的问题必须与错误的(缺少)地址字节有关,或者与函数Wire.write()命令有关,该命令一次只接受一个字节。  在代码中,DAC值存储为32位的无符号整数。  您确实只需要两个字节。  将DAC代码设置为简单的无符号int将保留为2字节。  然后需要发送两个不同的Wire.write命令,每个无符号整数的字节一个。

    请尝试一下,看看它是否起作用。  我没有测试代码!

    #include <Wire.h>
    
    unsigned int daccode =0;
    
    void setup()
    {
    Wire.begin();// join i2c bus
    }
    
    void loop()
    {
    Wire.beginTransmission(0x0C);//传输到addres 0x0C
    //设备地址在数据表
    Wire.write(daccode>>>8)中指定; //仅应发送两个字节无符号int的高位字节(MSB),
    //因此,移位八位将把字节放在LSB位置
    Wire.write (daccode & 0x00FF)中;//发送的第三个字节需要是两个字节无符号int的LSB。
    //按位和掩码将删除MSB字节
    Wire.endTransmission (); //停止传输
    
    daccode++; //增量值
    IF (daccode == 4096)//如果达到4096位置(最大)
    {
    daccode =0;//从最小值
    开始}
    延迟(1);}
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Paul

    最初不起作用,但在 setup中添加Wire.setModule(1);并将DAC的地址从(0x0C)更改为(0xC)之后,它工作正常:D

    非常感谢!!

    下面是ADC读数中DAC值的图片