主控芯片dsp tms320f28335,基于Matlab Simulink开发的嵌入式模型,模型可自动生成ccs工程代码,生成的代码可直接运行在主控芯片中。 该模型利用id=0的矢量控制,实现了永磁同步电机的速度电流双闭环控制。

在工业变频器和伺服驱动开发中,DSP TMS320F28335凭借其强大的浮点运算能力和丰富的外设资源,成为电机控制领域的常青树。最近尝试用Matlab Simulink搭建了一套可直接生成CCS工程的开发框架,实现了从算法设计到硬件落地的无缝衔接。

先看模型架构:在Simulink里构建的速度电流双闭环系统,最核心的当属矢量控制模块。这里采用id=0控制策略,通过Park/Clarke变换把三相电流分解成转矩分量iq和磁链分量id。有意思的是,模型自动生成的代码里藏着这样的片段:

void PMSM_Control(void) {
    // 电流环运算
    Iq_Ref = Speed_Controller();
    Id_Ref = 0; // 强制id置零
    Clarke_Transform(Ia, Ib, &Ialpha, &Ibeta);
    Park_Transform(Ialpha, Ibeta, Theta, &Id, &Iq);
    // 后续电压计算...
}

这段代码直接对应着Simulink里的电流环控制模块。注意到Id_Ref被硬编码为0,这正是id=0策略的直接体现。实际调试中发现,生成的代码在Q格式处理上非常聪明,比如速度PI调节器的输出会做饱和处理:

int32_t Speed_PI_Calc(int32_t error) {
    int64_t temp = (int64_t)error * Kp + integral;
    // 抗积分饱和处理
    if(temp > MAX_OUTPUT) {
        temp = MAX_OUTPUT;
    } else if(temp < -MAX_OUTPUT) {
        temp = -MAX_OUTPUT;
    }
    return (int32_t)(temp >> 15); // Q15格式转换
}

这里用64位中间变量防止运算溢出,右移15位实现定点数转换,这些细节都是自动生成的代码自己处理的。不过需要特别注意,Simulink里的数据类型设置必须与DSP的Q格式对应,否则生成的代码会出现诡异的数值溢出。

硬件交互部分,模型自动配置了PWM模块:

void InitEPwm(void) {
    EPwm1Regs.TBPRD = SYSTEM_FREQ / (2 * PWM_FREQ); // 死区时间计算
    EPwm1Regs.CMPA.half.CMPA = 0; // 占空比初始值
    EPwm1Regs.AQCSFRC.bit.CSFA = 0x1; // 动作限定配置
}

这段初始化代码对应着Simulink硬件配置中的PWM模块参数设置。实测发现,当在模型中修改死区时间参数时,TBPRD寄存器的计算会自动更新,省去了手动计算时钟分频的麻烦。

主控芯片dsp tms320f28335,基于Matlab Simulink开发的嵌入式模型,模型可自动生成ccs工程代码,生成的代码可直接运行在主控芯片中。 该模型利用id=0的矢量控制,实现了永磁同步电机的速度电流双闭环控制。

ADC采样中断的处理更是体现自动生成代码的优势。模型生成的ADC中断服务程序里,会自动插入电流采样值的归一化处理:

interrupt void ADC_ISR(void) {
    AdcData.ADCRESULT0 = AdcRegs.ADCRESULT0 >> 4; // 12bit转16bit
    Ia = (float)AdcData.ADCRESULT0 * 3.3 / 4096 - 1.65; // 电压转实际电流值
    // 触发控制算法运算
    PMSM_Control();
}

这里把原始ADC数值转换为真实电流值的处理,其实对应着Simulink信号输入模块中的Calibration选项卡设置。曾经踩过的坑是:若忘记勾选"Input range scaling"选项,生成的代码里就会缺失这个转换步骤,导致电流环直接崩溃。

调试时用CCS抓取的波形显示,在突加负载时速度环的动态响应时间约80ms,电流环的跟踪误差在±0.5A以内。不过自动生成的代码在中断嵌套处理上有些笨拙,需要手动优化中断优先级配置。另外,默认生成的工程会包含大量冗余的库文件,通过修改TLC脚本可以精简掉50%以上的无用代码。

总的来说,这种基于模型的设计方式大幅缩短了开发周期。从调整PI参数到烧录验证,整个过程可以在20分钟内完成迭代。但对于新手来说,需要特别注意三点:硬件抽象层的配置必须精确对应实际电路;Q格式运算的位数设置需要与算法匹配;中断服务函数中避免进行浮点运算——虽然F28335支持浮点,但实测发现用IQmath库的定点运算能再提升15%的执行效率。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