ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Johnny-Five 驱动 Pololu VNH5019 双路电机驱动板:引脚配置、内置 Shield 定义与 Motor API 实战

Johnny-Five 驱动 Pololu VNH5019 双路电机驱动板:引脚配置、内置 Shield 定义与 Motor API 实战 IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载本篇技术指南聚焦于 Johnny-Five 中驱动 Pololu VNH5019 Dual Motor Driver BreakoutVNH5019 双电机驱动扩展板的完整方案。你将掌握两种 Motor 配置方式显式引脚配置与Motor.SHIELD_CONFIGS内置配置、cdir/enable引脚在源码层面的作用原理以及基于start()/stop()事件模型的实战控制方法可直接套用到 Arduino Johnny-Five 的高功率直流电机项目中。一、VNH5019 驱动板与它的应用场景Pololu VNH5019 是一款基于 VNH5019 全桥驱动芯片的双路直流电机驱动板常用于驱动高电流持续 12A、峰值 30A 级别的直流电机典型场景包括机器人底盘、云台、小型电动车等需要双电机差速控制的设备。它自带 PWM 调速输入、方向输入与使能输入因此非常适合接入 Arduino 这类数字 IO PWM 平台。在 Johnny-Five 中这类双向 反向使能引脚的电机被归类为 CDIR 设备详见后文源码解读并通过Motor类统一抽象。本文对应的官方示例位于 docs/motor-vnh5019.md可直接运行的完整代码见 eg/motor-vnh5019.js。二、环境准备硬件接线与软件依赖运行本文示例前你需要准备一块 Arduino 兼容开发板示例默认使用 Uno 类板卡烧录 StandardFirmata 固件一块 Pololu VNH5019 Dual Motor Driver Shield或按引脚表独立接线Node.js 环境及 johnny-five 依赖。安装依赖并确认环境npm install johnny-five将开发板通过 USB 连接电脑后从命令行运行示例示例中的require路径../lib/johnny-five.js是仓库内相对路径实际使用时应以安装后的johnny-five包为准node eg/motor-vnh5019.js程序启动后会等待板载连接随后依次执行示例中的电机启停逻辑。三、两种配置方式显式引脚 vs 内置 Shield 定义示例代码eg/motor-vnh5019.js演示了 Johnny-Five 支持的两条配置路径分别创建两个 Motor 实例m1与m2方式一显式声明引脚const m1 new Motor({ pins: { pwm: 9, // PWM 调速引脚 dir: 2, // 方向引脚 A cdir: 4, // 反向方向引脚 B enable: 6 // 使能引脚 } });这种方式完全由用户按自己的接线定义引脚适合使用 VNH5019 独立驱动板非官方 Shield 形态或改线的场景。方式二复用内置 Shield 配置const m2 new Motor(Motor.SHIELD_CONFIGS.POLOLU_VNH5019_SHIELD.M2);Johnny-Five 在Motor.SHIELD_CONFIGS中预置了 Pololu VNH5019 Shield 的标准引脚定义。从 lib/motor.js 的源码可以看到VNH5019 Shield 的 M1、M2 两路通道引脚表如下通道pwmdircdirenableM19246M2107812对应的源码片段lib/motor.jsPOLOLU_VNH5019_SHIELD: { M1: { pins: { pwm: 9, dir: 2, cdir: 4, enable: 6 } }, M2: { pins: { pwm: 10, dir: 7, cdir: 8, enable: 12 } } }可以看到m1的显式引脚配置与内置M1定义完全一致两种写法在效果上等价。内置配置的优势是使用官方 Shield 时无需查阅接线图直接引用即可且不易写错引脚号。四、源码解读CDIR 设备与dir/cdir方向控制VNH5019 是典型的全桥驱动需要用两个方向引脚配合完成正反转。Johnny-Five 在 lib/motor.js 中会根据传入引脚自动推断设备类型只有pwm→NONDIRECTIONAL单向电机有pwmdir→DIRECTIONAL双向电机有pwmdircdir→CDIR三线双向电机。因此只要配置中出现了cdir引脚Motor 实例就会走 CDIR 设备逻辑。CDIR 的方向切换实现见lib/motor.js的CDIR.dir方法dir: { value(dir) { this.stop(); this.direction dir; // cdir 写入 dir.value 的反相dir 写入 dir.value this.setPin(this.pins.cdir, 1 ^ dir.value); this.setPin(this.pins.dir, dir.value); process.nextTick(() this.emit(dir.name)); return this; } }即切换方向时先将电机stop()随后在cdir引脚写入方向值的反相、在dir引脚写入方向值。两个方向引脚一高一低H 桥即输出对应的正/负极性电压。这就是 VNH5019 这类全桥驱动板在 Johnny-Five 中的底层控制原理。另外在初始化阶段Motor.prototype.initialize见 lib/motor.jspwm引脚会被设置为 PWM 模式而dir、cdir、brake、enable凡是在配置中出现的都会被设置为OUTPUT数字输出模式Motor.prototype.initialize function() { this.io.pinMode(this.pins.pwm, this.io.MODES.PWM); [dir, cdir, brake, enable].forEach(pin { if (typeof this.pins[pin] ! undefined) { this.io.pinMode(this.pins[pin], this.io.MODES.OUTPUT); } }); };这解释了为什么enable引脚可以省略它属于可选引脚只有配置中声明了enable时才会被初始化和使用。五、enable使能引脚的源码行为enable引脚由Motor.prototype.enable/Motor.prototype.disable两个方法控制见 lib/motor.jsMotor.prototype.enable function() { var state priv.get(this); if (typeof this.pins.enable ! undefined !state.enabled) { this.setPin(this.pins.enable, 1); // 拉高使能 state.enabled true; } }; Motor.prototype.disable function() { var state priv.get(this); if (typeof this.pins.enable ! undefined state.enabled) { this.setPin(this.pins.enable, 0); // 拉低禁用 state.enabled false; } };从源码可见enable引脚存在时Motor 在构造阶段构造函数末尾调用this.enable()会自动拉高使能电平之后电机才能响应start()。enabled状态同时暴露为实例的只读属性lib/motor.js中enabled的 getter可用于读取当前使能状态。VNH5019 的enable引脚对应其驱动芯片的使能输入拉低可使输出级进入高阻/关断状态。六、完整示例双电机启停与事件监听下面是本文档的完整示例与 eg/motor-vnh5019.js 一致同时使用了两种配置方式并通过事件驱动的方式在 2 秒后自动停止电机const {Board, Motor} require(johnny-five); const board new Board(); board.on(ready, () { // 方式一显式声明引脚 const m1 new Motor({ pins: { pwm: 9, dir: 2, cdir: 4, enable: 6 } }); // 方式二内置 Shield 配置M2 通道 const m2 new Motor(Motor.SHIELD_CONFIGS.POLOLU_VNH5019_SHIELD.M2); // 将 motor 硬件注入 Repl 实例上下文 // 允许在命令行直接交互控制 board.repl.inject({ m1, m2 }); // start 事件在电机启动时触发 [m1, m2].forEach((motor, index) { motor.on(start, () { console.log(start motor ${index1}); // 演示 2 秒后自动停止 board.wait(2000, motor.stop); }); }); [m1, m2].forEach( motor { // stop 事件在电机停止时触发 motor.on(stop, () console.log(stop)); }); // Motor API // start([speed]) // 启动电机。isOn 属性置为 |true| // 可选参数 speed [0-255] 用于设置转速 // 前提是电机接在 PWM 引脚上 m1.start(); m2.start(); // stop() // 停止电机。isOn 属性置为 |false| });七、Motor API 与速度控制的细节说明结合 lib/motor.js 的实现示例注释中提到的 API 行为可进一步细化为start([speed])不带参数时使用当前保存的转速启动传入speed范围 0-255时立即以该速度启动实现上会先释放brake如果存在 brake 引脚且当前处于刹车状态再调用speed()写入 PWM只有speed 0时才会触发start事件见lib/motor.js中start方法末尾的条件if (speed 0)。stop()将转速写入 0saveSpeed: false即不覆盖当前保存速度便于之后start()恢复原速随后触发stop事件。速度的钳制与阈值Motor.prototype.speed中转速会被Board.constrain(options.speed, 0, 255)钳制在 0-255 之间同时默认存在threshold阈值默认值 30可通过构造参数覆盖当设定速度低于阈值时会被直接归零lib/motor.js#L687-L689。这意味着非常低的 PWM 值不会启动电机可避免电机因占空比过小而堵转。此外Johnny-Five 的Motor还支持forward([speed])/fwd、reverse([speed])/rev、brake([duration])、release()、resume()等方向与刹车相关 API以及forward、reverse、brake、release等事件。VNH5019 驱动板因为配置了cdir属于三线 CDIR 设备方向切换由两个方向引脚协同完成详见第四节。八、通过 REPL 进行命令行交互控制示例中的board.repl.inject({ m1, m2 })会把两个电机实例注入 Johnny-Five 的 REPL 上下文。程序运行后在终端中输入实例名即可实时操作 m1.start(200) // 以 200 的速度启动 m1 m1.stop() // 停止 m1 m1.forward(255) // 正转全速 m1.reverse(128) // 反转半速REPL 交互是 Johnny-Five 常见的调试方式可以避免反复修改代码重新上传适合在现场联调 VNH5019 这类大功率驱动时快速验证接线与方向极性。九、接线与调试注意事项基于本文文档与源码的梳理给出以下实践建议电源VNH5019 属于大电流驱动板电机电源必须与 Arduino 逻辑电源分开供电且注意共地引脚复用使用内置 Shield 配置时M1: pwm9, dir2, cdir4, enable6M2: pwm10, dir7, cdir8, enable12不要在这些引脚上连接其他外设方向验证首次运行时建议先用低速如start(100)验证方向。若转向与预期相反可交换电机两线或改用reverse()事件驱动优于定时器示例采用board.wait(2000, motor.stop)演示定时停止在实际项目中更推荐结合传感器事件如限位开关、编码器回调触发stop()避免机械限位冲击阈值参数如果电机启动时 PWM 低于 30 被归零而无法转动可考虑在构造参数中显式设置threshold。十、延伸阅读通用电机控制文档docs/motor.md涵盖 Motor 的各类设备类型与更多 API 说明带刹车引脚的双向电机示例docs/motor-brake.md通过 PCA9685 扩展 PWM 通道的电机驱动docs/motor-PCA9685.mdMotor 核心实现与 Shield 引脚定义lib/motor.js其中SHIELD_CONFIGS含POLOLU_VNH5019_SHIELD位于 lib/motor.js 附近。赞分享IoT机器人嵌入式【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址https://gitcode.com/gh_mirrors/jo/johnny-five点击查看免费下载相关推荐Johnny-Five 电机刹车Motor Brake实战指南Arduino Motor Shield R3 制动控制Johnny Five 电机刹车Motor Brake实战指南Arduino Motor Shield R3 制动控制 导读 本文聚焦 Johnny FiIoT机器人嵌入式SuperCom串口调试工具终极指南快速解决嵌入式开发中的通信难题SuperCom串口调试工具终极指南快速解决嵌入式开发中的通信难题 想象一下这样的场景你正在调试一个嵌入式设备需要同时监控多个串口的数据流手动切换窗口、IoT机器人嵌入式Cursor Free VIP破解工具技术深度解析实现AI编程助手永久免费使用的终极方案Cursor Free VIP破解工具技术深度解析实现AI编程助手永久免费使用的终极方案 Cursor Free VIP是一款专为开发者设计的开源工具通过智IoT机器人嵌入式上一篇Monolith: 一个轻量级推荐系统下一篇Online Boutique11 个服务 5 种语言的 Kubernetes 微服务演示完整入门指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表