DSP2833x系列基于模型的控制器设计 Simulik自动生成代码 DSP2833x基于模型的电机控制设计 MATLAb Simulik自动生成代码 基于dsp2833x 底层驱动库的自动代码生成 MATLAB Simulink仿真及代码生成技术入门教程 内容为Simulink在嵌入式领域的应用具体是Simulink在DSP28335这块开发版上的应用模型包括直流电机、PMSM、步进电机控制模型还有常见的LED、串口、CAN、Spi、i2c等通讯相关Simulink模型及代码生成玩转DSP2833x的工程师都知道手动敲寄存器这事儿吧费劲不说还容易翻车。现在咱们直接拿Simulink搭积木自动生成能烧录的C代码真香就拿最常见的LED闪烁来说在Simulink里拖个GPIO模块设置下28335的GPIO34引脚勾选PWM触发模式。这时候生成的代码里会自动带出InitGpio()函数咱们瞅一眼关键部分GpioCtrlRegs.GPBMUX1.bit.GPIO34 0; // 设置为GPIO模式 GpioCtrlRegs.GPBDIR.bit.GPIO34 1; // 输出方向 GpioDataRegs.GPBSET.bit.GPIO34 1; // 初始高电平是不是比手动查手册省事儿多了更绝的是PWM模块拖动ePWM1模块到画布配置载波频率为10kHz。生成的代码里直接嵌入了死区补偿算法看看这个占空比设置函数EPwm1Regs.CMPA.half.CMPA (Uint16)(EPwm1Regs.TBPRD * dutyCycle);这种寄存器级的精准控制连老司机都得写半小时的代码Simulink点几下就搞定了。最近有个项目用这个套路驱动步进电机模型里用Stateflow做了个S曲线加速算法代码生成时自动展开成switch-case结构实测比手写代码节省了40%开发时间。通信方面玩得更溜CAN模块配置界面直接可视化设置ID和邮箱。重点看生成的接收中断服务函数__interrupt void canISR(void){ CanRegs.CANRMP.bit.RMP31 1; // 清中断标志 RecvData CanRegs.CANMDL31; // 读取数据 }这种寄存器操作级别的代码Simulink自动处理了繁琐的位操作。实测在28335上跑CAN通讯误码率比手动编写的驱动还低底层库的稳定性确实靠谱。DSP2833x系列基于模型的控制器设计 Simulik自动生成代码 DSP2833x基于模型的电机控制设计 MATLAb Simulik自动生成代码 基于dsp2833x 底层驱动库的自动代码生成 MATLAB Simulink仿真及代码生成技术入门教程 内容为Simulink在嵌入式领域的应用具体是Simulink在DSP28335这块开发版上的应用模型包括直流电机、PMSM、步进电机控制模型还有常见的LED、串口、CAN、Spi、i2c等通讯相关Simulink模型及代码生成搞电机控制的兄弟肯定关心FOC算法实现。用Simulink的PMSM模块搭建磁场定向控制模型时注意在Clarke变换模块里勾选单精度浮点优化。生成的代码会自动调用DSP库的IQmath函数_iq ClarkA _IQmpy(PhaseA, _IQ(0.6667)); _iq ClarkB _IQmpy(PhaseB, _IQ(0.3333));这种定点数优化处理让算法在28335上跑出了堪比DSP专用芯片的效果。有个做无刷电机驱动的案例用自动生成的代码实现了15000rpm转速控制速度环响应时间控制在2ms以内。最后说个坑用ADC模块时记得在模型里插入软件触发信号。有次生成代码后发现采样率上不去查了半天发现是没配置SOC触发源。正确姿势是在ADC模块属性页勾选Software trigger这样生成的代码才会自动配置SOC寄存器AdcRegs.ADCSOCFRC1.bit.SOC0 1; // 触发采样这种隐藏配置项真是让人又爱又恨。总的来说Simulink28335的组合把嵌入式开发的门槛拉低了好几个level特别是做复杂控制算法时可视化建模比纯代码调试直观太多了。不过要玩得转得吃透TI的C2000硬件支持包里头的模块配置玄机可不少呢。
DSP2833x系列基于模型的控制器设计 Simulik自动生成代码 DSP2833x基于模型...
DSP2833x系列基于模型的控制器设计 Simulik自动生成代码 DSP2833x基于模型的电机控制设计 MATLAb Simulik自动生成代码 基于dsp2833x 底层驱动库的自动代码生成 MATLAB Simulink仿真及代码生成技术入门教程 内容为Simulink在嵌入式领域的应用具体是Simulink在DSP28335这块开发版上的应用模型包括直流电机、PMSM、步进电机控制模型还有常见的LED、串口、CAN、Spi、i2c等通讯相关Simulink模型及代码生成玩转DSP2833x的工程师都知道手动敲寄存器这事儿吧费劲不说还容易翻车。现在咱们直接拿Simulink搭积木自动生成能烧录的C代码真香就拿最常见的LED闪烁来说在Simulink里拖个GPIO模块设置下28335的GPIO34引脚勾选PWM触发模式。这时候生成的代码里会自动带出InitGpio()函数咱们瞅一眼关键部分GpioCtrlRegs.GPBMUX1.bit.GPIO34 0; // 设置为GPIO模式 GpioCtrlRegs.GPBDIR.bit.GPIO34 1; // 输出方向 GpioDataRegs.GPBSET.bit.GPIO34 1; // 初始高电平是不是比手动查手册省事儿多了更绝的是PWM模块拖动ePWM1模块到画布配置载波频率为10kHz。生成的代码里直接嵌入了死区补偿算法看看这个占空比设置函数EPwm1Regs.CMPA.half.CMPA (Uint16)(EPwm1Regs.TBPRD * dutyCycle);这种寄存器级的精准控制连老司机都得写半小时的代码Simulink点几下就搞定了。最近有个项目用这个套路驱动步进电机模型里用Stateflow做了个S曲线加速算法代码生成时自动展开成switch-case结构实测比手写代码节省了40%开发时间。通信方面玩得更溜CAN模块配置界面直接可视化设置ID和邮箱。重点看生成的接收中断服务函数__interrupt void canISR(void){ CanRegs.CANRMP.bit.RMP31 1; // 清中断标志 RecvData CanRegs.CANMDL31; // 读取数据 }这种寄存器操作级别的代码Simulink自动处理了繁琐的位操作。实测在28335上跑CAN通讯误码率比手动编写的驱动还低底层库的稳定性确实靠谱。DSP2833x系列基于模型的控制器设计 Simulik自动生成代码 DSP2833x基于模型的电机控制设计 MATLAb Simulik自动生成代码 基于dsp2833x 底层驱动库的自动代码生成 MATLAB Simulink仿真及代码生成技术入门教程 内容为Simulink在嵌入式领域的应用具体是Simulink在DSP28335这块开发版上的应用模型包括直流电机、PMSM、步进电机控制模型还有常见的LED、串口、CAN、Spi、i2c等通讯相关Simulink模型及代码生成搞电机控制的兄弟肯定关心FOC算法实现。用Simulink的PMSM模块搭建磁场定向控制模型时注意在Clarke变换模块里勾选单精度浮点优化。生成的代码会自动调用DSP库的IQmath函数_iq ClarkA _IQmpy(PhaseA, _IQ(0.6667)); _iq ClarkB _IQmpy(PhaseB, _IQ(0.3333));这种定点数优化处理让算法在28335上跑出了堪比DSP专用芯片的效果。有个做无刷电机驱动的案例用自动生成的代码实现了15000rpm转速控制速度环响应时间控制在2ms以内。最后说个坑用ADC模块时记得在模型里插入软件触发信号。有次生成代码后发现采样率上不去查了半天发现是没配置SOC触发源。正确姿势是在ADC模块属性页勾选Software trigger这样生成的代码才会自动配置SOC寄存器AdcRegs.ADCSOCFRC1.bit.SOC0 1; // 触发采样这种隐藏配置项真是让人又爱又恨。总的来说Simulink28335的组合把嵌入式开发的门槛拉低了好几个level特别是做复杂控制算法时可视化建模比纯代码调试直观太多了。不过要玩得转得吃透TI的C2000硬件支持包里头的模块配置玄机可不少呢。