用户 I/O 命令
此功能用于通用 I/O(输出)控制。您可以将其用于冷却风扇、夹具、阀门等。引脚可以是数字(开/关)或模拟(PWM)。它允许您使用 gcode 而不是特殊编码来控制引脚。
同步化
同步意味着缓冲区中的所有运动必须在 I/O 更改之前完成。Immediate 不等待并在读取命令后立即执行命令。
使用流式 gcode,您应该使用同步命令。命令的即时版本没有时间保证。
类型
- 数字输入输出
- 模拟(脉宽调制)
命令
M62 – M65 数字输出控制
M62同步数字输出开启
M63同步数字输出关闭
M64立即数字输出打开
M65立即数字输出关闭
用P字表示数字输出号(0-3)
例子:
M62 P0 // turn digital pin 0 on
M63 P0 // turn digital pin 0 off
M67 – M68 模拟输出控制
M67 同步设定模拟值
M68 立即设置模拟值
使用 E 字作为模拟输出编号 (0-3)
使用 Q 字作为占空比百分比的模拟值。
例子
M67 E1 Q23.87 (set set output#1 to 23.87% duty)
M67 E1 Q0 (to turn off the pin. 0% duty)
引脚编号
每种类型有 4 个引脚,编号为 0 到 3。数字和模拟的编号是独立的。如果你使用其中一个,它们可能都是 0。
特殊行为
- 开机– 所有引脚都将设置为关闭状态
- 重置– 所有引脚都将设置为关闭状态
- 报警模式– 引脚状态无变化
- 错误– 引脚状态没有变化
- 文件结束– 引脚状态没有变化
设置
#define USER_DIGITAL_PIN_0 GPIO_NUM_xx
#define USER_DIGITAL_PIN_1 GPIO_NUM_xx
#define USER_DIGITAL_PIN_2 GPIO_NUM_xx
#define USER_DIGITAL_PIN_3 GPIO_NUM_xx
#define USER_ANALOG_PIN_0 GPIO_NUM_xx
#define USER_ANALOG_PIN_1 GPIO_NUM_xx
#define USER_ANALOG_PIN_2 GPIO_NUM_xx
#define USER_ANALOG_PIN_3 GPIO_NUM_xx
#define USER_ANALOG_PIN_1_FREQ 50 // Hz
模拟频率
定义频率是可选的。如果您没有为引脚定义一个,将使用默认值 5000Hz。
模拟分辨率
分辨率取决于使用的频率。PWM 基于 80MHz 定时器。如果您的频率为 10KHz,则 80,000,000 / 10,000 可为您提供最大 8,000 计数分辨率。分辨率基于位,因此您需要向下舍入到最接近的位值,即 12 位或 4096。允许的最高位值为 13 位。
这一切都是在幕后完成的,以提供最高分辨率,您只需提供频率(可选)和职责。
模拟值班
关税是周期的百分比。如果您正在寻找特定的脉冲宽度,则需要确定周期,即 1/freq。如果你的频率是 100Hz,你的周期就是 10ms。如果您想要 1ms 的脉冲,您可以将占空比设置为 0.10%。Duty 是一个浮点数。XX.XX 的值将为您提供最高分辨率。高于 100% 的值设置为 100%。负数设置为 0%。
与 RC 伺服系统一起使用
RC 伺服系统根据 PWM 信号的脉冲长度设置它们的位置。RC 舵机 PWM 的标准频率为 50Hz,一些数字舵机可以处理更高的频率,但它不会提高此应用程序的性能,并且可能会使某些舵机过热。
RC 舵机的标准脉冲范围是 1ms 到 2ms。一些舵机的范围更广。
频率为 50Hz 时,周期为 20ms。因此,1ms 的脉冲占空比为 5.00%,而 2ms 的脉冲占空比为 10.00%。使用 2 个值从行程的一端到另一端。您可以使用介于两者之间的值转到其他位置。如果你的伺服系统有更大的范围,你可以尝试少一点或多一点。舵机没有很大的分辨率,因此职责的微小变化可能不会影响位置。
您也可以将占空比设置为 0%。这通常会关闭伺服系统并允许其自由转动并且不会消耗太多功率。
伺服将尽可能快地移动到目标。下一个 gcode 将立即出现。如果您需要等待舵机移动,您应该添加一个G4 Px.xx命令。