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.

[参考译文] LAUNCHXL-F28379D:CCS 20.0.1的 PSIM C 代码

Guru**** 2473260 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D, TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1472637/launchxl-f28379d-psim-c-code-for-the-ccs-20-0-1

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件: TMS320F28379D

工具与软件:

如何  在 CCS 20.0.1 Code Composer Studio 下导入 PSIM C Code Generated 项目 (用于 在开发板 LAUNCHXL-F28379D 上进行闪存、下载和调试)?

感谢你的帮助。

Aldo

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

    大家好、Aldo、

    PSIM 代码是否公开可用? 如果可以、您能否链接到它?

    如果您有 C 代码、但它尚不在 C2000/CCS 工程结构中、您可以从 TI Resource Explorer 中导入空工程(类似于 LED 闪烁工程)、并将生成的 C 代码附加到您的工程中。 TIREX 应可通过 CCS v20应用程序中的文件菜单找到、您可以直接指向正在使用的特定微控制器器件(TMS320F28379D)。 示例项目将包含连接到 LaunchPad 所需的所有必要链接器命令文件和目标连接配置文件。 您可以使用项目的闪存构建来启用到您的器件中的闪存

    此致、

    Peter

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

    尊敬的 Peter:

    感谢您的意见。

    我复制了下面 ( esoteric ) PSIM 生成的代码,它基本上是 标准和相移 PWM 模块和 ADC 的配置。算法代码仍有待开发。 我想 include 文件 必须以某种方式导入 CCS 项目下、但我不了解这一点。

    我最终安装了 之前的 CCS 版本8.3.1、该版本可识别 PSIM Simcoder 生成的工程并成功导入。 并且可以刷写和运行代码。

    此致

    Aldo

    */./
    //此代码是由 SimCoder 版本2024b12.251为 F2837x 硬件目标创建的
    //
    // SimCoder 的版权归 Powersim Inc.公司所有、2009-2021年
    //
    //日期:2025年2月20日09:08:47
    香港特别行政区政府在香港特别行政区的工作 /
    #include
    #include "ps_BIOS.h"
    #define GetCurTime() PS_GetSysTimer()
    #define IIF(a, b, c)(( a)? (b):(c))
    #define PWM_IN_CHECK //要降低 PWM 值设置时间、如果在该范围内严格限制 PWM 占空比值、请注释掉此行。


    interrupt void Task();

    #ifdef _flash
    #pragma DATA_SECTION (PSK_SYSCLK、"copySECTIONS")
    #endif
    CONST UINT16 PSK_SYSCLK = 200;// Mhz
    extern DefaultType fGblV1;
    外部 DefaultType fGblDutyCycle;
    extern DefaultType fGblPhaseShift;
    extern DefaultType fGblcarrierfreq;
    extern DefaultType fGblvarint;
    extern DefaultType fGblvarint2;
    extern DefaultType fGblCarrierSource;
    extern DefaultType fGblVsadc;
    extern DefaultType fGbladc1;
    extern DefaultType fGbladc2;
    extern DefaultType fGblVeadc;
    extern DefaultType fGbladc2b;
    extern DefaultType fGbladc1b;

    #define PSM_VRefHiA 3.3 // ADC-A VREFHIA
    #define PSM_VRefLowA 0 // ADC-A VREFLOA
    #define PSM_VRefHiB 3.3 // ADC-B VREFHIB
    #define PSM_VRefLowB 0 // ADC-B VREFLOB
    #define PSM_VRefHiC 3.3 // ADC-C VREFHIC
    #define PSM_VRefLowC 0 // ADC-C VREFLOC
    #define PSM_VRefHiD 3.3 // ADC-D VREFHID
    #define PSM_VRefLowD 0 // ADC-D VREFLOD

    //主子电路的参数列表
    #define DAB_ControlLaw_carrierfreq 0.5
    //参数文件_ParamFile1中的参数
    #define switchfreq 10000.0
    DefaultType carrierfreq = 0.5;
    #define sourcefreq 0.5.
    #define Fsw 10000.0
    #define RTHTIM 0.22058824
    #define TD (1e-6)
    #define Th 80.0
    #define N 1.0
    #define MTR 1.9.
    #define NP 1.0
    #define NS 1.0
    #define BUS_DC_AVAL 950.0
    #define BUS_DC_AMONT 1200.0
    #define PS 17750.0
    #define RLOAD 50.84507
    #define Iout 18.684211
    DefaultType fGblV1 = 0;
    DefaultType fGblDutyCycle = 0;
    DefaultType fGblPhaseShift = 0;
    DefaultType fGblcarrierfreq = 0;
    DefaultType fGblvarint = 0;
    DefaultType fGblvarint2 = 0;
    DefaultType fGblCarrierSource = 0;
    DefaultType fGblVsadc = 0;
    DefaultType fGbladc1 = 0;
    DefaultType fGbladc2 = 0;
    DefaultType fGblVeadc = 0;
    DefaultType fGbladc2b = 0;
    DefaultType fGbladc1b = 0;
    中断空 Task()

    DefaultType fDAB_ControlLaw_4、fDAB_ControlLaw_3、fDAB_ControlLaw_2、fDAB_ControlLaw_1;
    DefaultType fDAB_ControlLaw、fZOH4、fP2、fF2837x_ADC2_2、fZOH1、 fp1、fADCA_2;
    DefaultType fV2;

    ADC_CLR (0)= 1<<(1-1);
    CPU_PIEACK |= M__INT1;


    static DefaultType wt = 3.14159265 *(0 / 180。);
    static DefaultType dwt =(3.14159265 * 2 * sourcefreq / 10000);
    fV2 = sin (wt);
    wt += dwt;
    如果(wt >= 2 * 3.14159265) wt -= 2 * 3.14159265;
    fV2 *= 0.45;
    fV2 +=0.5;
    }
    #ifdef _debug
    fGblV1 = fV2;
    #endif

    fADCA_2 = ADC_RESULT (0、0)*(1.0 *(PSM_VRefHiA - PSM_VRefLowA)/ 4096.0);
    FP1 = fADCA_2;
    fZOH1 = FP1;
    fF2837x_ADC2_2 = ADC_RESULT (1、0)*(1.0 *(PSM_VRefHiB - PSM_VRefLowB)/ 4096.0);
    fp2 = fF2837x_ADC2_2;
    fZOH4 = FP2;

    //在此输入您的代码
    // fDAB_ControlLaw = 2 * sin (fV2);
    //开始控制律变量声明
    浮点 var1=0;
    悬空 SVM=0;
    浮点 var2=0;
    浮点 var3=0;
    浮点 var4=0;
    float varint=0;
    浮点 varint2=0;
    //结束控制律变量声明
    VAR1=fV2;
    VAR2=fZOH1;
    VAR3=fZOH4;
    varint=var2/2;
    varint2=var3/2;
    //这实现了双有源电桥控制、相移用于将能量从初级侧传递到次级侧
    //开始控制律
    SVM=DAB_ControlLaw_carrierfreq;
    //结束控制律
    fDAB_ControlLaw=0.5;
    fDAB_ControlLaw_1=180;
    //fDAB_ControlLaw_2=DAB_ControlLaw_carrierfreq;
    fDAB_ControlLaw_2=SVM;
    fDAB_ControlLaw_3=varint;
    fDAB_ControlLaw_4=varint2;
    }
    #ifdef _debug
    fGblDutyCycle = fDAB_ControlLaw;
    #endif

    #ifdef _debug
    fGblPhaseShift = fDAB_ControlLaw_1;
    #endif

    #ifdef _debug
    fGblcarrierfreq = fDAB_ControlLaw_2;
    #endif

    #ifdef _debug
    fGblvarint = fDAB_ControlLaw_3;
    #endif

    #ifdef _debug
    fGblvarint2 = fDAB_ControlLaw_4;
    #endif

    #ifdef _debug
    fGblCarrierSource = fV2;
    #endif
    #ifdef _debug
    fGblVsadc = fZOH1;
    #endif
    #ifdef _debug
    fGbladc1 = fADCA_2;
    #endif
    #ifdef _debug
    fGbladc2 = FP1;
    #endif
    #ifdef _debug
    fGblVeadc = fZOH4;
    #endif
    #ifdef _debug
    fGbladc2b = FP2;
    #endif
    #ifdef _debug
    fGbladc1b = fF2837x_ADC2_2;
    #endif
    //开始更改 PWM2 (相移)寄存器
    //设置占空比

    静态 uint16旧 TBPHS2Up = 0、旧 TBPHS2Dn = 65535;
    uint16 reg、_cmpa;
    DefaultType _val;
    _val =__fsat (fDAB_ControlLaw、1 + 0、0);
    _val = PWM_TBPRD (2)*((1 + 0)-_val)*(1.0 / 1);
    _cmpA =(int)(_val);
    _val =___ fracf32 (___ fracf32 (fDAB_ControlLaw_1 *(1.0/360.0))+ 1.0);
    _val *= 2.0;
    如果(_val < 1.0){
    REG =(UINT16)(PWM_TBPRD (2)*_val);
    if (_cmpa > oldTBPHS2Up)&&(_cmpa <= reg){
    _cmpa = reg;//我们这样添加可确保 PWM 向上计数操作
    }
    PWM_TBPHS (2)= oldTBPHS2Up = reg;
    PWM_TBCTL (2)|= 1 << 13;//向上
    oldTBPHS2Dn = 0;
    其他{
    REG =(UINT16)(PWM_TBPRD (2)*(2.0 -_val));
    如果((oldTBPHS2Dn >=_cmpa)&&(_cmpa > reg)){
    _cmpa = oldTBPHS2Dn + 1;//我们添加此项以确保 PWM 向下计数操作
    }
    PWM_TBPHS (2)= oldTBPHS2Dn = reg;
    PWM_TBCTL (2)&=~(1 << 13);//向下
    oldTBPHS2Up = PWM_TBPRD (2);
    }
    PWM_CMPA (2)=_cmpA;
    }
    //更改 PWM2 (相移)寄存器结束
    //更改 PWM1 (1ph)寄存器开始
    //设置占空比

    DefaultType _val =__fsat (fDAB_ControlLaw、1 + 0、0);
    _val = PWM_TBPRD (1)*(((1 + 0)-_val)*(1.0 / 1));
    PWM_CMPA (1)=(int)_val;
    }
    //更改 PWM1 (1ph)寄存器结束
    }


    void 初始化(void)

    PS_SYSINIT (2、10);
    PS_PwmStartStopClock (0);//停止 PWM 时钟
    PS_TimerInit (0、0);

    INT I、preAdcNo =-1;
    /* PST_AdcAttr:ADC 编号、DiffMode、通道编号、SoC 编号、Trig src、 SampleTime (clock)*/
    const PST_AdcAttr aryAdcInit[2]={
    {0、0、2、0、ADCTRIG_PWM1、 20000}、//单端模式:AdcNo=0、ChnNo=2、SockNo=0、SampClk=20000
    {1、0、2、0、ADCTRIG_PWM1、 64}//单端模式:AdcNo=1、ChnNo=2、SockNo=0、SampClk=64
    };
    const PST_AdcAttr * p = aryAdcInit;
    对于(i = 0;i < 2;i++、p++){
    if (preAdcNo != p->nAdcNo){
    ps_AdcInit(p->nAdcNo, p->nDiff);
    preAdcNo = p->nAdcNo;
    }
    ps_AdcSetChn (p->nAdcNo、p->nChnNo、p->nSockNo、p->nTrigSrc、p->nWindSz);
    }
    }

    PS_PwmInit (1、0、1、1.e6/(switchfreq*1.0)、ePwmUseAB、 ePwmStartLow1、ePwmComplement、HRPWM_DISABLE);// pwmNo、pinSel、 WaveType、Period、Outtype、PwmA、PWMB、 UseHRPwm
    PS_PwmSetDeadBand (1、0、2、3、0、 0.2、0.2);
    PS_PwmSetIntrType (1、ePwmIntrAdc、1、0);
    ps_AdcSetIntr (0、1、0、Task);// AdcNo、 IntrNo、SockNo、Interrupt Vector
    PS_PwmSetTripAction (1、eTzHiZ、eTzHiZ);
    PWM_CMPA (1)=(1 + 0 - 0)/(1.0 * 1)* PWM_TBPRD (1);
    PSM_PwmStart (1);

    PS_PwmInit (2、0、1、1.e6/(switchfreq*1.0)、ePwmUseAB、 ePwmStartLow1、ePwmComplement、HRPWM_DISABLE);// pwmNo、pinSel、 波类型、周期、outtype、PwmA、PWMB、 UseHRPwm
    PS_PwmSetDeadBand (2、0、2、3、0、 4、4);
    PS_PwmSetPhaseDelay (2、1、0);
    PS_PwmSetIntrType (2、ePwmNoAdc、1、0);
    PS_PwmSetTripAction (2、eTzHiZ、eTzHiZ);
    PWM_CMPA (2)=(1 + 0 - 0)/(1.0 * 1)* PWM_TBPRD (2);
    PSM_PwmStart (2);

    PS_PwmStartStopClock (1);//启动 PWM 时钟
    }


    void main()

    initialize();
    PSM_EnableIntr ();//启用全局中断 INTM
    PSM_EnableDbgm();
    对于(;;){
    }
    }

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

    大家好、Aldo、

    对于#include 中的文件引用、应确保将这些文件的文件位置包含在工程属性的 include 路径中。 这样、编译器和链接器就可以找到该文件并正确编译代码。 在按住 Ctrl 键的同时单击文件名、CCS 可以找到该文件、但如果在项目的包含路径中找不到该文件、则可能会给人一种错误的印象

    此致、

    Peter