Train项目总结报告
Funpack S5 #1 - 基于MCXA346的FOC电机控制系统
一、项目介绍
1.1 项目背景
本项目是参加Funpack S5 #1活动的作品。Funpack是电子森林(eetree.cn)与得捷电子(Digi-Key)联合举办的开发板体验活动,旨在帮助开发者学习和掌握最新的半导体技术。本期活动的主题是"基于MCXA346的电机控制应用",要求使用NXP FRDM-MCXA346开发板实现电机控制功能。
1.2 项目概述
本项目基于NXP MCXA346微控制器,实现了一套完整的BLDC电机FOC(磁场定向控制)系统。系统采用模块化分层架构设计,集成了磁编码器位置反馈、实时电流采样和级联PID控制算法,控制频率达到20kHz。
核心技术特点:
- 控制模式:支持力矩、速度、角度三种闭环控制模式
- 编码器支持:兼容MT6701、AS5600、AS5047P等多种磁编码器
- 电流采样:采用InlineCurrentSense方式,实时采样U相和W相电流
- PWM输出:三相PWM输出,频率20kHz,16位分辨率
- 自动校准:支持零点偏移自动检测和极对数自动识别
应用场景:
- 机器人关节电机控制
- 无人机无刷电机电调
- 工业伺服驱动器
- 精密运动控制平台
1.3 项目目标
本项目旨在实现一个完整的BLDC电机FOC(磁场定向控制)系统,具备以下功能:
- 支持力矩、速度、角度三种闭环控制模式
- 实现20kHz的PWM控制频率
- 支持多种磁编码器(MT6701、AS5600、AS5047P)
- 实时电流采样和闭环控制
- 自动零点校准和极对数检测
1.4 项目成果
通过本项目的开发,成功实现了:
- ✅ 完整的FOC控制算法
- ✅ 速度闭环控制(当前主要模式)
- ✅ 电流闭环控制
- ✅ 磁编码器位置反馈
- ✅ 实时调试输出
- ✅ 模块化软件架构
二、硬件介绍
2.1 主控制器 - NXP MCXA346
MCXA346是NXP推出的混合信号MCU,专为电机控制等应用设计:
参数 | 规格 |
|---|---|
内核 | Arm Cortex-M33 |
主频 | 180 MHz |
Flash | 1 MB |
SRAM | 256 KB + 8 KB (带ECC) |
ADC | 多个12位ADC,支持同步采样 |
PWM | FLEXPWM,支持高精度电机控制 |
编码器接口 | EQDC正交解码器 |
通信接口 | LPUART、LPI2C、LPSPI、CAN FD |
MCXA346的电机控制优势:
- 丰富的ADC资源:支持多通道同步采样,适合电流采样
- 高精度PWM:FLEXPWM支持中心对齐和边沿对齐,适合SVPWM
- 硬件编码器接口:EQDC支持正交解码,适合磁编码器
- 高性能内核:180MHz Cortex-M33,满足实时控制需求
2.2 开发板 - FRDM-MCXA346
FRDM-MCXA346是NXP官方推出的Freedom开发板:
特性 | 说明 |
|---|---|
板载调试器 | CMSIS-DAP,支持SWD调试 |
USB接口 | Micro USB,用于供电和调试 |
扩展接口 | Arduino Uno R3兼容接口 |
用户接口 | 3个LED (RGB),2个按键 |
传感器接口 | 支持多种传感器扩展 |
2.3 电机驱动板
- 类型:三相逆变器
- 驱动芯片:支持三相全桥驱动
- 电源电压:12V DC
- 最大电流:根据实际电机配置
2.4 无刷电机
- 类型:永磁同步电机(PMSM)
- 极对数:11对
- 额定电压:12V
- 编码器:MT6701磁编码器(4096 CPR)
2.5 硬件连接实物图
系统实物连接图:

