基于STM32设计的步进电机双控系统|毕业设计项目|单片机项目|物联网设计|毕设

一、项目介绍
摘 要
工业自动化技术不断快速推进,在此情形下,步进电机成了精准运动控制里关键的执行部件,被广泛用在数控机床,3D打印机,机器人等诸多领域。以往的单电机控制体系不能适应复杂设备对于多电机协同工作的需求,而且现存的双电机控制技术存在同步精度不够,动态响应慢等状况,于是,本文便设计并完成了一套依托 STM32 的步进电机双控系统,这个系统把 STM32F103RCT6 微控制器当作核心部分,利用两片单独的推动芯片,依靠高级定时器来产生精确的步进脉冲,再加上增量式编码器达成对位置和速度的闭环反馈,在控制算法上,规划了 S 曲线和梯形曲线加减速算法从而改善电机启停的效果,用位置 - 速度双重闭环串级 PID 控制策略来确保定位的准确性,凭借主从同步机制结合时间戳对齐技术做到双电机脉冲级别的同步。 硬件电路设计重视提升抗干扰能力,采用多级隔离供电及光耦隔离方案,有效地抑制了驱动电路对控制电路的电磁干扰,软件方面,遵照模块化理念完成了底层驱动,控制算法以及人机交互功能的开发,系统检测结果表明,此方案可达成双电机的独立控制,同步启停及速度协同,同步误差被控制在1ms以内,定位精度达0.05mm,符合工业自动化领域对高精度双电机控制的需求。
关键词:STM32;步进电机;双控系统;双闭环PID;主从同步;S曲线加减速
主要研究内容
本课题以STM32微控制器为核心,围绕双步进电机的高精度控制与协同运行展开研究,主要研究内容包括以下几个方面:
(1)系统总体方案设计:要分析双电机控制系统的功能需求,从而确定系统的总体架构,还要合理选择主控芯片,推动芯片,反馈模块等核心元器件,并明确关键技术指标。
(2)硬件电路设计与实现:设计多级隔离供电电路,以规避驱动电路和控制电路间的电磁干扰,要完成STM32最小系统电路,步进电机推动接口电路,编码器反馈电路以及通信接口电路的设计,并执行合理的PCB布局,从而确保信号传送的稳定性和准确性。
(3)核心控制算法研究:改良 S 曲线,梯形曲线的加减速算法,规避电机启停时的冲击与震动,规划出位置 - 速度双闭环串级 PID 控制算法以确保定位精度及动态响应特性,按照主从同步方案,并利用时间戳对齐方法来弥补通信时延,达成双电机脉冲级同步。
(4)软件系统开发:按照模块化思维去开展底层推进程序,控制算法程序以及人机交互程序的开发工作,从而达成双电机单独控制,同步开关机,速度关联等相关功能。
(5)保护机制设计:设计包含过流保护,限位保护,失步检测与补偿在内的多种保护机制,从而改善系统运行时的安全性与可靠性。
(6)系统测试与验证:创建实验检测平台,全方位考察系统功能指标与性能指标,以此证实设计方案是否有效。
系统功能需求分析
本课题设计的STM32步进电机双控系统需满足以下功能需求:系统要有两种电机控制模式,分别是独立控制,同步启停和速度耦合协同,独立控制时,两台电机不会互相影响,分别按照自己的运动指令行事,同步启停的意思就是,两个电机得到指令之后要一起开始或者停止工作,这样才能保证动作一致,而速度耦合协同,则是让电机按照预先设定的比例来调节速度,从而满足主从跟随或者电子齿轮之类的用途需求。在精度控制上,系统得要有高精度定位功能,定位误差最好别超过0.1mm,细分驱动技术可以提升步进电机的分辨率,再加上增量式编码器达成位置的闭环反馈,这样就能去除长时间运行所积聚的误差。 加速减速控制的时候,系统要整合S曲线和梯形曲线加速减速算法,防止电机在启动,停止或者速度改变时因为加速度突然变化而出现冲击,抖动甚至失步的情况,从而让电机的运行变得平稳顺畅,运动噪音减小,机械冲击减弱。
系统要有完备的状态监测及保护机制,该机制包含即时状态监测功能,即系统可监测电机的当前位置,速度,方向以及故障状态等信息,而且经由人机交互界面来表现。还要依靠编码器及时获取反馈信号以供闭环控制之用,而诸多保护机制涵盖过流保护,限位保护以及失步判断与修正功能,一旦驱动电流超过安全界限便立即停止输出,凭借限位开关信号来防范机械运动超越安全范围,随时留意电机是否会失步,一旦察觉失步就自动执行修正或者发出警报。在人机交互层面,系统应当支持本地控制和远程控制这两种模式,本地控制借助按键,旋钮来设置参数并下达指令,再由 OLED 显示屏即时显示系统的状态;远程控制经由串口通信从上位机获取指令,并反馈自身的运行状况,关于通信接口的拓展事宜,除了基本的串口通信之外,还保留 CAN 总线接口,从而为日后达成更长距离,更为稳定的工业组网控制构筑根基。
系统总体架构设计
前面阐述了功能需求之后,本系统便采取分层模块化的设计思路,把系统分解成四个大的层级,主控层,推动层,执行层以及交互层。其中,主控层以STM32F103RCT6微控制器为主,承担整个系统控制逻辑的计算任务,并负责各类任务的调度安排,其具体职责涵盖对来自上位机或者本地输入的指令加以分析解读,计算运动轨迹与速度曲线,产生两条各自独立的PWM脉冲信号以及方向信号,还要采集编码器所反馈回来的信号以执行闭环控制,识别限位开关以及各种故障信号,和OLED显示屏和按键完成交互对接,经由串口向上传递信息给上位机,这个型号的STM32F103RCT6自带很多个定时器,可以达到双路PWM信号的产生目的,也能满足诸多路编码器信号的收集需求,推动层则选用两片彼此独立的步进电机推动器(比如说是 TB6600或者DM542之类),把主控芯片发送出去的微弱电控制信号转换成足以推动电机运作的强劲电力电流,该推动器具备细分功能,经由拨码开关就能够预设细分倍率,最大可做到32次细分,这种细分手段不但能缩减电机在低速转动时产生的抖动现象,而且还能明显优化定位准确度,推动层同控制层经由光耦来达成电气方面的隔离,从而规避推动电路里高压大电流对控制电路造成不必要的干扰影响。
执行层包含两台两相混合式步进电机及其配套的增量式编码器,步进电机把驱动器输出的脉冲信号转化为精准的角位移,推动机械负载运动。增量式编码器安装在电机轴或者丝杠末端,可以随时采集位置和速度信息,并反馈给主控层以执行闭环控制,该编码器采用500线或者1000线规格,结合 STM32 的编码器接口模式之后,能够达成四倍频处理,从而进一步提升反馈精度,交互层覆盖有人机交互设备以及通信接口,其中的人机交互设备利用一块0.96 英寸 OLED 显示屏加按键,主要用于本地开展参数设置及显示状态;通信接口存在 USB 转串口模块,用以同 PC 端的上位机展开通信,接收控制指令并传送状态信息,而且也保留了 CAN 总线接口,给日后可能的工业组网扩充留有余地。 系统运行时,上位机经由串口向STM32主控芯片传达控制指令,主控芯片分析该指令之后,按照预置的控制模式及算法来计算两台电机分别所需的目标脉冲频率,目标脉冲数量和方向,经由定时器产生并输出PWM脉冲与方向信号到对应的驱动器当中,这些驱动器再把脉冲信号加以放大以带动两台步进电机运行起来。增量式编码器会即时获取电机的真实位置和速度,并将这种反馈传递给主控芯片,而主控芯片依照反馈信号和给定值之间的差异,利用PID控制器及时调整输出的脉冲,以此创建闭环控制系统,在整段运行期间,系统持续检测诸如过流,限位之类的故障信号,只要发觉异常就会立刻实施保护动作,并借助OLED显示屏和串口把这些故障信息告知用户。
核心器件选型分析
核心器件的合理选型会给系统性能带来基本保证,主控芯片采用了 STM32F103RCT6 这款,它以 ARM Cortex - M3 内核为依托,其最高工作频率可达 72MHz,具备单周期乘法以及硬件除法指令,可以符合控制算法随时计算的要求。在存储资源上,它自带 256KB 的 Flash 和 48KB 的 SRAM,足够容纳复杂的控制算法代码以及数据缓冲区,特别重要的是,此芯片包含诸多外设资源,其中 8 个定时器可轻易生成多路互不干涉的 PWM 波,从而满足双电机控制对于定时器资源的需求,而且,高级定时器具备互补输出和死区插入功能,利于日后对步进电机实施更为精确的控制。 芯片预置有3个16通道12位ADC,2个I2C接口,3个USART接口,1个CAN接口等外设,给系统功能拓展给予了充分的空间,该芯片采用LQFP64封装,其引脚数量较为合适,既能满足功能需求,又方便PCB的布局布线。
步进电机采用42系列的两相混合式步进电机,此系列电机的步距角是1.8°,也就是说每转需200个脉冲,若用16细分驱动,则每个脉冲对应的步距角为0.1125°,当与丝杠导程4mm适配时,位置分辨率可达到0.00196mm,这足以满足定位精度小于0.1mm的需求,电机保留的转矩大致在0.40.5N·m之间,可以带动中小型负载,体积较为合适,性价比较高,属于工业自动化和教学实验常用的型号,驱动器选用了TB6600或者DM542这种步进电机驱动器,这两种驱动器都是工业级别的产品,其细分设置可由4到16挡,只需通过拨码开关就能轻松调节,而且输入信号经由光耦实现隔离,可以直接接受3.3V或者5V的控制信号,它们还带有自动半流锁定的功能,即电机停顿时会自行减小电流来缩减发热,而且包含过流,过压,过热等完备的保护措施,其工作电压范围很宽(942V),最大输出电流可达4A,能够带动42系列,57系列的步进电机。 编码器选择欧姆龙E6B2 - CWZ6C型增量式编码器,其分辨率为500线/转,它输出 A, B两相正交脉冲以及 Z相零位脉冲,采用集电极开路输出,工作电压为5 ~ 24V。500线分辨率结合 STM32的编码器四倍频功能,这样每转就可产生2000个计数脉冲,其角度分辨率为0.18°,配合丝杠导程为4 mm时,位置分辨率为0.002 mm,从而满足高精度控制需求,电源模块采取分级供电方案,主电源用24V/10A开关电源给两个步进电机驱动器供电。24V电源经过LM2596降压模块转换成5 V,给OLED显示屏,编码器和光耦隔离器的输出侧供电,5 V电源再经由AMS1117 - 3 . 3LDO稳压器转换成3.3 V,供给STM32芯片及其外围电路供电,这样的分级供电设计规避了电机负载波动给MCU电源带来的影响,提升了系统的稳定性。
二、文档介绍




