本帖最后由 baisong1112 于 2018-3-9 18:18 编辑
SEED-DBS28377套件是ARROWSEED以TI的TMS320F28377D为主芯片,结合电机控制、工业驱动产品和电力线通信等方面的需求,设计完成的完整解决方案。该套件可以同时支持4路直流无刷电机,也可以同时支持双路千瓦伺服电机,未来还会支持EtherCAT等工业以太网协议。 作为SEED-DBS28377的开发者之一,笔者在调试过程中遇到了一些关于TMS320F28377D的典型问题,现将调试时的处理方法及思路记录如下,以便大家借鉴。 A、 双核心外设的配置与使用 TI的TMS320F28377D是双C28x核心MCU,外设丰富、性能强大。外设可以根据需要指派给指定的核心使用,但也要按照规则使用,否则就会遇到各种奇怪问题。例如我的项目是要求使用TMS320F28377D用作主控芯片,开发一套多电机控制系统。项目要求为双核心独立控制电机,即一个核心控制一台电机,项目外设分配如下: 1、 Cpu1外设:EPWM1、EPWM2、EPWM3、EPWM11、EQEP1、ADC_A、CMPSS1、CMPSS2; 2、 Cpu2外设:EPWM4、EPWM5、EPWM6、EPWM12、EQEP2、ADC_B、CMPSS3、CMPSS4; 最初的软件流程: 1、 初始化系统控制,包括:PLL、WatchDog、Peripheral Clocks; 2、 GPIO初始化,按照对应外设去设置GPIO的功能; 3、 外设初始化,按照各个外设的设计要求进行设置; 4、 中断初始化,按照中断工作需求进行设置; 5、 Cpu2的初始化过程同步骤1~4; 编译程序通过,连接仿真器,加载out文件并运行,此时只有Cpu1的电机可以正常工作,Cpu2的电机不能工作。测试PWM4~6无输出,检查过程中我意识到TMS320F28377D中的寄存器可能不是所有都对Cpu2开放。在下表(Table 6-10)中列出的外设访问权限列表中,可以看出我的分析正确。并且Cpu2的可用外设也需要Cpu1进行分配,默认是Cpu1使用的。因此修改软件流程如下: Ø Cpu1初始化过程 1、 初始化系统控制,包括:PLL、WatchDog、Peripheral Clocks;
2、 GPIO初始化,按照对应外设去设置GPIO的功能,包括Cpu2使用的外设; 3、 分配外设给Cpu2; 4、 外设初始化,按照各个外设的设计要求进行设置; 5、 中断初始化,按照中断工作需求进行设置; Ø Cpu2初始化过程进行精简 1、 外设初始化,按照各个外设的设计要求进行设置; 2、 中断初始化,按照中断工作需求进行设置; 至此,重新编译程序。编译程序通过,连接仿真器,加载out文件并运行,此时两个永磁同步电机可同时运行。 B、 内存分配 当项目的软件调试完成后,当然要让它脱机运行。但是当我将其烧写到Flash中后,程序运行异常。仿真时一切正常,flash启动则发生异常。 疑惑中重新看datasheet,发现TMS320F28377D内部集成多种RAM,包括:Dedicated RAM、Local SharedRAM、Global Shared RAM、CPU Message RAM和CLA Message RAM等。其中Local Shared RAM为每个核心都有的RAM空间,而Global Shared RAM则是多有核心共用的RAM空间。 于是我重新检查了cmd文件中代码段的存放情况,发现Cpu2的cmd文件把.ebss与.esysmem段放在了Global Shared RAM中,进而导致程序初始化不正常。
将Cpu2的cmd文件修改如下,将.ebss与.esysmem段放在了Local Shared RAM中,重新编译后Cpu2脱机工作正常了。
|
干货