北京中科昊芯科技有限公司

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2164|回复: 11

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

[复制链接]

14

主题

16

回帖

131

积分

注册会员

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






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



14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 2023-5-12 10:38:37 | 显示全部楼层
本帖最后由 再玩剁手 于 2023-5-12 14:15 编辑

MD500E原始工程的根目录结构如下
  1. --MD500E
  2. ----01_system
  3. ----02_motor
  4. ----03_function
  5. ----04_subprogram
  6. ----05_public
  7. ----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,节省中断服务程序的指令数。

1

主题

5

回帖

117

积分

注册会员

积分
117
发表于 2023-5-12 10:47:21 | 显示全部楼层
跟随楼主学习

14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 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提供的驱动库

14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 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()函数。

14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 2023-5-12 15:28:51 | 显示全部楼层
本帖最后由 再玩剁手 于 2023-5-12 15:59 编辑

9. RPT指令相关的代码替换。
  1. asm(" RPT #7 || NOP");        
复制代码

替换为
  1. asm volatile (".align 2;RPTI 7,4;NOP");
复制代码

其他的延时代码,需要根据需要调整延时数值。

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

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

14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 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在变异的时候,会报重复定义,因为这些函数会跟板子设计有关,因此需要注释掉昊芯驱动库中的函数定义,保留本文件中的。

14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 2023-5-15 18:06:14 | 显示全部楼层
13.有几个跟芯片主频相关的数据定义,需要进行调整,主要是宏DSP_CLOCK120相关的。
gDeadBandTable[],gDeadCompTable[]。需要增加一个120M主频的分支。

14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 2023-5-15 18:08:13 | 显示全部楼层
14.在文件MotorCurrentTransform.c中,有个函数UVWToAlphBetaAxes定义成inline之后,会提示未定义,因此需要去掉inline。

14

主题

16

回帖

131

积分

注册会员

积分
131
 楼主| 发表于 2023-5-15 18:59:25 | 显示全部楼层
15.对于f_funcCode_disp.c文件,需要设置在编译的时候不编译。处理以后,就可以完成编译了。
  1. riscv32-haawking-elf-size --format=berkeley "MD500E_C_1.57_2020_IDE_V2.1.5.elf"
  2.    text           data            bss            dec            hex        filename
  3. 191308             16          14342         205666          32362        MD500E_C_1.57_2020_IDE_V2.1.5.elf
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|北京中科昊芯科技有限公司 ( 京ICP备19023330号-3 )

GMT+8, 2024-4-20 07:56 , Processed in 0.200205 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表