三、項目设计
底层驱动程序设计
底层推动程序承担着硬件操作达成的重任,其中包含许多模块,比如GPIO的初始化,定时器PWM输出,ADC采集以及串口通信模块,GPIO初始化程序负责设定各个控制引脚的工作模式,步进电机的STEP引脚需被设置为复用推挽输出以生成PWM信号,DIR和EN引脚则应设为通用推挽输出来发送方向与控制信号,按键引脚要设为上拉输入,而ADC引脚则要设为模拟输入。
定时器PWM输出程序利用TIM8定时器的通道3与通道4,向步进电机的ST1引脚和ST2引脚输出两路PWM信号,定时器的设置包含预分频值,自动重装载值,计数模式以及PWM模式的设定,PWM信号的频率取决于自动重装载值和预分频值,其占空比被设置成50%,这样在每个周期就会出现上升沿,经由改变自动重装载值,能够轻易调节PWM频率,进而控制步进电机的转速。
ADC采集程序把ADC1的通道10即PC0引脚设为单次转换模式,依靠软件触发来启动转换,为提升测量精度,采取多次采集求平均值的策略,每回读取10次ADC值,舍弃最大值与最小值之后计算剩余值的平均数,串口通信程序针对USART2和USART3执行设置,USART2用以雷达数据的接收,USART3负责蓝牙通信,其波特率被设定为115200,数据位为8位,停止位为1位,没有校验位,而且开启了接收中断功能。
步进电机控制算法设计
步进电机控制算法主要包括驱动时序控制、细分控制实现和加减速控制。驱动时序控制的核心是生成符合要求的STEP脉冲信号。每个STEP脉冲的上升沿使电机转动一个步距角,因此电机的转速与脉冲频率成正比:转速(rpm)=(脉冲频率(Hz)×60) / (每转脉冲数),每转脉冲数同细分设置相关,不细分时是200,32细分时变为6400。
细分控制依靠硬件设置达成,利用拨码开关设置MS1,MS2,MS3的状态就能选定不同的细分模式。软件方面无需特别处理,只须按照所选细分模式调整脉冲频率与脉冲数的对应关系即可,譬如想要得到相同的转速,32细分情况下要输出的脉冲频率是不细分时的32倍。
加减速控制对于步进电机能否稳定运行十分关键,步进电机在启动和停止的时候,如果速度变化太快,就很容易发生掉步或者过冲的情况,这个系统采用了梯形加减速算法,在启动时慢慢提升脉冲频率,而在停止时则逐步减小脉冲频率,加减速的过程依靠定时器中断来达成,在每次中断服务程序当中都会调整定时器的自动重装载值,以此来改变PWM的频率,而且加减速的斜率按照电机最大的启动频率以及负载状况来进行设置,保证电机可以做到平稳的启动和停止。
应用层功能设计
应用层功能主要包括各工作模式的实现和人机交互处理。系统支持五种工作模式:APP遥控模式,雷达避障模式,雷达跟随模式,沿墙壁走直线模式以及ROS模式,这些模式的切换靠按键或者蓝牙指令来完成,当下的模式会在OLED显示屏上显现出来。
APP遥控模式经由蓝牙接收手机APP发出的控制指令,经过分析得出目标速度与方向,再借助运动学逆解算出各电机的目标转速,最终依靠PWM信号控制电机达成相应的运动,拿麦轮小车来说,要按照目标线速度和角速度来计算四个电机的转速,从而做到全向移动。
雷达避障模式依靠雷达得到前方障碍物的距离信息,一旦检测到障碍物距离低于安全阈值,就会自动调整运动方向来实施避障,雷达跟随模式经由剖析雷达数据识别目标物体的位置,从而操控小车跟随目标移动,而沿墙壁走直线模式利用雷达测量小车与墙壁之间的距离,并借助 PID 算法维持小车与墙壁平行且距离恒定。
ROS 模式经由串口与上位机开展通信,它会接收 ROS 系统所发出的控制指令,而且把小车的状态信息反馈给 ROS 系统,此模式给后续的智能算法研究以及多机协作控制给予了接口,在每种模式当中,OLED 显示屏会及时更新其所展示的内容,电压检测程序一直监测着电源电压,一旦电压过低就会在显示屏上做出提示。
STM32F103RCT6最小系统
STM32F103RCT6属于32位微控制器,其核心采用了ARM Cortex - M3内核,其工作频率可达到72MHz,具备单周期乘法以及硬件除法指令,这可满足步进电机控制算法对于即时计算性能的要求,它的最小系统包含四个关键部分即电源电路,时钟电路,复位电路以及调试接口电路,其中电源电路把外部提供的5V电压经由低压差线性稳压器转变成稳定的3.3V,进而给处理器核心,片上外围设备还有I / O 口供应工作所需的电压,在电源输入端设置滤波电容,以此来去除高频噪声干扰。时钟电路把8MHz的无源晶振当作外部高速时钟源,并且依靠内部震荡电路产生稳定的时钟信号,这个信号经过锁相环PLL放大之后就得到了72MHz的系统主频,而且还外加32. 768kHz的晶振来给实时时钟RTC给予低功耗的计时时钟,复位电路利用按键复位法,当使用者按下手动复位键的时候,NRST引脚就会被拉低从而生成复位信号,使得处理器得以重新开始执行程序,这个复位引脚另外接有上拉电阻,这样在正常运行期间就能维持高电平状态。 调试接口采取 SWD 串行调试方式,只需 SWDIO 和 SWCLK 两根信号线便可达成程序下载与在线调试的功能,相比于传统 JTAG 方式而言,这种做法可以节省宝贵的 I/O 引脚资源。
C12H主控板上,STM32F103RCT6的引脚资源按照步进电机控制需求做了合理安排,其中,PC8和PC9设置为定时器8的通道3与通道4输出,用来生成两路不同的PWM脉冲信号,再分别接到两个D36A驱动模块的ST1和ST2引脚上,依靠脉冲频率来调节电机转速,脉冲数量则控制电机转角。PC13和PC14设置成通用推挽输出,用来操控步进电机的旋转方向,它们分别对应DIR1和DIR2引脚,高电平代表正转,低电平则表示反转,而PD2和PC12同样被设定为通用推挽输出,用以调控驱动芯片的使能情况,相应地接到EN1和EN2引脚上,当处于高电平的时候,驱动芯片就能够启动输出功能,若是低电平,则芯片会转入休眠模式从而减小功耗,另外,PC0被设为模拟输入模式,并接入电压检测电路以获取电源电压信息;PB15则是上拉输入模式,经由它连接用户按键以便监测按键的按压情况;至于PA9和PA10,则是复用推挽输出和浮空输入形式存在,其PA9充当串口1的发送端,PA10担当串口1的接收端,如此一来就能完成程序的上传工作并输出调试相关的信息。


