西门子博途PTO运动控制实战:从硬件组态到MC_Power使能配置
1. 为什么PTO控制值得单独拎出来讲1.1 从一个小项目说起去年帮一个做包装机械的朋友调试设备他用的是一台S7-1200 DC/DC/DC的CPU带了三个步进驱动器分别控制送料、切刀和收卷三个轴。他之前一直用脉冲输出指令PLS自己写逻辑每次改速度都要重新算脉冲数和频率换一个产品规格就得改一遍程序调试的时候整个人都是崩溃的。后来我建议他改用工艺对象里的PTO轴配合MC_Power、MC_MoveVelocity、MC_MoveRelative这套运动控制指令来做整个程序的维护性直接上了一个台阶。这个经历让我意识到很多做小型自动化设备的朋友对西门子博途里的PTO运动控制其实是一知半解的。他们知道有这么个东西但真到用的时候要么卡在硬件组态那一步要么搞不清楚MC_Power的引脚到底怎么接要么就是轴配置好了但一动就报错。所以我想把这块内容从头到尾捋一遍从硬件组态到MC_Power的配置把每个环节的坑都摊开来讲。PTO是Pulse Train Output的缩写中文叫脉冲串输出。它的本质就是PLC通过高速输出点向外发送脉冲信号每一个脉冲对应电机走一个步距角或者一个最小位移单位。方向信号单独用一根线来控制。这种方式在小型运动控制场景里非常常见因为成本低、接线简单、响应快不需要走总线通讯也不依赖伺服驱动器的闭环反馈。你只要把脉冲数和频率算对了电机就能走到你想要的位置。适合谁来参考这篇内容呢如果你手上有S7-1200或者S7-1500的PLC需要控制步进电机或者支持脉冲输入的伺服驱动器而且你对博途的基本操作不陌生那这篇内容就是写给你的。如果你连博途的硬件组态都没打开过建议先把基础操作过一遍再来看不然可能会有点吃力。1.2 PTO和总线运动控制的区别在哪很多人会问现在总线伺服这么普及为什么还要用PTO这个问题问得好。总线控制比如PROFINET或者EtherCAT确实在精度、同步性、诊断能力上碾压PTO但它的门槛也高。你需要支持总线的伺服驱动器需要配置报文需要处理通讯周期成本也上去了。而PTO呢你随便找一个几十块钱的步进驱动器只要有脉冲和方向两个输入口就能用。对于三五个轴以内、精度要求不是特别苛刻、成本敏感的设备来说PTO依然是最优解。我个人的经验是单轴或者双轴的小设备PTO的调试时间大概在半天到一天。同样的设备如果换成总线伺服光配置报文和调试通讯就得两三天。当然如果你的设备有十几个轴需要插补联动那PTO就不合适了必须上总线。所以选型的时候要先想清楚你的应用场景不要为了追求新技术而给自己找麻烦。还有一点值得注意PTO的输出点不是随便哪个输出点都能用的。S7-1200的CPU上只有特定的几个输出点支持高速脉冲输出一般是Q0.0到Q0.3这几个。具体哪几个点支持要看你CPU的型号和版本。这个在选型的时候就要确认好不然后面接线接好了才发现输出点不支持那就尴尬了。2. 硬件组态与工艺对象创建2.1 选对CPU和输出点硬件组态这一步看起来简单但实际上是后面所有工作的基础。你打开博途新建项目添加CPU这些都没什么好说的。关键是你要确认你的CPU型号支持PTO功能。S7-1200全系都支持PTO但不同型号支持的最大脉冲频率不一样。比如1211C最高支持100kHz1214C和1215C最高支持100kHz1217C可以到200kHz。S7-1500的话大部分型号也支持PTO但需要确认具体的输出点配置。我一般会在选型阶段就把这个确认好。打开西门子的选型手册找到CPU的技术规格看“脉冲输出”那一栏。如果写的是“支持”那就没问题。如果写的是“不支持”或者没有这一项那就得换型号。这个信息在博途的硬件目录里也能看到你选中CPU之后在属性面板里找“脉冲发生器”或者“PTO”相关的选项。输出点的分配也很关键。以1214C DC/DC/DC为例它支持PTO的输出点是Q0.0到Q0.3最多可以配置四个脉冲发生器。每个脉冲发生器占用一个输出点作为脉冲输出另外还需要一个输出点作为方向输出。方向输出可以用普通的输出点不一定非要用高速点。但为了接线方便我一般会把脉冲和方向分配在相邻的输出点上比如Q0.0做脉冲、Q0.1做方向Q0.2做脉冲、Q0.3做方向这样接线的时候不容易搞混。注意如果你用的是继电器输出的CPU那是不支持高速脉冲输出的。必须是晶体管输出DC/DC/DC的型号才行。这个坑我见过不止一个人踩过买回来发现是继电器输出的只能换CPU。2.2 在博途中启用脉冲发生器硬件组态里最关键的一步是启用脉冲发生器。你选中CPU在属性面板里找到“脉冲发生器”这个选项。博途不同版本的位置可能略有差异但大体上是在“硬件接口”或者“数字量输出”下面。以博途V16为例你点开CPU的属性找到“脉冲发生器”然后选择PTO或者PWM。这里要选PTO因为PWM是脉宽调制占空比可调但脉冲数是无限的不适合做位置控制。选好PTO之后你需要配置几个参数。第一个是信号类型一般选“脉冲和方向”或者“脉冲和方向反相”。这个取决于你的驱动器接收的是什么信号。大部分步进驱动器接收的是脉冲加方向信号方向信号高电平表示正转低电平表示反转。如果你的驱动器要求反相那就选反相的那个选项。第二个是脉冲输出点从下拉菜单里选Q0.0或者你实际接线的那个点。第三个是方向输出点选一个普通的输出点就行。第四个是最大脉冲频率这个要根据你的驱动器和机械结构来定。一般来说步进驱动器的最大响应频率在200kHz左右但实际能跑多快还要看电机的扭矩和负载。我一般会先设一个保守的值比如100kHz调试的时候再往上加。配置完这些之后你还需要设置“脉冲输出格式”。这个选项决定了脉冲和方向信号的时序关系。大部分情况下选默认的“脉冲和方向”就行。如果你的驱动器有特殊要求比如脉冲宽度需要调整那就在高级设置里改。不过说实话我做了这么多年很少需要改这个默认值。2.3 添加工艺对象并关联脉冲发生器硬件组态里的脉冲发生器配置好之后下一步是在“工艺对象”里添加一个新的运动控制轴。你在项目树里右键“工艺对象”选择“新增对象”然后选“TO_PositioningAxis”。这个就是定位轴工艺对象专门用来做位置控制的。添加完之后会弹出一个配置向导。这个向导里的参数比较多我挑几个关键的讲。首先是“基本参数”里的“轴类型”选“线性轴”还是“旋转轴”取决于你的机械结构。如果是丝杆或者皮带驱动的直线运动选线性轴如果是转盘或者旋转工作台选旋转轴。这个选择会影响后面软限位和回零的配置方式。然后是“驱动器”里的“脉冲发生器”关联。这里你要把之前硬件组态里配置好的脉冲发生器选上。如果你配置了多个脉冲发生器这里会有一个下拉列表让你选。选好之后下面的“脉冲输出”和“方向输出”会自动带出来确认一下和实际接线一致就行。接下来是“机械参数”里的“丝杆螺距”或者“每转脉冲数”。这个参数非常关键它决定了你发一个脉冲电机走多少距离。以丝杆为例假设你的丝杆导程是5mm电机转一圈需要1000个脉冲驱动器细分设的是1000那么每个脉冲对应的位移就是5mm除以1000等于0.005mm。这个值要填在“每转脉冲数”和“丝杆螺距”对应的字段里博途会自动算出“每个脉冲的位移量”。提示如果你用的是旋转轴那“每转脉冲数”就是电机转一圈需要的脉冲数这个值要和驱动器的细分设置一致。比如驱动器细分设的是2000那这里就填2000。填错了的话实际走的距离和程序里设定的距离就对不上。配置向导走完之后你会在工艺对象下面看到一个“轴”的文件夹里面包含了“组态”、“调试”、“诊断”等几个子项。到这里硬件组态和工艺对象的创建就算完成了。接下来就是写程序调用MC_Power这些运动控制指令。3. MC_Power指令的引脚配置与调用逻辑3.1 MC_Power到底在做什么MC_Power这个指令从名字就能看出来它是用来给轴“上使能”的。你可以把它理解成轴的电源开关。在轴没有使能之前你发任何运动指令它都不会动。这个设计是为了安全防止在系统还没准备好的时候轴突然动起来。MC_Power的引脚不多但每一个都很关键。我逐个来说。第一个是“Axis”这个引脚要填你之前创建的工艺对象的背景数据块。比如你创建的轴叫“Axis_1”那这里就填“Axis_1”。第二个是“Enable”这是一个BOOL输入给它一个TRUE信号轴就使能了。第三个是“Enable_Positive”和“Enable_Negative”这两个是方向使能一般都给TRUE表示正反方向都允许运动。如果你有特殊需求比如只允许正转不允许反转那就可以把“Enable_Negative”给FALSE。输出引脚里“Status”表示轴的使能状态TRUE表示已经使能成功。“Error”表示有没有报错“ErrorID”是具体的错误代码。还有一个“Busy”引脚表示指令正在执行中。这些输出引脚在调试的时候非常有用你可以通过监控它们来判断轴的状态。我一般会在OB1里调用MC_Power用一个常开的触点来触发Enable。但这里有个细节要注意MC_Power必须每个扫描周期都调用不能只在某个条件下调用一次。因为轴的使能状态是需要持续维持的如果你只在某个条件满足时调用一次那条件不满足的时候轴就掉使能了。所以正确的做法是在OB1里无条件调用MC_Power然后用一个变量来控制Enable引脚。3.2 使能时序和常见报错使能的时序很重要。你不能一上电就给Enable信号因为这时候轴的组态可能还没加载完。我一般的做法是在OB100里先做一些初始化然后在OB1里用一个延时或者用“轴组态完成”的标志位来触发Enable。博途里有一个系统常量叫“Axis_1.ConfigFinished”这个位为TRUE的时候表示轴组态已经加载完成可以给使能了。常见的报错有几种。一种是“ErrorID”显示16#8001这个一般是轴没有组态好或者工艺对象的数据块没有正确关联。另一种是16#8005表示轴正在被其他指令占用比如你同时调用了MC_Power和MC_Home就会报这个错。还有一种比较隐蔽的就是使能给了但“Status”一直是FALSE这通常是因为硬件组态里的脉冲发生器没有正确配置或者输出点被其他程序占用了。注意如果你在程序里同时调用了多个运动控制指令一定要确保它们不会同时操作同一个轴。比如MC_Power和MC_MoveAbsolute不能同时触发否则会报“轴被占用”的错误。正确的做法是用状态机来管理等一个指令执行完了再触发下一个。还有一个坑是使能的方向问题。有些朋友会把“Enable_Positive”和“Enable_Negative”都设成FALSE然后发现轴怎么都不动。这个逻辑是如果两个方向都不使能那轴就是锁死的状态既不能正转也不能反转。所以正常情况下这两个都要给TRUE。3.3 用状态机管理轴的使能和运动在实际项目里我很少直接把MC_Power和运动指令混在一起写。我一般会用一个简单的状态机来管理。比如定义几个状态0表示等待1表示使能中2表示使能完成3表示运动中4表示运动完成5表示报错。然后在每个扫描周期里根据当前状态和输入条件来切换状态再根据状态来调用相应的指令。这样做的好处是逻辑清晰不容易出现指令冲突。比如你在状态1的时候只调用MC_Power等“Status”变成TRUE了再切到状态2。状态2的时候如果收到运动指令就切到状态3调用MC_MoveRelative或者MC_MoveAbsolute。运动完成之后切到状态4等待下一个指令。如果任何环节出现“Error”就切到状态5做报警处理。这个状态机的框架我用了很多年基本上没出过什么问题。你可以根据实际需求增减状态但核心思路是一样的用状态来隔离不同指令的调用时机避免冲突。4. 从使能到运动完整实操流程4.1 参数计算与配置实例假设我们现在有一个具体的项目S7-1200 1214C DC/DC/DC控制一个步进电机驱动器细分设为1600丝杆导程是4mm最大速度要求是100mm/s。我们来算一下参数。每转脉冲数就是1600因为驱动器细分是1600电机转一圈需要1600个脉冲。丝杆导程是4mm所以每个脉冲对应的位移是4mm除以1600等于0.0025mm。这个值博途会自动算出来你只要把1600和4填进去就行。最大速度是100mm/s换算成脉冲频率就是100mm/s除以0.0025mm等于40000Hz也就是40kHz。这个频率在1214C的支持范围内最高100kHz所以没问题。在工艺对象的“速度限制”里把最大速度设成100mm/s博途会自动换算成脉冲频率。加速度的话我一般会设一个适中的值比如500mm/s²。这个值太小了电机会加速很慢影响节拍太大了可能会丢步或者过冲。具体设多少要看负载惯量和电机扭矩一般先从500开始试不行再调。配置好这些参数之后你可以在工艺对象的“调试”面板里手动测试一下。博途有一个“在线调试”的功能你可以手动点“使能”然后输入一个位置或者速度看电机是不是按照预期运动。这个功能在调试初期非常有用可以快速验证硬件接线和参数配置是否正确。4.2 调用MC_MoveRelative做相对定位使能完成之后最简单的运动指令就是MC_MoveRelative。这个指令是相对定位你给它一个距离它就从这个当前位置走这个距离。比如你给100mm它就往前走100mm给-50mm它就往回走50mm。MC_MoveRelative的引脚里“Axis”填轴的数据块“Execute”是上升沿触发“Distance”是你要走的距离“Velocity”是速度“Acceleration”和“Deceleration”是加减速。输出引脚里“Done”表示运动完成“Busy”表示正在运动“Error”和“ErrorID”是错误信息。我一般会在状态机里这样用当状态是2使能完成且收到“启动”信号时把“Execute”置为TRUE同时把状态切到3运动中。然后监控“Done”引脚当“Done”变成TRUE时把“Execute”复位状态切到4运动完成。如果“Error”变成TRUE就切到5报错。这里有一个细节要注意“Execute”是上升沿触发所以你给一次TRUE之后要记得复位不然第二次触发的时候就没有上升沿了。我见过有人忘了复位结果第二次按启动按钮没反应查了半天才发现是这个问题。4.3 用MC_MoveAbsolute做绝对定位绝对定位和相对定位的区别在于绝对定位是走到一个指定的坐标位置而不是走一段距离。比如你的轴当前在50mm的位置你给MC_MoveAbsolute一个100mm的目标位置它就走到100mm。如果你再给一个100mm它就不动了因为它已经在100mm了。MC_MoveAbsolute的引脚和MC_MoveRelative差不多只是“Distance”变成了“Position”。另外还有一个“Direction”引脚用来指定运动方向。一般选“最短路径”就行博途会自动判断往哪个方向走最近。绝对定位的前提是轴已经回零了也就是有一个明确的零点参考。如果没有回零绝对定位是没法用的因为轴不知道自己在哪个位置。回零要用MC_Home指令这个我们后面会讲。在实际项目里绝对定位比相对定位更常用因为它的位置是确定的不会因为累计误差导致位置偏移。比如你的设备需要反复走到几个固定的工位那就用绝对定位每个工位对应一个坐标值程序里直接写死就行。4.4 回零与软限位配置回零是运动控制里绕不开的一个环节。MC_Home指令就是用来回零的。回零的方式有很多种最常见的是“主动回零”就是轴主动去找一个参考点开关找到之后把当前位置设为零点。还有“被动回零”就是轴不动等外部信号触发的时候把当前位置设为零点。主动回零的配置在工艺对象的“回零”选项卡里。你需要设置回零的方式、回零的速度、寻找参考点开关的速度、以及参考点开关的输入点。回零方式一般选“参考点开关”或者“参考点开关和零脉冲”。后者精度更高但需要驱动器提供零脉冲信号。软限位是在工艺对象的“限制”选项卡里配置的。你可以设置正负方向的软限位位置轴走到这个位置就会自动停止防止撞机。这个功能非常实用尤其是在调试阶段可以避免因为程序错误导致轴走到机械极限位置。提示软限位只有在轴回零之后才有效。如果轴没有回零软限位是不起作用的。所以每次上电之后第一件事就是回零回零完成之后再开始正常的运动控制。回零的速度一般分两段第一段是快速寻找参考点开关第二段是慢速精确找零脉冲。快速段的速度可以设成最大速度的50%左右慢速段设成10%左右。这样既能保证效率又能保证精度。5. 调试中常见的坑与排查技巧5.1 轴不动或者一动就报错这是最常见的问题。轴不动的原因有很多我按排查顺序来说。第一步检查MC_Power的“Status”是不是TRUE。如果不是说明轴没有使能成功。这时候看“ErrorID”是多少根据错误代码去查手册。常见的是16#8001表示轴组态有问题一般是工艺对象的数据块没有正确关联或者硬件组态里的脉冲发生器没有启用。第二步如果“Status”是TRUE但轴还是不动那就检查运动指令的“Execute”有没有上升沿。可以用博途的监控功能看一下“Execute”引脚的状态变化。如果没有上升沿那就是触发逻辑有问题。第三步如果“Execute”有上升沿但“Busy”一直是FALSE那可能是“Velocity”或者“Distance”设成了0。检查一下这些参数是不是有值。第四步如果“Busy”是TRUE但电机不转那就要检查硬件了。用万用表量一下脉冲输出点有没有信号或者用示波器看一下波形。如果输出点有信号但电机不转那可能是驱动器的问题检查驱动器的使能信号和接线。5.2 位置偏差和丢步问题位置偏差是PTO控制里比较头疼的问题。表现就是程序里让轴走100mm实际只走了98mm或者走了102mm。造成这个问题的原因有几个。第一个是脉冲当量算错了。检查工艺对象里的“每转脉冲数”和“丝杆螺距”是不是和实际一致。特别是驱动器的细分设置很多人会忘记自己改过细分结果程序里还是按默认值算的。第二个是丢步。丢步一般发生在加速太快或者负载太大的时候。步进电机的扭矩随着速度升高会下降如果加速太快电机跟不上脉冲频率就会丢步。解决方法是降低加速度或者降低最大速度或者换一个扭矩更大的电机。第三个是机械间隙。丝杆或者齿轮传动都会有间隙反向运动的时候会有空程。这个在程序里可以通过反向间隙补偿来修正但前提是你要先测出间隙是多少。我一般会在调试的时候做一个简单的测试让轴走10次100mm然后回到起点看累计误差是多少。如果误差在0.1mm以内那基本没问题。如果误差超过0.5mm那就要查原因了。5.3 常见问题速查表现象可能原因排查方法轴不动Status为FALSE使能未成功检查ErrorID确认轴组态和脉冲发生器配置轴不动Status为TRUEExecute无上升沿监控Execute引脚检查触发逻辑轴不动Busy为TRUE硬件问题用示波器测脉冲输出点检查驱动器接线位置偏差大脉冲当量错误核对每转脉冲数和丝杆螺距位置偏差大丢步降低加速度和最大速度检查负载回零找不到参考点参考点开关接线错误检查开关输入点手动触发看信号变化软限位不生效轴未回零先执行回零再测试软限位报错16#8005指令冲突检查是否有多个指令同时操作同一个轴5.4 几个容易被忽略的细节第一个细节是输出点的最大电流。S7-1200的晶体管输出点最大电流一般是0.5A但步进驱动器的光耦输入电流一般在10mA到20mA之间所以直接驱动是没问题的。但如果你接的是多个驱动器并联那就要算一下总电流是不是超了。第二个细节是脉冲信号的抗干扰。PTO的脉冲频率比较高如果接线太长或者没有屏蔽很容易受到干扰。我一般会用双绞屏蔽线来接脉冲和方向信号屏蔽层单端接地。如果距离超过2米最好加一个光耦隔离模块。第三个细节是博途版本兼容性。不同版本的博途在工艺对象的配置界面上可能有差异但核心参数是一样的。如果你用的是V15或者更早的版本有些选项可能叫法不一样但功能是一样的。建议用V16以上的版本稳定性和功能都更好。第四个细节是程序下载后的初始化。每次下载完程序之后轴的状态可能会复位需要重新使能。我一般会在OB100里写一段初始化代码把轴的状态变量复位然后在OB1里重新使能。这样可以避免下载完程序后轴不动的问题。6. 从单轴到多轴的扩展思路6.1 多轴配置的资源分配当你需要控制多个轴的时候首先要考虑的是CPU的资源够不够。S7-1200最多支持4个脉冲发生器也就是最多4个PTO轴。如果你需要更多轴那就得换S7-1500或者用总线方案。每个PTO轴需要占用一个高速输出点作为脉冲输出另外还需要一个普通输出点作为方向输出。所以4个轴就是4个高速点加4个普通点。1214C有10个输出点其中4个是高速点所以最多能带4个轴。1215C有10个输出点也是4个高速点。1217C有8个高速点可以带8个轴。除了输出点还要考虑CPU的扫描周期。每个运动控制指令都会占用一定的扫描时间轴越多扫描周期越长。如果扫描周期太长会影响运动的平滑性。我一般会监控扫描周期如果超过10ms就要注意了。6.2 多轴协调与互锁逻辑多轴系统里轴和轴之间的互锁逻辑非常重要。比如一个送料轴和一个切刀轴切刀动作的时候送料轴必须停止否则会撞刀。这种互锁逻辑要在程序里做好不能只靠机械限位。我一般的做法是定义一个“系统状态”变量比如0表示空闲1表示送料中2表示切割中3表示报警。每个轴的运动指令只在对应的状态下才能触发。比如送料轴只在状态1下才能动切刀轴只在状态2下才能动。状态之间的切换由程序逻辑控制确保不会同时触发冲突的动作。另外多轴系统里最好给每个轴单独做一个状态机然后用一个总的状态机来协调。这样逻辑清晰调试的时候也容易定位问题。6.3 性能优化与扫描周期管理多轴系统的性能优化核心是减少扫描周期的波动。我一般会做几件事。第一把运动控制的代码放在固定的扫描周期里执行比如用循环中断OB35设一个5ms的周期。这样运动指令的调用时间是固定的不会因为主程序的其他逻辑而波动。第二把不紧急的逻辑放到主程序OB1里把紧急的逻辑放到中断里。比如报警处理可以放在OB1里但轴的使能和运动指令要放在中断里。第三尽量减少不必要的指令调用。比如MC_Power只需要在使能阶段调用使能完成之后可以不再调用或者用一个条件来跳过。这样可以节省扫描时间。第四监控CPU的负载。博途的在线诊断里可以看到CPU的负载率如果超过70%就要考虑优化了。优化的方法包括减少轴的数量、降低脉冲频率、简化程序逻辑等。提示如果你用的是S7-1500它的运动控制性能比S7-1200强很多可以支持更多的轴和更高的脉冲频率。如果项目预算允许多轴系统建议直接用S7-1500。7. 我个人的一些实操心得7.1 调试顺序很重要我调试PTO轴的顺序一般是这样的先确认硬件接线正确用万用表量一下脉冲和方向信号有没有输出然后在博途里手动使能轴看Status是不是TRUE然后用调试面板手动点动看电机是不是按照预期方向转最后再跑程序做相对定位和绝对定位的测试。这个顺序不能乱。如果你一上来就跑程序出了问题你都不知道是硬件的问题还是程序的问题。先手动测试把硬件和组态的问题排除掉再跑程序这样效率最高。7.2 参数备份和版本管理每次调试完一个轴我都会把工艺对象的参数导出来备份。博途支持把工艺对象的配置导出成XML文件下次做类似的项目可以直接导入省去重新配置的时间。这个习惯帮我省了很多重复劳动。另外博途的项目文件最好用版本管理工具管理起来比如Git或者SVN。每次修改之前先提交一个版本出了问题可以回滚。我见过有人改程序改出问题了想回退到之前的版本结果发现没有备份只能从头再来。7.3 关于博途版本的选择博途的版本更新很快V15、V16、V17、V18、V19、V20每个版本都有一些变化。我的建议是如果你的项目没有特殊需求用V16或者V17就行这两个版本比较稳定资料也多。V18和V19增加了一些新功能但如果你用不到那些新功能没必要追新。另外博途的安装对电脑配置要求比较高特别是内存和硬盘。我一般建议至少16GB内存固态硬盘不然打开大项目的时候会卡到你怀疑人生。还有安装博途的时候最好把杀毒软件关掉不然可能会安装失败。7.4 一个容易被忽略的细节方向信号的极性最后再分享一个小细节。方向信号的极性有时候会让人很困惑。博途里配置方向输出的时候有一个选项叫“方向输出反相”。如果你的电机正转的时候实际在反转那可能就是方向信号的极性反了。你可以在工艺对象的配置里改这个选项也可以在硬件接线的时候把方向信号的两根线对调。我一般会在调试的时候先手动点动一下确认方向对不对。如果方向反了先改配置不要急着改接线。因为改配置更方便而且不会动到硬件。这个内容后续还可以这样扩展比如加入MC_MoveVelocity做速度控制或者用MC_GearIn做齿轮同步或者用MC_CamIn做凸轮同步。这些高级功能在多轴协调的场景里非常有用但前提是先把单轴的基础打牢。单轴都调不稳多轴就更不用谈了。