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.

[参考译文] TMS320F28335:如果系统长时间断电、则 ADC 在第一次加电期间不能正常工作。

Guru**** 2482225 points
Other Parts Discussed in Thread: TMS320F28335

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1442734/tms320f28335-when-the-system-has-been-powered-off-for-a-long-time-the-adc-does-not-function-properly-during-the-first-power-on

器件型号:TMS320F28335

工具与软件:

平台:TMS320F28335

问题描述:
在电路板长时间不通电后、ADC 电压读数在首次上电期间异常。 但是、后续上电显示了正常的程序操作和 ADC 读数。

尝试的措施:

  1. 怀疑实际端口电压存在问题:
    使用示波器测量了端口电压、发现实际电压快速稳定(大约50ms)。
    该程序已经包括6秒延迟:外设初始化后的5秒延迟和电压检查之前的1秒延迟。
  2. 怀疑 PWM 未生成 SOC 信号、导致 ADC 未执行转换:
    为了验证这一点、在每次传输原始 ADC 结果寄存器值之前手动触发 ADC 转换。

附图:
下图显示了上电6秒后的 ADC 结果寄存器值、经过处理并根据串行输出数据绘制出来。

ADC 初始化设置:
有问题的 ADC 端口是 A4 .

AdcRegs.ADCTRL3.all = 0x00E0;//加电带隙/参考/ADC 电路
DELAY_US (ADC_usDELAY);//转换 ADC 通道之前延迟

EALLOW;
SysCtrlRegs.HISPC.all = 0x3;// HSPCLK = SYSCLKOUT/2*3 = 150/(2*3)= 25.0 MHz
EDIS;

AdcRegs.ADCTRL1.all = 0x4000;// Reset the ADC Module (重置 ADC 模块)
DELAY_US (ADC_usDELAY);//复位后、必须根据测试进行延迟

AdcRegs.ADCTRL3.all = 0x00E0u;//上电带隙/基准电路
DELAY_US (ADC_usDELAY);


AdcRegs.ADCTRL3.bit.ADCCLKPS = 1;  
AdcRegs.ADCTRL1.bit.cps = 0;  
AdcRegs.ADCTRL1.bit.ACQ_PS = 5;  


AdcRegs.ADCTRL1.bit.SUSMOD = 0U;  
AdcRegs.ADCTRL1.bit.CONT_run = 0U;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0U;  
AdcRegs.ADCTRL3.bit.SMODE_SEL = 0U;  
AdcRegs.ADCREFSEL.ALL = 0;  

/* SEQ 1 */
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = ADC_DMA1_CHANNAL - 1;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = adcChannal_0;// A0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = adcChannal_1;// A1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = adcChannal_2;// a2  
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = adcChannal_3;// a3
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = adcChannal_4;// A4
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;  
EPwm1Regs.ETSEL.bit.SOCAEN = 1;  
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_PRD;  
EPwm1Regs.ETPS.bit.SOCAPRD = 2;  
EPwm1Regs.ETCLR.bit.SOCA = 1;  


AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ2 = 1;  
EPwm6Regs.ETSEL.bit.SOCBEN = 1;  
EPwm6Regs.ETSEL.bit.SOCBSEL = ET_CTR_PRD;  
EPwm6Regs.ETPS.bit.SOCBPRD = 1;  
EPwm6Regs.ETCLR.bit.SOCB = 1;

AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1U;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0U;  

AdcRegs.ADCTRL2.bit.RST_SEQ2 = 1U;  
AdcRegs.ADCTRL2.bit.SOC_SEQ2 = 0U;  

下面是 ADC 打印和检测程序:

AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
if (++protect.Count.CheckDlyCnt >= protect.delay.CheckDLy)  

if ((Cnt++<= 50000)&&(Cnt_FLAG == 1))

if (((Smit_Cnt ++% 5)== 0)

SciaRegs。 SCITXBUF =(((AdcRegs. ADCRESULT4 >> 4)/4095.0)* 0xff);
}
}
设计

