打印
[电机控制专用MCU]

【APM32M3514电机通用评估板评测】开箱与更新程序+电机运转

[复制链接]
644|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、概述       周末收到开发板了,今天来分享一下。这款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驱动直流电机运转

硬件连线.jpg (3.77 MB )

硬件连线.jpg

使用特权

评论回复
沙发
寂静之回响| | 2025-1-20 16:13 | 只看该作者
运行的效果挺好

使用特权

评论回复
板凳
WhisperingTrees| | 2025-1-21 09:40 | 只看该作者
电机后面是霍尔吗

使用特权

评论回复
地板
rgjinxuan| | 2025-1-21 15:27 | 只看该作者
无感的没有霍尔吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1034

帖子

7

粉丝