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.

[参考译文] CCS/TMS320F28377S:TMS320F28377S 的 ADC

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/627424/ccs-tms320f28377s-adc-of-tms320f28377s

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

您好 Frank:

ADC 模块 A 的采样周期为125us、对三相电机电流值进行采样。 输入信号 RC 滤波时间常数为10us。 信号的基频不超过50Hz。

ADC 模块 B 的采样周期为2ms。 输入信号是直流信号、RC 滤波器的时间常数为112.8us。 ADC 模块 D 未使用。

我使用以下函数初始化和校准 ADC 模块,并使用主函数中的指令 InitAdc()调用此函数。  

空 InitAdc (空)

{EALLOW;
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4、30M
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;//设置 ADCACLK 加电
AdcbRegs.ADCCTL2.bit.prescale = 10;//将 ADCCLK 分频器设置为/6、20M
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;//设置 ADCBCLK 加电
AdcdRegs.ADCCTL2.bit.prescale = 10;//将 ADCCLK 分频器设置为/6、20M
AdcSetMode (ADC_ADCD、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;//设置 ADCDCLK 加电
DELAY_US (1000);//延迟1ms 以允许 ADC 加电时间
AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 6;// SOC0-5为高优先级,SOC6-15循环
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 29;//将 ADCA SOC0采样保持时间设置为0.25us
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;//为 ADCINA0设置 ADCA SOC0、即相位 AP 电流
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 29;//将 ADCA SOC1采样保持时间设置为0.25us
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1;//为 ADCINA1设置 ADCA SOC1、即 A 相电流
AdcaRegs.ADCSOC2CTL.bit.ACQPS = 29;//将 ADCA SOC2采样保持时间设置为0.25us
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;//为 ADCINA2设置 ADCA SOC2、即相位 BP 电流
AdcaRegs.ADCSOC3CTL.bit.ACQPS = 29;//将 ADCA SOC0采样保持时间设置为0.25us
AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3;//为 ADCINA3设置 ADCA SOC0、即 BN 相电流
AdcaRegs.ADCSOC4CTL.bit.ACQPS = 29;//将 ADCA SOC1采样保持时间设置为0.25us
AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4;//为 ADCINA4设置 ADCA SOC1、即相位 CP 电流
AdcaRegs.ADCSOC5CTL.bit.ACQPS = 29;//将 ADCA SOC2采样保持时间设置为0.25us
AdcaRegs.ADCSOC5CTL.bit.CHSEL = 5;//为 ADCINA5设置 ADCA SOC2、即相位 CN 电流
AdcbRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 3;// SOC0-2为高优先级,SOC3-15循环
AdcbRegs.ADCSOC0CTL.bit.ACQPS = 29;//将 ADCB SOC0采样保持时间设置为2us
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0;//为 ADCINB0设置 ADCB SOC0、即直流总线 P
AdcbRegs.ADCSOC1CTL.bit.ACQPS = 29;//将 ADCB SOC1采样保持时间设置为2us
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1;//为 ADCINB1设置 ADCB SOC1、即直流总线 N
AdcbRegs.ADCSOC2CTL.bit.ACQPS = 29;//将 ADCB SOC2采样保持时间设置为2us
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2;//为 ADCINB2设置 ADCB SOC2、即 IGBT 温度
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;// ADCA INT 脉冲在 ADC 结果前1个周期发生
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;// ADCB INT 脉冲在 ADC 结果前1个周期发生
AdcaRegs.ADCINTFLGCLR.All=15;//清除 ADCAINT1-4
AdcaRegs.ADCINTOVFCLR.All=15;//清除 ADCAINTOVFCLR1-4
AdcaRegs.ADCINTSEL1N2.all =0x25;//启用 ADCA INT1、EOC 中断(位于5)
EDIS;
//IER |= M_INT1;//启用连接到 ADC INT 的 CPU INT1
AdcTrig (0);//为软件设置 TRIG 源
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 0;//软件 ADCSOCB/D
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 0;//软件 ADCSOCB/D
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 0;//软件 ADCSOCB/D
AdcbRegs.ADCSOCFRC1.all =7;//快速启动 ADCB0-2

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供详细信息。 为 ADC S/H 设置获取准确值的最佳方法是为您的驱动电路以及数据手册中提供的 ADC 输入模型提供 SPICE 仿真。

    但是、看一下您的设置代码、我会发现一些问题。
    采集窗口基于 SYSCLK 而非 ADCCLK。 您对 ADCB 的 ACQPS 字段2us 的评论不同意设置29。 更重要的是、您在125us 和2ms 后指定的采样周期与代码中的任何设置不一致。
    此外、看起来您的所有时序都是使用120MHz 的 SYSCLK 计算的。 是以120MHz 运行 SYSCLK。 实际上、越慢越好、但只需确保。
    使用您为 ADC 配置的设置、它们很可能异步运行。 如果 ADC 以异步方式运行、则会出现性能缺陷。 如果从软件触发、即使不同的 ADC 具有相同的设置、也不能同时启动。
    TRIGSEL 是一个 EALLOW 域。 由于复位为0、您可能没有注意到。 这不是问题的原因、而是在更改触发源时需要牢记的问题。