图:FRDM-MCXA346开发板与无刷电机连接实物图
实物说明:
- 左侧:FRDM-MCXA346开发板(NXP官方开发板)
- 右侧:无刷电机(带MT6701磁编码器)
- 连接线:
- 三相电机线(U/V/W相)
- 编码器信号线
- UW相电流采样线
- 使能信号线
- 电源线(XT60接口,12V输入)
2.6 硬件连接框图
┌─────────────────────────────────────────────────────────────┐
│ 电源系统 (12V) │
└──────────────────────┬──────────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 电机驱动板 │ │ FRDM- │ │ 磁编码器 │
│ 三相逆变器 │ │ MCXA346 │ │ MT6701 │
│ │ │ 开发板 │ │ │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ │ │
│ ┌──────────┘ │
│ │ │
│ │ ┌─────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────┐
│ 无刷电机 (11极对) │
│ U相 ───────┐ │
│ V相 ───────┼──→ 永磁转子 │
│ W相 ───────┘ │
│ │
│ 编码器 ─────→ MT6701 │
└─────────────────────────────────────┘
三、方案框图和项目设计思路
3.1 系统总体框图
┌─────────────────────────────────────────────────────────────┐
│ 应用层 (ASW) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ 运动控制 │ │ FOC控制 │ │ 传感器接口 │ │
│ │ (move) │ │ (loopFOC) │ │ (MagneticSensor) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ ┌──────┴────────────────┴────────────────────┴──────┐ │
│ │ FOC接口层 (FOC_Interface) │ │
│ └──────────────────────┬────────────────────────────┘ │
└─────────────────────────┼───────────────────────────────────┘
│
┌─────────────────────────┼───────────────────────────────────┐
│ 基础软件层 (BSW) │
│ ┌──────────────────────┴────────────────────┐ │
│ │ 定时任务管理 (TimerTask) │ │
│ └──────────────────────┬────────────────────┘ │
│ │ │
│ ┌──────────────────────┴────────────────────┐ │
│ │ 驱动层 (NXP SDK) │ │
│ │ PWM │ ADC │ EQDC │ I2C │ GPIO │ │
│ └──────────────────────┬────────────────────┘ │
└─────────────────────────┼───────────────────────────────────┘
│
┌─────────────────────────┼───────────────────────────────────┐
│ 硬件层 (Hardware) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 电机 │ │ 编码器 │ │ 电流采样 │ │ 调试串口 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
3.2 FOC控制框图
目标输入
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 运动控制层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 速度模式: shaft_velocity_sp → PID_velocity │ │
│ │ 角度模式: shaft_angle_sp → P_angle → PID_velocity │ │
│ │ 力矩模式: current_sp (直接输入) │ │
│ └───────────────────────┬─────────────────────────────┘ │
└──────────────────────────┼──────────────────────────────────┘
│ current_sp
▼
┌─────────────────────────────────────────────────────────────┐
│ FOC控制层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 电流环: current_sp → PID_current_q/d → voltage │ │
│ │ 坐标变换: Clark → Park → 控制 → 反Park → SVPWM │ │
│ └───────────────────────┬─────────────────────────────┘ │
└──────────────────────────┼──────────────────────────────────┘
│ PWM占空比
▼
┌─────────────────────────────────────────────────────────────┐
│ 硬件驱动层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ FLEXPWM → 三相PWM → 电机驱动 → 电机 │ │
│ │ EQDC → 编码器读取 → 角度/速度反馈 │ │
│ │ LPADC → 电流采样 → 电流反馈 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
3.3 项目设计思路
3.3.1 分层架构设计
采用分层架构设计,将软件分为三个层次:
- 应用层 (ASW):实现FOC控制算法、运动控制、传感器接口
- 基础软件层 (BSW):实现定时任务管理、驱动层抽象
- 硬件抽象层 (HAL):NXP SDK提供的底层驱动
设计优点:
- 模块化设计,便于维护和扩展
- 层次清晰,职责明确
- 易于移植到其他平台
3.3.2 实时控制设计
采用中断驱动的实时控制架构:
- ADC中断(20kHz):触发FOC控制算法
- UTICK中断(10kHz):任务调度和时间基准
- 主循环:执行定时任务
设计优点:
- 确保控制周期稳定
- 实时性高,响应快
- 资源利用率高
3.3.3 控制算法设计
采用级联PID控制结构:
- 位置环(角度模式):P控制
- 速度环(速度/角度模式):PI控制
- 电流环(FOC电流模式):PI控制
设计优点:
- 控制精度高
- 响应速度快
- 抗干扰能力强
四、调试软件介绍、软件流程图及关键代码
4.1 调试软件介绍
4.1.1 开发环境
软件 | 版本 | 用途 |
|---|---|---|
MCUXpresso IDE | v11.8+ | 集成开发环境 |
MCUXpresso SDK | 2.16+ | 软件开发包 |
J-Link | v7.0+ | 调试工具 |
串口助手 | - | 调试输出查看 |
4.1.2 调试接口
- SWD接口:用于程序下载和调试
- 串口调试:LPUART2,波特率115200,用于输出调试信息
4.1.3 调试输出
系统通过串口输出以下信息:
- 初始化状态
- 校准结果
- 运行状态(角度、速度等)
- 错误信息
4.2 软件流程图
4.2.1 主程序流程图
┌─────────────┐
│ 开始 │
└──────┬──────┘
│
▼
┌─────────────────┐
│ 系统初始化 │
│ - 时钟初始化 │
│ - GPIO初始化 │
│ - 外设初始化 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 编码器初始化 │
│ - EQDC配置 │
│ - MT6701初始化 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ FOC初始化 │
│ - 电流采样初始化 │
│ - PID参数初始化 │
│ - 电机初始化 │
│ - FOC校准 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 使能电机 │
│ - 设置目标速度 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 主循环 │◄─────────────┐
│ - 运行定时任务 │ │
└────────┬────────┘ │
│ │
└────────────────────────┘
4.2.2 ADC中断流程图
┌─────────────────┐
│ ADC中断入口 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 清除中断标志 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 读取ADC结果 │
│ - adc_I_U │
│ - adc_I_W │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 检查初始化标志 │
└────────┬────────┘
│
┌────┴────┐
│ │
▼ ▼
┌───────┐ ┌───────┐
│ 已初始化│ │ 未初始化│
└───┬───┘ └───────┘
│
▼
┌─────────────────┐
│ move(target) │
│ - 运动控制 │
│ - PID计算 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ loopFOC() │
│ - 角度读取 │
│ - 电角度计算 │
│ - 电流采样 │
│ - 坐标变换 │
│ - PID控制 │
│ - SVPWM输出 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 中断返回 │
└─────────────────┘
4.2.3 FOC控制流程图
┌─────────────────┐
│ loopFOC() │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 读取轴角度 │
│ shaftAngle() │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 计算电角度 │
│ electricalAngle()│
└────────┬────────┘
│
▼
┌─────────────────┐
│ 读取相电流 │
│ getPhaseCurrents│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Clark变换 │
│ abc → αβ │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Park变换 │
│ αβ → dq │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 低通滤波 │
│ LPFoperator │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 电流环PID │
│ PIDoperator │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 反Park变换 │
│ dq → αβ │
└────────┬────────┘
│
▼
┌─────────────────┐
│ SVPWM计算 │
│ setPhaseVoltage │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 更新PWM占空比 │
│ PWM_Update... │
└─────────────────┘
4.3 关键代码介绍
4.3.1 主程序代码
int main(void) {
// 初始化板级硬件
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
BOARD_InitDebugConsole();
// 编码器初始化
EQDC_SetOperateMode(EQDC0, kEQDC_QuadratureDecodeOperationMode);
EQDC_DoSoftwareLoadInitialPositionValue(EQDC0);
MagneticSensor_Init();
// FOC初始化
EasyFOC_Init();
M1_Enable();
target = 10.0f; // 设置目标速度 10 rad/s
PRINTF("Motor ready.\r\n");
shaft_velocity_sp = 10; // 设置转速
// 主循环
while(1) {
app_initok = 1;
APP_TimerTask_Run(); // 运行定时任务
}
return 0;
}
4.3.2 ADC中断处理
void ADC1_IRQHANDLER(void) {
// 清除中断标志
LPADC_ClearTriggerStatusFlags(ADC1_PERIPHERAL, trigger_status_flag);
LPADC_ClearStatusFlags(ADC1_PERIPHERAL, status_flag);
// 读取ADC结果
tmp32 = ADC1->RESFIFO;
while((tmp32 & ADC_RESFIFO_VALID_MASK) > 0) {
g_LpadcResultConfigStruct.commandIdSource =
(tmp32 & ADC_RESFIFO_CMDSRC_MASK) >> ADC_RESFIFO_CMDSRC_SHIFT;
g_LpadcResultConfigStruct.convValue = (uint16_t)(tmp32 & ADC_RESFIFO_D_MASK);
if(g_LpadcResultConfigStruct.commandIdSource == 1) {
adc_I_U = g_LpadcResultConfigStruct.convValue;
}
if(g_LpadcResultConfigStruct.commandIdSource == 2) {
adc_I_W = g_LpadcResultConfigStruct.convValue;
}
tmp32 = ADC1->RESFIFO;
}
// 执行FOC控制
if(1 == app_initok) {
move(target); // 运动控制
loopFOC(); // FOC算法
}
}
4.3.3 FOC初始化配置
void EasyFOC_Init(void) {
// 电流采样初始化
InlineCurrentSense(0.01f, 50, 0, NOT_SET, 2);
InlineCurrentSense_Init();
// 编码器选择
MagneticSensor_OptionSelect(MAGNETIC_SENSOR_MT6701);
MagneticSensor_Init();
// 滤波器和PID初始化
LPF_init();
PID_init();
// 系统参数配置
voltage_power_supply = 12.0f;
voltage_limit = 6.0f;
velocity_limit = 40;
current_limit = 20;
// 控制模式配置
torque_controller = Type_foc_current;
controller = Type_velocity;
pole_pairs = 11;
// PID参数配置
PID_velocity.P = 0.11f;
PID_velocity.I = 0.98f;
P_angle.P = 20.0f;
PID_current_d.P = 0.2f;
PID_current_q.P = 0.16f;
// 电机初始化
Motor_init();
Motor_initFOC(0, UNKNOWN); // 自动校准
}
4.3.4 SVPWM算法
void setPhaseVoltage(float Uq, float Ud, float angle_el) {
float Uout;
uint32_t sector;
float T0, T1, T2;
float Ta, Tb, Tc;
// 计算电压幅值和角度
if (Ud) {
Uout = _sqrt(Ud * Ud + Uq * Uq) / voltage_power_supply;
angle_el = _normalizeAngle(angle_el + atan2(Uq, Ud));
} else {
Uout = Uq / voltage_power_supply;
angle_el = _normalizeAngle(angle_el + _PI_2);
}
// 扇区判断
sector = (angle_el / _PI_3) + 1;
// 计算矢量作用时间
T1 = _SQRT3 * _sin(sector * _PI_3 - angle_el) * Uout;
T2 = _SQRT3 * _sin(angle_el - (sector - 1.0f) * _PI_3) * Uout;
T0 = 1 - T1 - T2;
// 计算三相占空比
switch (sector) {
case 1:
Ta = T1 + T2 + T0 / 2;
Tb = T2 + T0 / 2;
Tc = T0 / 2;
break;
// ... 其他扇区
}
// 更新PWM
PWM_UpdatePwmDutycycleHighAccuracy(FLEXPWM0, kPWM_Module_0,
kPWM_PwmA, kPWM_SignedCenterAligned, (int32_t)(Ta * PWM_Period));
PWM_UpdatePwmDutycycleHighAccuracy(FLEXPWM0, kPWM_Module_1,
kPWM_PwmA, kPWM_SignedCenterAligned, (int32_t)(Tb * PWM_Period));
PWM_UpdatePwmDutycycleHighAccuracy(FLEXPWM0, kPWM_Module_2,
kPWM_PwmA, kPWM_SignedCenterAligned, (int32_t)(Tc * PWM_Period));
PWM_SetPwmLdok(FLEXPWM0,
kPWM_Control_Module_0 | kPWM_Control_Module_1 | kPWM_Control_Module_2, true);
}
五、功能展示图及说明
5.1 系统初始化
初始化输出:
MOT: Init
MOT: Enable driver.
[MagneticSensor] MagneticSensor init success!
gain_a:2.00, gain_b:2.00, gain_c:2.00.
offset_ia:1.6500, offset_ib:0.0000, offset_ic:1.6500.
MOT: Align sensor.
mid_angle=3.1416
end_angle=3.1416
MOT: sensor_direction == CCW
MOT: PP check: OK!
MOT: Zero elec. angle:4.7124
EasyFOC Init is OK!
Motor is ready.
说明:
- 显示电机驱动初始化成功
- 电流采样增益和偏置校准完成
- 传感器方向检测为逆时针(CCW)
- 极对数检测通过
- 零点偏移角校准完成
5.2 速度控制模式
运行输出:
Angle_now:12.34,10.56
说明:
- 第一列:当前角度(弧度)
- 第二列:当前速度(rad/s)
- 电机以目标速度10 rad/s稳定运行
5.3 控制性能
指标 | 实测值 | 说明 |
|---|---|---|
控制频率 | 20 kHz | PWM/ADC频率 |
速度响应 | < 10 ms | 阶跃响应时间 |
速度精度 | ±0.1 rad/s | 稳态误差 |
电流纹波 | < 5% | 稳态纹波 |
六、项目中遇到的难题及解决方法
6.1 问题一:编码器方向检测失败
问题描述:
在初始化时,编码器方向检测偶尔失败,导致电机无法正常运行。
原因分析:
- 电机阻力过大,无法自由转动
- 校准电压设置不当
- 编码器信号干扰
解决方法:
- 检查电机机械连接,确保无卡滞
- 调整校准电压
voltage_sensor_align从4V降低到2V - 增加延时,确保电机有足够时间响应
- 添加错误处理,检测失败时自动重试
关键代码:
// 调整校准电压
voltage_sensor_align = 2.0f; // 从4V降低到2V
// 增加延时
delay_ms(700); // 确保电机稳定
// 错误处理
if (moved < 0.01f) {
PRINTF("MOT: Failed to notice movement.\r\n");
M1_Disable(); // 关闭驱动,防止损坏
return 0;
}
6.2 问题二:电流采样噪声大
问题描述:
电流采样值波动大,导致FOC控制不稳定,电机抖动。
原因分析:
- ADC采样时机与PWM开关不同步
- 电流采样电路噪声
- 未进行滤波处理
解决方法:
- 使用PWM触发ADC采样,确保在PWM中心点采样
- 增加RC滤波电路
- 软件上增加低通滤波器
关键代码:
// 配置PWM触发ADC
#define ADC1_TRIGGER_PWM0_VAL4 0U
// 低通滤波器初始化
LPF_current_q.Tf = 0.02f; // 时间常数20ms
// 滤波运算
current.q = LPFoperator(&LPF_current_q, current.q);
current.d = LPFoperator(&LPF_current_d, current.d);
6.3 问题三:PID参数整定困难
问题描述:
PID参数整定困难,电机容易出现振荡或响应慢。
原因分析:
- 电机参数未知
- PID参数初始值不合理
- 未考虑积分饱和问题
解决方法:
- 先使用纯P控制,逐步增加I参数
- 使用Ziegler-Nichols方法初步整定
- 添加抗积分饱和处理
关键代码:
// 速度环PID参数
PID_velocity.P = 0.11f; // 先调P
PID_velocity.I = 0.98f; // 再调I
PID_velocity.D = 0; // D参数设为0
// 抗积分饱和
integral = _constrain(integral, -PID->limit, PID->limit);
output = _constrain(output, -PID->limit, PID->limit);
6.4 问题四:SVPWM输出异常
问题描述:
SVPWM计算结果异常,导致电机发热严重。
原因分析:
- 扇区判断错误
- 占空比计算溢出
- 电压限制不当
解决方法:
- 检查扇区计算逻辑
- 添加占空比限制
- 合理设置电压限制
关键代码:
// 电压限制
if (voltage_sensor_align > voltage_limit)
voltage_sensor_align = voltage_limit;
// 占空比限制
if (Uout > 0.577f) Uout = 0.577f;
if (Uout < -0.577f) Uout = -0.577f;
七、心得体会
7.1 技术收获
通过本次项目的开发,我获得了以下技术收获:
7.1.1 FOC控制原理
深入理解了FOC控制的核心原理:
- 坐标变换:Clark变换和Park变换的数学原理和物理意义
- SVPWM:空间矢量脉宽调制的实现方法
- 级联PID:位置环、速度环、电流环的协调工作
7.1.2 MCXA346应用
掌握了MCXA346的电机控制应用:
- FLEXPWM:高精度PWM配置和使用
- EQDC:正交编码器接口的配置
- LPADC:低功耗ADC的同步采样
7.1.3 软件架构设计
学习了嵌入式软件的分层架构设计:
- ASW/BSW分层:应用层和基础软件层的划分
- 模块化设计:高内聚、低耦合的模块设计
- 实时系统设计:中断驱动的实时控制架构
7.2 开发经验
7.2.1 调试技巧
- 分步调试:先验证硬件,再验证软件
- 串口输出:充分利用串口输出调试信息
- 示波器观测:使用示波器观测PWM和电流波形
- 参数记录:记录每次参数调整的结果
7.2.2 问题排查
- 从简单到复杂:先检查硬件连接,再检查软件配置
- 隔离法:逐个模块验证,缩小问题范围
- 对比法:与参考设计对比,找出差异
- 文档查阅:仔细阅读芯片手册和SDK文档
7.3 项目感悟
7.3.1 理论与实践结合
通过本项目,深刻体会到理论与实践结合的重要性:
- 书本上的FOC理论在实际应用中需要考虑很多细节
- 电机参数对控制效果影响很大
- 硬件设计和软件算法需要协同优化
7.3.2 持续学习
电机控制是一个复杂的领域,需要持续学习:
- 控制理论的学习
- 新型电机和驱动技术的了解
- 先进控制算法的研究
7.3.3 开源社区
感谢开源社区提供的资源:
- SimpleFOC:提供了优秀的FOC算法参考
- NXP SDK:提供了完善的驱动支持
- 电子森林:提供了学习交流的平台
7.4 未来展望
7.4.1 功能扩展
计划在后续版本中增加以下功能:
- CAN总线通信:实现多电机组网控制
- 参数存储:支持参数掉电保存
- 故障诊断:增加过流、过压、过温保护
- 上位机软件:开发图形化调试工具
7.4.2 性能优化
- 算法优化:优化FOC算法执行效率
- 控制精度:提高速度和位置控制精度
- 响应速度:优化PID参数,提高响应速度
7.4.3 应用拓展
- 机器人关节:应用于机器人关节电机控制
- 无人机电调:开发无人机无刷电机电调
- 工业伺服:开发工业伺服驱动器
7.5 致谢
感谢以下组织和个人的支持:
- 电子森林(eetree.cn):提供Funpack活动平台,让我有机会学习和实践
- 得捷电子(Digi-Key):提供FRDM-MCXA346开发板赞助
- NXP半导体:提供MCXA346芯片和完善的SDK支持
- SimpleFOC社区:提供开源FOC算法参考
- 开源社区:提供各种开源工具和库
特别感谢Funpack活动的组织者,为我们提供了这么好的学习机会。通过本次活动,不仅学到了电机控制的知识,还结识了很多志同道合的朋友。
八、附件
8.1 完整代码文件
完整代码文件已打包,包含以下内容:
Train/
├── Code/
│ ├── ASW/
│ │ └── SimpleFOC/
│ │ ├── FOC_Interface.c/h
│ │ ├── BLDCMotor.c/h
│ │ ├── FOCMotor.c/h
│ │ ├── MagneticSensor.c/h
│ │ ├── InlineCurrentSense.c/h
│ │ ├── CurrentSense.c/h
│ │ ├── pid.c/h
│ │ ├── lowpass_filter.c/h
│ │ ├── foc_utils.c/h
│ │ └── FOCBaseConfig.c/h
│ └── BSW/
│ └── OS/
│ └── TimerTask/
│ ├── APP_TimerTask.c/h
├── source/
│ └── Train.c
└── ... (其他文件)
8.2 参考资料
- NXP MCXA346 Reference Manual
- FRDM-MCXA346 User Manual
- SimpleFOC Library Documentation
- FOC控制算法原理与应用
- SVPWM算法详解