19. 无刷电机无感FOC例程移植¶
在学习本章内容时,大家需要准备的文件有Renesas Motor Workbench软件、e2studio、RA6T2_MCILV1_SPM_LESS_FOC_E2S_V100.zip, 我们将使用RA6T2_MCILV1_SPM_LESS_FOC_E2S_V100.zip中的无感FOC例程程序,移植适配到野火RA6T2开发板、野火BLDC电机及电机驱动板, 通过野火RA6T2与Renesas Motor Workbench连接,去运行无感FOC程序。RA6T2_MCILV1_SPM_LESS_FOC_E2S_V100.zip中的无感FOC例程程序 可以在瑞萨官网中下载,也可以在野火资料包中下载。
19.1. 例程分析¶
本次实验中,使用的例程是RA6T2_MCILV1_SPM_LESS_FOC_E2S_V100, 此程序使用的是官方的RA6T2电机开发板以及配套的驱动板,本次实验的目的就是将其修改为使用野火RA6T2开发板、驱动板、电机。 在原始例程中,使用的是RTK0EMA270S00020BJ官方开发板,主要实现的功能是通过上位机去进行控制,同时也可以通过板上的拨杆控制。
我们移植的目标是,通过野火6T2开发板以及野火电机驱动板、野火电机可以实现FOC的控制, 可以通过板上的电位器、按键去进行控制电机。这里我们要注意的是,野火6T2开发板和官板,其区别主要是在 PWM输出引脚、按键引脚、LED引脚、晶振、电机控制板、电机上区别,我们移植重点也是要考虑这些内容。
该样例程序的软件架构分为应用层、中间层和底层,层间使用标准API函数调用,应用层和底层的代码是完全开放的, 方便用户移植和升级开发。中间层大部分代码也是开放的,仅有几个核心算法函数以 Lib 形式提供,如下所示:
19.2. 开始移植¶
在本次移植实验中,所使用的是野火6T2电机开发板,驱动板是野火无刷电机驱动板,使用野火BLDC无刷电机。 下面先去将例程文件打开,并将其导入e2studio中,就可以看到相关的代码了。
19.2.1. FSP库修改¶
19.2.1.1. 修改开发板型号¶
在左侧的 Project Explorer 中双击 configuration.xml 文件,打开 FSP 设置页面,可以看到 目前工程中所使用的模块和设置的参数。其中 BSP 部分是关于 FSP 版本、芯片和板子规格等基础信息的设置。 更改 Board 选项内容,由 MCK-RA6T2 更改为 Custom User Board。
修改完开发板型号以后,下一步我们需要去修改硬件层面。 主要需要修改的就是晶振频率、LED引脚、按键引脚、定时器引脚。 ADC由于使用的是虚拟通道,所以其修改主要是在Stack中,
19.2.1.2. 修改时钟频率¶
首先去修改晶振,更改 Clock 选项内容,可以看到,原始的XTAL外部晶振频率为10MHz, 但野火6T2使用的晶振是24MHz,这里需要去进行修改为24MHz,修改完以后,部分的时钟变红警告了, 这是因为PLL频率是通过XTAL倍频的,现在XTAL增大了,PLL频率也变大了。但RA6T2的最大频率, 是240MHz,这里超过了最大频率,所以需要修改倍频数值为*10,这样可以得到PLL为240MHz。
19.2.1.3. 修改硬件引脚¶
下面去进行引脚的更改,主要更改内容为按键引脚、LED引脚、定时器输出引脚、野火无刷驱动板使能引脚。 更改 Pin 选项内容,将PB14、PC02两个按键引脚设置为输入,然后设置PD01、PD03两个LED引脚输出高电平(默认灭)。 然后再去将野火无刷驱动板使能引脚PB15修改为输出低电平(默认失能),最后还需要修改的是定时器的输出引脚, 这里我们需要使用到的定时器有GPT4、GPT5、GPT6,打开Pin中的Timer:GPT界面,去修改定时器4、5、6的输出通道。 根据原理图,GPT4配置为PE10、PE13,GPT5配置为PE11、PE14,GPT6配置为PE12、PE15。
19.2.1.4. 修改Stack功能模块¶
在无感无刷FOC的Stack功能模块中,使用了非常多的子模块,相关子模块的功能, 都可以点击模块左下角的感叹号跳转到浏览器中进行查看。我们需要对这些Stack模块去修改属性参数。 首先我们从底层的ADC和PWM开始查看。
首先查看ADC和PWM的功能模块,点击 ADC and PWM Modulation 模块,并点击 Properties 选项卡, 就可以看到具体的内容了,在这里,我们首先需要修改的是PWM输出通道,将其全部修改为6T2的正确输出通道, 下一步,需要去配置ADC的采集通道,这里需要主要的就是UVW三相的电流采集通道、以及主线电压的采集通道, 需要去查看原理图,修改为正确的ADC通道,这里UVW三相的电流采集通道分别是6、8、10,主线电压通道是1。
在野火电机驱动板的电流检测中,根据驱动板硬件设计,电机相电流采用差分输入模式,采样电阻是 20 毫欧, 放大倍数为 8,偏置电压是 1.24V,芯片 VDC 采样电压范围 0—-3.3V。与瑞萨官方样例硬件方案设计参数不同。 所以在这里,我们需要去修改FSP对应的电流采样范围系数和偏置基准电压两个参数。 需要将Current Range (A)修改为20.625,Offset of A/D conversion for current修改为0x603。
在野火电机驱动板的电压电压检测中,根据驱动板硬件设计,VDC采用分压和偏置方案, 经计算,需更改 FSP 对应的电压采样范围系数,在这里需要将Voltage Range (V)修改为122.1。
需要注意的是因为野火方案在电压采样中采用了偏置电压的设计,而瑞萨样例方案没有电压采样的偏 置,所以 FSP 没有这个偏置的设置位置,则需在代码中增加对偏置电压的处理。为了方便修改, 我们需要先生成一次代码,生成完成后,在路径 rafspsrcrm_motor_driver 下找到 文件 rm_motor_driver.c,在 rm_motor_driver_current_get 函数约 695 行中屏蔽原来的 f_vdc_ad 采样语句,替换为加入偏置处理的语句,如上图所示。
下面,回到 FSP stack 设置界面,继续配置ADC,选中 g_adc0 ADC Driver on r_adc_b 模块, 去修改ADC的采集通道和采集组,这里我们将virtual Channel的0-1设置成1、15,分别是电源电压检测, 电位器电压检测,将Scan Group分组修改为1。还需要将Channel的2-4修改为为6、8、10,分别是三相电流检测, 将Scan Group分组修改为0。然后修改Scan Group,Scan Group 0 对应ADC1,Scan Group 1对应ADC0。
在ADC这里还有一点需要注意的是,就是ADC的触发,是由GPT4去触发的,但由于官板和野火RA6T2的方案一致, 所以不需要修改。
下面再去修改PWM相关的内容,由于官板和野火RA6T2使用的定时器都是一样的,只是在定时器的输出通道不一致, 所以只需要修改定时器输出通道,输出通道在前面内容引脚修改中以及修改完毕,所以这里我们看见的是以及修改好的, 不需要在进行额外修改。
下面还需要去修改调试方式,在Stack中我们可以看到设定调试方式为 SVPWM,但实际工程并未设置成功, 需要去修改代码,在路径 rafspsrcrm_motor_driver 下,将 rm_motor_driver.c 57 行宏定义更改为 SVPWM 方式。
以上是关于ADC和PWM相关的设置修改,在Stack中,其实还有一些设置是关于电机的参数,且多个Stack都存在, 为了修改方便,在代码中,可以看到在路径src/application/main下,有r_mtr_motor_parameter.h电机参数文件, 以及r_mtr_control_parameter.h控制参数文件,我们只需在这里继续修改就可以了。
19.2.1.5. 代码修改¶
在代码方面,首先来修改电机参数、控制参数的头文件,在src/application/main下,打开r_mtr_motor_parameter.h 可以看到电机的一些信息,如电机极对数、电阻、直轴电感、q轴电感、额定电流等,这些参数在BLDC电机的参数文件中都有, 只需要对应文件修改参数就可以了。
下面还需要去修改按键、LED、电位器的相关代码,在路径srcapplication main下,找到文件 mtr_main.h, 这里定义了按键、LED、电位器、按键状态的代码,需要去调整为正确的引脚。由于板子只有两个LED,所以屏蔽LED3。
修改完mtr_main.h以后,还需要修改mtr_main.c,是由这里调用的按键、LED。 由于没有使用LED3,所以需要把相关函数屏蔽。
由于官板的电机驱动板,是不需要失能引脚的,但野火6T2的驱动板,多了一个驱动, 所以在使用电机的时候,我们需要进行失能、使能操作。 首先需要在mtr_main.h中去新增电机使能的宏定义
1 2 | #define MOTOR1_ENABLE R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_11_PIN_15, BSP_IO_LEVEL_HIGH)
#define MOTOR1_DISABLE R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_11_PIN_15, BSP_IO_LEVEL_LOW)
|
下面需要去在调用电机启动停止的部分增加电机使能、使能的相关代码, 在mtr_main.c的board_ui()函数和ics_ui()函数中,调用了电机,使用我们要去增加使能代码。
由于官板和上位机的连接是使用了瑞萨通信板,而野火6T2是使用CH340 usb转串口芯片, 使用之前设置的波特率是不能使用的,需要进行修改。串口初始化的代码在mtr_main.c文件 大约133行位置,默认的波特率比较高,这里把他设置为128000,方便计算。下面是波特率的计算公式 使用128000的话,speed的数值大约是155。
1 | Rate = (SCI Clock / (6 x (speed + 1)))[Mbps]
|
这里还有一点需要注意的是,在工程文件路径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 会识别不到端口号(即使波特率正确)。
19.3. 测试¶
配置好串口以后,工程也已经修改完毕,现在可以将无刷电机驱动板接入野火RA6T2的无刷接口1, 电机驱动板连接上野火BLDC电机,连接好三相线、霍尔线,再给驱动板接上24V的直流电源,下面就可以开始测试。
在连接好电机和开发板以后,接上开发板电源和驱动板电源,给开发板下载程序, 下载完成后复位运行,此时按下KEY1(一直按着),无刷电机就开始运行了, 同时旋转电位器,可以调整电机的速度和方向。这是裸板测试。
同时,开发板可以通过串口,去连接Renesas_Motor_Workbench软件去进行调试, 首先需要打开Renesas_Motor_Workbench软件,去加载RMT和MAP文件,文件放在 RA6T2_MCILV1_SPM_LESS_FOC_E2S_V110 srcapplicationuser_interfaceics 文件内, 文件名为:RA6T2_MCILV1_SPM_LESS_FOC_E2S_V110.rmt、RA6T2_MCILV1_SPM_LESS_FOC_E2S_V110_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 按钮,电机可以启动