本帖最后由 Ketose 于 2025-2-8 23:36 编辑
序
年前收到这个开发板,本来是直接上FOC来测试,但是官方的例子代码需要人工审核,只能在网上先找其它人,找到了SDK,keil的开发包,原理图,等资料,太难了!!!最后还是没有拿到官网的FOC例子。在我的keil里安装了官方的Geehy.APM32M35XX_DFP.1.0.0.pack,创建完工程CMSIS竟然没有system_apm32m35xx.c和startup_apm32m35xx.s,虽然我已经在Run-Time Environment里Device选择了APM32M35XX Startup。不知道这是不是个BUG,我用的环境是Keil 5.41。
后面会再造一次车轮来修练内力,总的来说会分这么几部分来完成这次评测
1、开环速度控制
2、闭环位置控制
3、闭环速度控制
4、闭环位置-速度-电流控制
5、最后SVPWM
这里面有一些前置知道比如Clark变换、Park变换、SVPWM就不详细介绍了,但是通俗的说明一下。感兴趣的同学可以去问Kimi、豆包、Deepseek,不要去问百度就行。也可以用纳米AI搜索APP,这个集成了好几个AI模型,最后无耻的给自己打个广告,使用纳米AI搜索时,大家填写抽车码请填写:Z4P2YT
本来一开始就打算直接上电机,可是我的直流稳压电源坏了。有谁知道这款电源虽然显示30V电压,但是万用表量的时候没有电压!!!
还有就是因为Jlink没有支持APM32M35xx,今天安装了最新的Jlink 8.12,结果悲剧了,我的Jlink V11没注意升级了固件,出现了Clone提示。Jlink的序列号丢失了。最后翻箱倒柜的找到了一个Freescale的Freelink,改一改更新了一个DAP固件,做成一个通用的DAP Link,可以使用。晚上有了时间顺手把Jlink给**一下,我的Jlink又活了,但是还是没有序列号,已经找到了方法,有时间再搞。
下面我的要驱动的电机:三款,希望都能驱动起来。
由于没有电源,只能先跑一个 Hello world !!!.
1、APM32M3514芯片介绍
一款面向电机驱动市场推出的高集成、高性价比电机控制专用SoC,基于APM32F035系列电机控制专用MCU的性能架构进行优化升级,搭载Arm® Cortex® -M0+内核,内置M0CP协处理器,集成200V 6N-Gate Driver及高性能3.3V LDO。适用于园林工具、手持吸尘器、低压风扇、低压水泵等领域。
性能参数
系统
- Arm® Cortex®-M0+
- 工作主频 72MHz
- M0CP协处理器(硬件:移位单元、32位/32位除法器、
- 开方、三角函数、SVPWM、乘加运算)
存储 - Flash 64KB
- SRAM 10KB
- BootLoader支持 USART升级
电源管理 - MCU工作电压 2.0~3.6V
- 驱动电压5~20V
- 支持上电/掉电复位
定时器 - 16位高级控制定时器:1
- 16/32位通用定时器:2/1
- 16位基本定时器:2
- 看门狗定时器:2
- 24位自减型SysTick:1
- 支持红外接收功能,用于遥控
模拟外设 - 12位ADC:1,通道数:13
- 可编程模拟比较器:2
- 通用运算放大器:4
- 温度传感器:1
2、F035 VS M3514
上图是F035(左),M3514(右)的系统框图,从图中可以看到M3514比F035多了 6N-Gate Driver及LDO。 协处理器(M0CP) 旨在加速一些运行在 Arm® Cortex®-M0+上,与 FOC(Field Oriented Control,磁场定向控制)相关的应用。200V 6N-Gate Driver,可直接为电机驱动提供 6 路驱动 N 沟道 MOSFET 三相全桥驱动功能,减少了外部驱动芯片的使用
以上的这款芯片的一些介绍,都是照本宣科。如果感兴趣可以去极海的官网去查询。
这次活动使用的开发板是APM32M3514x8 MOTOR EVAL,主要为电机控制而设计的开发板。可以用来进行BLDC、FOC算法的电机控制 。
虽然是用来进行电机控制,但是一般单片机该有功能还是都有的。我还是从入门开始,学习一下“Hello world”,然后循序渐进最后运行FOC程序,控制电机转起来。
单片机程序的Hello world就是点个灯。
主程序代码如下:
/*!
* [url=home.php?mod=space&uid=247401]@brief[/url] Main program
*
* @param None
*
* @retval None
*
*/
int main(void)
{
APM_MINI_Init();
//GPIO_Init();
LED_GPIO_Init();
printf("This is an example of GPIO toggle \r\n");
while (1)
{
/* Turn Fault on */
GPIO_ClearBit(GPIOA, GPIO_PIN_12);
APM_DelayMs(200);
/* Turn Fault off */
GPIO_SetBit(GPIOA, GPIO_PIN_12);
APM_DelayMs(200);
}
}
LED_GPIO的初始化代码如下:
void LED_GPIO_Init(void)
{
GPIO_Config_T gpioConfig;
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
/* LED2 GPIO configuration */
gpioConfig.pin = GPIO_PIN_12;
gpioConfig.mode = GPIO_MODE_OUT;
gpioConfig.outtype = GPIO_OUT_TYPE_PP;
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.pupd = GPIO_PUPD_NO;
GPIO_Config(GPIOA, &gpioConfig);
}
原理图我也发一个:
跑起来了
|