[电机控制专用MCU] 【APM32M3514开发板测评】板卡认识

[复制链接]
 楼主| 2218120025 发表于 2025-3-9 20:17 | 显示全部楼层 |阅读模式
       非常有幸的获得极海APM32M3514电机驱动板的测评。之前没有接触过电机之类的东西,所以驱动起来比较麻烦。APM32M3514是一颗内核为ARM Cortex-M0+的芯片,所以可以使用MDK软件进行开发。APM32M3514的相关资料链接为珠海极海半导体有限公司 | APM32M3514 电机通用评估板。若安装了MDK软件的话可以直接下载对应的支持包,支持包下载链接在刚才的链接界面就有
支持包.png

       在安装好支持包后,可以打开官方例程。打开后首先要确定芯片型号是否正确,对应的芯片型号应该是如下图
芯片选型.png

       官方例程源码也是非常简单明了,源码如下
  1. __disable_irq();                           
  2.     /*  config peripherals  */
  3.     MC_SystemClockInit();
  4.     /*  M0CP    */
  5.     M0CP_Firmware_Init();
  6.     RCM_EnableAHBPeriphReset(RCM_AHB_PERIPH_M0CP);
  7.     RCM_DisableAHBPeriphReset(RCM_AHB_PERIPH_M0CP);
  8.     RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_M0CP);
  9.     M0CP_HardInit();
  10.     *(volatile unsigned int*)(0x40024000+0x10) = 0;
  11.     /*  TIMER1      */
  12.     Drv_Pwm_Init(PWM_PERIOD,DEAD_TIME);
  13.     PWM_CompareConfig(PWM_PERIOD, PWM_PERIOD, PWM_PERIOD);
  14.     /*  ADC      */
  15.     Drv_Adc_Init();
  16.     /*  OPA      */
  17.     OPA_Init();
  18.     /*  COMP      */
  19.     COMP_Init();
  20.     /*  GPIO      */
  21.     IO_Init();
  22.     /*  SYSTICK      */
  23.     Systick_Init(SystemCoreClock / 1000);
  24.     /* Initialize  motor control parameters */
  25.     Init_Parameter(&Motor_type);
  26.     /* Initialize interrupts */
  27.     Interrupt_Init();
  28.        /* Wait until ADC is ready */
  29.     while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY));
  30.     ADC_StartConversion();
  31.     WWDTInit();
  32.     __enable_irq();                             //Enable all interrupts
  33.     TMR_EnablePWMOutputs(TMR1);
  34.    
  35.     while (1)
  36.     {
  37.         //Reads key from demoboard.
  38.         NewDIRKey = GPIO_ReadInputBit(GPIOC,GPIO_PIN_13); //PC13 Direction·½Ïò°´¼ü
  39.         if(NewDIRKey == BIT_RESET)
  40.         {
  41.             /*É趨з½ÏòΪ·´×ªCCW*/
  42.             Motor_type.User.s8NewDir = -1;
  43.         }
  44.         else{
  45.             /*É趨з½ÏòΪÕýתCW*/
  46.             Motor_type.User.s8NewDir = 1;
  47.         }
  48.         if(Motor_type.User.s8NewDir != Motor_type.User.s8Direction)
  49.         {
  50.             /*Æô¶¯×ªÏòÇл»¹¦ÄÜ*/
  51.             Motor_type.User.bDirSwitchEnable = true;
  52.         }
  53.         
  54.         if(Motor_type.User.bSlowLoopFlag)
  55.         {
  56.             WWDTFeedDog();
  57.             /* Slow Loop Statemachine */
  58.             s_STATE_SLOW[eM1_MainState]();
  59.             Motor_type.User.bSlowLoopFlag =  0;
  60.         }
  61.     }
     源码主要是根据板上的Direction按键控制电机的运转方向。一般编译是没有错误和警告的。编译好之后想把程序下载到板卡上,但是用Type-C数据线接上电脑后发现板卡没有任何反应,没有指示灯。原本想着可能就是没有预留指示灯吧。但是后来看原理图和宣传手册才发现供电是Type-C供电的,其只是串口。供电是两个绿端子,丝印为DC+和DC-,表示需要接直流电,但是手上没有稳压源,所以可能驱动不了电机。但是想着程序已经准备好了,得把程序烧写一下试试。发现烧写口可以给芯片供电,刚开始没找到烧写口,想着是Type-C就可以烧写程序,这是测试以前板卡载有烧写器的习惯了。看原理图发现芯片旁边的四个排针就是烧写口。但是又一个问题是排针没有明确表明哪个是VCC,哪个是GND,哪个又是SWDIO和SWCLK,所以就用板卡的GND点去量哪个是GND,找到后其他的排针定义也就确定了。确定之后就用DAPLink烧写器去烧写程序。接上线后,给烧写器供电,发现板上的指示灯亮了,这才发现板卡上是有指示灯的。点击烧写就可以立马烧写好程序。后来才看清排针旁边的SDGV这四个字母的丝印是什么意思了。原来是SWCLK、SWDIO、GND和VCC的缩写,不过这四个字母排的有点紧,没反应过来。
      板卡如下图所示
368303fa54a3382d8823be84ab56d61.jpg

       左侧的绿端子正式供电引脚,右侧绿端子是传感器接口,上面是电机接口。
       特意买了几个经典的舵机,但是发现仅靠烧写器的3.3V供电是驱动不起来的,甚至有可能输出不到电机接口上,所以需要准备一个稳压源才能进行测试。
7238167cd8069b8362.png
CloudKiss 发表于 2025-3-10 23:26 | 显示全部楼层
这个开发板应该实现的是一个电机驱动器的原型吧!
话说楼主为啥说其驱动不起来电机呢?
 楼主| 2218120025 发表于 2025-3-11 09:06 | 显示全部楼层
CloudKiss 发表于 2025-3-10 23:26
这个开发板应该实现的是一个电机驱动器的原型吧!
话说楼主为啥说其驱动不起来电机呢? ...

没有电源,用烧写口提供的电源驱动不了。
jobszheng 发表于 2025-3-11 10:16 | 显示全部楼层
小板子还啥都有啊
auzzz 发表于 2025-3-12 12:25 来自手机 | 显示全部楼层
看起来还行,有下一次活动也搞一块试试
天鹅绒之夜 发表于 2025-3-27 18:44 | 显示全部楼层
话说楼主的电机驱动代码里面为什么还有喂狗步骤啊?
这调试起来是不是不太方便了?
 楼主| 2218120025 发表于 2025-3-28 09:40 | 显示全部楼层
天鹅绒之夜 发表于 2025-3-27 18:44
话说楼主的电机驱动代码里面为什么还有喂狗步骤啊?
这调试起来是不是不太方便了? ...

官方的例程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

110

帖子

0

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