非常有幸的获得极海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供电是驱动不起来的,甚至有可能输出不到电机接口上,所以需要准备一个稳压源才能进行测试。
|