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/TMS320F28035:TMS320F28035

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/753935/ccs-tms320f28035-tms320f28035

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

工具/软件:Code Composer Studio

您好!


我喜欢以下套件: www.ti.com/.../TMDSDOCK28035。 我正在开发正弦波生成应用、并使用 controlSUITE 中的示例 SolarMicroInv_F2803x。

我按照下面的 ADC 寄存器连接了正弦波输入和基准。

   ChSel[4]= 1;      // A1 - IGRID ADC 结果4.
   ChSel[5]= 1;      // A1 - IGRID ADC 结果5.
   ChSel[6]= 9;      // B1 - VGRID ADC 结果6.
   ChSel[7]= 7;      // A7 - Ref_1.65V ADC 结果7
   ChSel[8]= 5;      // A5 - Ref_0.5V ADC 结果8.

我可以成功读取此 ADC 引脚上的正弦波,并可以在 Code compose studio 中给出的图表中看到->工具->图形->双时间。

我想使用以下给出的示例代码计算 Vrms 和输入频率:


   //TODO 交流测量
   ///----------------------------------------------------------
   //网格频率测量
   ///----------------------------------------------------------
   ACFreq_SysTicks =(ECap1Regs.CAP1 + ECap1Regs.CAP2 + ECap1Regs.CAP3
           + ECap1Regs.CAP4)<< 3;
   ACFreq =_IQ4div (_IQ4 (CPU_FREQ)、ACFreq_SysTicks);

   IF (ECap1Regs.TSCTR > ECAP_TimerMaxVal
           ||(ECap1Regs.CAP1 > ECAP_TimerMaxVal)
           ||(ECap1Regs.CAP2 > ECAP_TimerMaxVal)
           ||(ECap1Regs.CAP3 > ECAP_TimerMaxVal){
       ACFreq_SysTicks = 0;
       ACFreq = 0;
   }

   IF (ACFreq <_IQ4 (grid_min_FREQ))
       UF_Flag = 1;
   其他
       UF_Flag = 0;

   IF (ACFreq >_IQ4 (grid_MAX_FREQ))
       of 标志= 1;
   其他
       of 标志= 0;

   MATH_EMAVG2_IQ_MACRO ((_IQ24abs (inV_meas _vol_insts))、inV_emav_vol、
           _iq24 (0.0003));
   Gui_Vavg =_IQ16mpy (((int32) inv_emavg_vol>8、_IQ16 (ac_peak_sense));

   IF (Gui_Vavg <_IQ16 (grid_min_VRMS))
       UV_Flag = 1;
   其他
       UV_Flag = 0;

   IF (Gui_Vavg >_IQ16 (grid_MAX_VRMS))
       OV_Flag = 1;
   其他
       OV_Flag = 0;

   IF (UF_Flag = 0 && Gui_Vavg >_IQ16 (40.0)){
       //计算 RMS 输入电压和输入频率
       sine_main_iin = inV_meas _cur_inst>> 9;
       sine_main_vin = inV_meas _vol_inst>> 9;
       SINENALYZER_DIFF_wPWR_IQ_MACRO (SNAL_MAINS);

       Vrms =(sine_main.Vrms)<< 9;//   将 sine_mains.Vrms 从 Q15转换为 Q24并另存为 VrectRMS
       IRMS =(sine_main.IRMS)<< 9;//   将 sine_mains.IRMS 从 Q15转换为 Q24并另存为 IRrectRMS
       PRMS =(sine_main.PRMS)<< 9;//   将 sine_mains.PRMS 从 Q15转换为 Q24并另存为 PinRMS

       Gui_PRMS =(sine_main_PRMS * K_PRMS)>> 15;
       Gui_IRMS =(sine_main_IRMS * K_IRMS)>> 15;
       Gui_Vrms =(sine_main_Vrms * K_Vrms)>> 15;

       /*if (Gui_Vrms<_IQ6 (grid_min_VRMS))
        UV_Flag=1;
        其他
        UV_Flag=0;

        if (Gui_Vrms>_IQ6 (grid_MAX_VRMS))
        OV_Flag=1;
        其他
        OV_Flag=0;
        *
   }否则{
       Vrms = 0;//   将 sine_mains.Vrms 从 Q15转换为 Q24并另存为 VrectRMS
       IRMS = 0;//   将 sine_mains.IRMS 从 Q15转换为 Q24并另存为 IrectRMS
       PRMS = 0;//   将 sine_mains.PRMS 从 Q15转换为 Q24并另存为 PinRMS

       Gui_PRMS = 0;
       Gui_IRMS = 0;
       Gui_Vrms = 0;

       SINANALYZER_DIFF_wPWR_IQ_INIT (&sine_MAINS);
       sine_main_vin = 0;
       sine_main_= 0;
       sine_main_SampleFreq =_IQ15 (1000.0);
       Sine 电源阈值=_IQ15 (0.1);
       sine_main_samplesMax=1000/universal_grid_min_FREQ;
       sine_main_samplesMin=1000/universal_grid_MAX_FREQ;

   }

   Gui_Vpv =_IQ20mpy (pv_meas _vol_avg>>4、_IQ20 (pv_VOL_SENSE_MAX));
   Gui_IPV =_IQ20mpy (pv_meas _cur_avg>>4、_IQ20 (pv_CURR_SENSE_MAX));
   Gui_Vbus =_IQ20mpy (VBUS_meas _avg>>4、_IQ20 (VBUS_VOL_SENSE_MAX));

   
和捕获初始化    

/********* /
/******** ECAP 初始化 /
/********* /
void InitECapture(){

   ECap1Regs.ECEINT.ALL = 0x0000;            //禁用所有捕捉中断
   ECap1Regs.ECCLR.ALL = 0xFFFF;             //清除所有 CAP 中断标志
   ECap1Regs.ECCTL1.bit.CAPLDEN = 0;       //禁用 CAP1-CAP4寄存器加载
   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;     //确保计数器被停止

   //配置外设寄存器
   ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0;     //以连续模式运行
   ECap1Regs.ECCTL2.bit.STOP_Wrap = 3;       // 4个事件后换行
   ECap1Regs.ECCTL1.bit.CAP1POL = 1;         //下降边沿
   ECap1Regs.ECCTL1.bit.CAP2POL = 0;         //上升边沿
   ECap1Regs.ECCTL1.bit.CAP3POL = 1;         //下降边沿
   ECap1Regs.ECCTL1.bit.CAP4POL = 0;         //上升边沿
   ECap1Regs.ECCTL1.bit.CTRRST1 = 1;         //差动操作
   ECap1Regs.ECCTL1.bit.CTRRST2 = 1;         //差动操作
   ECap1Regs.ECCTL1.bit.CTRST3 = 1;         //差动操作
   ECap1Regs.ECCTL1.bit.CTRRST4 = 1;         //差动操作
   ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;        //启用同步输入
   ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0;       //直通
   ECap1Regs.ECCTL1.bit.CAPLDEN = 1;         //启用捕捉单元

   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;       //起始计数器
   //ECap1Regs.ECCTL2.bit.rearm = 1;           // ARM 单次触发
   ECap1Regs.ECCTL1.bit.CAPLDEN = 1;        //启用 CAP1-CAP4寄存器加载
   // ECap1Regs.ECEINT.BIT.CEVT4 = 1;           // 4个事件=中断




我想获取 Vrms 和交流输入频率值、但不想获取以下变量的值。
      ACFreq_SysTicks、
       交流频率
      Vrms
      Gui_Vrms

请帮助我获取套件中的 AcFreq 和 VRMS 值。
我是否需要进行其他连接才能获得 AcFreq 和 VRMS 的值。

谢谢、

Jignesh Patel

 

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

    抱歉、这是嵌入式固件代码开发。 我无法为您开发代码。 如果您可以将您的问题分解为有关器件用法的更简单的问题、我可以帮助回答。

    抱歉、我们没有资源开发代码。

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

    固件已在控制套件->SolarMicroInv_F2803x 中开发。
    我无法从捕获中获取 VRMS 和 ACFreq 的值。
    您能不能帮助我找出我需要在开发套件中连接哪些硬件连接才能获得有效的捕获示例代码。

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

    您将看到一个信号 GRGE_V_ZERO、如果不需要更改、则需要将其连接到引脚 GPIO19。

    除了连接到 ADC-B1的 VGRID_SEN 之外、您还可以按原样使用 SW。