做机械臂、3D打印机或者任何有一个运动范围的东西,限位开关都是保命的存在。它用来在最端点卡一下,让控制器知道“到顶了”“到头了”,防止机构一路撞到硬限位把自己干废。这篇讲限位开关怎么接、怎么读、怎么用在回零和脱手保护上。
限位开关是什么
说白了就是一个机械挡片式的微型开关,常见的叫微动开关(micro switch)。机构撞到它顶端的弹簧片,内部触点就会接通或断开。它有三个端子:公共端C、常开NO(平时断开、按下接通)、常闭NC(平时接通、按下断开)。在机器人上,最常用的就是NO,用来做位置触发的开关信号。
限位开关接线方式选择
接Arduino最稳妥的是“常开+内部上拉”的方案:把C端接GND,NO端接数字引脚,然后在代码里pinMode设为INPUT_PULLUP。这样没触发时引脚被上拉到高电平,一按下去被拉低,读到LOW就说明触发。这种方式抗干扰又省外接电阻。

至于用NO还是NC,是有讲究的。安全相关的地方推荐用常闭NC——万一线路断了,系统能立刻检测到信号丢失当作故障处理,比常开更防呆。快关只有一对常闭更安全,临时标记或非安全用常开图省事。装上两个开关一A一B,就能做双向限位。
开关去抖和回零实现
微动开关切换时会有1到5毫秒的抖动,直接读引脚会看到电平乱跳。省事的做法是用ezButton这类库,内置50毫秒消抖,代码很短。自己写也行——检测到变化后延时几十毫秒再确认一次,抖动就滤掉了。

限位开关最常见的用途是“回零”(homing):开机时让轴慢速往一个方向走,撞到端点的开关就停,把这个位置当作零点参考,之后的所有位置都基于它来算。这几乎是所有自带参考系的机械结构第一步要做的事。有了它,机械臂每次开机都能知道自己在哪里,不会跑飞撞机。


回零真是机械臂开机第一步,不然它不知道自己在哪
消抖用ezButton库挺省事,50毫秒默认就够
常闭NC更防呆这个点说得对,断电断线能立刻发现