总 结
本文着眼于工业自动化领域高精度双电机协同控制的需求,设计并达成一个依靠STM32的步进电机双控系统,在系统方案设计上,深入剖析双电机控制系统的功能需求,明确独立控制,同步启停以及速度耦合协同这三种工作模式,并选定STM32F103RCT6作为主控芯片,从而确定系统整体框架,完成关键器件的选取,给出定位精度为0.05mm,同步误差小于1ms等重要技术指标,为后续的设计和执行形成稳固根基,就硬件电路设计而言,要完成STM32最小系统电路,步进电机驱动接口电路,编码器反馈电路,电源管理电路以及人机交互接口电路的设计与达成,经由光耦隔离技术做到控制电路和驱动电路之间的电气隔离,利用分区布局和多层板设计有效地提升系统的抗干扰能力,进而保障其在工业环境里稳定可靠地运行。
软件系统开发上,依靠前后台系统架构,完成了底层推动程序,控制算法程序以及人机交互程序的开发,达成了双路PWM脉冲产生,编码器信号处理,S曲线与梯形曲线加减速控制,位置 - 速度双闭环串级 PID 控制,主从同步控制等核心功能,保护机制设计方面,制定了过流保护,限位保护,失步检测与补偿等很多保护机制,提升了系统运行的安全性和可靠性。系统检测验证方面,塑造起完备的检测平台,针对系统的各个功能及性能指标展开全方位检测,检测结果显示,该系统可以达成双电机的单独控制,同步启停和速度协调一致,其定位精度为0.05毫米,同步误差低于1毫秒,各项指标皆符合设计要求,从而证实了系统方案具有可行性,技术具备有效性。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)