返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[电机控制专用MCU] 【APM32M3514电机通用评估板评测】开箱与更新程序+电机运转

[复制链接]
1764|3
 楼主| yinwuqing110 发表于 2025-1-19 19:56 | 显示全部楼层 |阅读模式
一、概述       周末收到开发板了,今天来分享一下。这款APM32M3514电机通用评估板是极海半导体针对电机应用推出比较新的设计方案。设计了双电阻采样矢量控制方案,使用了闭环的滑模观测器估算方案。设计的参考规格如下:

设计规格.png
        APM32M3514是一款基于Arm Cortex M 0+内核,集成FOC算法中常用的数**算加速器(CordicCordic,SvpwmSvpwm,硬件除法器等),并且集成了运放、比较器等模拟外设,内置6N 200V预驱,以及CAN控制器的高性能电机控制专用MCU。
二、开箱
      开发板一如既往的采用极海精美的纸盒封装,防静电袋包装,咱们废话不多说,直接上图吧。
防静电袋包装.jpg
正面.jpg
背面.jpg
       由上面的几张开箱图,简单评述一下。该板的整体插座接口并不像其它电机板一样,没有超出PCB尺寸范围,这样显得更紧凑。板子的四面都有插座接口,分布均匀,标记丝印简洁明了,背面没有设计其它电子元器件,走线、过孔清晰,设计规范。
三、上电检测
   为了第一时间检测板子有无硬件问题,需要给板子上电简单测试一下。
       A、如果没有连接电机供电接口(即P1端子),只是使用Type-C数据线给板子上电,板上LED都没亮。若Type-C数据线另一端连接电脑,则会听到插入的提示音。
       B、使用杜邦线连接J6的debug调试接口,此时才会发现板上的LED正常点亮,并且绿灯闪烁。
       C、根据FOC直流电机的线束标注,将自购的FOC直流电机连接到开发板中,并连接24V开关电源,然而通过操作板上的旋钮电位器,并没成功启动直流电机。
FOC电机的UWV相.jpg
FOC电机Hall接口.jpg
       这样操作一番,只能直观得看到板上的LED灯被点亮,说明出厂默认程序只是点灯例程?需要用户自行更新FOC电机驱动程序。