CNT_FLAG = 0;
}



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

    我需要提供一些额外信息:问题发生在系统长时间断电后的首次开机期间。 后续的断电和上电周期不会触发问题。 通常、只有在关闭系统一天之后、才能再次出现此问题。 我希望您可以对此提供帮助。 非常感谢!

    谢谢!

     勒克斯

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

    根据图、ADC 数据仅在1600ms 左右开始变化、即使系统在此之前已经通电并运行很长时间。 在每次通过串行端口发送 ADC 结果寄存器值之前、均会手动触发 ADC 转换。 事实上、ADC 输入端口的电压已长时间稳定在1.6V。

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

    您好!

    什么连接到 ADC 引脚? 对于具有足够低输出阻抗的输入电路、您是否确定这不是问题?  

    谢谢!

    Ben Collier

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

    嗨 Ben CoIIier、
    ADC 引脚连接到采样电路、电路图如下所示。 看起来这不是输入电路的问题。 初始上电时、我使用示波器检查此时的电压、该电压已经是1.6V、但该通道的 ADC 结果寄存器中的值在一段时间内保持为0。

    谢谢!

    LUX DX



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

    我已经尝试使用开关电源直接向 ADC 端口施加1.6V 电压、但通过 SCI 打印的 ADC 数据在一段时间(大约1.6秒)内仍保持为0。 因此、我认为外部采样电路不太可能出现问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADC 引脚连接到一个采样电路、下图显示了电路图。 看起来这不是输入电路的问题。 初始上电时、我使用示波器检查此时的电压、该电压已经为1.6V、但该通道的 ADC 结果寄存器中的值在一段时间内保持为0。

    我懂了。 SCI 通信代码是否存在简单的延迟? 在 ADC 正常工作后、您是否可以尝试更改 ADC 输入电压以及 SCI 数据需要多长时间进行响应?  

    谢谢!

    Ben Collier

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

    我已经检查了代码、没有任何东西可以导致 SCI 通信出现如此严重的延迟。 通过 SCI 通信发送的 ADC 结果寄存器值可以被视为实时寄存器值、因为我在发送前手动触发 ADC 转换、并且在发送时仅将 ADC 结果寄存器值提取到 SCITXBUF 中。

    系统上电一段时间后、当我更改 ADC 输出电压时、响应时间大约在几百毫秒以内。 电压的变化和 SCI 数据响应几乎以肉眼同时发生。 在初始上电期间、ADC 结果寄存器值的变化(未正常工作)也显示了非常明显的上升趋势、没有阶跃变化。 因此、我认为该问题不是 SCI 通信延迟引起的。

    谢谢!

    LUX DX

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

    您好!

    因为感恩节假期,我必须在下周回到你身边。

    此致、

    Ben Collier

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

    很好,我希望你有一个美好的时光,享受假期!

    LUX DX

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

    其他信息:

    1. 我使用了SciaRegs.SCITXBUF = (((AdcRegs.ADCRESULT4 >> 4) / 4095.0) * 0xff);
      SciaRegs.SCITXBUF = ((AdcRegs.ADCST.bit.SEQ1_BSY << 4) | AdcRegs.ADCTRL2.bit.SOC_SEQ1);输出 ADC 结果寄存器值和转换标志。 在 ADC 结果寄存器保持为0的期间、我观察到SEQ1_BSY、和SOC_SEQ1正在0和1之间切换、这表示 ADC 确实正在执行转换。 即使输入电压为1.6V、转换结果仍然为0。

    2. 由于 ADC 结果寄存器在一段时间内保持为0、因此我使用示波器检查 ADCLO 引脚电平。 我发现它的电压与模拟接地一致、这就排除了基准电压较低而导致转换结果为0的可能性。 ADC 使用内部基准电压。

    3. 某些器件不会触发此问题。

    我有一个问题:ADC 模块是否损坏导致了此问题? 或者、代码是否会影响 ADC 结果寄存器中的值?

    谢谢!

    LUX DX

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

    您好!

    我有一个问题:ADC 模块是否已损坏并导致此问题? 或者该代码是否会影响 ADC 结果寄存器中的值?[/QUOT]

    您是否仅 在一个 MCU 中看到过问题?

    很抱歉耽误你的时间。

    此致、

    Ben Collier

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

    我对出现这个问题的型号进行了粗略的分析、发现某些批次的芯片中存在这个问题。 目前、该问题主要集中在标记为 TMS320F28335PGFA G4A-31ALLXW 的芯片上。 其他批次、如 G4A-3BC23PW、尚未出现这种现象。

    新信息:

    1. 将之前出现此问题的机器中的芯片更换为其他批次的芯片后、此问题未再出现。 我目前正在进行进一步测试。

    谢谢!

    LUX DX

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

    好的、我会等您找到其他内容。