一、概述 周末收到开发板了,今天来分享一下。这款APM32M3514电机通用评估板是极海半导体针对电机应用推出比较新的设计方案。设计了双电阻采样矢量控制方案,使用了闭环的滑模观测器估算方案。设计的参考规格如下:
APM32M3514是一款基于Arm Cortex M 0+内核,集成FOC算法中常用的数**算加速器(CordicCordic,SvpwmSvpwm,硬件除法器等),并且集成了运放、比较器等模拟外设,内置6N 200V预驱,以及CAN控制器的高性能电机控制专用MCU。
二、开箱
开发板一如既往的采用极海精美的纸盒封装,防静电袋包装,咱们废话不多说,直接上图吧。
由上面的几张开箱图,简单评述一下。该板的整体插座接口并不像其它电机板一样,没有超出PCB尺寸范围,这样显得更紧凑。板子的四面都有插座接口,分布均匀,标记丝印简洁明了,背面没有设计其它电子元器件,走线、过孔清晰,设计规范。
三、上电检测
为了第一时间检测板子有无硬件问题,需要给板子上电简单测试一下。
A、如果没有连接电机供电接口(即P1端子),只是使用Type-C数据线给板子上电,板上LED都没亮。若Type-C数据线另一端连接电脑,则会听到插入的提示音。
B、使用杜邦线连接J6的debug调试接口,此时才会发现板上的LED正常点亮,并且绿灯闪烁。
C、根据FOC直流电机的线束标注,将自购的FOC直流电机连接到开发板中,并连接24V开关电源,然而通过操作板上的旋钮电位器,并没成功启动直流电机。
这样操作一番,只能直观得看到板上的LED灯被点亮,说明出厂默认程序只是点灯例程?需要用户自行更新FOC电机驱动程序。
四、环境搭建
由于SDK官方对外并不完全开源,有需要的网友可通过网页申请获取。提供的工程是基于MDK的,因此需要第一时间安装Keil的pack支持包。
Geehy.APM32M35XX_DFP.1.0.0.zip
(1.22 MB)
使用Keil5(version:5.38.0.0)打开“APM32M3514_FOC_V1.0”工程,默认参数下,暂且不做修改,全编译ok。默认参数为:
#ifndef __PARAMETER_H_
#define __PARAMETER_H_
/*System setting*/
#define SYS_REFV 3.3f // unit:v MCU VCC must be 5.0V or 3.3V
#define SYSCLK_HSE_72MHz 72000000 // unit:Hz MCU 主频
#define PWMFREQ 16000 // unit:Hz 载波频率
#define PWM_PERIOD (SYSCLK_HSE_72MHz/PWMFREQ/2)
#define DEAD_TIME (1.0f * SYSCLK_HSE_72MHz/1000000) // unit:us 死区时间
#define SLOWLOOP_FREQ 1000 // unit:Hz 慢环频率
/*Board parameter setting*/
/*Current相电流采样设置*/
#define ADC_REFV SYS_REFV
#define R_SHUNT (0.02f) // unit:ohm 相电流采样电阻
#define CURRENT_OPA_GAIN (4.86f) // unit:ohm 运放放大倍数,使用2K/10K电阻组合,结合内部耦合电阻计算得出
/*偏置1.6V,I_MAX=1.6/Gain/Rs */
/* I/Ibase *Rs*OP_Gain = (V-Voffset)/32768 * 3.3 右侧为实际电压值
IGAIN = 3.3/OP_Gain/Rs/Ibase 偏置已经被去除
*/
#define I_MAX (16.46f) // unit:A 最大相电流,此作为电流基准
#define IGAIN_Q10 (2113)
/*Voltage母线电压采样设置*/
#define UDC_MAX (69.3f) // unit:V Max DC Voltage of Hardware
#define DCBUS_OVER Q15(48.0f/UDC_MAX) //pu unit:V
#define DCBUS_UNDER Q15(20.0f/UDC_MAX) //pu unit:V
/*Vsp旋钮电压采样设置*/
#define VSP_MIN_VOL 0.5f // unit:V 旋钮最低有效电压
#define VSP_MAX_VOL 2.5f // unit:V 旋钮最高有效电压
#define VSP_MIN_AD Q15(VSP_MIN_VOL/ADC_REFV)
#define VSP_MAX_AD Q15(VSP_MAX_VOL/ADC_REFV)
/*转速控制设置*/
#define MIN_RPM 50 // unit:RPM 最低转速
#define MAX_RPM 3000 // unit:RPM 最高转速
/*软件过流保护*/
#define OC_VALUE Q15(5.0f/I_MAX) //pu unit:A 相电流软件过流保护设置值
/*速度环最大输出限制设定*/
#define SPD_PI_LIMIT (4.6f) // unit:A 速度环PI最大输出电流
#define SPD_PI_MAX Q15(SPD_PI_LIMIT/I_MAX) //pu unit:A
/*偏置电压保护设置*/
#define BIAS_OVER Q15(1.70f / SYS_REFV)
#define BIAS_UNDER Q15(1.55f / SYS_REFV)
/*fault滤波过渡时间设置*/
#define OC_TIME 10 // unit:times pwm cycles
#define UV_TIME 10 // unit:times pwm cycles
#define OV_TIME 10 // unit:times pwm cycles
#define OS_TIME 10 // unit:times pwm cycles
#define PLLERR_TIME 10 // unit:times pwm cycles
/*状态机相关设定*/
#define SPEED_TO_THETA Q15(2*SPEED_CALIBRATION*POLEPAIRS/60.0f/PWMFREQ) //2*5000*2�Լ�/60/8000 Spd转速转换到Theta角度的换算系数
/*状态切换转速阈值*/
#define STOP_TO_RUN_SPEED Q15(200.0f/SPEED_CALIBRATION) //pu unit:RPM if speed command higher this, Switch from Stop to Run state
#define OBS_MINIMUM_SPEED_RPM 300.0f //unit:RPM 开环切闭环转速设定
#define STARTUP_TO_SPIN_SPEED Q15(OBS_MINIMUM_SPEED_RPM/SPEED_CALIBRATION) //pu unit:RPM if actual speed higher this, Switch from Startup to Spin state
#define FREEWHEEL_SPEED Q15(200.0f/SPEED_CALIBRATION) //pu unit:RPM if speed command lower this, Switch to Freewheel state
/*PreCharge stage预充电*/
#define PRECHARGE_TIME 16 // unit:times pwm cycles precharge time setup
/*Align state*/
#define CUR_ALIGN Q15(0.5f/I_MAX) //pu unit:A 定位电流大小
#define CUR_DEC Q15(0.5f/I_MAX) //pu A/s : 定位电流斜坡减速度
#define CUR_INC Q15(0.5f/I_MAX) //pu A/s : 定位电流斜坡加速度
/*Startup state*/
#define CUR_STARTUP Q15(0.5f/I_MAX) //pu unit:A 开环电流大小
/*Transition State*/
#define TRANSIT_CUR_DEC Q15(3.0f/I_MAX) //pu A/s : 过渡电流斜坡减速度
#define TRANSIT_CUR_INC Q15(3.0f/I_MAX) //pu A/s : 过渡电流斜坡加速度
/*Startup开环运行状态*/
#define STARTUP_SPD_INC 500.0f // unit:RPM/s 开环运行加速度
/*run state */
#define SPIN_SPD_INC 1000.0f // unit:RPM/s 闭环运行加速度
#define SPD_DEC 1000.0f // unit:RPM/s 运行减速度
/*freewheel state */
#define FREEWHEEL_TIME 1.0f // unit:s 自由停机等待时间
/*fault state*/
#define FAULTRELEASE_TIME 3.0f // unit:s 异常停机等待时间
/*motor releated paremeter setting*/
/* Motor parameter */
#define Rs 0.15f // unit:ohm 电阻
#define Ls 0.00037f // unit:H 电感
#define POLEPAIRS 2.0f // unit:p 极对数
#define SPEED_CALIBRATION (5000.0f) // unit:rpm 转速标定
#define MAX_SPEED (MAX_RPM) // unit:rpm 电机额定转速
#define OVER_SPEED_VALUE Q15(3500.0f/SPEED_CALIBRATION)//pu unit:rpm 超速保护设定阈值
/*限制条件设定*/
#define MAX_DUTY (0.95f) // 百分比 最大调制占空比
/*电流环PI参数设定*/
#define CUR_PI_Q (15) // 15 or 10, can't select others, 15:Q15 format KP&KI, 10:Q10 format KP&KI
#define M1_IQ_KP (4000) // Q15 format KP of Q-axis Current loop
#define M1_IQ_KI (400) // Q15 format KI of Q-axis Current loop
#define M1_ID_KP (4000) // Q15 format KP of D-axis Current loop
#define M1_ID_KI (400) // Q15 format KI of D-axis Current loop
/*速度环PI参数设定*/
#define SPD_PI_Q (15) // 15 or 10, can't select others, 15:Q15 format KP&KI, 10:Q10 format KP&KI
#define M1_SPEED_KP (16384) // Q15 format KP of speed loop
#define M1_SPEED_KI (163) // Q15 format KI of speed loop
/*PLL锁相环PI参数设定*/
#define PLL_PI_Q (10) // 15 or 10, can't select others, 15:Q15 format KP&KI, 10:Q10 format KP&KI
#define M1_PLL_KP (2560) // KP of PLL
#define M1_PLL_KI (5) // KI of PLL
/*SMO滑模参数设定*/
#define SMO_ERR_MAX Q15(0.75f) // Max value of SMO error
#define SLIDE_GIAN Q15(0.5f) // Kslide gain value
#define SMO_FIFO_DEPTH 64 // 队列深度,默认设定为64
#define SPEED_BAND_UPPER_LIMIT 17 /*!<目前默认基准为16,此处为上限值设定,设置为开环切闭环转速的上限值,17/16 */
#define SPEED_BAND_LOWER_LIMIT 15 /*!<目前默认基准为16,此处为下限值设定,设置为开环切闭环转速的下限值,15/16 */
#define OBS_MINIMUM_SPEED_UNIT Q15(OBS_MINIMUM_SPEED_RPM/SPEED_CALIBRATION) //pu unit:RPM 最低观测转速切换节点
#define NB_CONSECUTIVE_TESTS 2 //unit:times pwm cycles 连续符合切换点要求
#define VARIANCE_THRESHOLD 0.03f /*!<观测速度平稳的最大可接受方差(百分比) */
#define PERCENTAGE_FACTOR_Q7 (uint16_t)(VARIANCE_THRESHOLD*128u)
/*切换过渡方式选择*/
#define SOFT_SWITCH_SPIN 1 //1:使能软切过渡 0:使能直接过渡
/*转速给定设定方式选择*/
#define SPD_SOFT_OR_KNOB 1 //0:使用软件下发转速 1:使用旋钮控制转速
/*功率转换系数*/
#define PWR_CONVERSION_FACTOR ((uint32_t)(1.732f*I_MAX*UDC_MAX))
#define STALL_ENABLE 0
#define MOTOR_VOLTAGE_CONSTANT (0.496f) /*!< Volts/kRPM */
#define SPD_TO_VOLTAGE_BEMF_GAIN (MOTOR_VOLTAGE_CONSTANT * SPEED_CALIBRATION / UDC_MAX /1000.0f)
#define SPD_TO_VOLTAGE_BEMF_GAIN_Q15 Q15(SPD_TO_VOLTAGE_BEMF_GAIN)
/*堵转检测功能相关参数*/
#define STALL_ERROR_THRESHOLD 10 //unit:ms
#define STALL_CHECK_SPD_CYCLE 10 //unit:ms 主要与加减速有关,类似设定4000RPM/s * 10ms = 40RPM 一般确保至少有10RPM以上的限制阈值
#endif
五、工程编译下载
工程编译完成后,笔者这里使用的调试器为JLink,因此Debug选择"J-LINK / J-TRACE Cortex",然后选择Arm-Cortex M0+内核即可识别到JLink。
接下来要选择下载算法,如果Keil没有自动加载进来的,选择在Keil安装的目录下手动添加配置文件到Flash文件夹下,这里不再赘述。这样Keil识别到下载算法配置文件后,需确认下载应用程序的首地址。否则会报如下错误。
这里的下载地址应该为0x08000000H,不是则需手动改为0x08000000。
六、控制电机运行效果
FOC程序更新到板子后,扭动电位器,则可控制电机的高速旋转与减速、停止。详情如见下面视频,此次开箱检测分享到此结束,感谢各位来访!
极海APM32M3514驱动直流电机运转
|