【Funpack S5 #1】基于MCXA346实现FOC无刷电机控制系统

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 项目成果

通过本项目的开发,成功实现了:

  • :white_check_mark: 完整的FOC控制算法

  • :white_check_mark: 速度闭环控制(当前主要模式)

  • :white_check_mark: 电流闭环控制

  • :white_check_mark: 磁编码器位置反馈

  • :white_check_mark: 实时调试输出

  • :white_check_mark: 模块化软件架构


二、硬件介绍

2.1 主控制器 - NXP MCXA346

MCXA346是NXP推出的混合信号MCU,专为电机控制等应用设计:

MCXA346的电机控制优势

  1. 丰富的ADC资源:支持多通道同步采样,适合电流采样

  2. 高精度PWM:FLEXPWM支持中心对齐和边沿对齐,适合SVPWM

  3. 硬件编码器接口:EQDC支持正交解码,适合磁编码器

  4. 高性能内核:180MHz Cortex-M33,满足实时控制需求

2.2 开发板 - FRDM-MCXA346

FRDM-MCXA346是NXP官方推出的Freedom开发板:

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 分层架构设计

采用分层架构设计,将软件分为三个层次:

  1. 应用层 (ASW):实现FOC控制算法、运动控制、传感器接口

  2. 基础软件层 (BSW):实现定时任务管理、驱动层抽象

  3. 硬件抽象层 (HAL):NXP SDK提供的底层驱动

设计优点

  • 模块化设计,便于维护和扩展

  • 层次清晰,职责明确

  • 易于移植到其他平台

3.3.2 实时控制设计

采用中断驱动的实时控制架构:

  1. ADC中断(20kHz):触发FOC控制算法

  2. UTICK中断(10kHz):任务调度和时间基准

  3. 主循环:执行定时任务

设计优点

  • 确保控制周期稳定

  • 实时性高,响应快

  • 资源利用率高

3.3.3 控制算法设计

采用级联PID控制结构:

  1. 位置环(角度模式):P控制

  2. 速度环(速度/角度模式):PI控制

  3. 电流环(FOC电流模式):PI控制

设计优点

  • 控制精度高

  • 响应速度快

  • 抗干扰能力强


四、调试软件介绍、软件流程图及关键代码

4.1 调试软件介绍

4.1.1 开发环境

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稳定运行

六、项目中遇到的难题及解决方法

6.1 问题一:编码器方向检测失败

问题描述
在初始化时,编码器方向检测偶尔失败,导致电机无法正常运行。

原因分析

  1. 电机阻力过大,无法自由转动

  2. 校准电压设置不当

  3. 编码器信号干扰

解决方法

  1. 检查电机机械连接,确保无卡滞

  2. 调整校准电压 voltage_sensor_align 从4V降低到2V

  3. 增加延时,确保电机有足够时间响应

  4. 添加错误处理,检测失败时自动重试

关键代码

// 调整校准电压
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控制不稳定,电机抖动。

原因分析

  1. ADC采样时机与PWM开关不同步

  2. 电流采样电路噪声

  3. 未进行滤波处理

解决方法

  1. 使用PWM触发ADC采样,确保在PWM中心点采样

  2. 增加RC滤波电路

  3. 软件上增加低通滤波器

关键代码

// 配置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参数整定困难,电机容易出现振荡或响应慢。

原因分析

  1. 电机参数未知

  2. PID参数初始值不合理

  3. 未考虑积分饱和问题

解决方法

  1. 先使用纯P控制,逐步增加I参数

  2. 使用Ziegler-Nichols方法初步整定

  3. 添加抗积分饱和处理

关键代码

// 速度环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计算结果异常,导致电机发热严重。

原因分析

  1. 扇区判断错误

  2. 占空比计算溢出

  3. 电压限制不当

解决方法

  1. 检查扇区计算逻辑

  2. 添加占空比限制

  3. 合理设置电压限制

关键代码

// 电压限制
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 调试技巧

  1. 分步调试:先验证硬件,再验证软件

  2. 串口输出:充分利用串口输出调试信息

  3. 示波器观测:使用示波器观测PWM和电流波形

  4. 参数记录:记录每次参数调整的结果

7.2.2 问题排查

  1. 从简单到复杂:先检查硬件连接,再检查软件配置

  2. 隔离法:逐个模块验证,缩小问题范围

  3. 对比法:与参考设计对比,找出差异

  4. 文档查阅:仔细阅读芯片手册和SDK文档

7.3 项目感悟

7.3.1 理论与实践结合

通过本项目,深刻体会到理论与实践结合的重要性:

  • 书本上的FOC理论在实际应用中需要考虑很多细节

  • 电机参数对控制效果影响很大

  • 硬件设计和软件算法需要协同优化

7.3.2 持续学习

电机控制是一个复杂的领域,需要持续学习:

  • 控制理论的学习

  • 新型电机和驱动技术的了解

  • 先进控制算法的研究

7.3.3 开源社区

感谢开源社区提供的资源:

  • SimpleFOC:提供了优秀的FOC算法参考

  • NXP SDK:提供了完善的驱动支持

  • 电子森林:提供了学习交流的平台

7.4 未来展望

7.4.1 功能扩展

计划在后续版本中增加以下功能:

  1. CAN总线通信:实现多电机组网控制

  2. 参数存储:支持参数掉电保存

  3. 故障诊断:增加过流、过压、过温保护

  4. 上位机软件:开发图形化调试工具

7.4.2 性能优化

  1. 算法优化:优化FOC算法执行效率

  2. 控制精度:提高速度和位置控制精度

  3. 响应速度:优化PID参数,提高响应速度

7.4.3 应用拓展

  1. 机器人关节:应用于机器人关节电机控制

  2. 无人机电调:开发无人机无刷电机电调

  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 参考资料

  1. NXP MCXA346 Reference Manual

  2. FRDM-MCXA346 User Manual

  3. SimpleFOC Library Documentation

  4. FOC控制算法原理与应用

  5. SVPWM算法详解