Thread 中讨论的其他器件:controlSUITE
工具/软件:Code Composer Studio
你(们)好
我在网上看到一个代码、希望在我的 CCS 上运行、但是我很难让它运行、因为包含和链接路径存在错误、我希望能够为修复这些错误提供一些帮助。
在下面、您可以看到我在线复制的代码和问题的屏幕截图
//器件头文件和示例包括文件
#include
#include "DSP28x_Project.h"
#include "F2802x_common/include/clk.h"
#include "F2802x_common/include/flash.h"
#include "F2802x_common/include/gpio.h"
#include "F2802x_common/include/PIE.h"
#include "F2802x_common/include/PLL.h"
#include "F2802x_common/include/adc.h"
#include "F2802x_common/include/PWM.h"
#include "F2802x_common/include/timer.h"
#include "F2802x_common/include/wdog.h"
//中断处理程序的函数原型
中断空 CPU_timer0_ISR (空);
//函数原型
void init_system (void);//初始化所有句柄、禁用看门狗、时钟、禁用 PIE 和所有中断
void init_gpio (void);//设置 GPIO 引脚
void init_Timer (void);//设置计时器
void init_pie (void);//启用 PIE 和寄存器 ISR 处理程序
void init_adc (void);//设置和初始化 ADC 模块
void Init_PWM (void);//设置和初始化 PWM 模块
void Data_Update (void);//更新 ADC 值
void Adj_PWM (void);//更新 PWM 占空比
//常量
const float ADC_12位= 0.0008056;// 12位 ADC 电压分辨率
const float IP_VOLT_CONST = 0.0314;//校准的恒定输入电压
const float IP_Amp_Const = 4.31;//校准的恒定输入电流
const float OP_VOLT_CONST = 0.085;//校准的恒定输出电压
const float OP_Amp_Const = 3.6;//校准的恒定输出电流
// MPPT 全局变量*大多数变量可以放置在函数内,但要在 CCS 中调试和查看状态,它们需要是全局变量
float IP_Amp;
float IP_Volt;
悬空 Old_ip_Volt;
浮点运算放大器;
浮点 OP_Volt;
float New_pw_in;
悬空 Old_pw_in;
float New_pw_out;
INT SysTick = 0;//用于控制 PWM 更新频率
int PWM_Temp_Temp;//用于绘制数据
int Duty_Cycle;//用于绘制数据
//系统句柄
clk_handle myClk;
Flash_handle myFlash;
GPIO_Handle myGpio;
adc_handle myAdc;
PIE_Handle myPie;
Timer_handle myTimer0、myTimer1;
cpu_handle myCpu;
pll_handle myPll;
WDOG_Handle myWDog;
PWM_Handle myPwm1、myPwm2;
void main (void)
{
init_system();
init_gpio();
init_Timer();
init_pie ();
init_adc();
//禁用 ePWM 模块时基时钟同步信号
clk_disableTbClockSync (myClk);
init_pwm ();
//启用 ePWM 模块时基时钟同步信号
CLK_enableTbClockSync (myClk);
DATA_Update ();//初始读取当前电源输入
while (1)
{
IF (SysTick ==1)
{
Data_Update();
ADJ_PWM ();
SysTick = 0;
}
}
}
中断处理程序的//函数声明
中断空 CPU_timer0_ISR (空)
{
SysTick = 1;
PI_clearInt (myPie、PI_GroupNumber_1);
}
//函数声明
void init_system (void)
{
//初始化此应用程序所需的所有句柄
myPwm1 = PWM_init ((void *) PWM_ePWM1_base_ADDR、sizeof (PWM_Obj));
myPwm2 = PWM_init (((void *) PWM_ePWM2_base_ADDR、sizeof (PWM_Obj));
myAdc = ADC_init ((void *) ADC_base_ADDR、sizeof (ADC_Obj));
myClk = CLK_init ((void *) CLK_base_ADDR、sizeof (CLK_Obj));
myCpu = cpu_init ((void *) NULL、sizeof (cpu_Obj));
myFlash = flash_init ((void *) flash_base_ADDR、sizeof (flash_Obj));
myGpio = GPIO_init ((void *) GPIO_base_ADDR、sizeof (GPIO_Obj));
myPie = PI_init ((void *) PIE_BASE_ADDR、sizeof (PIE_Obj));
myPll = PLL_init ((void *) PLL_base_ADDR、sizeof (PLL_Obj));
myTimer0 = timer_init (((void *) TIMER0_base_ADDR、sizeof (timer_Obj));
myTimer1 = timer_init (((void *) Timer1_base_ADDR、sizeof (timer_Obj));
myWdDog = WDOG_INIT ((void *) WDOG_BASE_ADDR、sizeof (WDOG_Obj));
//禁用看门狗(WDOG)计时器
WDOG_DISABLE (myWDog);
//启用 ADC 时钟
CLK_enableAdcClock (myClk);
//校准 ADC 和内部振荡器
(*Device_cal)();
//将内部振荡器1设置为时钟源
CLK_setOscSrc (myClk、CLK_OscSrc_Internal);
//将 PLL 设置为 x12/1、这样将产生60MHz = 10MHz * 12/2
PLL_setup (myPll、PLL_Multiplier_12、PLL_DivideSelect_CLKIN_BY_2);
//禁用外设中断扩展(PIE)
PIE_DISABLE (myPie);
//禁用所有中断
PI_DisableAllInts (myPie);
//禁用全局中断
CPU_disableGlobalInts (myCpu);
//清除所有中断标志
CPU_clearIntFlags (myCpu);
//启用全局实时中断 DBGM
CPU_enableDebugInt (myCpu);
}
空 init_gpio()
{
//初始化 EPWM1A 的 GPIO
GPIO_setPullUp (myGpio、GPIO_Number_0、GPIO_PULLUP_Disable);
//GPIO_setPullUp (myGpio、GPIO_Number_1、GPIO_PULLUP_Disable);//使用的注释
GPIO_setMode (myGpio、GPIO_Number_0、GPIO_0_Mode_EPWM1A);
//GPIO_setMode (myGpio、GPIO_Number_1、GPIO_1_Mode_EPWM1B);//使用的注释
//初始化 EPWM2A 的 GPIO
GPIO_setPullUp (myGpio、GPIO_Number_2、GPIO_PULLUP_Disable);
//GPIO_setPullUp (myGpio、GPIO_Number_3、GPIO_PULLUP_Disable);//使用的注释
GPIO_setMode (myGpio、GPIO_Number_2、GPIO_2_Mode_EPWM2A);
//GPIO_setMode (myGpio、GPIO_Number_3、GPIO_3_Mode_EPWM2B);//使用的注释
}
空 init_Timer()
{
//设置计时器(计时器)周期
Timer_setPeriod (myTimer0、6000000);
//设置计时器(计时器)预分频器
Timer_setPreScaler (myTimer0、0);
//重新加载计时器(计时器)值
Timer_reload (myTimer0);
//设置计时器(计时器)仿真模式
Timer_setEmulationMode (myTimer0、timer_EmulationMode_runfree);
//启用计时器(计时器)中断
Timer_enableInt (myTimer0);
//启动计时器(计时器)
Timer_start (myTimer0);
}
void init_pie (void)
{
//使用调试中断处理程序初始化矢量表
PI_setDebugIntVectorTable (myPie);
//启用外设中断扩展(PIE)
PIE_ENABLE (myPie);
//注册 PIE 中断的处理程序
PI_registerPieIntHandler (myPie、PI_GroupNumber_1、PI_SubGroupNumber_7、(intVec_t)&CPU_timer0_ISR);
//启用指定的中断编号
CPU_enableInt (myCpu、CPU_IntNumber_1);
//启用 CPU 定时器0中断
PIE_enableTimer0Int (myPie);
//启用全局中断
cpu_enableGlobalInts (myCpu);
//启用调试中断
CPU_enableDebugInt (myCpu);
}
void init_adc (void)
{
//启用 ADC 带隙电路
adc_enableBandGap (myAdc);
//启用 ADC 基准缓冲器电路
ADC_enableRefBuffers (myAdc);
//为 ADC 加电
ADC_POWERUP (myAdc);
//启用 ADC
ADC_ENABLE (myAdc);
// ADCCTL1 - ADC_ADCCTL1_ADCREFSEL_BITS
ADC_setVoltRefSrc (myAdc、ADC_VoltageRefSrc_Int);
//清除 ADCINT1标志为下一个 SOC 重新初始化
ADC_clearIntFlag (myAdc、ADC_IntNumber_1);
//启用指定的 ADC 中断
PIE_enableAdcInt (myPie、ADC_IntNumber_1);
//启用 ADC 中断
ADC_enableInt (myAdc、ADC_IntNumber_1);
//设置中断脉冲生成模式
ADC_setIntPulseGenMode (myAdc、ADC_IntPulseGenMode_Prior);
//启用 ADC 中断
ADC_enableInt (myAdc、ADC_IntNumber_1);
//设置中断模式
ADC_setIntMode (myAdc、ADC_IntNumber_1、ADC_IntMode_ClearFlag);
//设置中断源
ADC_setIntSrc (myAdc、ADC_IntNumber_1、ADC_IntSrc_EOC7);
//设置转换开始(SOC)通道编号
ADC_setSockChanNumber (myAdc、ADC_SockNumber_0、ADC_SockChanNumber_A0);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_1、ADC_SockChanNumber_A1);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_2、ADC_SockChanNumber_A2);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_3、ADC_SockChanNumber_A3);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_4、ADC_SockChanNumber_A0);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_5、ADC_SockChanNumber_A1);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_6、ADC_SockChanNumber_A2);
ADC_setSockChanNumber (myAdc、ADC_SockNumber_7、ADC_SockChanNumber_A3);
//设置转换开始(SOC)触发源
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_0、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_1、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_2、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_3、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_4、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_5、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_6、ADC_SockTrigSrc_EPWM1_ADCSOCA);
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_7、ADC_SockTrigSrc_EPWM1_ADCSOCA);
//设置转换开始(SOC)采样延迟
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_0、ADC_SockSampleWindow_55_cycles);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_1、ADC_SockSampleWindow_55_cycles);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_2、ADC_SockSampleWindow_55_cycles);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_3、ADC_SockSampleWindow_55_cycles);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_4、ADC_SockSampleWindow_55_cycles);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_5、ADC_SockSampleWindow_55_cycles);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_6、ADC_SockSampleWindow_55_cycles);
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_7、ADC_SockSampleWindow_55_cycles);
}
空 Init_PWM ()
{
//启用 PWM 时钟
CLK_enablePwmClock (myClk、PWM_NUMBER_1);
//启用脉宽调制(PWM)转换启动(SOC)脉冲生成
PWM_enableSockpulse (myPwm1);
//启用脉宽调制(PWM)转换启动(SOC)脉冲生成
PWM_setSockAPulseSrc (myPwm1、PWM_SockPulseSrc_CounterEqualCmpAcincr);
//设置脉宽调制(PWM)转换开始(SOC)中断周期
PWM_setSockAPeriod (myPwm1、PWM_SockPeriod_FirstEvent);
// TBCTL 时基控制寄存器- synctmode PWM_TBCTL_SYNCOSEL_BITS
PWM_setSyncMode (myPwm1、PWM_SyncMode_CounterEqualZero);
// TBPRD 时基周期寄存器
PWM_setPeriod (myPwm1、1000);// 60M /
//设置脉宽调制(PWM)阶段
PWM_setPhase (myPwm1、0x0000);
//设置脉宽调制(PWM)计数
PWM_setCount (myPwm1、0x0000);
//设置脉宽调制(PWM)计数器模式
PWM_setCounterMode (myPwm1、PWM_CounterMode_UpDown);
//禁用从相位寄存器加载的脉宽调制(PWM)计数器
PWM_DisableCounterLoad (myPwm1);
//设置脉宽调制(PWM)高速时钟分频值
PWM_setHighSpeedClkDiv (myPwm1、PWM_HspClkDiv_BY_2);
//设置脉宽调制(PWM)时钟分频值
PWM_setClkDiv (myPwm1、PWM_ClkDiv_BY_1);
//将脉宽调制(PWM)数据值写入计数器比较 A 硬件
PWM_setCmpA (myPwm1、500);
//设置当计数器等于 CMPA 且计数器递增时 PWM A 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntUp_CmpA_PwmA (myPwm1、PWM_ActionQual_set);
//设置当计数器等于 CMPA 且计数器递减时 PWM A 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntDown_CmpA_PwmA (myPwm1、PWM_ActionQual_clear);
//设置当计数器等于 CMPA 且计数器递增时 PWM B 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntUp_CmpA_PwmB (myPwm1、PWM_ActionQual_clear);
//设置当计数器等于 CMPA 且计数器递减时 PWM B 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntDown_CmpA_PwmB (myPwm1、PWM_ActionQual_set);
//启用 PWM 时钟
CLK_enablePwmClock (myClk、PWM_NUMBER_2);
//设置脉宽调制(PWM)同步模式
PWM_setSyncMode (myPwm2、PWM_SyncMode_EPWMxSYNC);
//设置脉宽调制(PWM)周期
PWM_setPeriod (myPwm2、1000);
//启用从相位寄存器加载的脉宽调制(PWM)计数器
PWM_enableCounterLoad (myPwm2);
//设置脉宽调制(PWM)阶段
PWM_setPhase (myPwm2、1000);//到计算相位2000 = 180deg、因此2000 /180 = 11.11、因此对于120deg = 120*11.11 = 1333.2
//设置脉宽调制(PWM)相位方向
PWM_setPhaseDir (myPwm2、PWM_PhaseDir_CountUp);
//设置脉宽调制(PWM)计数器模式
PWM_setCounterMode (myPwm2、PWM_CounterMode_UpDown);
//设置脉宽调制(PWM)高速时钟分频值
PWM_setHighSpeedClkDiv (myPwm2、PWM_HspClkDiv_BY_2);
//设置脉宽调制(PWM)时钟分频值
PWM_setClkDiv (myPwm2、PWM_ClkDiv_BY_1);
//将脉宽调制(PWM)数据值写入计数器比较 A 硬件
PWM_setCmpA (myPwm2、500);
//设置当计数器等于 CMPA 且计数器递增时 PWM A 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntUp_CmpA_PwmA (myPwm2、PWM_ActionQual_set);
//设置当计数器等于 CMPA 且计数器递减时 PWM A 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntDown_CmpA_PwmA (myPwm2、PWM_ActionQual_clear);
//设置当计数器等于 CMPA 且计数器递增时 PWM B 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntUp_CmpA_PwmB (myPwm2、PWM_ActionQual_clear);
//设置当计数器等于 CMPA 且计数器递减时 PWM B 的脉宽调制(PWM)对象操作
PWM_setActionQual_CntDown_CmpA_PwmB (myPwm2、PWM_ActionQual_set);
}
空数据更新(空)
{
浮点 ADC_A0、ADC_A1、ADC_A2、ADC_A3;
int sum of _adc_samples_Array[4]={0};
Int NumberOfSamples = 64;
int i = 0;
对于(i = 0;i < NumberOfSamples;i++){
while (AdcRegs.ADCINTFlG.bit.ADCINT1 = 0){}
总和_for_adc_samples_Array[0]+= AdcResult.ADCRESULT0;
总和_for_adc_samples_Array[1]+= AdcResult.ADCRESULT1;
总和_for_adc_samples_Array[2]+= AdcResult.ADCRESULT2;
总和_for_adc_samples_Array[3]+= AdcResult.ADCRESULT3;
SUM_OD_ADC_SAMESS_Array[0]+= AdcResult.ADCRESULT4;
总和_for_adc_samples_Array[1]+= AdcResult.ADCRESULT5;
总和_for_adc_samples_Array[2]+= AdcResult.ADCRESULT6;
总和_for_adc_samples_Array[3]+= AdcResult.ADCRESULT7;
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
}
//除以样本数以找到平均值
ADC_A0 = SUM_OW_ADC_SA采样_Array[0]/ 128;
ADC_A1 =总和_for_ADC_Samples_Array[1]/ 128;
ADC_A2 =总和_for_ADC_Samples_Array[2]/ 128;
ADC_A3 =总和_for_ADC_Samples_Array[3]/ 128;
//计算在 ADC GPIO 上读取的值
ADC_A0 =(ADC_12位* ADC_A0);
ADC_A1 =(ADC_12位* ADC_A1);
ADC_A2 =(ADC_12位* ADC_A2);
ADC_A3 =(ADC_12位* ADC_A3);
//计算正确的电路读数
IP_Volt =(ADC_A0 / IP_VolT_Const);
IP_Amp =(ADC_A1/IP_Amp_Const);
OP_Volt =(ADC_A2 / OP_VolT_Const);
OP_Amp =(ADC_A3/OP_Amp_Const);
//计算输入功率和输出功率
new_pw_in = IP_Volt * IP_Amp;
new_pw_out = OP_Volt * OP_Amp;
}
void 可调节 PWM (void)
{
int PWM_Temp;
PWM_Temp = EPwm1Regs.CMPA.half.CMPA;//将 PWM1 CMPA 的当前占空比值分配给 PWM_Temp
PWM_Temp_Temp = PWM_Temp;//用于绘制图形
Duty_Cycle = 100 -((PWM_Temp_Temp / 1000)* 100);//用于绘制图形
如果(New_pw_in > Old _pw_in){//新功率大于旧功率
如果(IP_Volt > Old_Volt)//新 PV 电压大于旧电压
{
PWM_Temp + 2;//增加占空比
}
否则//新 PV 电压低于旧值
{
PWM_Temp - 2;//减小占空比
}
}
否则{//新功耗小于旧功耗
如果(IP_Volt > Old_Volt)//新 PV 电压大于旧电压
{
PWM_Temp - 2;//减小占空比
}
否则//新 PV 电压低于旧值
{
PWM_Temp + 2;//增加占空比
}
}
如果(PWM_Temp < 100){
PWM_Temp = 100;//必须防止 PWM 值过小
}
如果(PWM_Temp > 900){
PWM_Temp = 900;//必须防止 PWM 值过大
}
EPwm1Regs.CMPA.half.CMPA = PWM_Temp;//调整 PWM1占空比
EPwm2Regs.CMPA.half.CMPA = PWM_Temp;//调整 PWM2占空比
OLD_IP_Volt = IP_Volt;//将新输入电压值分配给旧输入电压值
OLD_PW_IN = New_PW_IN;//将新的功率值分配给旧的功率值
}
误差
****为项目 MPPT V2.0构建配置调试****
"C:\\ti\\ccs930\\ccs\\utils\bin\\gmake"-k -j 8 all -O
编译文件:"../main.c"
调用:C2000编译器
"c:/ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.5.LTS/bin/cl2000 -v28 -ml -mt -include_path="C:/ti/Habib new C2000 Germany projects/MPPT v2.0"--include_path="C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_headers/include --include_path="C:/ti/controlSUITE/device_support/f2802x/v210/F2802x_Device.h /ti/controlSUITE/device_support/f2802x/v210/DSP28x_Project.h /ti/controlSUITE/development_kits/C2000_LaunchPad/F2802x_Device.h --include_prefuse_path="C:/ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.5.LTS/include /ti/Habib /ti/controlSUITE/device_support/f2802x/v210/F2802x_Device.h /ti/controlSUITE/development_kits/C2000_LaunchPad -prepremote_probe.come"--c2000-rebote-prepremote_ines=/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_common/include /ti/controlSUITE/device_support/f2802x/v210/DSP28x_Project.h /ti/ccs930/ccs/tools/compiler/ti-cgt-c2000_18.12.5.LTS/include /ti/controlSUITE/development_kits/C2000_LaunchPad/DSP28x_Project.h -intrabout-come-probe-probe-combe-probe.combe-probe.combe-probe.combe-probe-probe.c:c:c:c:probe-probe.comprine-probe-d_probe-probe.combe-probe.combe-probe-probe-probe.c:c:c:c:c:c:
>>编译失败
subdir_rules.mk:9:目标'main.obj'的配方失败
命令行错误#1966:无法打开源文件"C:/ti/Habib 新建 C2000德国项目/MPPT V2.0":参数无效
1在编译"./main.c"时检测到灾难性错误。
编译已终止。
gmake:***[main.obj]错误1.
gmake:目标"全部"不会由于错误而重新生成。
****构建完成****





