主题中讨论的其他器件: TMS320F28379D
工具与软件:
如何 在 CCS 20.0.1 Code Composer Studio 下导入 PSIM C Code Generated 项目 (用于 在开发板 LAUNCHXL-F28379D 上进行闪存、下载和调试)?
感谢你的帮助。
Aldo
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 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();
对于(;;){
}
}