请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMDSSOLARUINVKIT Thread 中讨论的其他器件: SFRA、 controlSUITE
工具/软件:Code Composer Studio
我有一个 TMDSSOLARUINVKIT、我尝试添加不带 GUI 的 SFRA 以进行投影。 但我有一个问题
构建目标:"SolarMicroInv_F2803x.Out"
调用:C2000链接器
"C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.1.5.LTS/bin/cl2000 "
-v28 -ml -mt ---cla_support=cla0 --float_support=softlib -O4 -opt_for_speed=2 --advice:performance=all
--define=_debug --define=flash --define=larg_model -g --diag_warning=225 -z -m"SolarMicroInv_F2803x.map"
--stack_size=0x380 -warn_sections -i"C:/ti/controlSUITE/libs/app_libs/SFRA/v1_10_00_00/IQ/lib
-i"C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.1.5.LTS/lib
-i"C:/ti/ccs901/ccs/tools/compiler/ti-cgt-c2000_18.1.5.LTS/include --priority --reread_libs
-xml_link_info="SolarMicroInv_F2803x_linkInfo.xml"--rom_model -o "SolarMicroInv_F2803x.out"
"C:/ti/controlSUITE/libs/app_libs/solar/v1.2/IQ/lib/Solar_Lib_IQ.lib "
"C:/ti/controlSUITE/libs/math/IQmath/v160/lib/IQmath.lib "../F28035_FLASH_SolarMicroInv.CMD"
"./adc_SOC_Cnf.obj""./DSP2803x_CodeStartBranch.obj""./DSP2803x_CpuTimers.obj""./DSP2803x_GlobalVariableDefs.obj"
"../DSP2803x_usDelay.obj"../pwm_1ch_UpDwnCnt_Cnf.obj"../pwm_MicroInvLineClamp_Cnf.obj"../CommScisGui_320.obj"
"./SolarMicroInv-DevInit_F2803x.obj""./SolarMicroInv-Main.obj"
"C:/ti/controlSUITE/device_support/f2803x/v126/DSP2803x_headers/cmd/DSP2803x_Headers_nonBIOS.cmd "
"C:/ti/controlSUITE/device_support/f2803x/v126/DSP2803x_common/lib/SFO_TI_Build_V6b.lib "
-l"C:/ti/controlSUITE/libs/app_libs/SFRA/v1_10_00_00/IQ/lib/SFRA_IQ_Lib.lib
l"C:/ti/controlSUITE/libs/utilities/flash_api/2803x/v100/lib/rts2800_ml.lib -llibc.a
>>./SFRA_IQ_init.c、第68行:内部错误:与 UMULT 不匹配
这可能是一个严重的问题。 请使用与客户支持联系
此问题的说明以及导致此问题的源文件示例
出现内部错误消息。
无法继续编译-中止!
>>编译失败
>>编译失败
>>编译失败
Makefile:155:目标'olarMicroInv_F2803x.Out'的配方失败
致命错误:链接时优化失败
Gmake:***[SolarMicroInv_F2803x.Out]错误1.
gmake:目标"全部"不会由于错误而重新生成。
****构建完成****
1、 在 SolarMicroInv_F2803x 文件的 SolarMicroInv-Main.c 上#include "SFRA_IQ_include.h"
1.2将链接 SFRA 库:(SFRA_IQ_Lib.lib)添加到项目中,SFRA 库位于:
controlSUITE\development\libs\app_libs\SFRA\include
1.3添加 C2000链接器的链接部分:(SFRA_IQ_Lib.lib)由 SFRA 库提供,位于:
..\controlSUITE\development\libs\app_libs\SFRA\v1_10_00_00\SFRA_IQ\lib
1.4通过 SFRA lib 添加 C2000链接器的链接部分:(rts2800_ml.lib)位于:
..\controlSUITE\libs\utilities\flash_api\2803x\v100\lib\rts2800_ml.lib
2.在 SolarMicroInv_F2803x 文件的 SolarMicroInv-Main.c 中创建和添加模块结构
#define SFRA_ISR_FREQ 200000
#define SFRA_FREQ_START 100
#define SFRA_FREQ_LENGTH 100
//SFRA 阶跃^= 10 μ s (1/每十倍频程的阶跃数(40))
#define FREQ_STEP_乘 法(浮点) 1.059253
在 SolarMicroInv-Main.c 中声明 FRA 数据存储阵列
// SFRA 库对象
SFRA_IQ SFRA1;
// SFRA 变量
int32 Plant_MagVect[SFRA_FREQ_LENGTH];
int32 Plant_PhaseVect[SFRA_FREQ_LENGTH];
int32 OL_MagVect[SFRA_FREQ_LENGTH];
int32 OL_PhaseVect[SFRA_FREQ_LENGTH];
float32 FreqVect[SFRA_FREQ_LENGTH];
//用于重新初始化 SFRA 变量的标志
Int16初始化标志;
//extern 访问 ROM 中的表
extern long IQsincTable[];
4.在 SolarMicroInv-Main.c 中初始化模块
//在此处执行 SFRA 对象初始化
//SFRA 对象初始化
//指定注入振幅
SFRA1.RANGE=_IQ26 (0.01);
//指定 SFRA 的长度
SFRA1.Vec_Length = SFRA_FREQ_LENGTH;
//指定 SFRA ISR 频率
SFRA1.ISR_Freq=SFRA_ISR_FREQ;
//指定 SFRA 分析的起始频率
SFRA1.Freq_Start=SFRA_FREQ_START;
//指定频率阶跃
SFRA1.Freq_Step=FREQ_STEP_M倍增;
//将数组位置分配给 SFRA 对象中的指针
SFRA1.FreqVect=FreqVect;
SFRA1.GH_MagVect=OL_MagVect;
SFRA1.GH_PhaseVect=OL_PhaseVect;
SFRA1.H_MagVect=Plant_MagVect;
SFRA1.H_PhaseVect=Plant_PhaseVect;
初始化标志= 0;
/****测试:尝试在扫描****之前导致 SFRA_IQ 初始化
SFRA_IQ_init (&SFRA1);
5.使用模块
if (CloseIloopInv=1)
{
cntlpi_BusInv.Ref = Bus_Vol_Note.out;
cntlpi_BusInv.FBK =inV_bus_ref;
CNTL_PI_IQ_MACRO (CNTL_PI_BusInv)
Inv_ISET=cntlpi_BusInv.out;
Inv_ref_cur_inst=_IQ24mpy (inV_ISET、InvSine);
cntl3p3z_invi_vars.Ref=SFRA_IQ_Inject (inV_ref_cur_insts);
cntl3p3z_invi_vars.fdbk=inv_meas cur_inst;
CNTL_3P3Z_IQ_asm (&cntl3p3z_invi_coeff、&cntl3p3z_invi_vars);
Duty_inv_pu=_IQ24div (((cntl3p3z_invi_vars.out+inv_meas _vol_inst)、vbu_meas _insts);
Duty_inv_pu =(Duty_inv_pu>_iq24 (1.0))?_iq24 (1.0):Duty_inv_pu;
Duty_inV_pu=(Duty_inV_pu<_iq24 (-1.0))?_iq24 (-1.0):Duty_inV_pu;
SFRA_IQ_collect (&cntl3p3z_invi_vars.out、&cntl3p3z_invi_vars.Fdbk);
}
#endif //(INCR_BUILD = 3)
6.后台任务:在缓慢任务中调用后台函数:
空 A1 (空)
//----------------------------------------
{
if (PVInverterState_Old!= PVInverterState)
{
开关(PVInverterState)
{
空闲情况: strcpy (CPV_STATE、"空闲");
中断;
Case CheckGrid:strcpy (CPV_State、"CheckGrid");
中断;
案例 CheckPV: strcpy (CPV_State、"CheckPV");
中断;
案例监控 DCBus: strcpy (CPV_State、"MonitorDCBus");
中断;
Case EnableMPPT: strcpy (CPV_State、"EnableMPPT");
中断;
案例 PVInverterActive: strcpy (CPV_State、"PVInverterActive");
中断;
案例 ResetState1: strcpy (CPV_State、"ResetState1");
中断;
案例 ResetState2: strcpy (CPV_State、"ResetState2");
中断;
情况 FaultState:if (FaultFlag==OverVoltageDCBus)
strcpy (CPV_State、"FaultState:DC 总线过压");
否则(FaultFlag==UnderVoltageDCBus)
strcpy (CPV_State、"FaultState:DC Bus under Voltage");
如果(FaultFlag==OverVoltageGrid)则为其他
strcpy (CPV_State、"FaultState:过压电网");
否则(FaultFlag==UnderVoltageGrid)
strcpy (CPV_State、"FaultState:欠压电网");
否则、如果(FaultFlag==OverCurrentFlag)
strcpy (CPV_State、"FaultState:电网电流过");
其他
strcpy (CPV_State、"FaultState");
中断;
}
}
PVInverterState_Old = PVInverterState;
if (PVInverterState=Idle)
Gui_GridFreq=ACFreq<<16;
其他
Gui_GridFreq=(long)(spll2.fo)>>3;
SFRA_IQ_background (&SFRA1);
//--------
//下次 CpuTimer0 'counter'达到周期值时转到 A2
A_Task_ptr =&A2;
//--------
}
7.Linker 命令文件更改(*。CMD):
第0页:
RAML3 :origin = 0x009000,length = 0x001000 // RAM (L3)*/
>>
RAML3 :origin = 0x008000、length = 0x002000 // RAM (L0-L3)*/
--------------------------------------------------
第1页:
添加 dataRAM1:origin = 0x009000,length = 0x001000 //片上 RAM 块 L3 */
--------------------------------------------------
部分:
{
。
ramfuncs :LOAD = FLASHD,
运行= RAML3、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
PAGE = 0
{
--library=Solar_Lib_IQ.lib
--library=Solar_Lib_IQ.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
}
}
添加 SFRA 库
ramfuncs :LOAD = FLASHD,
运行= RAML3、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
PAGE = 0
{
--library=Solar_Lib_IQ.lib
--library=Solar_Lib_IQ.lib
--library=Solar_Lib_IQ.lib
--library=SFRA_IQ_Lib.lib
--library=SFRA_IQ_Lib.lib
--library=SFRA_IQ_Lib.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
--library=IQmath.lib
}
----------------------------------------
/*添加*/
(笑声)
DataRAM:>dataRAM1,page = 1.
SFRA_IQ_Data:> dataRAM1,page = 1.
----------------------------------------
/*添加*/
(笑声)
SFRA_Data:> dataRAM1,align = 64,page=1
CNTL_COEFF_RAM:> DataRAM,page=1
CNTL_var_RAM:> RAMM1,page =1
----------------------------------------
感谢您的所有建议。