上电测试.jpg
四、环境搭建
      由于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。默认参数为:
  1. #ifndef __PARAMETER_H_
  2. #define __PARAMETER_H_

  3. /*System setting*/
  4. #define SYS_REFV                                    3.3f       //  unit:v      MCU VCC must be 5.0V or 3.3V         
  5. #define SYSCLK_HSE_72MHz                            72000000   //  unit:Hz     MCU 主频

  6. #define PWMFREQ                                     16000      //  unit:Hz  载波频率
  7. #define PWM_PERIOD                                  (SYSCLK_HSE_72MHz/PWMFREQ/2)
  8. #define DEAD_TIME                                   (1.0f * SYSCLK_HSE_72MHz/1000000)      //  unit:us  死区时间
  9. #define SLOWLOOP_FREQ                               1000       //  unit:Hz  慢环频率

  10. /*Board parameter setting*/
  11. /*Current相电流采样设置*/
  12. #define ADC_REFV                                    SYS_REFV
  13. #define R_SHUNT                                     (0.02f)    //  unit:ohm     相电流采样电阻
  14. #define CURRENT_OPA_GAIN                            (4.86f)    //  unit:ohm     运放放大倍数,使用2K/10K电阻组合,结合内部耦合电阻计算得出
  15. /*偏置1.6V,I_MAX=1.6/Gain/Rs */
  16. /*  I/Ibase *Rs*OP_Gain = (V-Voffset)/32768 * 3.3     右侧为实际电压值
  17.     IGAIN = 3.3/OP_Gain/Rs/Ibase                      偏置已经被去除
  18. */
  19. #define I_MAX                                       (16.46f)   //  unit:A       最大相电流,此作为电流基准
  20. #define IGAIN_Q10                                   (2113)

  21. /*Voltage母线电压采样设置*/
  22. #define UDC_MAX                                     (69.3f)     //  unit:V      Max DC Voltage of Hardware
  23. #define DCBUS_OVER                                  Q15(48.0f/UDC_MAX)     //pu unit:V
  24. #define DCBUS_UNDER                                 Q15(20.0f/UDC_MAX)     //pu unit:V
  25. /*Vsp旋钮电压采样设置*/
  26. #define VSP_MIN_VOL                                 0.5f        // unit:V 旋钮最低有效电压
  27. #define VSP_MAX_VOL                                 2.5f        // unit:V 旋钮最高有效电压
  28. #define VSP_MIN_AD                                  Q15(VSP_MIN_VOL/ADC_REFV)
  29. #define VSP_MAX_AD                                  Q15(VSP_MAX_VOL/ADC_REFV)
  30. /*转速控制设置*/
  31. #define MIN_RPM                                     50          // unit:RPM 最低转速
  32. #define MAX_RPM                                     3000        // unit:RPM 最高转速


  33. /*软件过流保护*/
  34. #define OC_VALUE                                    Q15(5.0f/I_MAX)   //pu unit:A 相电流软件过流保护设置值
  35. /*速度环最大输出限制设定*/
  36. #define SPD_PI_LIMIT                                (4.6f)                  //  unit:A 速度环PI最大输出电流
  37. #define SPD_PI_MAX                                  Q15(SPD_PI_LIMIT/I_MAX) //pu unit:A
  38. /*偏置电压保护设置*/
  39. #define BIAS_OVER                                   Q15(1.70f / SYS_REFV)
  40. #define BIAS_UNDER                                  Q15(1.55f / SYS_REFV)
  41. /*fault滤波过渡时间设置*/
  42. #define OC_TIME                                     10      // unit:times pwm cycles
  43. #define UV_TIME                                     10      // unit:times pwm cycles
  44. #define OV_TIME                                     10      // unit:times pwm cycles
  45. #define OS_TIME                                     10      // unit:times pwm cycles
  46. #define PLLERR_TIME                                 10      // unit:times pwm cycles
  47. /*状态机相关设定*/  
  48. #define SPEED_TO_THETA                              Q15(2*SPEED_CALIBRATION*POLEPAIRS/60.0f/PWMFREQ) //2*5000*2�Լ�/60/8000 Spd转速转换到Theta角度的换算系数
  49. /*状态切换转速阈值*/
  50. #define STOP_TO_RUN_SPEED                           Q15(200.0f/SPEED_CALIBRATION)                   //pu unit:RPM      if speed command higher this, Switch from Stop to Run state
  51. #define OBS_MINIMUM_SPEED_RPM                       300.0f                                          //unit:RPM          开环切闭环转速设定
  52. #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
  53. #define FREEWHEEL_SPEED                             Q15(200.0f/SPEED_CALIBRATION)                   //pu unit:RPM      if speed command lower this,  Switch to Freewheel state

  54. /*PreCharge stage预充电*/
  55. #define PRECHARGE_TIME                              16                      //  unit:times pwm cycles  precharge time setup
  56. /*Align state*/
  57. #define CUR_ALIGN                                   Q15(0.5f/I_MAX)         //pu unit:A 定位电流大小
  58. #define CUR_DEC                                     Q15(0.5f/I_MAX)         //pu A/s : 定位电流斜坡减速度
  59. #define CUR_INC                                     Q15(0.5f/I_MAX)         //pu A/s : 定位电流斜坡加速度
  60. /*Startup state*/
  61. #define CUR_STARTUP                                 Q15(0.5f/I_MAX)         //pu unit:A 开环电流大小
  62. /*Transition State*/
  63. #define TRANSIT_CUR_DEC                             Q15(3.0f/I_MAX)         //pu A/s : 过渡电流斜坡减速度
  64. #define TRANSIT_CUR_INC                             Q15(3.0f/I_MAX)         //pu A/s : 过渡电流斜坡加速度

  65. /*Startup开环运行状态*/
  66. #define STARTUP_SPD_INC                             500.0f                  //  unit:RPM/s  开环运行加速度
  67. /*run state */
  68. #define SPIN_SPD_INC                                1000.0f                 //  unit:RPM/s 闭环运行加速度
  69. #define SPD_DEC                                     1000.0f                 //  unit:RPM/s 运行减速度
  70. /*freewheel state */
  71. #define FREEWHEEL_TIME                              1.0f                   //  unit:s 自由停机等待时间
  72. /*fault state*/
  73. #define FAULTRELEASE_TIME                           3.0f                   //  unit:s 异常停机等待时间

  74. /*motor releated paremeter setting*/
  75. /*  Motor parameter     */
  76. #define Rs                                          0.15f                   //  unit:ohm    电阻
  77. #define Ls                                          0.00037f                //  unit:H      电感
  78. #define POLEPAIRS                                   2.0f                    //  unit:p      极对数
  79. #define SPEED_CALIBRATION                           (5000.0f)               //  unit:rpm    转速标定
  80. #define MAX_SPEED                                   (MAX_RPM)               //  unit:rpm    电机额定转速
  81. #define OVER_SPEED_VALUE                            Q15(3500.0f/SPEED_CALIBRATION)//pu unit:rpm  超速保护设定阈值

  82. /*限制条件设定*/
  83. #define MAX_DUTY                                    (0.95f)                 //  百分比 最大调制占空比

  84. /*电流环PI参数设定*/
  85. #define CUR_PI_Q                                    (15)                    //  15 or 10, can't select others, 15:Q15 format KP&KI, 10:Q10 format KP&KI
  86. #define M1_IQ_KP                                    (4000)                  //   Q15 format KP of Q-axis Current loop
  87. #define M1_IQ_KI                                    (400)                   //   Q15 format KI of Q-axis Current loop
  88. #define M1_ID_KP                                    (4000)                  //   Q15 format KP of D-axis Current loop
  89. #define M1_ID_KI                                    (400)                   //   Q15 format KI of D-axis Current loop

  90. /*速度环PI参数设定*/
  91. #define SPD_PI_Q                                    (15)                    //  15 or 10, can't select others, 15:Q15 format KP&KI, 10:Q10 format KP&KI
  92. #define M1_SPEED_KP                                 (16384)                 //   Q15 format KP of speed loop
  93. #define M1_SPEED_KI                                 (163)                   //   Q15 format KI of speed loop

  94. /*PLL锁相环PI参数设定*/
  95. #define PLL_PI_Q                                    (10)                    //  15 or 10, can't select others, 15:Q15 format KP&KI, 10:Q10 format KP&KI
  96. #define M1_PLL_KP                                   (2560)                  //  KP of PLL
  97. #define M1_PLL_KI                                   (5)                     //  KI of PLL

  98. /*SMO滑模参数设定*/
  99. #define SMO_ERR_MAX                                 Q15(0.75f)               //   Max value of SMO error
  100. #define SLIDE_GIAN                                  Q15(0.5f)                //   Kslide gain value
  101. #define SMO_FIFO_DEPTH                              64                      //  队列深度,默认设定为64
  102. #define SPEED_BAND_UPPER_LIMIT                      17                      /*!<目前默认基准为16,此处为上限值设定,设置为开环切闭环转速的上限值,17/16 */
  103. #define SPEED_BAND_LOWER_LIMIT                      15                      /*!<目前默认基准为16,此处为下限值设定,设置为开环切闭环转速的下限值,15/16 */
  104. #define OBS_MINIMUM_SPEED_UNIT                      Q15(OBS_MINIMUM_SPEED_RPM/SPEED_CALIBRATION) //pu unit:RPM 最低观测转速切换节点
  105. #define NB_CONSECUTIVE_TESTS                        2                       //unit:times pwm cycles 连续符合切换点要求
  106. #define VARIANCE_THRESHOLD                          0.03f                    /*!<观测速度平稳的最大可接受方差(百分比) */
  107. #define PERCENTAGE_FACTOR_Q7                        (uint16_t)(VARIANCE_THRESHOLD*128u)

  108. /*切换过渡方式选择*/
  109. #define SOFT_SWITCH_SPIN                            1                       //1:使能软切过渡 0:使能直接过渡
  110. /*转速给定设定方式选择*/
  111. #define SPD_SOFT_OR_KNOB                            1                       //0:使用软件下发转速 1:使用旋钮控制转速

  112. /*功率转换系数*/
  113. #define PWR_CONVERSION_FACTOR                       ((uint32_t)(1.732f*I_MAX*UDC_MAX))
  114. #define STALL_ENABLE                                0
  115. #define MOTOR_VOLTAGE_CONSTANT                      (0.496f)                /*!< Volts/kRPM */
  116. #define SPD_TO_VOLTAGE_BEMF_GAIN                    (MOTOR_VOLTAGE_CONSTANT * SPEED_CALIBRATION / UDC_MAX /1000.0f)
  117. #define SPD_TO_VOLTAGE_BEMF_GAIN_Q15                Q15(SPD_TO_VOLTAGE_BEMF_GAIN)

  118. /*堵转检测功能相关参数*/
  119. #define STALL_ERROR_THRESHOLD                       10        //unit:ms
  120. #define STALL_CHECK_SPD_CYCLE                       10        //unit:ms   主要与加减速有关,类似设定4000RPM/s * 10ms = 40RPM 一般确保至少有10RPM以上的限制阈值

  121. #endif
