系列目录
1. 开箱帖,各个器件总体介绍
3. 成果帖
开发环境搭建
本次开发主打氛围编程, 首选 阿里提供的 心流 CLI 工具 心流:https://iflow.cn/。 MCU 软件开发环境参考 NXP 入门指南介绍, 选用 MCUXpresso (注:需要注册NXP账号,安装包大小 1Gb)。NXP 提供了不少工具和库, 后面可以都尝试下。
心流 CLI 安装
目前心流 CLI 只提供了 bash 的安装方式,因此 WindowPC 前提需要 通过微软应用中心安装 WSL 功能,相关注意事项这里就不重复描述了。
通过 WSL 打开终端bash 后执行官方提供的 安装命令安装:
bash -c "$(curl -fsSL https://gitee.com/iflow-ai/iflow-cli/raw/main/install.sh)"

安装完成后界面如下
MCUXpresso 安装
安装过程会有不少驱动会被自动安装到电脑上。


下载 SDK
硬件准备
要控制电机肯定是自己准备好, 群里有推荐用 380 电机 12V 的的确好便宜, 下单划拉过程中看到了 Adafruit 控制板文档里面的步进电机,关键是也不贵 17 元包邮。考虑到步进电机适合精确控制 有更强的可玩性。最终下单了,期待它运行起来的效果。

万事开头难,选择了最简单的电源先组装好,刚好垃圾佬有一根上古插座线头,以及两根电源杜邦线, 派上用场

电机和驱动板连接选择使用一根依旧损坏了的 6A 快充线,刚好四条线, 加上上次 DIY 活动额外购置的杜邦弹片,手动压上并套上热缩管, 看起来效果还不错 (实际上弹片和杜邦塑料套不配套,容易松动),不过应该管用,就是传输数据的两根细线捏把汗, 先试试再说。
电机控制板果断学习它的文档,使用面包板(难道面包板都只有一个型号吗? 一模一样), 用杜邦线 和 MCU 进行连接, 避免制作驱动板和 MCU 评估版的硬连接。额外用两个杜邦弹片当作驱动板的电源引出端子。简直完美适配。
电机接线过程中要注意 电机驱动输出端口方向, 从原理图可以看到输出是对称设计的.
自己淘宝购买的电机上的标签和附送的延长线线序也对不上,最终找到电机图纸,核对阻值得以验证图纸。


最终接线效果如下

项目软件开发过程步进电机原理
首先需要了解步进电机原理,两相四线为什么能做到电机图纸上说的 1.8 °的步距。 问 AI 的到的答复如下:
我自己总结的电机原理:(如有不对请大家帮忙指正)
步进电机的基本结构如下, 中间的转轴是转子, 外围线圈构成定子,转子是由永磁体构成,磁性方向是顺着中轴方向。设计上把转子按照 N/S 分成了上下连部分,两部分外围都带有齿(如图),但是上下两部分的齿是错开的。电机规格名字叫 42DYB3B0C3, 这里面代表 定子有 42 个齿(一个齿是360/42=8.57°),而上下两部分的齿错开(360/42/2=4.29度),根据右手螺旋(安培定则)可知道螺线管磁极和定子的齿面是垂直的。 这一个细节决定电机通过反转电流可以让电机旋转。
而定子和转子的齿的密度不一样,定子的两路线圈平均分布在转子四周,注定对称, 要想转子能够按照指定方向转动,需要时刻能够保证有个旋转趋势,通过定子42齿可以知道,转子部分线圈不会对齐。在此路中铁芯的磁阻远远小于空气的磁阻,定子和相对的转子的齿之间的间隔叫做气隙,由此可知转子会倾向于旋转到和定子齿匹配的位置。通过确保两组线圈交错排列,确保两组线圈切换时能够有确切的趋势即可保证电机旋转方向。这里面电机的步进角时1.8°,这代表两组线圈可以保证切换的时候让电机朝指定方向旋转1.8°。整个过程类似于有刷电机通过机械的方式控制方向。
电机软件控制
首先我买的带步进电机额定电压是 4.8v, 如果是直接提供电源输出的 12V, 这瞬间会导致电流超标,损坏电机。
需要增加一个DC-DC 降压模块。本身 TB6612 封装的引脚通过 切换IN1/IN2 来控制正反转/刹车和滑行。通过 PWM 占空比可以控制电机通电和刹车的占比,以控制扭矩和功耗,这也就可以理解为什么步进电机停止转动时如果有瞬间负载为什么出现低频率的抖动声音。通过切换 两个线圈的通电频率可以控制电机转速。
参考其他玩家的流程,首先设定引脚, 电机引脚选项,跳转出来后下拉框选择你新建的项目即可。这一项还正不适合用 AI 来做。
最终引脚配置如下, 生成的引脚复用文件为 board/pin_mux.*
电机控制逻辑编程
提示词
帮我用 C++ 生成一个用于步进电机控制软件模块,这个模块提供需要提供四个接口:
1. 控制电机正反转:setDIR(bool CW)
2. 控制扭矩:setForce(int pwm); pwm 范围时0-255
3. 指定旋转角度:setRotateAngle(int angle); angle 以角度为单位 360为一周。
电机控制器提供了四个Pin脚用于控制步进电机旋转:A5/A4 控制一组电机的线圈,A3/A2 控制一组线圈, 两组线圈不同时通电,任意一组线圈内第一个引脚处于高电位,第二个引脚处于低电位后会正向旋转1.8°, 反之反转。通过持续切换线圈来达到持续的旋转。
其次给每个线圈提供了个PWM控制引脚分别是PWM_X0 和PWM_X1
需要新增串口通讯控制功能:通过串口获取控制命令, 通过串口上报当前角度信息(相对于启动时刻的角度)。
需要支持这几个命令:direct/force/rotate
iflow 输出如下
HMI 控制程序
提示词
我要生成一套电机控制用的 HMI 界面,需要包含三个部分:
1. 一套通过本地浏览器可以打开,不需要本地 web server,通过指定本地指定的 websocket 来连接 电机通讯用的 websocket 服务
2. 一套通过串口通讯来完成电机控制的websocket服务,为上述本地网页提供 websocket 服务。
iflow 输出如下
开发小记
AI 的可用性真的很强,针对 浏览器以及 Arduino 的开发真的很熟悉,功能实现也细分的很周全,实在是很厉害。
参考
我要赚赏金
