当前位置:文档之家› 本教程介绍步进电机驱动和细分的工作原理

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

本教程介绍步进电机驱动和细分的工作原理,以及stm32103为主控芯片制作的一套自平衡的两轮车系统,附带原理图pcb图和源代码,有兴趣的同学一起来吧.本系统还有一些小问题,不当之处希望得到大家的指正.一.混合式步进电机的结构和驱动原理电机原理这部分不想讲的太复杂了,拆开一台电机看看就明白了。

电机的转子是一个永磁体,它的上面有若干个磁极SN组成,这些磁极固定的摆放成一定角度。

电机的定子是几个串联的线圈构成的磁体。

出线一般是四条线标记为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+…这时我们会看到电机向反方向运动。

这里每切换一次相电流电机都会转动一个很小的角度,这个角度就是电机的步距角。

步距角是步进电机的一个固有参数,一般两相电机步距角为1.8度即切换200次可以让电机转动一圈。

这里我们比较正反转的电流顺序可以看出A+和A-;B+和B-的交换后的顺序和正反顺序是一致的,也就是前面所说的”任意一相正负对调电机将反转”。

以上为四排工作方式,为了使相电流更加平滑另外可以使用八排的工作方式即: A+;A+B+;B+;B+A-;A-;A-B-;B-;B-A+;从前往后循环正转,从后往前循环反转。

为了用单片机实现相电流的正负流向控制必须要有一个H桥的驱动电路,这种带H桥的驱动模块还是很多的,比较便宜的是晶体管H桥比如L298N,晶体管开关速度比较慢,无法驱动电机高速运动。

有些模块将细分控制电路也包含在内,我们也不用这种,因为我们的细分由软件控制。

实际应用中使用ST的mos管两桥驱动芯片L6205一片即可驱动一台步进电机。

有了H桥通过PWM就可以控制相电流大小,改变输入极IN1、IN2的状态(参看手册第8页)可以控制相电流的方向。

二.细分的原理和输出控制从这里开始重点了,别的地方看不到哦。

一个理想的步进电机电流曲线应该是相位相差90度的正弦曲线如下图:图中蓝色线时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度的正弦波形就是理想的步进电机驱动器了,调制出的正弦波形的频率就是步进电机的转速,正弦的幅值就是步进电机的转矩。

这个听起来貌似不难啊,但是你不要忘了调制出的正弦是有要求的。

第一要有一定的驱动能力步进电机的功率越大驱动能力要求也越大。

第二要能够保持90度的相差前提下改变正弦的频率,这样才能够驱动电机按不同的转速运转,步进电机的旋转方向实际上是两条正弦波的相位点顺序。

第三最好能够调幅,调整幅值能够实现电机的恒力矩输出,调幅的实际意义还不止这些后面再讲。

总之一句话就是通过pwm调制输出可以调频调幅的两路固定相差的正弦波。

(如果是三相步进电机应该是相差各位120度的三路正弦波,原理是一样的。

)上面那个图和两相步进电机驱动的关系可能有些疑惑"真的是这样的吗?",我们在这里再安排一个试验。

我们知道电动机和发电机是两个可逆的过程,因此我们可以用步进电机来当发电机。

很简单的实验,我们把步进电机的两相引线接到双踪示波器输入上,然后找个电机带着转轴运转(我是用一个手电钻夹住电机的转轴,我的这个手钻是可以正反转的)。

保持稳定的转速,你会在示波器上看到上面那个图:即两路相差固定的完美的正弦波,当转速增大时幅值和频率都有变化(线性关系),并且正转和反转时两路正弦相位位置不同,如果你能够确定转速的话你还可以验证以下周期、转速、步距角之间的关系。

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

下面我们展开正弦调制的讨论,这部分是核心的部分将占很大的篇幅,你放心我绝对不会罗列一大堆的数学式在教程里,不然怎么能叫超级无敌呢?教程超级无敌,这个stm32实现的驱动程序也是超级无敌的(吼吼)。

但是“载波比、spwm、死区、单双极性”这几个词如果你觉得很陌生的话建议你还是要看看电力电子课程的相关章节基本概念还是要有的。

