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.

[参考译文] DAC7750:转换速率控制功能不工作

Guru**** 2560390 points
Other Parts Discussed in Thread: DAC7750

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/613555/dac7750-slew-rate-control-feature-not-working

部件号:DAC7750

尊敬的各位:

我正在使用DAC7750转换器来输出更新速率为4kHz的4-20mA信号。 我首先实现了基本功能(仅限DAC,无监视程序,无转换速率,无控制...)。 在成功的结果后,我添加了一些附加功能,如状态回读,看门狗,输出开路负载检查和转换速率控制。 除转换速率控制外,每个功能都能正常工作。 实际上,只要我将SREN控制位寄存器设置为4mA,输出就会冻结。 我尝试了时钟和步长的各种组合,但没有效果。 清除SREN位后,输出将恢复正常操作,并按预期在4和20mA之间变化。 请在下面找到我的DAC初始化代码和原理图。

感谢您帮助我启用设计中所需的切换速率控制。

此致

Julien

void dac初始化(void){

LATCH_Write (0);
CLR_Write(1);
CyDelayU(1);
CLR_Write(0);

DAC_Write (DAC_NOP, 0x00);//刷新DAC移位寄存器

DAC_Write (DAC_WRITE CAL_Gain,0x8000);//将设备校准增益设置为1.000
DAC_Write (DAC_WRITE CAL_ZERO,0x0000);//将设备校准归零设置为0.000

dac配置_reg.u16 = 0;

DAC_conf_reg.bits.calen = 0;//用户校准控制
DAC_conf_reg.bits.HARTEN = 0;// HART接口控制
DAC_conf_reg.bits.CRCEN = 0;// CRC控制
DAC_conf_reg.bits.wden = 1; //监视器控制
DAC_conf_reg.bits.WDPD = 3; //监视期间控制

DAC_Write(DAC_Write_Conf,DAC_conf_reg.u16);

DAC_Ctrl_reg.U16 = 0;

DAC_Ctrl_reg.bits.REEXT = 0; //禁用外部感应电阻器
DAC_Ctrl_reg.bits.OUTEN = 1;//启用输出
DAC_Ctrl_reg.bits.SRCLK = 0b1100;//转换速率clk控制
DAC_Ctrl_reg.bits.SRSTEP = 0b111;//转换速率步进控制
DAC_Ctrl_reg.bits.SREN = 0; //转换速率启用
DAC_Ctrl_reg.bits.DCN = 0; //菊花链禁用
DAC_Ctrl_reg.bits.range = 0b101;//将输出范围设置为4...20mA


DAC_Write(DAC_Write_CTRL),DAC_Ctrl_reg.U16);

} 

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

    Howdy Julien欢迎参加e2e论坛!

    使用您提供的信息,我能够确定以下内容:

    • 转换速率更新时钟:6.9kHz
    • SRSTEP:8LSB
    • 范围:4至20mA
    • SREN确实显示为'0',但我假设您稍后在程序中切换此位

    当设备在大代码值之间转换时,转换速率控制功能的优点在很大程度上得到了体现。  例如,在4至20mA转换的情况下,使用上述信息,您可以计算转换时间(对于DS的第26页),如下所示:

    转换时间=(输出更改)/(步长x更新时钟频率x LSB大小)=(0.16mA/(8LSB x 6.9kHz x 3.9uA))= 74ms

    当设备从零刻度转换为全刻度时,DAC将以6.9kHz的更新速率将输出增加8LSB。  这将被视为类似于第26页所示的梯形箱波形。

    由于您以更快的速率(4kHz)写入DAC寄存器,因此您不允许DAC输出有足够的时间转换到第一个“阶梯”。  我的直觉是,如果通过“SRCLK”位提高DAC更新频率(Hz),或者通过将程序写入频率降低到4kHz以下,您将会看到更好的结果。  

    • 此外,在4kHz向DAC寄存器写入时,与先前代码相比,典型的增量(代码跳转- LSB)是多少?
    • DAC寄存器之间的增量写入的LSB是否为几个或更大?

    这些问题的信息将有助于了解问题。

    此致,

    马特

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

    感谢您的快速回复。
    实际上,上面的代码是我所做的最后一个配置变体的“屏幕截图”,我实际上禁用了转换速率以使输出再次工作。
    我理解您对74ms转换速率的观点,它不适合4kHz更新速率。 但是,这个特定的时钟和步长只是我尝试的配置变体之一。 我还尝试了最大时钟(258kHz),以确保DAC有足够的时间进行步进,但结果始终相同:输出固定为4mA。 如何解释这种冻结输出? 据我所知,即使时钟和步长不正确,输出也会或多或少地变化缓慢...不是吗? 转换速率控制是否限制在低更新速率下使用(即某些Hz)?

    要回答您的问题:
    -典型的增量是几个LSB,典型的输出信号是100-300Hz的窦性,峰值/峰值约为4mA

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

    Julien,您好!

    您能否提供以下要点中要求的信息?  此外,我还可以同时使用EVM查看是否能够创建与您发布的结果类似的情况。

    • 是否可以在配置寄存器上提供寄存器回读?
    • 您能否探测/alarm针脚,以及验证CLR输入信号的状态?
    • 此外,在程序中随时更改范围位 将清除DAC数据寄存器。  因此,只设置一次范围非常重要,这可能是您正在做的事情,但最好检查所有基准。

    此致,

    马特

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

    Matt,您好!

    感谢您的持续支持。 请在下面找到我的答案:

    • 从配置寄存器读回:是的,我通过读回每个配置寄存器的值进行了检查,它包含了它的功能
    • 报警引脚:我检查了此引脚的状态,它符合状态寄存器:当一切正常时它为“1”,当我从DAC输出断开负载时它变为“0”
    • 我从不更改上述初始化顺序中例外的范围...

    为了向您提供更多信息,请在下面找到以中断触发4kHz环路访问我的应用程序中的DAC的信息:

    [...]

    DAC_Write (DAC_write_DAC,(uint16)(T_object * DAC_CST);
    
    如果(cnt++> 800){
    CNT = 0;
    DAC_STATUS = DAC_READ (DAC_READ_STS);
    TMP1 = DAC_READ(DAC_READ_CTRL);
    DAC_Reset_WTD();
    } 

    [...]

    系统启动时仅调用一次DAC初始化。

    此致

    Julien

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

    Julien,您好!

    感谢您提供此信息,我们将在调试中应用此信息。  我确实有一些跟进问题,希望您能回答:

    • 是否可以提供配置寄存器的回读值?  如果可能,请在写入设备时验证DAC数据寄存器的更改。
    • 此外,您能否执行以下实验:
      • 将SRSTEP设置为"100"(1 LSB)
      • 将SRCLK设置为"0000" 258kHz
      • 启用转换速率
      • 写入DAC @ 4kHz
      • 使用示波器测量输出
      • 通过上述设置,新编写的代码与旧代码之间的最大代码增量必须为64个或更少。  任何高于此代码更改的内容都可能导致不正常的沉降。  

    • 此外,简单的检查还可以确定设备是否能够根据您的当前配置进行回转。  可能是从接近零刻度的代码到接近全刻度的代码,使用原始SRSTEP (8 LSB)和SRCLK (6.9kHz),并验证当到达第二个代码时,输出上是否确实有楼梯过渡。  
    • 下一步是在实验室中重新创建问题,我希望在下周初完成。

    此致,

    马特

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

    尊敬的Matt:

    我做了你在上一封信中要求的实验。 请在下面查找代码和结果:

    1)初始化代码:

    void dac初始化(void){
    
    LATCH_Write (0);
    CLR_Write(1);
    CyDelayU(1);
    CLR_Write(0);
    
    DAC_Write (DAC_NOP, 0x00);//刷新DAC移位寄存器
    
    DAC_Write (DAC_WRITE CAL_Gain,0x8000);//将设备校准增益设置为1.000
    DAC_Write (DAC_WRITE CAL_ZERO,0x0000);//将设备校准归零设置为0.000
    
    dac配置_reg.u16 = 0;
    
    DAC_conf_reg.bits.calen = 0;//用户校准控制
    DAC_conf_reg.bits.HARTEN = 0;// HART接口控制
    DAC_conf_reg.bits.CRCEN = 0;// CRC控制
    DAC_conf_reg.bits.wden = 1; //监视器控制
    DAC_conf_reg.bits.WDPD = 3; //监视期间控制
    
    DAC_Write(DAC_Write_Conf,DAC_conf_reg.u16);
    
    DAC_Ctrl_reg.U16 = 0;
    
    DAC_Ctrl_reg.bits.REEXT = 0; //禁用外部感应电阻器
    DAC_Ctrl_reg.bits.OUTEN = 1;//启用输出
    DAC_Ctrl_reg.bits.SRCLK = 0b0000;//转换速率clk控制
    DAC_Ctrl_reg.bits.SRSTEP = 0b100;//转换速率步进控制
    DAC_Ctrl_reg.bits.SREN = 1; //转换速率启用
    DAC_Ctrl_reg.bits.DCN = 0; //菊花链禁用
    DAC_Ctrl_reg.bits.range = 0b101;//将输出范围设置为4...20mA
    
    
    DAC_Write(DAC_Write_CTRL),DAC_Ctrl_reg.U16);
    
    } 

    2)测试回路

    //CyGlobalIntEnable;/*禁用全局中断。 */
    
    而(1){
    DAC_Write (DAC_write_DAC,0);
    CyDelay (100);//延迟100ms
    DAC_Write (DAC_write_DAC,0xFFFF);
    CyDelay(100);//延迟100ms
    } 

    输出通过100R电阻器测量:

    SREN = 1时的结果

     SREN = 0时的结果

    正如您在上面的结果中所看到的,我们仍然有相同的行为:只要SREN=1,输出就会冻结到4mA,同时清除SREN,使DAC按预期工作。

    此外,我还通过回读方式检查DAC寄存器,内容始终为0,而SREN =1。 就像设置SREN位时DAC寄存器变为“只读”一样。 您对此有何看法?

    此致

    Julien

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

    感谢您提供信息。 我还向同事确认,您的帖子中的信息和过程似乎正确,但是,我们可能需要更多信息来验证是否通过代码正确设置了配置。

    能否向我们发送启用SR控制的SPI命令的范围捕获?
    此外,您是否可以在代码中的init序列之后回读配置寄存器? 请以十六进制格式提供此数据。

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

    尊敬的Matt:

    请在下面查找我的逻辑分析器中记录的数据。 您可以通过以下链接免费下载阅读软件:

    查看软件:

    原始数据:

    e2e.ti.com/.../logic_5F00_analyzer_5F00_capture.rar

    首先打开设置文件,然后打开数据文件以获得正确的数据视图。

    此外,在执行这些捕获时,我观察到,如果应用配置代码两次,DAC将开始正常工作,即使使用转换速率控制也是如此。 可能是我的时间不匹配或类似情况。

    再次感谢您的支持

    Julien

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

    听起来可能是寄存器序列问题。 您能否更深入地了解使用转换速率控制创建正确响应的方法? 同时,我将调查您的文件,并希望在本周结束之前获得更多反馈。

    此致,
    马特