【无标题】

  1. SECTIONS
    {
       codestart        : > BEGIN,     PAGE = 0, ALIGN(4)
       .text            : >>FLASH_BANK0_SEC1 | FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3,   PAGE = 0, ALIGN(4)
       .cinit           : > FLASH_BANK0_SEC0,     PAGE = 0, ALIGN(4)
       .init_array      : > FLASH_BANK0_SEC0,     PAGE = 0, ALIGN(4)
       .switch          : > FLASH_BANK0_SEC0,     PAGE = 0, ALIGN(4)
       .const           : > FLASH_BANK0_SEC0,     PAGE = 0, ALIGN(4)
       .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */

       .stack           : > RAMM1,     PAGE = 1
       .data            : > RAMLS0LS1,    PAGE = 1
       .bss             : > RAMLS0LS1,    PAGE = 1
       .sysmem          : > RAMGS2,     PAGE = 1

  2. 上述代码是一个链接脚本文件,用于指定程序中各个部分的存储位置。其中,SECTIONS块定义了各个段的名称、存储位置和对齐方式等信息。具体解释如下:

    - codestart:程序的起始地址,通常为0。
    - .text:代码段,存放程序的指令。
    - .cinit:C语言初始化代码段,存放C语言程序的初始化代码。
    - .init_array:初始化函数指针数组,存放需要在程序启动时执行的初始化函数。
    - .switch:存放switch语句的跳转表。
    - .const:常量段,存放程序中的常量
    - .reset:复位向量,存放处理器复位时的跳转地址

    下面是数据段的定义:

    - .stack:栈段,存放程序的运行时栈
    - .data:数据段,存放程序中已初始化的全局变量
    - .bss:BSS段,存放程序中未初始化的全局变量和静态变量。
    - .sysmem:系统内存段,存放操作系统的内存。

    SECTIONS块中的符号“>”表示将该段放在指定的存储区域中,而“>>”表示将该段放在多个存储区域中。PAGE表示该段所在的页码,ALIGN表示该段的对齐方式。FLASH_BANK0_SEC0、FLASH_BANK0_SEC1、FLASH_BANK0_SEC2、FLASH_BANK0_SEC3和RAMM1、RAMLS0LS1、RAMGS2都是存储区域的名称,具体的定义需要参考链接脚本文件中的其他部分。

  3.  GROUP
       {
           .TI.ramfunc
           {
               -l sfra_f32_tmu_eabi.lib
           }
           ramfuncs

       } LOAD = FLASH_BANK0_SEC6,
             RUN = RAMGS0GS1,
             LOAD_START(RamfuncsLoadStart),
             LOAD_SIZE(RamfuncsLoadSize),
             LOAD_END(RamfuncsLoadEnd),
             RUN_START(RamfuncsRunStart),
             RUN_SIZE(RamfuncsRunSize),
             RUN_END(RamfuncsRunEnd),
             PAGE = 0, ALIGN(4)

  4. GROUP是一种用于将多个SECTION组合在一起的机制。在这个例子中,GROUP将.TI.ramfunc和ramfuncs这两个SECTION组合在一起,并将它们放在了LOAD和RUN中。LOAD和RUN分别指定了SECTION在Flash和RAM中的位置,LOAD_START、LOAD_SIZE、LOAD_END、RUN_START、RUN_SIZE和RUN_END则指定了SECTION在Flash和RAM中的地址和大小。PAGE和ALIGN(4)则分别指定了SECTION在Flash中的页和在RAM中的对齐方式。

  5.  SFRA_F32_Data    : > RAMLS0LS1, ALIGN = 64, PAGE = 1

        FPUmathTables    : > FLASH_BANK0_SEC11,   PAGE =0

        .scratchpad      : > RAMLS0LS1,           PAGE = 1
        .bss_cla         : > RAMLS0LS1,           PAGE = 1
        controlVariables : > RAMLS0LS1,           PAGE = 1

        .const_cla       :  LOAD = FLASH_BANK1_SEC8_9_10,
                            RUN = RAMLS2LS3LS4LS5,
                            RUN_START(Cla1ConstRunStart),
                            LOAD_START(Cla1ConstLoadStart),
                            LOAD_SIZE(Cla1ConstLoadSize),
                            PAGE = 0

  6. #define BUCK_SFRA_INJECT(x) (x)
        #define BUCK_SFRA_COLLECT(x, y) {}
        #define BUCK_SFRA_GUI_RUN_COMMS(x) {}
        #define BUCK_SFRA_RUN_BACKGROUND(x) {}

  7. 这是一组C++宏定义,可能用于同步整流Buck的SFRA测试。具体而言,这些宏定义可能用于注入、收集和传输SFRA测试数据,以及在后台运行SFRA测试。其中,BUCK_SFRA_INJECT(x)可能用于注入测试信号,BUCK_SFRA_COLLECT(x, y)可能用于收集测试数据,BUCK_SFRA_GUI_RUN_COMMS(x)可能用于在GUI中运行通信,BUCK_SFRA_RUN_BACKGROUND(x)可能用于在后台运行测试。需要根据具体上下文来确定这些宏定义的确切含义和用途。

  8. void BUCK_initProgramVariables(void)
    {
        BUCK_dutyTarget_pu = 0.0f;
        BUCK_dutySlewed_pu = 0.0f;
        BUCK_dacTarget_pu  = 0.0f;
        BUCK_dacSlewed_pu  = 0.0f;
        BUCK_vOutSet_pu    = 0.0f;
        BUCK_vOutTarget_pu = 0.0f;
        BUCK_vOutSlewed_pu = 0.0f;
        BUCK_vOutSensed_pu = 0.0f;
        BUCK_kp            = 0.0f;
        BUCK_ki            = 0.0f;
        BUCK_kd            = 0.0f;
        BUCK_uk_pu         = 0.0f;
        BUCK_ek_pu         = 0.0f;

        BUCK_adcSampleIndex = BUCK_AVG_ADC_SAMPLES;
        do {
            BUCK_adcSampleIndex--;
            BUCK_vInSamples_Volts[BUCK_adcSampleIndex]  = 0.0f;
            BUCK_vOutSamples_Volts[BUCK_adcSampleIndex] = 0.0f;
            BUCK_iLSamples_Amps[BUCK_adcSampleIndex]    = 0.0f;
        } while(BUCK_adcSampleIndex > 0);

        DCL_initLog(&BUCK_vOutLogFdlog, BUCK_vOutLog_Volts, BUCK_VOUT_LOG_SIZE);
        DCL_initTCM(&BUCK_vOutLogTcm,
                    BUCK_vOutLogFdlog.fptr,
                    BUCK_VOUT_LOG_SIZE,
                    BUCK_VOUT_LOG_LEAD_SIZE,
                    BUCK_vOutSetRef_Volts - BUCK_VOUT_LOG_UNDER_V,
                    BUCK_vOutSetRef_Volts + BUCK_VOUT_LOG_OVER_V);

        BUCK_vOutLogRef.forceTrig   = 0;
        BUCK_vOutLogRef.armTrig     = 0;
        BUCK_vOutLogRef.leadSamples = BUCK_vOutLogTcm.lead;
        BUCK_vOutLogRef.trigMin_V   = BUCK_vOutLogTcm.trigMin;
        BUCK_vOutLogRef.trigMax_V   = BUCK_vOutLogTcm.trigMax;
    }

  9. 这段代码是一个初始化函数,用于初始化BUCK电路控制器的各种变量。其中包括占空比、DAC输出、输出电压等变量的初始化,以及一些采样数据的初始化。此外,还初始化了一个日志文件和一个触发器,用于记录输出电压的变化情况。

  10. static inline void DCL_initTCM(TCM *q, float32_t *addr, uint16_t size, uint16_t lead, float32_t tmin, float32_t tmax)
    {
        // assign and clear capture frame, and initialize index to end of lead frame
        DCL_initLog(&(q->captFrame), addr, size);
        DCL_clearLog(&(q->captFrame));
        q->captFrame.dptr = q->captFrame.fptr + lead;

        // assign lead & monitor frame pointers
        DCL_initLog(&(q->leadFrame), addr, lead);
        DCL_initLog(&(q->moniFrame), q->captFrame.lptr - lead + 1, lead);

        // load remaining TCM vars
        q->lead = lead;
        q->trigMax = tmax;
        q->trigMin = tmin;
        q->mode = TCM_idle;
    }

  11. 这段代码是一个函数,名为DCL_initTCM,它的作用是初始化一个TCM结构体。这个结构体包含了三个成员变量:captFrame、leadFrame和moniFrame,它们都是Log类型的结构体。在函数中,首先对captFrame进行了初始化,然后将其dptr指针指向了leadFrame的末尾,接着对leadFrame和moniFrame进行了初始化。最后,对结构体中的其他成员变量进行了赋值。这个函数的具体实现需要结合上下文才能确定。

  12. float32_t            BUCK_dutyTarget_pu;
    float32_t            BUCK_dutySlewed_pu;
    float32_t            BUCK_dacTarget_pu;
    float32_t            BUCK_dacSlewed_pu;
    float32_t            BUCK_vOutSet_pu;
    float32_t            BUCK_vOutTarget_pu;
    float32_t            BUCK_vOutSlewed_pu;
    float32_t            BUCK_vOutSensed_pu;
    float32_t            BUCK_kp;
    float32_t            BUCK_ki;
    float32_t            BUCK_kd;
    float32_t            BUCK_uk_pu;
    float32_t            BUCK_ek_pu;
    DCL_ZPK3             BUCK_zpk3;
    uint16_t             BUCK_adcSampleIndex;
    float32_t            BUCK_vInSamples_Volts[BUCK_AVG_ADC_SAMPLES];
    float32_t            BUCK_vOutSamples_Volts[BUCK_AVG_ADC_SAMPLES];
    float32_t            BUCK_iLSamples_Amps[BUCK_AVG_ADC_SAMPLES];

    uint32_t             MEP_ScaleFactor;
    uint16_t             BUCK_sfoStatus;

  13. 这是一个包含多个变量的代码段,这些变量的含义如下:
    - BUCK_dutyTarget_pu: Buck转换器的占空比目标值,单位为pu。
    - BUCK_dutySlewed_pu: Buck转换器的占空比斜率,单位为pu/s。
    - BUCK_dacTarget_pu: Buck转换器的DAC目标值,单位为pu。
    - BUCK_dacSlewed_pu: Buck转换器的DAC斜率,单位为pu/s。
    - BUCK_vOutSet_pu: Buck转换器的输出电压设置值,单位为pu。
    - BUCK_vOutTarget_pu: Buck转换器的输出电压目标值,单位为pu。
    - BUCK_vOutSlewed_pu: Buck转换器的输出电压斜率,单位为pu/s。
    - BUCK_vOutSensed_pu: Buck转换器的输出电压感测值,单位为pu。
    - BUCK_kp: Buck转换器的比例系数。
    - BUCK_ki: Buck转换器的积分系数。
    - BUCK_kd: Buck转换器的微分系数。
    - BUCK_uk_pu: Buck转换器的控制输入,单位为pu。
    - BUCK_ek_pu: Buck转换器的控制误差,单位为pu。
    - BUCK_zpk3: Buck转换器的零极点信息。
    - BUCK_adcSampleIndex: Buck转换器的ADC采样索引。
    - BUCK_vInSamples_Volts: Buck转换器的输入电压采样值,单位为伏特。
    - BUCK_vOutSamples_Volts: Buck转换器的输出电压采样值,单位为伏特。
    - BUCK_iLSamples_Amps: Buck转换器的电感电流采样值,单位为安培。
    - MEP_ScaleFactor: MEP比例系数。
    - BUCK_sfoStatus: Buck转换器的SFO状态。

  14. void BUCK_updateControllerCoefficients(void)
    {
        //
        // Update the active DCL coefficients if requested by the user
        //
        if(BUCK_ctrlRef.ctrlUpdate != 0)
        {
            if(BUCK_ctrlRef.ctrlFormat == Format_PID)
            {
                //
                // Store the scaled values into DCL PID format
                //
                BUCK_kp = BUCK_ctrlRef.ctrlPid.Kp / BUCK_ctrlRef.ctrlPid.Scale;
                BUCK_ki = BUCK_ctrlRef.ctrlPid.Ki / BUCK_ctrlRef.ctrlPid.Scale;
                BUCK_kd = BUCK_ctrlRef.ctrlPid.Kd / BUCK_ctrlRef.ctrlPid.Scale;

                BUCK_DCL_LOAD_PID(&BUCK_ctrl,
                                  BUCK_kp,
                                  BUCK_ki,
                                  BUCK_kd,
                                  BUCK_ctrlRef.ctrlPid.fc_Hz);
            }
            else if(BUCK_ctrlRef.ctrlFormat == Format_ZPK)
            {
                //
                // Store the calculated values into the DCL ZPK3 format
                // Z-P frequency values are converted to radians in Left Half-Plane
                //
                BUCK_zpk3.z1 = (-2 * BUCK_DCL_PI * 1000) *
                               BUCK_ctrlRef.ctrlZpk.Z0_kHz;
                BUCK_zpk3.z2 = (-2 * BUCK_DCL_PI * 1000) *
                               BUCK_ctrlRef.ctrlZpk.Z1_kHz;
                BUCK_zpk3.p1 = 0;
                BUCK_zpk3.p2 = (-2 * BUCK_DCL_PI * 1000) *
                               BUCK_ctrlRef.ctrlZpk.P1_kHz;

                //
                // Normalize Gain
                //
                BUCK_zpk3.K = BUCK_ctrlRef.ctrlZpk.Kdc *
                              BUCK_ctrlRef.ctrlZpk.P1_kHz /
                              BUCK_ctrlRef.ctrlZpk.Z0_kHz /
                              BUCK_ctrlRef.ctrlZpk.Z1_kHz /
                              (2 * BUCK_DCL_PI * 1000);

                BUCK_DCL_LOAD_ZPK(&BUCK_ctrl,
                                  &BUCK_zpk3);
            }
            else if(BUCK_ctrlRef.ctrlFormat == Format_Coeff)
            {
                //
                // Copy coefficients directly into DCL SPS structure
                //
                #if(BUCK_DCL_CTRL_TYPE == DCL_DF22)
                    BUCK_ctrl.sps->b0 = BUCK_ctrlRef.ctrlCoeff.B0;
                    BUCK_ctrl.sps->b1 = BUCK_ctrlRef.ctrlCoeff.B1;
                    BUCK_ctrl.sps->b2 = BUCK_ctrlRef.ctrlCoeff.B2;
                    BUCK_ctrl.sps->a1 = BUCK_ctrlRef.ctrlCoeff.A1;
                    BUCK_ctrl.sps->a2 = BUCK_ctrlRef.ctrlCoeff.A2;
                #else
                    asm(" ESTOP0");
                #endif
            }

            DCL_REQUEST_UPDATE(&BUCK_ctrl);
            BUCK_DCL_UPDATE(&BUCK_ctrl);
            BUCK_DCL_RESET(&BUCK_ctrl);
            BUCK_ctrlRef.ctrlUpdate = 0;
            BUCK_isrDutyUpdateMarginClear = 1;
        }

        //
        // Store the active DCL coefficients for user observation
        //
        BUCK_ctrlRef.ctrlActiveCoeff.B0 = BUCK_ctrl.b0;
        BUCK_ctrlRef.ctrlActiveCoeff.B1 = BUCK_ctrl.b1;
        BUCK_ctrlRef.ctrlActiveCoeff.B2 = BUCK_ctrl.b2;
        BUCK_ctrlRef.ctrlActiveCoeff.A1 = BUCK_ctrl.a1;
        BUCK_ctrlRef.ctrlActiveCoeff.A2 = BUCK_ctrl.a2;
    }

  15. 这段代码是一个名为BUCK_updateControllerCoefficients的函数,用于更新控制器的系数。函数首先检查是否需要更新控制器系数,如果需要,则根据控制器的格式将系数存储到相应的数据结构中。如果控制器格式为PID,则将缩放后的Kp、Ki和Kd值存储到DCL PID格式中;如果控制器格式为ZPK,则将计算出的Z-P频率值存储到DCL ZPK3格式中;如果控制器格式为Coeff,则直接将系数复制到DCL SPS结构中。然后,函数请求更新控制器、更新控制器、重置控制器,并将控制器更新标志设置为0。最后,函数将活动DCL系数存储到控制器参考结构中以供用户观察。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值