无刷电机霍尔FOC移植例程¶
在上一个内容,讲解了无刷电机无感FOC的移植,无感FOC的移植和霍尔FOC的移植是非常相似的, 但是霍尔FOC多了一个霍尔模块需要移植,其他内容都是一样的。在本章内容开始前,大家需要准 备的相关文件有Renesas Motor Workbench软件、e2studio、RA6T2_MCILV1_SPM_hal_FOC_E2S_V110.zip文件。 我们将使用RA6T2_MCILV1_SPM_hal_FOC_E2S_V110.zip中的霍尔FOC例程程序,移植适配到野火RA6T2开发板、 野火BLDC电机及电机驱动板,通过野火RA6T2与Renesas Motor Workbench连接,去运行霍尔FOC程序。 RA6T2_MCILV1_SPM_hal_FOC_E2S_V110.zip中的无感FOC例程程序可以在瑞萨官网中下载,也可以在野火资料包中下载。
例程分析¶
本次实验中,使用的例程是RA6T2_MCILV1_SPM_hal_FOC_E2S_V110, 此程序使用的是官方的RA6T2电机开发板以及配套的驱动板,本次实验的目的就是将其修改为使用野火RA6T2开发板、驱动板、电机。 在原始例程中,使用的是RTK0EMA270S00020BJ官方开发板,主要实现的功能是通过上位机去进行控制,同时也可以通过板上的拨杆控制。
我们移植的目标是,通过野火6T2开发板以及野火电机驱动板、野火电机可以实现FOC的控制, 可以通过板上的电位器、按键去进行控制电机。这里我们要注意的是,野火6T2开发板和官板,其区别主要是在 PWM输出引脚、按键引脚、LED引脚、晶振、电机控制板、电机上区别,我们移植重点也是要考虑这些内容。
该样例程序的软件架构分为应用层、中间层和底层,层间使用标准API函数调用,应用层和底层的代码是完全开放的, 方便用户移植和升级开发。中间层大部分代码也是开放的,仅有几个核心算法函数以 Lib 形式提供,如下所示:
开始移植¶
霍尔FOC的例程和无感FOC的例程,在移植的步骤中都是非常相似的,在硬件层面、软件层面的修改都相似, 在学习本章内容之前,需要去学习无感FOC的例程。
FSP库修改¶
无感FOC的Stack配置模块
有感FOC的Stack配置模块
对比无感和有感的Stack配置模块,可以发现,两者的大部分内容是一直的, 但是在电机角度和速度计算,两者的模块是不一致的。在霍尔FOC的移植实验中, 在FSP库的配置方面,除了电机角度和速度计算模块(Motor Angle and Speed)不一致, 其余的配置内容,都是参照上一节课的移植内容,这里就不再重复讲解。所以我们重点看霍尔的配置。
在霍尔Stack模块配置中,主要需要修改的配置有霍尔输入引脚,霍尔换向的逻辑、以及转子角度修正参数。 在野火RA6T2中,霍尔引脚使用的是PB06、PB07、PA10,所以需要去配置引脚为中断输入模式,再配置霍尔Stack模块 中UVW霍尔输入对应的引脚号。然后是霍尔的换向逻辑,这个参数可以由电机换向表计算得出。
完成霍尔Stack内容配置以及霍尔引脚配置以后,关于FSP库的其余内容,都和上一章无感FOC的FSP库配置一样, 这里就不再重复讲解。
代码修改¶
在代码方面,无感和有感的FOC需要修改的内容,基本是一致的。 首先是在rm_motor_driver.c中ADC总线电压的偏置需要进行修改,
然后是在mtr_main.h文件中,需要对按键逻辑、按键引脚、LED引脚、 电位器引脚、增加电机使能宏定义进行修改。
在mtr_main.c文件中需要在board_ui、ics_ui两个函数里面调用电机工作的部分进行电机的使能失能, 由于板子上没有LED3,所以需要把LED的相关代码进行屏蔽。
在mtr_main.c文件中,还需要去修改串口的波特率为128000.
在r_mtr_motor_parameter.h文件中,需要去修改电机的参数。
以上的代码修改,都是与无感FOC的内容基本是一致的,这里就不继续详细的讲解。
这里还有一点需要注意的是,在工程文件路径srcapplicationuser_interfaceics下,加 入ICS2_RA6T2_Built_in.o 和 ICS2_RA6T2.h(如已存在文件,忽略此步骤)。然后还需要 点击工程右键属性项,选择 C/C++ Build->setting->GNU Arm Cross Linker->Miscellaneous->Other objects, 点击红色叉形图标将原来的 lib 目标文件删掉;再点击绿色加号图标,通过点击 Workspace 按钮, 替换为刚才加入的 ICS2_RA6T2_Built_in.o文件。如果少了这一步的话,Renesas_Motor_Workbench 会识别不到端口号(即使波特率正确)。
到这里,本次移植就已经完成。
测试¶
配置好串口以后,工程也已经修改完毕,现在可以将无刷电机驱动板接入野火RA6T2的无刷接口1, 电机驱动板连接上野火BLDC电机,连接好三相线、霍尔线,再给驱动板接上24V的直流电源,下面就可以开始测试。
在连接好电机和开发板以后,接上开发板电源和驱动板电源,给开发板下载程序, 下载完成后复位运行,此时按下KEY1(一直按着),无刷电机就开始运行了, 同时旋转电位器,可以调整电机的速度和方向。这是裸板测试。
同时,开发板可以通过串口,去连接Renesas_Motor_Workbench软件去进行调试, 首先需要打开Renesas_Motor_Workbench软件,去加载RMT和MAP文件,文件放在 srcapplicationuser_interfaceics 文件内, 文件名为:RA6T2_MCILV1_SPM_HALL_FOC_E2S_V110.rmt、RA6T2_MCILV1_SPM_HALL_FOC_E2S_V110_Ver090_conv.map。 然后点击弹出对话框的 set 按钮。
加载完文件以后,需要去修改软件的波特率,点击上面 Option 按钮, 选择 Baudrate Dialog 设置,将波特率改为 128000 后关闭。
设置好波特率以后,就可以去连接COM口,复位开发板,选择正确的COM, 他会弹出Easy和Analyzer窗口以及一些信息。Easy是简单的控制画面, Analyzer是分析界面。
点击Easy,就到了控制界面,可以看到,目前的状态是Ready,如果需要控制的话, 需要RMW UI使能,然后点击开始,拖动速度条,就可以控制了。RMW UI使能的原因 是在mtr_main.h,使能的是BOARD_UI模式。如果mtr_main.h使能的是ICS_UI模式, 就可以忽略这一步。
然后是Analyzer界面,在这里可以去读取全局变量的值,也可以写入变量值去控制电机。 工程里全局变量都可以列在此处进行交互。Data Type 这一栏是数据类型,Read是读出实时的数据, Write 是预期要写入的数据。当按下上方 Read 和 Write按钮时,可读出或者写入数据。
将控制窗口右边进度条拉到最低,可以看到变量 g_u2_chk_error 变量值为 128,这是系统 故障代码。128 意为欠压,是因为刚才芯片工作的时候,24V 电源并没有上电造成的。 如果错误值是18的话,就是在打开Renesas_Motor_Workbench软件时没有去加载RMF、MAP文件,没有设置变量。
此时将控制窗口右边进度条拉到最高
com_u1_mode_system 值 Write 这一列写入 3(系统复位命令)
W?这一列本行挑勾
设置 com_u1_enalbe_write 值和 g_u1_enable_write 值相同(系统写入保护设置,根据途中情况,可在 com_u1_enalbe_write 中写入 1)
W?这一列本行挑勾。
完成后,点击坐上 Write 按钮,故障变量可清 0。
完成上面操作后,继续进行如下操作。
com_u1_mode_system 值 Write 这一列写入 1(启动命令)
com_f4_ref_speed_rpm 值设置为 1000(速度命令值)
设置 com_u1_enalbe_write 值和 g_u1_enable_write 值相同
勾选 W?相应位置
完成后,点击左上 Write 按钮,电机可以启动
