作为电子工程爱好者,报名 DigiKey Let's do 活动拿到 FRDM-MCXA153 开发板后,就迫不及待捣鼓起来了。从最开始的环境搭建,到后来成功驱动直流电机,踩了些小坑但收获满满,今天就把全程分享给大家。

接下来用 Type-C 线把开发板的 “MCU-Link” 口连电脑,电脑会自动装驱动。点 MDK 里的 “Debug”,如果弹出的窗口里 “SW Device” 显示 “0x6BA02477”,说明板子认上了!再点 “Build” 编译,显示 “0 Errors” 就没问题,接着点 “Download” 把程序烧进板子。看到板上的 LED 灯开始闪,就说明开发环境彻底搞定了,成就感瞬间上来了~
二、硬件接线:GPIO2 引脚专用,错接真的会烧板!环境搭好就该接硬件了,这次我用 GPIO2 的引脚控制电机方向,核心硬件就是 FRDM-MCXA153 开发板、Adafruit 驱动模块、Traco Power 12V 电源和直流 BDC 电机。接线是重中之重,我当时反复核对了 3 遍,就怕接错烧板,大家一定要仔细:接线表(GPIO2 引脚专属,照着接就行)
GPIO2.0 引脚驱动模块 AIN1 口控制电机正转的核心引脚
GPIO2.1 引脚驱动模块 AIN2 口控制电机反转的核心引脚
FLEXPWM0 通道 A 引脚驱动模块 PWMA 口输出 PWM 调速信号,控制电机快慢
电源千万别插反!驱动模块的 VCC和 VM接口长得像,插反瞬间就烧了,我接的时候特意做了标记;
电机线随便接!电机的两个端子接驱动模块 MOTOR A,接反了也没事,大不了电机转的方向反了,后面改代码就能调。
基础目标:用 GPIO2 控制电机转起来,成就感拉满!接线没问题后,就该让电机转起来了。基础任务要实现启停、正反转和调速,核心用 GPIO2.0 和 GPIO2.1 控制方向,代码直接基于官方工程修改,复制就能用,我还加了详细注释:1. 核心代码(GPIO2 引脚专用,亲测能用)// 加载需要的工具包,不用自己瞎找 #include "fsl_pwm.h" #include "fsl_gpio.h" #include "fsl_debug_console.h" // 重点!明确用GPIO2的引脚,别搞错了 #define PWM模块 PWM0 #define PWM通道 kPWM_PwmA #define 正转引脚 GPIO2, 0 // 专门选的GPIO2.0,控制正转 #define 反转引脚 GPIO2, 1 // 专门选的GPIO2.1,控制反转 #define PWM频率 1000UL // 1000Hz,电机转起来不抖,亲测这个频率最合适 // 电机控制函数:输入速度值(-100~100),正数正转,负数反转,0停止 void 控制电机(int 速度值) { // 用GPIO2引脚控制方向,逻辑很简单 if (速度值 < 0) { 速度值 = -速度值; // 把负数变正数,方便算转速 GPIO_PinWrite(正转引脚, 1); // GPIO2.0设1 GPIO_PinWrite(反转引脚, 0); // GPIO2.1设0 → 电机反转 PRINTF("电机反转,转速:%d%%\r\n", 速度值); // 串口打印状态,方便查看 } else { GPIO_PinWrite(正转引脚, 0); // GPIO2.0设0 GPIO_PinWrite(反转引脚, 1); // GPIO2.1设1 → 电机正转 PRINTF("电机正转,转速:%d%%\r\n", 速度值); } // 限制转速范围:低于10%不转(避免电机堵转烧模块),高于100%按100%算 if (速度值 > 100) 速度值 = 100; if (速度值 < 10) 速度值 = 0; // 发送PWM信号,更新转速,官方函数直接用 PWM_UpdatePwmDutycycle(PWM模块, 0, PWM通道, kPWM_SignedCenterAligned, 速度值); PWM_SetPwmLdok(PWM模块, kPWM_Control_Module_0, true); } // 主函数:程序入口,相当于总指挥 int main(void) { // 初始化硬件:时钟、GPIO2、PWM、串口,都是官方现成函数,不用改 BOARD_InitBootPins(); BOARD_InitBootClocks(); BOARD_InitDebugConsole(); // 串口波特率115200,后面看日志要用 // 初始化PWM模块,按官方例程配置,不用动 pwm_config_t PWM配置; PWM_GetDefaultConfig(&PWM配置); PWM配置.prescale = kPWM_Prescale_Divide_1; // PWM时钟不分频,性能拉满 PWM配置.reloadLogic = kPWM_ReloadPwmFullCycle; // 全周期更新,调速更平滑 PWM_Init(PWM模块, 0, &PWM配置); PWM_StartTimer(PWM模块, 0); // 启动PWM // 初始化GPIO2引脚:设为输出模式,重点! gpio_pin_config_t GPIO配置 = {kGPIO_DigitalOutput, 0}; GPIO_PinInit(正转引脚, &GPIO配置); // GPIO2.0初始化 GPIO_PinInit(反转引脚, &GPIO配置); // GPIO2.1初始化 // 测试循环:让电机正转加速→最高速→反转加速→停止,循环往复 int 当前速度 = 4; // 初始速度,别太高,慢慢加速 int 方向 = 1; // 1=正转加速,-1=反转加速 while (1) { // 延时100毫秒,让速度变化更平滑,不会忽快忽慢 SDK_DelayAtLeastUs((1000000U / PWM频率) * 100, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY); 当前速度 += 4 * 方向; // 每次加4%速度,循序渐进 // 到最高速(100%)就反转,到0就正转 if (当前速度 >= 100) { 当前速度 = 100; 方向 = -1; } else if (当前速度 <= 0) { 当前速度 = 0; 方向 = 1; } 控制电机(当前速度); // 调用函数,控制电机 } }
试用总结:FRDM-MCXA153 真的适合新手!作为一个电子爱好者,这次试用 FRDM-MCXA153 开发板的体验特别好。从环境搭建到电机驱动,核心亮点总结一下:
官方资源丰富:252 个现成工程,不用从零写代码,新手也能快速上手;
套件兼容性好:和 Adafruit 驱动模块、Traco Power 电源搭配完美,接线简单,不容易出问题;
功能易扩展:基础任务和进阶任务都实现了,后续还能加过流保护、显示屏显示转速,可玩性高。
我要赚赏金
