一、概述 周末收到开发板了,今天来分享一下。这款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, 下载次数: 9)
使用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驱动直流电机运转
|