产品展示

本教程介绍步进电机驱动和细分地工作原理

日期: 2025-08-02 来源: 8亿彩票网app使用方法app 阅读: 1

  本教程介绍步进电机驱动和细分的工作原理,以及stm32103为主控芯片制作的一套自平衡的两轮车系统,附带原理图pcb图和源代码,有兴趣的同学一起来吧.本系统还有一些小问题,不当之处希望得到大家的指正.

  电机的转子是一个永磁体,它的上面有若干个磁极SNB成,这些磁极固定的摆放成一定角度。 电机的定子是几个串联的线圈构成的

  磁体。出线一般是四条线标记为A+,A-,B+,B-。A相与B相是不通的,用万用表很容易区分出来,至于各相的 +-出线实际是不用考虑的,

  任意一相正负对调电机将反转。另外一种出线是六条线的只是在A相和B相的中间点做两条引出线别的没什么差别,六出线的电机通过中间出线到A城A-的电流来模拟正向或负向的电流,可以在没有负相电流控制的电路中实现电机驱动,从而简化驱动电路,但是这样的做法任意时刻只有半相有电流,对电机的力矩是有损失的。步进电机的转动也是电磁极与永磁极作用力的结果,只不过电磁极的极性是由驱动电路控制实现的。

  我们做这样的一个实验就可以让步进电机转动起来。1找一节电池正负随意接入到A相两端;然后断开;(记为A正向)2再将电池接入到B相两端;然后断开;(记为B正向)3电池正负对调再次接入A相;然后断开;(记为A负向)4保持正负对调接入B相;然后断开;(记为B负向)…如此循环你会看到步进电机在缓慢转动。注意电机的相电阻是很小的接通时近乎短路。我们将相电流的方向记录下来应该

  为:A+B+A-B-A+…,如果我们更换接线顺序使得相电流顺序为A+B-A-B+A+-这时我们会看到电机向反方向运动。这里每切换一次相电流电机都会转动一个很小的角度, 这个方面就是电机的步距角。步距角

  次可以让电机转动一圈。这里我们比较正反转的电流顺序能够准确的看出A+和A-;B+和B-的交换后的顺序和正反顺序是一致的, 也就是前面所说的”

  任意一相正负对调电机将反转”。以上为四排工作方式,为了使相电流更加平滑另外能够正常的使用八排的工作方式即:

  的驱动电路,这种带H桥的驱动模块还是很多的,比较便宜的是晶体管H桥比如L298N,晶体管开关速度比较慢,无法驱动电机高速运动。有些模块将细分控制电路也包含在内,我们也不用这种, 因为我们的细分

  由软件控制。实际应用中使用ST的mos管两桥驱动芯片L6205一片即可驱动一台步进电机。有了H桥通过PW嗷能控制相电流的大小,改变输入极IN1、IN2的状态(参看手册第8页)能控制相电流的方向。

  图中蓝色线时A相电流,红色线是B相电流。如果把A相正负极值视为A+A-,B相正负极值视为B+B-,比较一下四拍方式正转A+B+A-B和反转A+B-A-B环难看出四排方式其实就是用一个脉冲来代替一个正弦半周期,相位点从左到右变化则电机正转, 从右到左电机反

  转。类似的我们把八拍方式A+;A+B+;B+;B+A-;A-;A-B-;B-;B-A+;放到曲线里也能够找到对应点,图中标出了各拍的相位点 1,2,3…,不难看

  出用A+B+弋替第2拍点用B+A玳替第四拍点都是近似的做法。那么这种近似和理想情况的电流的差值去哪里了呢?这些电流被无谓的消耗掉了而且多余的电流会引起电机转动的不平稳。 为何需要细分呢?实际

  细分的终极目标就是在正弦的周期中插入若干个点使得相电流接近正弦变化,细分能大大的提升定位精度和电机运转的平稳性。

  不难啊,但是你不要忘了调制出的正弦是有要求的。第一要有一定的驱动能力步进电机的功率越大驱动能力要求也越大。第二要能够保持 90

  止这些后面再讲。总之一句话是通过pwm调制输出可以调频调幅的两路固定相差的正弦波。(如果是三相步进电机应该是相差各位 120度的

  上面那个图和两相步进电机驱动的关系可能有些疑惑真的是这样的吗?,我们在这里再安排一个试验。我们大家都知道电动机和发电机是两个可逆的过程,因此我们大家可以用步进电机来当发电机。很简单的实验,我们把步进电机的两相引线接到双踪示波器输入上,然后找个电机带着转轴运转(我是用一个手电钻夹住电机的转轴,我的这个手钻是可以正反转的)。保持稳定的转速,你会在示波器上看到上面那个图:即两路相差固定的完美的正弦波,当转速增大时幅值和频率都有变化 (线

  性关系),并且正转和反转时两路正弦相位位置不同,如果你能够确定转速的话你还可以验证以下周期、转速、步距角之间的关系。

  步进电机的驱动要比逆变器、伺服电机驱动复杂的地方在于需要大范围的变频,如果能做好这个步进电机的驱动器其它那两个就不成问题了,至少在波形调制上绝对没问题了,它们的基础原理是通的。

  下面我们展开正弦调制的讨论,这部分是核心的部分将占很大的篇幅,你放心我绝不会罗列一大堆的数学式在教程里, 不然怎么

  能叫超级无敌呢?教程超级无敌,这个stm32实现的驱动程序也是超级无敌的(吼吼)。但是“载波比、spwm死区、单双极性”这几个词如果你觉得很陌生的话建议你还是要看看电力电子课程的相关章节基本

  Spwm勺产生可大致分为软件方法和硬件方法,硬件方法通过硬件产生一路三角波一路正弦波,经过一个比较器比较正弦波幅值与三角波幅值的关系即可得到spwm波。这种方法也应用于很多spwm集成芯片硬件方法在波形产生上不需要软件参与, 并且调频和调幅控制上都是比较

  软件方法的思路是使得pwm<以spwm的脉宽数据变化滤波后就能够获得正弦波形,通过计算得到占空比的波形数据, 按波形数据调整

  与三角计数值作比较输出即得到spwm实际上可以看成是一种半软件半 硬件的做法。软件方法的优点是成本低且更灵活,成本低不用说了, 灵活性上举个例子:调制正弦波性的极性是由独立的控制位实现的 (双

  极性),如果输出标准的正弦波形硬方法需要三角波发生器和正弦波发 生器的起始点精确对齐,这在硬件电路实现上需要附带锁相环电路才能 保证,而软件方法则不需要任何附加操作。现在为了改善步进电机的驱

  为了减少运算开销也能够正常的使用查表法, 把计算好的spwm敞据存储在rom里,

  按顺序输出表中的值即可。这种方法的数据计算可以在 pc机上通过matlab软件

  进行,将数据算好粘贴到源程序中就可以了。查表法的局限在于参数的变化和存储 开销的矛盾,参数越复杂占用存储空间越大。

  制出半周期对称的正弦波,这种方法称为非对称的自然采样法。其它方法(规则采 样等效面积 …)都是为了减小计算量或不得以而采取的近似方法。 非对称pwmfF点

  与关闭点没有必然关系,必须由中央对齐的pwm模式通过一个周期的两次更新来输 出。三角波可以看成是两个锯齿波的组合,因此我们大家可以通过锯齿波的数据来简化 程序结构。我们比较下面三张图:

  图1是一个锯齿波幅值为1,载波比N=16,正弦幅值0.5, 正弦与锯齿波相差为半个锯齿波周期; 图2是图1水平翻转的结果;图

  3是图1和图2的叠加结果。图三中看到三角波形的spwm数据了吗?没 错就这么简单,锯齿波正弦幅值比为2 : 1,相差半个锯齿波周期,计算 出来的数据首尾组合成三角波数据。算法上就很简单了,假设数组中存 放上述的锯齿波spwn®据,编号0~15共16个,依次取0, 1, 2, - -15 为三角波形开点输出数据,贝U反向取 15, 14, 13,・・・0为三角波形关点 数据即可。特别的如果载波比为奇数时三角波也为奇数,中间的数自然 和自己组合的数据仍然是正确的。

  注意这里提及的办法能够把三角波形的计算转换为锯齿波, 但并不能减少计算景,因为如果是偶数个三角波只要计算四分之一周期 就够了其他的是对称的,而锯齿波形数据需要计算半个周期。 至此我们

  为计算spwm占空比首先要求得锯齿波斜线与正弦交点,即 方程KX+B=^ Sin(X)=Y的解。这个方程是一个超越方程,只可以通过迭 代的方法计算。我们将直线方程变为 X=(Y-B)/K,首先任取一个X值(这 个值就是迭代初值),将它带入Sin(X)求一个Y值再将Y值代入(Y-B)/K 求一次X值,再将X带入Sin(X)求一个Y值…如此反复若干次后可以得 到一个结果就是方程式的解,这个就叫做迭代法。迭代次数越多;迭代 初值越接近结果精度越高。每一组数据计算有这样几个参数 1:正弦幅

  值(三角幅值与之成比例)2:载波比N值即半周期中三角波个数。另 外pwm勺占空比即定时器的通道值是和 pwm勺周期值有关系的,因此为

  计算定时器设定结果在TimerSetting 中, 复制粘贴替换tab 字符成逗

  功能就不能够满足要求了,比如步进电机大范围调速、不同转速下恒力矩 输出、恒加速运动等等。网上有很多文章介绍自然采样法的数学方法, 并给出了各种优化算法,这些算法力图精确求解三角方程与正弦方程的 交点,由于运算中带有大景的浮点运算若没有 dsp或高速浮点处理芯片

  称其为控制比(下文同)数值上=载波周期/pwm周期,同步调制方式中 此值为整数,能够理解为用多少个 pwn^期控制一个载波周期。pwm! 率其实就是开关电路的极限频率或最理想工作的频率, 假设每载波周期

  是说你算了半天大部分是毫无意义的计算,这种计算资源浪费发生在每 一次运算中,因此累计起来就比较惊人了。从另一个角度看由于 pw偷

  好理解了。对计算采取一定的优化是必须的它将直接影响系统的实时性 能。一个简单的方法就是在计算有初值后确定数据变动方向逐个可能值 比较,另一个方法就是去浮点迭代计算, 这两个方法在单片机上实现都 可行有机会再发文讨论不再详述了。

  于励磁电流的大小,很小的速度下却可以用很大的力牵引转动。而直流 电机的低速运动只能靠减小励磁电流实现 ,实际上就是小力矩实现低速 这样控制就不可能很精确特别是启停阶段尤其麻烦。 步进电机在高速时

  力矩下降很快这个原因也不难理解,因为在步进电机励磁线圈里有多组 磁极快速划过产生很大的感生电动势抵消了驱动的电压致使励磁电流 变小力矩变小。为了改善高速性能处理方法只有一个提高工作电压。根 据电机转速自动调整相电流的大小就能轻松实现恒定的力矩输出了 ,即低

  载波比N和控制比C,这两个参数和调制频率 F的关系是: F*2C*2N=TF(TF是定时器的时钟频率)

  C实际上就是定时器的模数值(ARR),他的含义是使用几个定时器时钟周 期产生一个pw倜期,前面的2是由于定时器工作在中央对齐模式下,定 时器+-计数一轮产生一个完整的三角波周期。 ARR勺取值范围不可以太

  小,因需要定时器中断来更新个通道的值,太小的数值两次更新时间 过短而没办法实现计算和更新步计数等操作。 ARR勺值如果太大则输出的

  N是载波比也就是半周期的三角波的数景,他的含义是使用几个pwm 周期调制出一个正弦周期,其实就等于我们常说的细分数,它决定一个

  正弦周期(一个步距角)内能控制的位置点的数景。 在常见的驱动器中 这个数值都是由拨码开关事先设定的,工作中是一个固定值,原因是硬 件电路无缝的调整细分度几乎是不可能的。 软件运算则没这个问题,N

  步的情况)是不需要其它测速码盘装置的,闭环控制就更加没必要了。 话又说回来如果丢步或堵转了闭环能解决吗?

  状态查表输出,带细分更少。先来梳理一下目前已经现在做到的内容, 内存中有一个数组存放整个正弦半周期的实时运算的 spwm数据,这个

  数据是根据当前的pwm^期折算过,因此每个pwm依期依次将数组内容 赋值给定时器通道值就可以在定时器通道管脚输出正弦变化的 pwm了。

  另外使用一个(16205是两个,也可以用非门)io 口来控制极性输出, 比如高电平输出正弦负半周,低电平输出正弦正半周。

  分和极性控制合为一体。首先我们用一个 s32 stepcounter全局景来做

  步进计数,它的数值与步进电机的实时位置对应,这个变景是一个很关 键的变景,因为任意时刻的AB两相spwm数据输出点和极性控制信号都 由它产生。假设我们把它的低八位视为细分步计数 (256为最大细分),

  简单,虽然这里讲一大堆但是在编程实现时你就看到了就几行搞定;不 容易出错,效率最高,你能想象的到如果涉及的变景越多操作的代码 越多需要仔细考虑的可能性越多也越容易错; 便于封装和功能扩展,比如你

  想做一个AD采样值与电机位置按一个比例同步的程序即转滑阻电机跟 着动的小玩意儿,稍微改改把 AD采样值赋给计步值其它都不用管了。

  先说第一个数据的输出,spwn®组256个,如果不考虑极性 则数据位置只和stepcounter的低8位有关,因此A相数据用 stepcounter的低8位作指针从数组取数就可以(A相0值点为计步0 值点),B相与A相相差为90度,所以A=0, 1, 2,。。。255, 0。。。 则 B=128, 129, 130,。。。127, 128。。。能看出来吗? ( A 的数据 指针+ 128) %25眸同于A的数据指针A128就是B的数据指针。

  B=0表示A相B相正半周的极性,C8是stepcounter第8位的值(最低 位为0),之所以为8是前面提到过的条件即视低 8位为微步,C7第7 位,现在stepcounter计数到0和256, A相应该翻转一次,计数到128 和128+256, B相翻转一次,由此列出真值表把逻辑关系提取出来:

  A相的逻辑和C8相同,B相的逻辑能看出来吗?B相逻辑是C8异或C7。 程序上很简单,每次stepcounter值变化时执行:

  stm32的位带操作更好。以上内容对细分度为256,128,64...时成立,如 果N不为2整数籍则会有余数个错位,N取值(即细分度)很小时影响比 较大,但不可能会产生极性错误。