五、工程编译下载
        工程编译完成后,笔者这里使用的调试器为JLink,因此Debug选择"J-LINK / J-TRACE Cortex",然后选择Arm-Cortex M0+内核即可识别到JLink。
识别到JLink.png
        接下来要选择下载算法,如果Keil没有自动加载进来的,选择在Keil安装的目录下手动添加配置文件到Flash文件夹下,这里不再赘述。这样Keil识别到下载算法配置文件后,需确认下载应用程序的首地址。否则会报如下错误。
报错.png
     这里的下载地址应该为0x08000000H,不是则需手动改为0x08000000。
下载算法.png
六、控制电机运行效果
     FOC程序更新到板子后,扭动电位器,则可控制电机的高速旋转与减速、停止。详情如见下面视频,此次开箱检测分享到此结束,感谢各位来访!
极海APM32M3514驱动直流电机运转

硬件连线.jpg

打赏榜单

21ic小管家 打赏了 50.00 元 2025-03-17
理由:优质测评

寂静之回响 发表于 2025-1-20 16:13 | 显示全部楼层
运行的效果挺好
WhisperingTrees 发表于 2025-1-21 09:40 | 显示全部楼层
电机后面是霍尔吗
rgjinxuan 发表于 2025-1-21 15:27 | 显示全部楼层
无感的没有霍尔吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

1102

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部