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/TMS320F28027:用于 ADC 配置

Guru**** 2535750 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/598226/ccs-tms320f28027-for-adc-configuration

器件型号:TMS320F28027
Thread 中讨论的其他器件:controlSUITE

工具/软件:Code Composer Studio

您好!

我是微控制器领域的新手。 我正在尝试编写一个代码、用于驱动2个 PWM、具有180相移和它们之间的死区。 我在某个点卡住了。 我的主要要求是

"在每半个 PWM 开关周期的适当时间可以触发 ADC 转换启动"。 为了实现这一点、我应该怎么做?

我在代码中包含 ADC 部分。 请告诉我、为了满足上述要求、我还必须对代码进行哪些其他更改。

谢谢你

 ADC_setIntPulseGenMode (myAdc、ADC_IntPulseGenMode_Prior);              //ADCINT1在 AdcResults 锁存后跳闸
      ADC_enableInt (myAdc、ADC_IntNumber_1);                                 //启用 ADCINT1
      ADC_setIntMode (myAdc、ADC_IntNumber_1、ADC_IntMode_ClearFlag);         //禁用 ADCINT1连续模式
      ADC_setIntSrc (myAdc、ADC_IntNumber_1、ADC_IntSrc_EOC2);                //设置 EOC2以触发 ADCINT1触发
      ADC_setSockChanNumber (myAdc、ADC_SockNumber_0、ADC_SockChanNumber_A4);   //将 SOC0通道选择设置为 ADCINA4
      ADC_setSockChanNumber (myAdc、ADC_SockNumber_1、ADC_SockChanNumber_A4);   //将 SOC1通道选择设置为 ADCINA4
      ADC_setSockChanNumber (myAdc、ADC_SockNumber_2、ADC_SockChanNumber_A2);   //将 SOC2通道选择设置为 ADCINA2
      ADC_setSockTrigSrc (myAdc、ADC_SockNumber_0、ADC_SockTrigSrc_EPWM2_ADCSOCA);   //设置 EPWM1A 上的 SOC0启动触发器、由于轮询 SOC0先转换、然后 SOC1
      ADC_setSockTrigSrc (myAdc、ADC_SockNumber_1、ADC_SockTrigSrc_EPWM2_ADCSOCA);   //设置 EPWM1A 上的 SOC1启动触发器,由于轮询 SOC0先转换,然后 SOC1
      ADC_setSockTrigSrc (myAdc、ADC_SockNumber_2、ADC_SockTrigSrc_EPWM2_ADCSOCA);   //设置 SOC2在 EPWM1A 上启动触发、因为轮询 SOC0先转换 SOC1、然后转换 SOC2

      ADC_setSockSampleWindow (myAdc、ADC_SockNumber_0、ADC_SockSampleWindow_7_cycles);  //将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
      ADC_setSockSampleWindow (myAdc、ADC_SockNumber_1、ADC_SockSampleWindow_7_cycles);  //将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
      ADC_setSockSampleWindow (myAdc、ADC_SockNumber_2、ADC_SockSampleWindow_7_cycles);  //将 SOC2 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)

   //启用 PWM 时钟
   CLK_enablePwmClock (myClk、PWM_NUMBER_2);
   CLK_enablePwmClock (myClk、PWM_NUMBER_1);

   //设置 PWM
   PWM_enableSockpulse (myPwm2);
   PWM_enableSockpulse (myPwm1);
   //在组上启用 SOC
   PWM_setSockAPulseSrc (myPwm2、PWM_SockPulseSrc_CounterEqualCmpAcincr);
   PWM_setSockAPulseSrc (myPwm1、PWM_SockPulseSrc_CounterEqualCmpAcincr);//从 CPMA 中选择 SOC (向上计数)
   PWM_setSockAPeriod (myPwm2、PWM_SockPeriod_FirstEvent);
   PWM_setSockAPeriod (myPwm1、PWM_SockPeriod_FirstEvent);//在第1个事件发生时生成脉冲
   //PWM_setCmpA (myPwm2、0x0000);                                        //设置比较值
   //PWM_setPeriod (myPwm2、0x05DC);
   //PWM_setPeriod (myPwm1、0x05DC);    // 20Khz 采样频率下的周期= 1500
   PWM_setCounterMode (myPwm2、PWM_CounterMode_Up);
   PWM_setCounterMode (myPwm1、PWM_CounterMode_Up);
   PWM_enableDeadBandHalfCycle (myPwm2);
  PWM_getDeadBandFallingEdgeDelay (myPwm1);
  PWM_getDeadBandRisingEdgeDelay (myPwm1);
  PWM_setDeadBandInputMode (myPwm1、3);
   PWM_setDeadBandPolarity (myPwm1、3);
   PWM_setDeadBandRisingEdgeDelay (myPwm1、1.25);
   PWM_setDeadBandFallingEdgeDelay (myPwm1、1.25);
  // PWM_setChoppingPulseWidth (myPwm1、50);
   CLK_enableTbClockSync (myClk);

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

    您好、Madhuri、

    [引用 USER="Madhuri Depuru"]"每半个 PWM 开关周期中的适当时间可以触发 ADC 转换启动"。 为了实现这一点、我应该怎么做?[/引述]

    请参阅以下代码:C:\ti\controlSUITE\device_support\f2802x\v230\F2802x_examples_structs\ADC_SoC

    在上述代码中、您可以将 CMPA 值设置为 TBPRD 值的一半、以确保满足您的要求。

    此致、

    Gautam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    马德胡里
    您是否能够解决此问题?

    解决此问题的一个常见建议是在同步链中进一步配置一个频率为频率两倍的备用 PWM。 然后、您可以使用更快的信号来触发 ADC 的 SOC。 您需要与最慢的信号同步。 否则、您将在最慢信号周期结束之前反复重新同步。

    此致、
    Cody