K32W148 BLDC电机控制FreeRTOS应用程序
该软件演示如何使用 K32W148 控制无刷直流 (BLDC) 电机。它提供了一个易于使用且便携的驱动程序,用于初始化并使用所需的外设来控制带霍尔传感器的 BLDC 电机。它实现了两个 PID 控制环路来监控速度和位置(转数),以及电流保护机制(硬件比较器)和电压保护机制(ADC)。一个简单的 FreeRTOS 演示应用程序展示了该驱动程序的使用方法。
主板:K32W148-EVK、KW45B41Z-EVK
类别:电机控制、RTOS
外设:ADC、GPIO、PWM
工具链:MCUXpresso IDE
目录
1.软件
要构建和运行此演示,您需要:
- MCUXpresso IDE 11.8.0 或更新版本。
- K32W148-EVK SDK版本2.12.7
- 串行控制台工具(例如 Tera Term 或 PuTTY)
2.硬件
此演示需要:
- 一块K32W148-EVK 板或一块KW45B41Z-EVK,配有一根微型 USB 线缆
- 一个FRDM-MC-LVBLDC(低压、三相 BLDC 电机控制自由开发平台)
- 一个FRDM-MC-LVMTR(三相无刷直流电机 - Linix 45ZWN24-40 电机)
- 一个12V直流电源(输出电流在2A至5A之间)
3. 设置
3.1 步骤 1 - 下载并安装所需软件
如果尚未完成:
- 安装MCUXpresso IDE 11.8.0 或更高版本
- 安装 K32W148-EVK SDK版本 2.12.7。
- 安装任何串行控制台应用程序(例如 Tera Term 或 PuTTY)
3.2 第 2 步 - 打开、构建和烧录示例
首先,使用 micro-USB 线将 K32W148-EVK 连接到 PC。然后,从 MCUXpresso 执行以下操作:
- 转到“快速启动面板”并单击“从文件系统导入项目”
- 选择“项目目录(解压)”并浏览到克隆的项目文件夹。
- 选择导入的项目并按构建按钮
- 使用“GUI Flash Tool”按钮烧录镜像。如果您的开发板连接正确,镜像应该会出现在“Available attached probes”弹出窗口中。选择它,并完成烧录。
3.3 步骤 3 - 电路板连接
然后,将 FRDM-MC-LVBDLC 连接到 K32W148 和电机,如下所示:
| PIN 名称 | FRDM-MC-LVBLDC | K32W148-EVK | K32W148-EVK引脚名称 |
| ---------------- | ---------------- | -------------- | --------------------------- |
| 脉宽调制 | J3,引脚 15 | J1,引脚 8 | PTA21(TPM0CH0) |
| PWMAB | J3,引脚 13 | J1,引脚 7 | PTA20(TPM0CH1) |
| PWMBT | J3,引脚 11 | J1,引脚 4 | PTA19(TPM0CH2) |
| PWMBB | J3,引脚 9 | J2,引脚 2 | PTA18(TPM0CH3) |
| PWMCT | J3,引脚 7 | J1,引脚 1 | PTA16(TPM0CH4) |
| 脉宽调制CB | J3,引脚 5 | J1,引脚 2 | PTA17(TPM0CH5) |
| ENCA | J3,引脚 3 | J1,引脚 6 | PTB0(PTB0GPIO) |
| ENCB | J3,引脚 1 | J2,引脚 5 | PTB1(PTB1GPIO) |
| ENCI | J1,引脚 3 | J2,引脚 6 | PTB2(PTB2GPIO) |
| 电压直流断路器 | J2,引脚 7 | J4,引脚 2 | PTD2(ADC0A6) |
| 当前DCB | J2,引脚 9 | J4,引脚 4 | PTA4(CMP0IN0/BOOTCFG) |
| 接地 | J3,引脚 12/14 | J3,引脚 7/6 | 接地 |
| 3对3 | J3,引脚 4/8 | J3,引脚 2/4 | 维博 |
| PIN 名称 | FRDM-MC-LVBLDC | 电机线 |
| --------------- | ---------------- | ------------ |
| 阶段A(PHA) | J7,引脚 1 | 白色(厚) |
| 阶段 B(PHB) | J7,引脚 2 | 蓝色(厚) |
| 阶段C(PHI) | J7,引脚 3 | 绿色(厚) |
| 1号厅(ENCA) | J8,引脚 5 | 白色(薄) |
| 2号馆 (ENCB) | J8,引脚 4 | 蓝色(薄) |
| 3号馆(ENCI) | J8,引脚 3 | 绿色(薄) |
| 接地 | J8,引脚 2 | 黑色(薄) |
| 5伏 | J8,引脚 1 | 红色(薄) |
然后将 12V 电源连接到 PWR 连接器 (J6)。
一种简单的连接方法是将 FRDM-MC-LVDLDC 扩展板插入 Arduino 接口上 K32W148-EVK 的顶部,并使用下图所示的线路。(在这种情况下,GND 和 3V3 会自动连接到 EVK 上的正确引脚)
4. 运行示例
打开串行控制台,选择相应的端口 COM,配置如下:
- 速度:115200
- 数据:8位
- 奇偶校验:无
- 停止位:1位
- 流量控制:无
然后,按下 K32W148-EVK 上的重置按钮 (RST_SW)。控制台上应该会打印以下消息:
以下是所有可能命令的简要说明:
- ?0. 设置电机初始位置?:设置当前位置。重置后,电机初始位置默认为 0。?必须停止电机才能访问此命令?。
- ?1. 设置目标位置?:设置电机应达到的位置(旋转圈数)。如果选定位置大于当前位置,电机将顺时针旋转以达到目标位置。否则,电机将逆时针旋转。在这两种情况下,“目标速度”的绝对值将用作最大速度。?可在运行时更新?。
- ?2. 设置目标速度?:设置电机速度(单位为每分钟转数)。如果设置了目标位置,驱动器将使用此值作为最大速度。否则,电机将以选定的速度无限期运行。如果设置为 0(默认值),电机将无法启动。正值表示顺时针旋转,负值表示逆时针旋转。?可在运行时更新?。
- ?3.启动电机?:启动电机
要与应用程序交互,只需使用键盘上的相应数字即可。打印的信息将根据所选命令进行更新。电机运行时,每 100 毫秒会打印并更新一些有关当前状态的信息,如下所示:
5. 流程
该应用程序和 bldc 驱动器可以用下图来概括:
您可以将逻辑分析仪连接到不同的信号上,以查看与霍尔输出相关的换向。
- 在顺时针模式下,您应该观察到以下模式:
- 逆时针旋转时,应注意以下几点:
- 如果电流超过低功耗比较器中设定的阈值,PWM 将自动停止:
6. 常见问题解答
- 重置后,控制台上没有打印任何内容:
- 检查你的微型 USB 电缆
- 由于电流探头连接到 PTA4 引脚(CMP0IN0/BOOTCFG),设备可能处于 ISP 模式。在这种情况下,您需要在重置设备之前断开此引脚的连接。
- 电机没有启动,并打印“电流过冲”错误信息:
- 在 MainApp_InitMotor() 函数中调整 motorCfg.busCurrentMax 和/或 driverCfg 值(例如 busCurrentScaleFactor)。
- 有时电机配置可能错误,导致启动电流过大,无法正常启动。请尝试停止电机,然后手动移动转子,再尝试启动。
- 未完美达到目标位置:
- 目标位置和实际位置之间通常会有几圈的误差。您可以通过调整 MainApp_InitMotor() 函数中的 PID 值来改善这种情况。
- 如何将电机驱动器集成到另一个应用程序中:
- 电机驱动器(位于 source/bldcdriver 文件夹下)已设计得尽可能通用,以方便移植。它只需要上层应用程序执行以下操作:
- 导入所需的外设驱动程序:fsledma、fsllpadc、fsllpcmp、fsllpit、fsltpm、fsltrgmux、fslvref、fsltstmr
- 定义:
- GPIO IRQ 处理程序并调用BLDC
HallIrqHandler() API。
- 从驱动程序接收事件的回调函数(参见 bldcEvtCallbackHandler())。
- 电机驱动器(位于 source/bldcdriver 文件夹下)已设计得尽可能通用,以方便移植。它只需要上层应用程序执行以下操作:
- 用途:
- BLDCInit() API 用于初始化驱动器,提供电机和硬件特性,以及之前定义的回调函数(参见 MainAppInitMotor())。
- BLDCSetupPIDs() API 用于设置 PID(参见 MainAppInitMotor())。
- BLDCSetInitPos() API 用于设置初始位置。
- BLDCStart() API 用于启动电机,提供目标位置和速度。
- BLDCStop() API 用于停止电机。
- 可选使用:
- BLDCUpdateRpmCmd() API 可随时更新速度命令。
- BLDCUpdatePosCmd() API 可随时更新位置命令。
- BLDCGetSectorCount() API 可随时获取当前位置(单位为整圈旋转的 1/6)。
- BLDCGetSpeed() API 可随时获取当前速度(以 rpm 为单位)。
- BLDCGetPidInfo() API 可随时获取 PID 输出(占空比和速度命令)。
- 在KW45B41Z-EVK上移植
7. 支持
项目元数据
来源:恩智浦appcodehub