打印
[电机控制专用MCU]

【APM32M3514开发板测评】板卡认识

[复制链接]
540|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
       非常有幸的获得极海APM32M3514电机驱动板的测评。之前没有接触过电机之类的东西,所以驱动起来比较麻烦。APM32M3514是一颗内核为ARM Cortex-M0+的芯片,所以可以使用MDK软件进行开发。APM32M3514的相关资料链接为珠海极海半导体有限公司 | APM32M3514 电机通用评估板。若安装了MDK软件的话可以直接下载对应的支持包,支持包下载链接在刚才的链接界面就有

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

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

       左侧的绿端子正式供电引脚,右侧绿端子是传感器接口,上面是电机接口。
       特意买了几个经典的舵机,但是发现仅靠烧写器的3.3V供电是驱动不起来的,甚至有可能输出不到电机接口上,所以需要准备一个稳压源才能进行测试。

7238167cd8069b8362.png (15.61 KB )

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 | 只看该作者
小板子还啥都有啊

使用特权

评论回复
5
auzzz| | 2025-3-12 12:25 | 只看该作者
看起来还行,有下一次活动也搞一块试试

使用特权

评论回复
6
天鹅绒之夜| | 2025-3-27 18:44 | 只看该作者
话说楼主的电机驱动代码里面为什么还有喂狗步骤啊?
这调试起来是不是不太方便了?

使用特权

评论回复
7
2218120025|  楼主 | 2025-3-28 09:40 | 只看该作者
天鹅绒之夜 发表于 2025-3-27 18:44
话说楼主的电机驱动代码里面为什么还有喂狗步骤啊?
这调试起来是不是不太方便了? ...

官方的例程

使用特权

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

本版积分规则

12

主题

93

帖子

0

粉丝