基于STM32和步进电机的DIY数控绕线机设计与制作
发布时间:2026/9/17 16:26:04 锦皓数字建站

记得刚入行那会儿我还在用一个手摇计数器给孩子修电动玩具电机绕一个定子线圈数到300多匝中途一个来电打断了思路结果整卷返工。后来陆陆续续做过三台绕线机从最简陋的“电机转速表计数版”一路做到现在这台基于STM32和步进电机的数控版本绕出来的线圈从0.1mm细线到1.0mm粗线都能整齐排布。这篇文章把我这台绕线机的完整制作和研究过程写出来覆盖机械结构、驱动选型、排线联动算法、调试避坑几个方向给想自己做一台的朋友一个尽量少走弯路的参考。1. 为什么自己动手做绕线机1.1 绕线机到底解决了什么问题手工绕线的痛点是绕线圈的人都懂的第一是数不准绕到后半段精力一分散计数就容易乱变压器初级和次级匝数一旦差几十圈电气性能就完全对不上第二是排不齐手工绕的时候线总会不自觉地朝一个方向堆积层与层之间出现交叉压叠线圈体积变大、窗口装不下高频应用时寄生电容也会明显变大第三是张力不匀刚开始绕得紧越往后越松外层线会陷进内层做出来的线包又鼓又软。绕线机要解决的就是这三件事计数可靠、排线整齐、张力基本恒定。以我做输出变压器为例初级绕组要绕十几层每层几十匝手工绕几乎无法保证每一层都整齐排列而机器绕只需要设定好线径和槽宽排线机构就能按每层匝数自动换向绕出来的线包像打印出来的一样平整。1.2 目标定位能干什么、适合谁这台绕线机的定位是中低成本的DIY数控绕线机不是商业级的全自动机型。它能处理的典型场景包括绕制EI变压器、环形铁芯电感、EMI共模电感维修电机时的定子线圈、磁场线圈补绕自制电磁铁、加热线圈、传感器线圈绕制0.1mm到1.0mm直径的漆包线最大骨架宽度做到120mm左右最高主轴转速可以到600rpm。成本大头是三块57步进电机加驱动器、丝杆滑台、STM32控制板。整体下来不到四百块比起成品自动绕线机动辄上千还要等物流对于常做线圈维修和自制变压器的爱好者来说性价比是很高的。当然它也有局限性比如不能绕环型电感的内圈自动化缠带也没有自动缠胶带功能属于“半自动”设备——人工装夹、人工换料、机器负责最枯燥的排线计数。1.3 方案整体拆解整台设备拆成三个子系统看思路会非常清晰机械系统机架、主轴总成、排线滑台、张力机构、夹具。这一部分决定了绕出来的线圈机械精度和操作舒适度。驱动系统主轴步进电机、排线步进电机、各自的驱动器以及编码器反馈。这部分决定了运动的可控性和稳定性。控制系统STM32主控板、显示面板、按键、逻辑算法。这部分是“大脑”负责同步排线、换层、计数和启停保护。三者之间最关键的是控制算法和机械精度的匹配排线是否整齐最终取决于主轴转角和排线位移之间是否严格成比例比例一旦跑偏轻则线隙变大重则叠线压线。后面的参数计算部分我会详细展开。2. 整体设计与关键参数计算2.1 方案选型为什么选STM32加开环步进市面上绕线机的控制方案大致有三类纯机械计数器方案、PLC加伺服方案、单片机加步进方案。做一个对比更直观方案稳定性灵活性成本适合人群机械计数器计数尚可无法自动排线换向几乎没有最低偶尔绕一个线圈PLC加伺服很高工业级改参数要上位机或文本屏很高小批量生产单片机加步进足够关键是算法想加什么功能自己写低爱好者和实验者我最终选择STM32F103C8T6加开环步进理由很直接PLC方案虽然稳定但两轴脉冲同步逻辑要写梯形图或者靠电子齿轮很多入门朋友不熟悉STM32官网的例程多、资料多定时器编码器模式和PWM输出可以直接复用不用额外买专用运动控制卡。开环步进对于绕线这种负载场景完全够用——绕线的阻力变化远没有铣床切削那么剧烈只要加减速设置合理基本不会失步。2.2 关键参数计算排线比例是怎么算出来的这是整篇文章里最需要耐心看的一节也是绕线机和普通电机转速控制器最大的区别。先设定几个关键参数主轴末端装一个500线增量式光电编码器接STM32定时器编码器模式4倍频后主轴每转一圈得到2000个脉冲排线机构用T8丝杆导程4mm配42步进电机步距角1.8度16细分时电机转一圈需要3200个脉冲要绕的漆包线实测外径0.3mm注意是包含漆皮的“实际直径”不是裸铜直径后面调试章节会专门讲。排线的基本要求是主轴每转过一圈排线滑台沿轴向位移一个线径也就是0.3mm。那么排线步进电机需要转多少0.3mm除以导程4mm等于0.075圈16细分下0.075圈对应的脉冲数是3200乘以0.075等于240个脉冲。所以得到核心比例主轴每转一圈输出2000个编码器脉冲对应排线电机240个脉冲。把比例化简2000比240等于25比3也就是主轴每来25个编码器脉冲排线电机应该走3步。这个25:3就是控制算法里的“电子齿轮”比例。为什么不能简单地在中断里做除法因为比例不是整数如果每25个脉冲发3步长期精度没问题但在局部回合排线电机是走走停停的每25个主脉冲走3步等于每8.33个脉冲走1步没法均匀用批量处理加余数累加的方式可以做到长期无误差。比如代码里每接收100个主轴脉冲就统一处理一次排线目标步数是100乘3再除以25等于12步这些步数在循环里均匀发出实际绕制效果肉眼看过去就是一条连续的螺旋线而不是一顿一顿的斜线。2.3 层数、匝数与换向逻辑知道了排线比例接下来解决“什么时候换方向”。设骨架槽宽为20mm线径0.3mm理论每层匝数是20除以0.3约等于66匝。需要注意实际排线时线不一定完全贴满槽宽尤其在挡板两侧要留出一点压线余量所以我一般按槽宽除以线径后四舍五入再减1来设定每层匝数防止最后一圈卡死在挡板里造成凸起。假设目标总匝数800匝每层66匝那么层数就是800除以66再向上取整等于13层。主控里维护两个变量当前匝数和当前层数。当前匝数每到66就触发一次换层动作排线电机继续向原方向走半个线径的距离然后在边缘位置原地多绕两圈再反转排线方向。这段边缘停留的逻辑非常关键如果到边就立刻反向边角的第一圈线缺乏支撑很容易滑脱塌边整层的整齐度就毁了。2.4 器件清单列一下这台机器的主要物料方便想复刻的朋友有个预算概念器件规格大概价格说明STM32F103C8T6最小系统板淘宝常见款10元左右主控57步进电机2.0N.m左右50元主轴驱动TB6600步进驱动器4A级30元主轴驱动42步进电机0.4N.m20元排线驱动A4988模块常见款5元排线驱动500线增量编码器欧姆龙或国产兼容25元主轴角度反馈T8丝杆滑台导程4mm行程100mm80元排线机构2020铝型材及配件若干60元机架轴承座加光轴SC12UU两个30元主轴支撑三爪卡盘50mm带法兰60元夹具OLED显示屏0.96寸I2C10元人机交互旋转编码器带按键5元参数调节张力器自制约20元材料20元毛毡加弹簧总成本四百出头如果手里已经有部分料比如旧打印机拆的丝杆和光轴还能再省一百。3. 机械结构制作过程3.1 机架与主轴系统机架我用2020铝型材搭了一个长400mm、宽200mm、高200mm的框架。型材的好处是组装灵活后续想加尾座、加防护罩都很方便不需要焊接。在框架中高度横装一块8mm厚的铝板作为安装底板长度方向预留出主轴和排线滑台的安装位。主轴系统是绕线机动力的核心也是精度最容易翻车的地方。我用的是一根直径12mm的45号钢光轴大概250mm长两端由两个SC12UU轴承座支撑两个轴承座的间距拉到120mm以上太近的话主轴悬伸部分容易振动。主轴一端通过一个法兰盘连接50mm三爪卡盘另一端穿过轴承座之后通过弹性联轴器连接编码器。这里有一点必须提醒编码器联轴器一定要用弹性联轴器不能用刚性套筒因为编码器轴和主轴之间做不到绝对同轴刚性连接会让编码器轴承受额外弯矩轻则波形受干扰重则把编码器轴弄断。安装顺序上先把两个轴承座固定在底板上把光轴穿过轴承座再用百分表打表找径向跳动。我反复调了快两小时才把径向跳动控制在0.05mm以内。绕普通线圈0.05mm的跳动完全没问题但如果你要绕高频变压器那种细线多层的线圈建议把主轴轴承换成一对角接触球轴承并加预紧螺母径向跳动能做到0.01mm以内。3.2 排线机构与张力机构排线机构直接买T8丝杆滑台导程4mm行程100mm配42步进电机。安装滑台时最关键的是保证丝杆轴线与主轴轴线严格平行如果不平行排线头走到两端时线嘴到骨架表面的距离会变化直接影响张力稳定性导致一侧松一侧紧。我的做法是在底板上先用一块直尺靠在主轴光轴上调整滑台基座侧面与直尺贴合再锁紧螺栓误差控制在0.1mm以内。张力机构是很多人容易忽略的部分。线轴上的线如果直接拉出来绕会因为线轴的转动惯性产生忽大忽小的张力绕出来的线包会松松垮垮。我自制了一个毛毡张力器两片500目毛毡夹住漆包线外面用弹簧压紧弹簧压力靠M3旋钮螺栓调节。线从毛毡中间穿过之后再经过一个固定在滑块上的陶瓷线嘴到达骨架。这套装置的原理很简单——毛毡对线提供一个与线速度基本无关的恒定摩擦力摩擦力大小通过弹簧压力调整。实际测试中细线0.1mm只需要让弹簧微微压住毛毡粗线0.8mm以上就需要压得比较紧。如果手摸线包时发现外层线能轻易移动说明张力太松如果绕细线时线被拉细甚至拉断说明张力太大。3.3 夹具与附件夹具我直接用了50mm三爪卡盘。对于圆形骨架可以直接用卡盘夹住一根芯轴再把骨架套在芯轴上对于方形或扁平骨架我专门车了一个尼龙方轴头插入卡盘骨架套在方轴上就不会打滑。有一个非常实用的小细节在三爪卡盘的另一侧加一个尾座顶针。对于长度超过50mm的骨架如果只用卡盘夹持一端另一端会在绕线时因离心力甩动导致线排不齐。我的尾座是用的一个旧的M10丝杆加一个青铜顶尖高度可调顶住骨架尾部中心孔后锁死实测能显著改善长骨架的绕制质量。排线滑块上还要固定线嘴。线嘴我建议用陶瓷眼或者不锈钢管内孔比线径大两倍左右比如绕0.3mm线就用内径0.6mm到0.8mm的线嘴。线嘴安装位置尽量靠近骨架表面距离在5mm到8mm之间太远的话线来回摆动的幅度会被放大排线就不齐了。4. 电气系统与嵌入式控制实现4.1 驱动方案与接线控制板选STM32F103C8T6最小系统板外围电路很简单。主轴步进电机由TB6600驱动器驱动方向信号和脉冲信号由主控的PA9和PA8提供PA8配置成TIM1通道1的PWM输出通过改变PWM频率就能改变主轴转速实现梯形加减速。排线步进电机由A4988驱动脉冲和方向信号分别接PB0和PB1。编码器使用的是500线增量式光电编码器A相和B相分别接PA0和PA1配置为TIM2的编码器模式。这个模式非常方便硬件电路会自动根据两相相位差计数不用软件去判断正反转而且有硬件滤波对振动干扰的抵抗能力比普通外部中断强很多。接线要注意的一点是步进驱动器电源和编码器信号线绝对不能走同一根线槽编码器线我用双绞屏蔽线屏蔽层单端接地避免步进电机启停时产生的尖峰脉冲干扰计数。第一次装机时我图省事把线捆在一起结果一启动电机计数就开始乱跳排查了很久才找到原因。显示和交互部分用I2C接口的0.96寸OLED接PB6和PB7参数调节用带按键的旋转编码器接三个普通IO口。整体接线表如下信号引脚说明主轴脉冲PWMPA8TIM1_CH1主轴方向PA9高正低反排线脉冲PB0步进脉冲排线方向PB1高正低反编码器A相PA0TIM2_CH1编码器B相PA1TIM2_CH2启动按钮PB5低有效停止按钮PB6低有效OLED SCL/SDAPB10/PB11I2C4.2 排线联动与层数控制逻辑排线联动的核心代码可以浓缩成一个函数。思路是在定时器中断里周期性读取主轴编码器计数值计算与上次读数的差值再按25比3的比例用Bresenham的思想累积输出排线脉冲。这样做的好处是无论主轴转速怎么变化排线位移始终与主轴转角严格同步不会因为加减速而产生积累误差。void TIM_ISR_Handler(void) { static int err 0; int cur_count __HAL_TIM_GET_COUNTER(htim2); int diff cur_count - last_count; if (diff 0) diff ENCODER_PERIOD; // 处理计数器回绕 last_count cur_count; // 主轴25脉冲对应排线3步diff为本次中断间隔内的脉冲数 err 3 * diff; while (err 25) { err - 25; HAL_GPIO_WritePin(TRAVERSE_PULSE_PORT, TRAVERSE_PULSE_PIN, GPIO_PIN_SET); // 这里根据实际A4988要求脉冲宽度不能太窄 delay_us(2); HAL_GPIO_WritePin(TRAVERSE_PULSE_PORT, TRAVERSE_PULSE_PIN, GPIO_PIN_RESET); delay_us(2); } }这段代码初看会有点绕但它的本质很简单err里保存的是“累计需要发出的排线脉冲数量”每来25个主轴脉冲就释放一个排线脉冲余数继续累积。由于比例关系由循环里的阈值决定长期误差就是零排线头和主轴永远不会越走越偏。每层匝数的判断放在主循环里。当前匝数由编码器计数除以2000得到。当读到当前匝数达到每层预设匝数时先执行换层动作继续向原方向给出半个线径的排线步数然后原地等待主轴转过3圈让边角的线压紧再反转排线方向层数加一。这3圈的原等待时间正好也给了操作者一个观察机会确认边缘线有没有堆积。4.3 参数设定与交互逻辑和很多成品绕线机不同这台机器的所有参数都在OLED菜单里设置。启动后会依次显示四个参数线径、槽宽、目标匝数、主轴转速设定。旋转编码器可以切换选中的参数按下确认后进入编辑模式再旋转就修改数值。界面上实时显示当前层数、当前匝数、目标总匝数以及主轴当前转速。实际操作时的一个技巧是先用最低转速试绕一圈确认排线方向和线嘴高度正确再提升到目标转速。这样能避免因为排线方向设反导致整层线全部压在上一层的错误方向需要拆掉重来。对新手来说排线方向反了是最容易忽略但破坏力最大的一类错误。5. 调试过程与常见问题排查5.1 机械侧常见问题速查现象原因解决方式主轴径向跳动大轴承座安装不平行或主轴本身弯曲百分表打表松轴承座螺栓微调跳动超过0.1mm建议换轴排线到两端时线距明显变化丝杆滑台与主轴不平行重新调整滑台安装以光轴为基准测量反向排线时在边缘出现凹槽丝杆螺母回差加消隙弹簧或者程序中反向补偿我两个都做了粗线绕制时卡盘打滑骨架孔径比芯轴大用尼龙套或缠绕生料带填隙主轴高速振动骨架未顶紧或偏心加尾座顶针降低转速到400rpm以下5.2 电气与控制侧问题排查如果说机械问题是“一眼能看到”那电气问题就是反复折腾人的。我遇到最典型的是编码器计数跳变。第一版接线时编码器信号线和步进电机大电流线并行走线主轴一启动显示匝数哗哗乱跳最多一次跳了几百匝。后来把编码器线改成双绞屏蔽线并和电源线保持至少10cm距离问题才消失。其次是A4988的限流电阻电流设置太小排线电机在低速时力矩不足出现偶发性丢步导致某层排线错位。A4988电流设置要根据电机额定电流来调我用的是42步进电机额定1.2A左右A4988上的可调电阻实测运行电流调到0.8A就够用了。还有一个隐蔽问题主轴PWM频率很高时TB6600的PUL输入脉冲宽度如果不够驱动器会偶发漏脉冲。STM32定时器PWM输出默认频率高、脉宽窄我在初始化时专门把PWM频率设置为20kHz占空比50%确保脉冲宽度满足驱动器要求。这个细节很容易被忽视但漏脉冲会导致主轴实际转过的圈数比编码器计数少绕出来的总匝数看起来正常实际上线圈被绕在了不均匀的位置。5.3 实战调优张力、换向和线径实测张力调节需要一点点手感。绕细线的时候毛毡夹太紧线会被拉细匝数一样但电阻升高甚至断线绕粗线的时候毛毡夹太松线轴惯性会突然松出一大段绕出来的线包明显发“虚”。我的经验是细线绕到接近满层时因为排线直径累积骨架实际外径变大线速度增加摩擦力会略微变大这时如果机械张力机构无法自动调节可以在程序里做一点点速度补偿——当层数超过一半后主轴目标转速降低10%到20%给张力机构一个缓和空间。换向塌边问题我在前面提过程序里加边缘停留逻辑后基本解决。具体参数每层最后一圈到位后排线继续输出0.5倍线径步数然后保持排线不动主轴再转2到3圈。停留在边缘的这几圈会把边缘线压实给下一层反向排线提供一个稳定的侧壁。线径实测是我绕线机做好之后一个多月才踩进去的坑。0.3mm的漆包线如果只看标签型号按裸铜线径算绕出来的层数和预计差不少漆包线型号里的0.3通常指裸铜直径加上漆皮实际外径可能在0.33mm到0.35mm。绕线机的每层匝数、排线比例都应该按千分尺量出来的实际外径算否则会出现“算着能绕完实际还有一半线没排完”的尴尬。建议每一位做绕线机的朋友先把要绕的线用千分尺在不同位置量三次取平均值。5.4 控制逻辑的进一步扩展空间这台机器目前的控制逻辑对应的是最常用的“等线径、等槽宽”平绕场景,其实这个框架可以很容易扩展出一些进阶功能。如果绕制的是锥形绕组或者阶梯绕组——比如某些音频变压器要求初级绕组从窄端到宽端渐变排布——那排线比例就不再是固定值而是随层数变化的函数。现有代码里把排线比例参数改成查表方式每层重置一次比例就能实现不需要改硬件。如果后续加入断线检测在张力机构的毛毡后面装一个轻触开关线断后弹簧杠杆回弹触发IO中断程序里立刻停止主轴并报警可以避免断线后主轴继续转导致的面目全非。我就计划下一步加这个功能操作体验会再上一个台阶。还可以加的参数是“边缘停留圈数”对不同的线径边缘需要的停留圈数不同。细线1到2圈就够粗线可能要3到4圈。这种参数化调整其实是一台DIY绕线机最舒服的地方——反正是自己的代码想怎么改就怎么改。6. 最后再聊几句实操心得这台绕线机做好之后我拿它绕了一个输出变压器初级绕组和一个电磁阀线圈效果都很理想。输出变压器初级绕组是0.25mm线绕了12层每层75匝排线整齐到可以拿给朋友炫耀的地步这放在手工时代完全不敢想。最想对想动手做的人说的一句话是别想着一步到位第一台机器能用、能绕出一个看得过去的线圈就行后面的心态和需求都会变。我第一次做绕线机也走了很多弯路光是主轴跳动就调了两三个晚上但如果因为这些困难就不动手永远只能被手工绕线的痛苦折磨。先把条件最基础的方案搭起来解决计数和排线同步两个核心问题再去优化张力和断线检测每一步都有实实在在的反馈。如果你在做绕线机时也遇到类似的问题欢迎在评论里交流尤其是排线比例算法和边缘换向这些细节每个人的方案不同多碰撞说不定能碰撞出更好的思路。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。