三.spwm运算和输出Spwm的产生可以分为软件方法和硬件方法,硬件方法通过硬件产生一路三角波一路正弦波,经过一个比较器比较正弦波幅值与三角波幅值的关系即可得到spwm波。

这种方法也应用于很多spwm集成芯片/view/ac55b849767f5acfa1c7cd4e.html.硬件方法在波形产生上不需要软件参与,并且调频和调幅控制上都是比较简单的。

硬件方法的功能和性能取决于芯片本身,对于比较复杂的应用上会受到限制。

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

其实软方法和硬方法也并不是绝对的,比如ti的dsp芯片内部的spwm 发生器,他的做法是在内存中存储一张正弦表,然后用一个和定时器时钟同步的计数器正负计数模拟一个三角波,每个时钟将正弦表的值与三角计数值作比较输出即得到spwm,实际上可以看成是一种半软件半硬件的做法。

软件方法的优势在于成本低且更灵活,成本低不用说了,灵活性上举个例子:调制正弦波性的极性是由独立的控制位实现的(双极性),如果输出标准的正弦波形硬方法需要三角波发生器和正弦波发生器的起始点精确对齐,这在硬件电路实现上需要附带锁相环电路才能保证,而软件方法则不需要任何附加操作。

现在为了改善步进电机的驱动性能,我们希望极性翻转点落后输出几个微秒,要做到这一点硬件方法改动肯定是难上难,而软件方法上只需要增加个定时滞后输出就行了。

为了减少运算开销也可以使用查表法,把计算好的spwm数据存储在rom里,按顺序输出表中的值即可。

这种方法的数据计算可以在pc机上通过matlab软件进行,将数据算好粘贴到源程序中就可以了。

查表法的局限在于参数的变化和存储开销的矛盾,参数越复杂占用存储空间越大。

(1)三角波向锯齿波的转换载波为三角波时输出的是一个左右不对称的pwm波形,只有这种波形能够调制出半周期对称的正弦波,这种方法称为非对称的自然采样法。

其它方法(规则采样等效面积…)都是为了减小计算量或不得以而采取的近似方法。

非对称pwm开点与关闭点没有必然关系,必须由中央对齐的pwm模式通过一个周期的两次更新来输出。

三角波可以看成是两个锯齿波的组合,因此我们可以通过锯齿波的数据来简化程序结构。

我们比较下面三张图:图1是一个锯齿波幅值为1,载波比N=16,正弦幅值0.5,正弦与锯齿波相差为半个锯齿波周期;图2是图1水平翻转的结果;图3是图1和图2的叠加结果。

图三中看到三角波形的spwm数据了吗?没错就这么简单,锯齿波正弦幅值比为2:1,相差半个锯齿波周期,计算出来的数据首尾组合成三角波数据。

算法上就很简单了,假设数组中存放上述的锯齿波spwm数据,编号0~15共16个,依次取0,1,2, (15)为三角波形开点输出数据,则反向取15,14,13,…0为三角波形关点数据即可。

特别的如果载波比为奇数时三角波也为奇数,中间的数自然和自己组合的数据仍然是正确的。

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

至此我们可以使用锯齿波的方法计算按三角波的数据输出。

(2)spwm迭代运算为计算spwm占空比首先要求得锯齿波斜线与正弦交点,即方程KX+B=Y与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的周期值有关系的,因此为了计算定时器通道值还需要一个周期值,对于stm32f这个值就是定时器ARR寄存器的值,它决定pwm周期(或频率)。

附件中有个matlab_spwm.rar,matlab下计算定时器spwm数值和绘图的小工具上面几个图就是用它画的,开始部分可以置参数s_M=32768/65536 %正弦波幅值比0~1s_N=16 %半周期三角波个数s_Pre=16384 %单片机定时器模数值执行分为三部分,计算spwm数据;将数据按周期值换算为定时器设定值;画图;计算定时器设定结果在TimerSetting中,复制粘贴替换tab字符成逗号就行了,下面是上述参数的计算结果:1780 5246 8444 11221 13461 15088 16063 16384 16075 1518213764 11893 9645 7102 4346 1463(3)spwm实时运算的优化如前所述简单的应用查表法就可以解决了但是复杂一点的功能就不能满足要求了,比如步进电机大范围调速、不同转速下恒力矩输出、恒加速运动等等。

相关主题