再玩剁手 发表于 2023-5-10 10:48:23

汇川变频器MD500E迁移到HXS320F28034/035记录贴(长期更新中。。。)

汇川变频器MD500E
MD500E系列变频器能够实现无编码器的同步电机控制,让同步电机控制大众化。是汇川新一代的变频器主力机型,凭借高性能的电流矢量技术,可轻松驱动感应电动机,满足各种环境中的工作要求。MD500是汇集了汇川技术矢量变频器技术的最高性能变频器。高性能、高品质、小尺寸安装面积、高功率密度设计,更符合于用户的切身体验。



static/image/hrline/5.gif


网络上很多售卖汇川MD380或者500E源码的,主控芯片用的是TI的034或者035,几块钱就可以买到,正好找个大的工程来练练手,顺便熟悉一下昊芯的RISC-V DSP芯片。



再玩剁手 发表于 2023-5-12 10:38:37

本帖最后由 再玩剁手 于 2023-5-12 14:15 编辑

MD500E原始工程的根目录结构如下
--MD500E
----01_system
----02_motor
----03_function
----04_subprogram
----05_public
----CCs_28035
1.新建一个空白的HXS320F28035的flash工程,选择模板Basic Project。
2.将根目录下的01到05文件夹拷贝,粘贴到src目录下
3.修改01_system目录下的main.c文件,头文件添加模板工程中main.c的引用,并删除模板工程的main.c文件。
4.修改整个工程下,int类型为int16,uint为uint16,这是因为HX2000芯片int类型是32位,T的则是16位。同时需要注释掉MotorDefine.h中关于类型定义的typedef,使用hx提供的定义。
short都是16位,long都是32位,long long都是64位。float都是32位单精度。double,eabi是64位,coff是32位,昊芯都是64位。(参考SPRU514Y第103页)
5.修改中断相关的关键字,interrupt改成__interrupt,双下划线,支持中断嵌套。如果不支持嵌套,可以改成INTERRUPT,节省中断服务程序的指令数。

enqying 发表于 2023-5-12 10:47:21

跟随楼主学习

再玩剁手 发表于 2023-5-12 13:24:20

本帖最后由 再玩剁手 于 2023-5-12 13:40 编辑

6.删除掉01_system目录下2803x和280x的驱动文件,仅保留main.c和mainInit_2803x.c文件,对于mainInit_2803x.c中函数与HXF28035有冲突的,保留该文件中的函数,注释掉hx提供的默认驱动库文件。

7.删除掉03_function目录下的DSP280x_usDelay.asm和DSP2803x_usDelay.asm汇编文件,延时函数使用hx提供的驱动库

再玩剁手 发表于 2023-5-12 14:53:38

本帖最后由 再玩剁手 于 2023-5-15 13:31 编辑

8.04_subprogram目录下是汇川写的汇编代码,主要是计算atan,sqrt等数学函数。昊芯提供了直接调用IQmath的库函数,只不过需要做一些调整。直接删除掉ASMSubPrg.asm汇编源文件,修改SubPrg.c。
atan --- atan_hx
qsin --- qsin_hx
sqrt --- sqrt_hx
修改后,需要在工程中用到这三个函数的地方,改成_hx尾缀的函数。

在这个文件中,还有用到的PID函数,由于HX和TI的指令集,在处理溢出饱和操作的时候存在差异,没有SETOVM和CLROVM指令,需要手动替换成带饱和处理的指令,即sadd和ssub。需要替换PID()函数。

再玩剁手 发表于 2023-5-12 15:28:51

本帖最后由 再玩剁手 于 2023-5-12 15:59 编辑

9. RPT指令相关的代码替换。
asm(" RPT #7 || NOP");      
替换为
asm volatile (".align 2;RPTI 7,4;NOP");
其他的延时代码,需要根据需要调整延时数值。

10.注释掉f_osc.h中的typedef定义,包括uint8,int8,uint16,int16,int32,uint32,重复定义。

11.将DSP2803x的宏定义,统一修改DSC28035_ECB,该宏定义有IDE模板工程默认提供。

再玩剁手 发表于 2023-5-15 16:46:41

本帖最后由 再玩剁手 于 2023-5-15 17:34 编辑

12.mainInit_2803x.c文件中,copy_prg()函数,是不需要的,直接注释掉。同时,hx的芯片,如果有flash中的函数或者变量,需要在ram中执行或者放到ram中,由芯片初始化程序负责,客户不需要手动拷贝。
同时,昊芯没有提供#progma,具体修改可以参考迁移指南。
InitPieCtrl(),rsvd_ISR(),InitPieVectTable()这三个函数,在hx的驱动库中也有提供,可以直接注释掉,或者直接删除掉。
InitFlash(),Init_PLL,InitSysCtrl(),DisableDog(),InitPeripheralClocks()也注释掉,或者直接删除掉。

对于一些外设的初始化函数,InitEcap1Gpio(),InitEPwm4Gpio,InitEPwm5Gpio,InitEPwm6Gpio,InitI2CGpio,InitSciaGpio,InitSpiaGpio在变异的时候,会报重复定义,因为这些函数会跟板子设计有关,因此需要注释掉昊芯驱动库中的函数定义,保留本文件中的。

再玩剁手 发表于 2023-5-15 18:06:14

13.有几个跟芯片主频相关的数据定义,需要进行调整,主要是宏DSP_CLOCK120相关的。
gDeadBandTable[],gDeadCompTable[]。需要增加一个120M主频的分支。

再玩剁手 发表于 2023-5-15 18:08:13

14.在文件MotorCurrentTransform.c中,有个函数UVWToAlphBetaAxes定义成inline之后,会提示未定义,因此需要去掉inline。

再玩剁手 发表于 2023-5-15 18:59:25

15.对于f_funcCode_disp.c文件,需要设置在编译的时候不编译。处理以后,就可以完成编译了。
riscv32-haawking-elf-size --format=berkeley "MD500E_C_1.57_2020_IDE_V2.1.5.elf"
   text           data          bss          dec          hex        filename
191308             16          14342       205666          32362        MD500E_C_1.57_2020_IDE_V2.1.5.elf
页: [1] 2
查看完整版本: 汇川变频器MD500E迁移到HXS320F28034/035记录贴(长期更新中。。。)