我有一个连接到 6 轴机械臂的 Arduino Mega。所有 6 个中断都连接到编码器(一个编码器引脚在中断上,另一个在普通数字输入上)。使用以下代码处理中断:
void readEncoder1(){
//encoders is a 2d array, where the first d is the axis, and the two pin numbers
//first pin is on an interrupt (CHANGE), and second is a standard digital in
if (digitalRead(encoders[0][0]) == digitalRead(encoders[0][1])) {
positions[0]++;
} else {
positions[0]--;
}
if(servoEnable){
updatePositions(); //// compares positions[] to targets[] and adjusts motor speed accordingly
}
}
这是为了将手臂锁定在某个位置 - 如果 arduino 检测到电机的位置偏离了某个阈值,它会更新进入电机的功率以将手臂保持在适当的位置。
问题是这样的,然后 - 如果两个或三个(或更多)轴处于负载状态(需要不断更新以保持在原位)或它们正在移动,Arduino 将停止在串行输入上接收完整的命令,几个字符将被丢弃. 中断显然运行得很快,由于某种原因,这导致命令被破坏。有没有办法解决?在架构上,我这样做对吗?我的主要直觉是在主运行循环中以 100 毫秒的间隔调用 updatePositions(),这会显着减少中断开销吗?我想我的问题归结为即使所有 6 个编码器都在跳动,我如何将可靠的串行命令输入 Arduino?