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/TMS320F28377S:对 DCL_runPI_L1有疑问

Guru**** 2589300 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/665089/ccs-tms320f28377s-doubt-regarding-dcl_runpi_l1

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

是否有方法检查函数是否按需要工作。我尝试更改

RK、YK

但我在英国看不到任何变化

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

    如果函数被调用、它将正常工作。 在发布之前、所有 DCL 功能都经过了非常彻底的测试。

    如果结果不符合您的预期、请首先检查参数设置。 查看 DCL 示例代码(F28069_PI)、了解如何在 C28x 上设置 PI 控制器参数并将其分配给 CLA 数据 RAM、以便 CLA 可以读取这些参数。 可能从 Kp = 1、Ki = 0开始、并确保 Umax 和 Umin 是合理的。

    如果一切看起来都正常、但您仍然没有获得输出、请使用控制器函数检查任务是否实际被调用。 在 CLA C 代码中、您可以通过在控制器前面插入"_mdebugstop();"调用来实现此目的(再次请参阅 PI 示例代码)。

    此致、

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我正在使用的代码
    /* example_f28069_pi.c
    *
    *版权所有(C) 2017 Texas Instruments Incorporated - http://www.ti.com/
    *保留所有权利
    *
    *

    //头文件

    #include "DCL.h"
    #include "cla_adc_fir32_shared.h"
    #include "F28x_Project.h"
    #include "stdio.h"
    //函数原型
    中断 void CONTRAL_ISR (void);

    //全局变量
    长 IdleLoopCount = 0;
    长 IsrCount = 0;
    浮点占空比= 0;

    //共享变量
    #pragma DATA_SECTION (rk、"CpuToCla1MsgRAM")
    #pragma DATA_SECTION (YK、"CpuToCla1MsgRAM")
    #pragma DATA_SECTION (UK、"Cla1ToCpuMsgRAM")
    #pragma DATA_SECTION (hi、"Cla1ToCpuMsgRAM")
    #pragma DATA_SECTION (pi1、"Cla1DataRam1")
    float rk=0.05f;
    float YK=0.05f;
    float UK = 5.00f;
    float hi=5.00f;

    DCL_PI pi1 = PI_DEFAULTS;
    const 结构 PIE_VECT_TABLE PieVectTableInit ={
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    PI_RESERVE_ISR、 //保留
    Timer1_ISR、 // CPU 定时器1中断
    TIMER2_ISR、 // CPU 定时器2中断
    DATALOG_ISR、 //数据记录中断
    RTOS_ISR、 // RTOS 中断
    EMU_ISR、 //仿真中断
    NMI_ISR、 //不可屏蔽中断
    非法_ISR、 //非法操作陷阱
    User1_ISR、 //用户定义的陷阱1
    User2_ISR、 //用户定义的陷阱2.
    用户3_ISR、 //用户定义的陷阱3.
    User4_ISR、 //用户定义的陷阱4.
    USER5_ISR、 //用户定义的陷阱5.
    USER6_ISR、 //用户定义的陷阱6.
    USER7_ISR、 //用户定义的陷阱7
    USER8_ISR、 //用户定义的陷阱8.
    USER9_ISR、 //用户定义的陷阱9.
    USER10_ISR、 //用户定义的陷阱10.
    USER11_ISR、 //用户定义的陷阱11.
    USER12_ISR、 //用户定义的陷阱12.
    ADCA1_ISR、 // 1.1 - ADCA 中断1
    ADCB1_ISR、 // 1.2 - ADCB 中断1
    ADCC1_ISR、 // 1.3 - ADCC 中断1
    XINT1_ISR、 // 1.4 - XINT1中断
    XINT2_ISR、 // 1.5 - XINT2中断
    ADCD1_ISR、 // 1.6 - ADCD 中断1
    TIMER0_ISR、 // 1.7 -定时器0中断
    WAKE_ISR、 // 1.8 -待机和停止唤醒中断
    EPWM1_TZ_ISR、 // 2.1 - ePWM1触发区中断
    EPWM2_TZ_ISR、 // 2.2 - ePWM2触发区中断
    EPWM3_TZ_ISR、 // 2.3 - ePWM3触发区中断
    EPWM4_TZ_ISR、 // 2.4 - ePWM4触发区中断
    EPWM5_TZ_ISR、 // 2.5 - ePWM5触发区中断
    EPWM6_TZ_ISR、 // 2.6 - ePWM6触发区中断
    EPWM7_TZ_ISR、 // 2.7 - ePWM7触发区中断
    EPWM8_TZ_ISR、 // 2.8 - ePWM8触发区中断
    EPWM1_ISR、 // 3.1 - ePWM1中断
    EPWM2_ISR、 // 3.2 - ePWM2中断
    EPWM3_ISR、 // 3.3 - ePWM3中断
    EPWM4_ISR、 // 3.4 - ePWM4中断
    EPWM5_ISR、 // 3.5 - ePWM5中断
    EPWM6_ISR、 // 3.6 - ePWM6中断
    EPWM7_ISR、 // 3.7 - ePWM7中断
    EPWM8_ISR、 // 3.8 - ePWM8中断
    eCAP1_ISR、 // 4.1 - eCAP1中断
    ECAP2_ISR、 // 4.2 - eCAP2中断
    ECAP3_ISR、 // 4.3 - eCAP3中断
    ECAP4_ISR、 // 4.4 - eCAP4中断
    ECAP5_ISR、 // 4.5 - eCAP5中断
    ECAP6_ISR、 // 4.6 - eCAP6中断
    PI_RESERVE_ISR、 // 4.7 -保留
    PI_RESERVE_ISR、 // 4.8 -保留
    EQEP1_ISR、 // 5.1 - eQEP1中断
    EQEP2_ISR、 // 5.2 - eQEP2中断
    EQEP3_ISR、 // 5.3 - eQEP3中断
    PI_RESERVE_ISR、 // 5.4 -保留
    PI_RESERVE_ISR、 // 5.5 -保留
    PI_RESERVE_ISR、 // 5.6 -保留
    PI_RESERVE_ISR、 // 5.7 -保留
    PI_RESERVE_ISR、 // 5.8 -保留
    SPIA_RX_ISR、 // 6.1 - SPIA 接收中断
    SPIA_TX_ISR、 // 6.2 - SPIA 发送中断
    SPIB_RX_ISR、 // 6.3 - SPIB 接收中断
    SPIB_TX_ISR、 // 6.4 - SPIB 发送中断
    MCBSPA_RX_ISR、 // 6.5 - McBSPA 接收中断
    MCBSPA_TX_ISR、 // 6.6 - McBSPA 发送中断
    MCBSPB_RX_ISR、 // 6.7 - McBSPB 接收中断
    MCBSPB_TX_ISR、 // 6.8 - McBSPB 发送中断
    DMA_CH1_ISR、 // 7.1 - DMA 通道1中断
    DMA_CH2_ISR、 // 7.2 - DMA 通道2中断
    DMA_CH3_ISR、 // 7.3 - DMA 通道3中断
    DMA_CH4_ISR、 // 7.4 - DMA 通道4中断
    DMA_CH5_ISR、 // 7.5 - DMA 通道5中断
    DMA_CH6_ISR、 // 7.6 - DMA 通道6中断
    PI_RESERVE_ISR、 //7.7 -保留
    PI_RESERVE_ISR、 //7.8 -保留
    I2CA_ISR、 // 8.1 - I2CA 中断1
    I2CA_FIFO_ISR、 // 8.2 - I2CA 中断2
    I2CB_ISR、 // 8.3 - I2CB 中断1
    I2CB_FIFO_ISR、 // 8.4 - I2CB 中断2
    SCIC_RX_ISR、 // 8.5 - SCIC 接收中断
    SCIC_TX_ISR、 // 8.6 - SCIC 发送中断
    SCID_RX_ISR、 // 8.7 - SCID 接收中断
    SCID_TX_ISR、 // 8.8 - SCID 发送中断
    SCIA_RX_ISR、 // 9.1 - SCIA 接收中断
    SCIA_TX_ISR、 // 9.2 - SCIA 发送中断
    SCIB_RX_ISR、 // 9.3 - SCIB 接收中断
    SCIB_TX_ISR、 // 9.4 - SCIB 发送中断
    CANA0_ISR、 // 9.5 - CANA 中断0
    CANA1_ISR、 // 9.6 - CANA 中断1
    CANB0_ISR、 // 9.7 - CANB 中断0
    CANB1_ISR、 // 9.8 - CANB 中断1
    ADCA_EVT_ISR、 // 10.1 - ADCA 事件中断
    ADCA2_ISR、 // 10.2 - ADCA 中断2
    ADCA3_ISR、 // 10.3 - ADCA 中断3
    ADCA4_ISR、 // 10.4 - ADCA 中断4
    ADCB_EVT_ISR、 // 10.5 - ADCB 事件中断
    ADCB2_ISR、 // 10.6 - ADCB 中断2
    ADCB3_ISR、 // 10.7 - ADCB 中断3
    ADCB4_ISR、 // 10.8 - ADCB 中断4
    CLA1_1_ISR、 // 11.1 - CLA1中断1
    CLA1_2_ISR、 // 11.2 - CLA1中断2
    CLA1_3_ISR、 // 11.3 - CLA1中断3
    CLA1_4_ISR、 // 11.4- CLA1中断4.
    CLA1_5_ISR、 // 11.5 - CLA1中断5
    CLA1_6_ISR、 // 11.6 - CLA1中断6
    CLA1_7_ISR、 // 11.7-CLA1中断7
    CLA1_8_ISR、 // 11.8 - CLA1中断8
    XINT3_ISR、 // 12.1 - XINT3中断
    XINT4_ISR、 // 12.2 - XINT4中断
    XINT5_ISR、 // 12.3 - XINT5中断
    PI_RESERVE_ISR、 // 12.4 -保留
    PI_RESERVE_ISR、 // 12.5 -保留
    VCU_ISR、 // 12.6 - VCU 中断
    FPU_Overflow_ISR、 // 12.7 - FPU 溢出中断
    FPU_下溢_ISR、 // 12.8 - FPU 下溢中断
    PI_RESERVE_ISR、 // 1.9 -保留
    PI_RESERVE_ISR、 //1.10 -保留
    PI_RESERVE_ISR、 //1.11 -保留
    PI_RESERVE_ISR、 // 1.12 -保留
    IPC0_ISR、 // 1.13 - IPC 中断0
    IPC1_ISR、 // 1.14 - IPC 中断1
    IPC2_ISR、 // 1.15 - IPC 中断2
    IPC3_ISR、 // 1.16 - IPC 中断3
    EPWM9_TZ_ISR、 // 2.9 - ePWM9触发区中断
    EPWM10_TZ_ISR、 // 2.10 - ePWM10触发区中断
    EPWM11_TZ_ISR、 // 2.11 - ePWM11触发区中断
    EPWM12_TZ_ISR、 // 2.12 - ePWM12触发区中断
    PI_RESERVE_ISR、 //2.13 -保留
    PI_RESERVE_ISR、 //2.14 -保留
    PI_RESERVE_ISR、 //2.15 -保留
    PI_RESERVE_ISR、 //2.16 -保留
    EPWM9_ISR、 // 3.9 - ePWM9中断
    EPWM10_ISR、 // 3.10 - ePWM10中断
    EPWM11_ISR、 // 3.11 - ePWM11中断
    EPWM12_ISR、 // 3.12 - ePWM12中断
    PI_RESERVE_ISR、 // 3.13 -保留
    PI_RESERVE_ISR、 //3.14 -保留
    PI_RESERVE_ISR、 //3.15 -保留
    PI_RESERVE_ISR、 // 3.16 -保留
    PI_RESERVE_ISR、 // 4.9 -保留
    PI_RESERVE_ISR、 //4.10 -保留
    PI_RESERVE_ISR、 // 4.11 -保留
    PI_RESERVE_ISR、 //4.12 -保留
    PI_RESERVE_ISR、 //4.13 -保留
    PI_RESERVE_ISR、 // 4.14 -保留
    PI_RESERVE_ISR、 //4.15 -保留
    PI_RESERVE_ISR、 // 4.16 -保留
    SD1_ISR、 // 5.9 - SD1中断
    SD2_ISR、 // 5.10 - SD2中断
    PI_RESERVE_ISR、 //5.11 -保留
    PI_RESERVE_ISR、 //5.12 -保留
    PI_RESERVE_ISR、 //5.13 -保留
    PI_RESERVE_ISR、 //5.14 -保留
    PI_RESERVE_ISR、 //5.15 -保留
    PI_RESERVE_ISR、 //5.16 -保留
    SPIC_RX_ISR、 // 6.9 -***接收中断
    SPIC_TX_ISR、 // 6.10 -***发送中断
    PI_RESERVE_ISR、 // 6.11 -保留
    PI_RESERVE_ISR、 //6.12 -保留
    PI_RESERVE_ISR、 // 6.13 -保留
    PI_RESERVE_ISR、 // 6.14 -保留
    PI_RESERVE_ISR、 // 6.15 -保留
    PI_RESERVE_ISR、 // 6.16 -保留
    PI_RESERVE_ISR、 //7.9 -保留
    PI_RESERVE_ISR、 //7.10 -保留
    PI_RESERVE_ISR、 //7.11 -保留
    PI_RESERVE_ISR、 //7.12 -保留
    PI_RESERVE_ISR、 //7.13 -保留
    PI_RESERVE_ISR、 //7.14 -保留
    PI_RESERVE_ISR、 //7.15 -保留
    PI_RESERVE_ISR、 //7.16 -保留
    PI_RESERVE_ISR、 //8.9 -保留
    PI_RESERVE_ISR、 // 8.10 -保留
    PI_RESERVE_ISR、 //8.11 -保留
    PI_RESERVE_ISR、 //8.12 -保留
    PI_RESERVE_ISR、 //8.13 -保留
    PI_RESERVE_ISR、 //8.14 -保留
    CPU1
    UPPA_ISR、 // 8.15 - UPPA 中断
    PI_RESERVE_ISR、 //8.16 -保留
    #Elif Defined (CPU2)
    PI_RESERVE_ISR、 //8.15 -保留
    PI_RESERVE_ISR、 //8.16 -保留
    #endif
    PI_RESERVE_ISR、 //9.9 -保留
    PI_RESERVE_ISR、 // 9.10 -保留
    PI_RESERVE_ISR、 //9.11 -保留
    PI_RESERVE_ISR、 //9.12 -保留
    PI_RESERVE_ISR、 //9.13-保留
    PI_RESERVE_ISR、 //9.14-保留
    CPU1
    USBA_ISR、 // 9.15 - USBA 中断
    #Elif Defined (CPU2)
    PI_RESERVE_ISR、 //9.15 -保留
    #endif
    PI_RESERVE_ISR、 // 9.16 -保留
    ADCC_EVT_ISR、 // 10.9 - ADCC 事件中断
    ADCC2_ISR、 // 10.10 - ADCC 中断2
    ADCC3_ISR、 // 10.11 - ADCC 中断3
    ADCC4_ISR、 // 10.12 - ADCC 中断4
    ADCD_EVT_ISR、 // 10.13 - ADCD 事件中断
    ADCD2_ISR、 // 10.14 - ADCD 中断2
    ADCD3_ISR、 // 10.15 - ADCD 中断3
    ADCD4_ISR、 // 10.16 - ADCD 中断4
    PI_RESERVE_ISR、 // 11.9 -保留
    PI_RESERVE_ISR、 // 11.10 -保留
    PI_RESERVE_ISR、 // 11.11 -保留
    PI_RESERVE_ISR、 // 11.12 -保留
    PI_RESERVE_ISR、 //11.13 -保留
    PI_RESERVE_ISR、 // 11.14 -保留
    PI_RESERVE_ISR、 // 11.15 -保留
    PI_RESERVE_ISR、 // 11.16 -保留
    EMIF_ERROR_ISR、 // 12.9 - EMIF 错误中断
    RAM_corrected_error_ISR、// 12.10 - RAM 可纠正的错误中断
    FLASH_corrected_error_ISR、// 12.11 -闪存可纠正的错误中断
    RAM_ACCESS_violation_ISR、 // 12.12 - RAM 访问冲突中断
    SYS_PLL_SLITY_ISR、 // 12.13 -系统 PLL 跳周中断
    AUX_PLL_SL滑动_ISR、 // 12.14 -辅助 PLL 跳周中断
    CLA_overflow_ISR、 // 12.15 - CLA 溢出中断
    CLA_underflow_ISR // 12.16 - CLA 下溢中断
    };


    //
    // InitPieVectTable -此函数将 PIE 矢量表初始化为
    // 已知状态、必须在引导时间后执行。
    //
    空 InitPieVectTable (空)

    uint16 i;
    uint32 *源=(void *)&PieVectTableInit;
    uint32 * dest =(void *) PieVectTable (PieVectTable);

    //
    //请勿在前3个32位位置上进行写操作(这些位置是
    //由具有引导变量的引导 ROM 初始化)
    //
    Source = Source + 3;
    DEST = Dest + 3;

    EALLOW;
    对于(I = 0;I < 221;I++)

    *目的地++=*来源++;

    EDIS;

    //
    //启用 PIE 矢量表
    //
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

    void ePWM_initEpwm (void)

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0; //关闭 ePWM 时钟
    EPwm1Regs.ETSEL.bit.SOCAEN = 0; //禁用组上的 SOC
    EPwm1Regs.ETSEL.bit.SOCASEL = 4; //在向上计数时选择 SOC
    EPwm1Regs.ETPS.bit.SOCAPRD = 1; //在发生第一个事件时生成脉冲
    EPwm1Regs.CMPA.bit.CMPA = 1000;//将比较 A 值设置为2000
    //计数
    EPwm1Regs.TBPRD = 4000; //将周期设置为4000个计数
    EPwm1Regs.TBCTL.bit.CTRMODE = 0; //冻结计数器
    EPwm1Regs.ETSEL.bit.SOCAEN = 1; //启用 SOCA
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;

    EPwm2Regs.ETSEL.bit.SOCAEN = 0; //禁用组上的 SOC
    EPwm2Regs.CMPA.bit.CMPA = 1000;//将比较值设置为10000
    //计数
    EPwm2Regs.TBPRD = 4096; //将周期设置为20000个计数
    EPwm2Regs.TBCTL.bit.CTRMODE = 0; //冻结计数器
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;

    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; //清零 PWM1A
    EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;

    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; //清零 PWM2A
    EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;
    GpioCtrlRegs.GPAMUX1.bit.GPIO2=1;
    EDIS;


    void adc_initAdcA (void)

    uint16_t i;

    EALLOW;

    //
    //写入配置
    //
    AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
    AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);

    //
    //将脉冲位置设置为晚期
    //
    AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;

    //
    //为 ADC 加电
    //
    AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;

    //
    //延迟大于1ms 以允许 ADC 加电时间
    //
    对于(i = 0;i < 1000;i++)

    asm (" RPT#255 || NOP");


    //
    //选择要转换的通道和转换结束标志 ADCA
    //
    AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;//SOC0将转换引脚 A0
    AdcaRegs.ADCSOC0CTL.bit.ACQPS = 99;//采样窗口为100个 SYSCLK 周期
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发
    AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0结束将设置 INT1标志
    AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
    EDIS;


    空 CLA_configClaMemory (空)

    //extern uint32_t Cla1funcsRunStart、Cla1funcsLoadStart、Cla1funcsLoadSize;

    EALLOW;
    #ifdef _flash
    //
    //将代码从闪存复制到 RAM
    //
    memcpy (((uint32_t *)&Cla1funcsRunStart、(uint32_t *)&Cla1funcsLoadStart、(uint32_t)&Cla1funcsLoadSize);
    #endif //_FLASH

    //
    //初始化并等待 CLA1ToCPUMsgRAM
    //
    MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){};

    //
    //初始化并等待 CPUToCLA1MsgRAM
    //
    MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1;
    while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1){};

    //
    //选择 LS5RAM 作为 CLA 的编程空间
    //首先将 CLA 配置为 LS5的主器件,然后再配置
    //将空间设置为程序块
    //
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1;
    //MemCfgRegs.LSxMSEL.bit.MSEL_LS4=1;
    Dint;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 1;
    // MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;

    EDIS;



    void main()
    {int i=0;
    英国=0.5f;
    PI1.Ki=0;
    printf("him");

    /*初始化系统*/
    InitSysCtrl(); //[F2806x_SYSCTRL.c]
    Dint; //禁用中断
    IER = 0x0000;
    IFR = 0x0000;
    InitPieCtrl(); //初始化 PIE 控制寄存器[F2806x_PIECTRL.c]
    InitPieVectTable(); //初始化 PIE 矢量表[F2806x_PieVect.c]
    EALLOW;
    PieVectTable.ADCA1_INT =&CONTRAL_ISR;

    EDIS;

    /*初始化 PI 控制器*/
    PI1.KP = 0.000005f;
    //pi1.Ki = 0.015f;
    PI1.I10 = 0.0f;
    PI1.i6 = 1.0f;
    PI1.Umax = 10.2f;
    PI1.Umin = 1.0f;
    CLA_configClaMemory();
    /*计算 CLA 任务矢量*/
    EALLOW;
    Cla1Regs.MVECT1 =(uint16)((uint32)&Cla1Task1);
    Cla1Regs.MVECT2 =(uint16)((uint32)&Cla1Task2);
    Cla1Regs.MVECT3 =(uint16)((uint32)&Cla1Task3);
    Cla1Regs.MVECT4 =(uint16)((uint32)&Cla1Task4);
    Cla1Regs.MVECT5 =(uint16)((uint32)&Cla1Task5);
    Cla1Regs.MVECT6 =(uint16)((uint32)&Cla1Task6);
    Cla1Regs.MVECT7 =(uint16)((uint32)&Cla1Task7);
    Cla1Regs.MVECT8 =(uint16)((uint32)&Cla1Task8);
    //Cla1Regs.MVECT3 =(uint16)(((uint32)&Cla1Task3 -(uint32)&Cla1Prog_Start);

    /* CLA 任务触发器*/
    /* Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT3SEL = CLA_INT3_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT4SEL = CLA_INT4_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINTSEL = CLA_INT5_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT6SEL = CLA_INT6_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT7SEL = CLA_INT7_NONE;
    Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;*
    Cla1Regs.MIER all = 0x00FF;

    /*将 CLA 程序空间切换到 CLA 并启用软件强制
    *也切换 CLA 数据 RAM 0、1和2
    *注意:RAMxCPUE 位只能通过写寄存器来启用
    *而不是单个位字段。 此外、这些位字段的状态
    *不会反映在监视视图或寄存器视图中-它们始终如所示
    *零。 这是一个已知的错误、建议用户测试 CPU 访问情况
    *在继续之前
    *
    // Cla1Regs.MMEMCFG.ALL = CLA_PROG_ENABLE|CLARAM0_ENABLE|CLARAM1_ENABLE|CLARAM2_ENABLE|CLARAM2_ENABLE|CLA_RAM1CPUE;
    Cla1Regs.MCTL.bit.IACKE = 1;
    EDIS;

    /*配置 ePWM1 */
    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    ePWM_initEpwm();
    adc_initAdcA();

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    /*配置 ADC */
    //[F2806x_ADC.c]

    /*配置 GPIO */
    //InitGpio(); //[F2806x_GPIO.c]

    EALLOW;
    /* CLA 设置*/
    Cla1Regs.MIER 位 INT3 = 1;

    // Cla1Regs.MIER 位.INT8 = 1;
    //Cla1ForceTask8andWait();

    /*启用中断*/
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1; //启用 PIE INT 1.1 (ADCINT1)-[adcisr]
    IER |= M_INT1; //启用 CPU 中断1 (TINT0)
    EINT; //启用全局中断屏蔽

    EDIS;
    printf ("%d"、rk);
    /*空闲循环*/
    while (1)
    {i++;
    IdleLoopCount++;
    // ASM (" ESTOP0");





    /*控制 ISR:由 ADC EOC 触发*/
    中断空 CONTRAL_ISR (空)
    {rk=400;
    PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

    //读取 ADC 通道
    YK=((浮点) 2096 - 2048.0f)/ 2047.0f;
    //YK=1;

    //在 CLA 上触发 PI 控制器
    EALLOW;
    Cla1ForceTask3andWait();
    //将 u (k)写入 PWM

    占空比=(UK / 2.0f + 0.5f)*(float) EPwm1Regs.TBPRD;
    EPwm2Regs.CMPA.bit.CMPA =(UINT16)占空比;
    ASM (" ESTOP0");
    /*if (英国=5.0f)
    {EALLOW;
    GpioCtrlRegs.GPAMUX1.All=0;
    GpioCtrlRegs.GPADIR.bit.GPIO13=1;
    EDIS;

    GpioDataRegs.GPACLEAR.bit.GPIO13=1;
    }*/
    IsrCount++;



    /*文件结束*/

    这是 CLA 任务
    _interrupt void Cla1Task3 (void)

    //_mdebugstop();
    英国=5.0f;
    //运行 PI 控制器
    UK = DCL_runPI_L1 (&pi1、rk、yk);
    //英国=rk+yk;
    //UK = 5.0f;
    //英国=5.0f;
    /*_mnop();
    _mnop();
    _mnop();*/

    我检查了 CLA 任务的工作情况
    英国似乎总是归零。我浏览了 DCL 用户指南、但我仍然无法理解为什么请您能帮我解决这个问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Deepak、

    我使用我认为代码中包含的系数和数据来运行此控制器、它输出1.0f。  这就是我对以下内容的预期:

    RK = 0.05

    YK=0.0234

    Kp = 5e-06

    Ki = 0

    UMAX = 10.2

    Umin = 1.0

    基本上、积分路径被禁用、因此控制输出为 Kp *(rk - YK)= 133e-09、它被钳制到1.0的下限。  我更改了限值、输出相应地改变、因此我对控制器工作正常感到满意。  您能否检查上述参数是否与呼叫控制器时的参数相同?

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Deepak、
    还有一点:我不确定您的控制器结构在内存中的位置。 从#pragma 中、它看起来像是您希望在 CLA 数据 RAM 中使用的、因此您首先在 CPU 端对其进行初始化、然后再将该块的所有权切换到 CLA、但我看不到第二部分在哪里完成。 这可能是问题所在。
    将" pi1"映射到"CpuToCla1MsgRam"部分会更简单:这样 CPU 总是写入参数、CLA 总是可以读取这些参数。
    此致、
    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试在 CpuToCla1MsgRam 上输入 pi1。但即使如此、UK 仍然为零
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这些是第一个 estop 之后的值

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

    Deepak、  

    控制器没有运行、或者没有运行我们认为的参数。 当我使用这些设置运行时、输出为1.0、这是正确的。

    您能否粘贴相同的 CCS 表达式窗口、以便我可以看到地址列?

    此致、

    Richard

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

    我的器件出错了。控制器没有运行参数是正确的、因为我创建了一个名为 ClaDataRam1的段、在 pragma 命令中、我将其用作 ClaDataRam。现在代码运行正常。谢谢

    此致、

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

    很高兴知道问题已解决。 感谢您的介绍。

    此致、

    Richard