这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 基于单片机的直流电机控制+FRDM-MCXA153驱动直流电机

共1条 1/1 1 跳转至

基于单片机的直流电机控制+FRDM-MCXA153驱动直流电机

菜鸟
2026-01-30 02:08:24     打赏

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

image.png

一、开发环境搭建:跟着官方步骤来,难点在耐心要让开发板听话,第一步得把软件环境搞定。我习惯用 MDK,所以全程基于这个工具操作,过程比想象中简单,就是下载有点费时间:1. 找对官方资源,少走冤枉路首先打开 NXP 官方的快速入门链接:https://www.nxp.com.cn/document/guide/getting-started-with-frdm-mcxa153:GS-FRDM-MCXAXX?section=get-software ,这里面有板卡的全套资源,不用到处瞎找。接着去 Keil 官网找 NXP 的板卡列表:https://www.keil.arm.com/vendors/nxp/boards/?page=3 ,翻到第三页就能看到 FRDM-MCXA153,没想到这板子自带 252 个现成工程,直接省了从零写代码的功夫,对新手太友好了!2. 下载 BSP 和 DFP 包,考验耐心的时候到了我选了 “ctimer_pwm_example” 工程,因为后面要驱动电机,PWM 功能是核心。点 “Download Pack” 下载 BSP 包(文件名是 NXP.FRDM-MCXA153_BSP.19.0.0.pack),这里要吐槽下:下载速度是真慢!我当时只有 1.7KB/s,中途千万别断,断了就得重新来。下载完双击安装,默认路径就行,不用特意改。然后回到 Keil 的板卡页面,找到芯片主界面再下载 DFP 文件,这是芯片的专属驱动,没它电脑认不出板子,必须安排上。3. 导入工程 + 连板测试,确认环境没问题打开 MDK,点 “Pack Installer”,在 “Boards” 里找到 FRDM-MCXA153,选 “gpio_led_output” 工程,点 “Copy” 复制到桌面新建的文件夹里。打开工程后,软件会提示更新芯片支持包,直接点 “OK” 就行。

接下来用 Type-C 线把开发板的 “MCU-Link” 口连电脑,电脑会自动装驱动。点 MDK 里的 “Debug”,如果弹出的窗口里 “SW Device” 显示 “0x6BA02477”,说明板子认上了!再点 “Build” 编译,显示 “0 Errors” 就没问题,接着点 “Download” 把程序烧进板子。看到板上的 LED 灯开始闪,就说明开发环境彻底搞定了,成就感瞬间上来了~

二、硬件接线:GPIO2 引脚专用,错接真的会烧板!环境搭好就该接硬件了,这次我用 GPIO2 的引脚控制电机方向,核心硬件就是 FRDM-MCXA153 开发板、Adafruit 驱动模块、Traco Power 12V 电源和直流 BDC 电机。接线是重中之重,我当时反复核对了 3 遍,就怕接错烧板,大家一定要仔细:
  1. 接线表(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 开发板的体验特别好。从环境搭建到电机驱动,核心亮点总结一下:
  1. 官方资源丰富:252 个现成工程,不用从零写代码,新手也能快速上手;

  2. 套件兼容性好:和 Adafruit 驱动模块、Traco Power 电源搭配完美,接线简单,不容易出问题;

  3. 功能易扩展:基础任务和进阶任务都实现了,后续还能加过流保护、显示屏显示转速,可玩性高。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]