本教程介绍步进电机驱动和细分的工作原理_第1页
本教程介绍步进电机驱动和细分的工作原理_第2页
本教程介绍步进电机驱动和细分的工作原理_第3页
本教程介绍步进电机驱动和细分的工作原理_第4页
本教程介绍步进电机驱动和细分的工作原理_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本教程介绍步进电机驱动和细分的工作原理和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+.这时咱们会看到电机向反方向运动。这里每切换一次相电流电机都会转动一个很小的角度,这个角度就是电机的步距角。步距角是步进电机的一个固有参数,一般两相电机步距角为度即切换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就可以够控制相电流大小,改变输入极IN—、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集成芯片硬件方式在波形产生上不需要软件参与,而且调频和调幅控制上都是比较简单的。硬件方式的功能和性能取决于芯片本身,对于比较复杂的应用上会受到限制。软件方式的思路是使得pwm波以spwm的脉宽数据转变滤波后就可以够取得正弦波形,通过计算取得占空比的波形数据,按波形数据调整pwm。其实软方式和硬方式也并非是绝对的,比如ti的dsp芯片内部的spwm发生器,他的做法是在内存中存储一张正弦表,然后用一个和按时器时钟同步的计数器正负计数模拟一个三角波,每一个时钟将正弦表的值与三角计数值作比较输出即取得spwm,实际上可以看成是一种半软件半硬件的做法。软件方式的优势在于本钱低且更灵活,本钱低不用说了,灵活性上举个例子:调制正弦波性的极性是由独立的控制位实现的(双极性),若是输出标准的正弦波形硬方式需要三角波发生器和正弦波发生器的起始点精准对齐,这在硬件电路实现上需要附带锁相环电路才能保证,而软件方式则不需要任何附加操作。此刻为了改善步进电机的驱动性能,咱们希望极性翻转点掉队输出几个微秒,要做到这一点硬件方式改动肯定是难上难,而软件方式上只需要增加个按时滞后输出就好了。为了减少运算开销也可利用查表法,把计算好的spwm数据存储在rom里,按丿I顺序输出表中的值即可。这种方式的数据计算可以在PC机上通过matlab软件进行,将数据算好粘贴到源程序中就可以够了。查表法的局限在于参数的转变和存储开销的矛盾,参数越复杂占用存储空间越大。三角波向锯齿波的转换载波为三角波时输出的是一个左右不对称的Pwm波形,只有这种波形能够调制出半周期对称的正弦波,这种方式称为非对称的自然采样法。其它方式(规则采样等效面积…)都是为了减小计算量或不得以而采取的近似方式。非对称Pwm开点与关闭点没有必然关系,必需由中央对齐的Pwm模式通过一个周期的两次更新来输出。三角波可以看成是两个锯齿波的组合,因此咱们可以通过锯齿波的数据来简化程序结构。咱们比较下面三张图:图1是一个锯齿波幅值为1,载波比N=16,正弦幅值,正弦与锯齿波相差为半个锯齿波周期;图2是图1水平翻转的结果;图3是图1和图2的叠加结果。图三中看到三角波形的sPwm数据了吗?没错就这么简单,锯齿波正弦幅值比为2:1,相差半个锯齿波周期,计算出来的数据首尾组合成三角波数据。算法上就很简单了,假设数组中寄存上述的锯齿波spwm数据,编号0~15共16个,依次取0,1,2,..15为三角波形开点输出数据,则反向取15,14,13,...0为三角波形关点数据即可。特别的若是载波比为奇数时三角波也为奇数,中间的数自然和自己组合的数据仍然是正确的。注意这里提及的方式可以把三角波形的计算转换为锯齿波,但并非能减少计算量,因为若是是偶数个三角波只要计算四分之一周期就够了其他的是对称的,而锯齿波形数据需要计算半个周期。至此咱们可利用锯齿波的方式计算按三角波的数据输出。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数值和画图的小工具上面几个图就是用它画的,开始部份可以置参数s_M=32768/65536%正弦波幅值比0~1s_N=16%半周期三角波个数s_Pre=16384%单片机按时器模数值执行分为三部份,计算spwm数据;将数据按周期值换算为按时器设定值;画图;计算按时器设定结果在TimerSetting中,复制粘贴替换tab字符成逗号就好了,下面是上述参数的计算结果:1780524684441122113461150881606316384160751518213764118939645710243461463(3)spwm实时运算的优化如前所述简单的应用查表法就可以够解决了可是复杂一点的功能就不能知足要求了,比如步进电机大范围调速、不同转速下恒力矩输出、恒加速运动等等。网上有很多文章介绍自然采样法的数学方式,并给出了各类优化算法,这些算法力图精准求解三角方程与正弦方程的交点,由于运算中带有大量的浮点运算若没有dsp或高速浮点处置芯片的支持必然会造成运算时间太长对实时调控产生影响。实际上咱们需要的计算精度和每载波周期可能的开关点数量有关系,此数值用C来表示,称其为控制比(下文同)数值上二载波周期/pwm周期,同步伐制方式中此值为整数,可以理解为用多少个pwm周期控制一个载波周期。pwm频率实际上是开关电路的极限频率或最理想工作的频率,假设每载波周期可能的开关点数量为512个则需要二进制的9位计算精度若是再加一名存疑位最多计算10位就够了。若是采用数据类型IEEE32浮点数迭代运算将取得24位(二进制)精度的计算结果,与实际需要相差甚远,也就是说你算了半天大部份是没成心义的计算,这种计算资源浪费发生在每一次运算中,因此累计起来就比较惊人了。从另一个角度看由于pwm频率的限制有高精度的计算结果也无法实施高精度的开关控制,这么说就好理解了。对计算采取必然的优化是必需的它将直接影响系统的实时性能。一个简单的方式就是在计算有初值后肯定数据变更方向逐个可能值比较,另一个方式就是去浮点迭代计算,这两个方式在单片机上实现都可行有机缘再发文讨论再也不详述了。步进电机运行控制至此假设咱们可以很快的在单片机上进行实时的迭代运算了。迭代计算一个半周期的spwm其输入的原始参数只和三个数值有关:正弦的幅值这个值将决定步进电机的相电流大小,也就是步进电机的输出力矩。步进电机的长处之一是它的低速性能,当步进电机低速运转时转子始终受到磁场力的牵引转动,这个力的大小直接取决于励磁电流的大小,很小的速度下却可以用很大的力牵引转动。而直流电机的低速运动只能靠减小励磁电流实现,实际上就是小力矩实现低速,这样控制就不可能很精准特别是启停阶段尤其麻烦。步进电机在高速时力矩下降很快这个原因也不难理解,因为在步进电机励磁线圈里有多组磁极快速划过产生很大的感生电动势抵消了驱动的电压致使励磁电流变小力矩变小。为了改善高速性能解决办法只有一个提高工作电压。按照电机转速自动调整相电流的大小就可以够实现恒定的力矩输出了,即低转速小幅值高转速大幅值。载波比N和控制比C,这两个参数和调制频率F的关系是:F*2C*2N二TF(TF是按时器的时钟频率)咱们慢慢来解释一下这个式子,调制频率就是咱们实际想要的电机转速,从上面式子可以看出要让电机速度增加有两个方式即减小C或减小N(TF也是可以变的暂不考虑);C实际上就是按时器的模数值(ARR)他的含义是利用几个按时器时钟周期产生一个pwm周期,前面的2是由于按时器工作在中央对齐模式下,按时器+-计数一轮产生一个完整的三角波周期。ARR的取值范围不可以过小,因为需要按时器中断来更新个通道的值,过小的数值两次更新时间太短而无法实现计算和更新步计数等操作OARR的值若是太大则输出的pwm频率太低效果不佳。N是载波比也就是半周期的三角波的数量他的含义是利用几个pwm周期调制出一个正弦周期其实也就是咱们常说的细分数它决定一个正弦周期(一个步距角)内可以控制的位置点的数量。在常见的驱动器中这个数值都是由拨码开关事前设定的,工作中是一个固定值,原因是硬件电路无缝的调整细分度几乎是不可能的。软件运算则没有这个问题,N的取值可以是任意的,唯一受影响的就是极性控制,上面算式里N前面的2含义是正弦正半周期和负半周期。N的取值还要考虑内存和计算占用;迭代算法若是有接近结果的初始值将使得运算效率大幅提高,因此对于有初始值的运算每一个计算点都要有存储空间占用,过大的N值要考虑内存资源,若是无初值的计算则要考虑计算资源。特别的当N值转变时初值会与真实值有差距,所以应尽可能减少N的变更。和步进电机转速有关系的参量在运行时都是已知的,因此任意时刻电机的转速都是可以计算的,若是电性能够平稳运行(没有堵转或丢步的情况)是不需要其它测速码盘装置的,闭环控制就加倍没必要了。话又说回来若是丢步或堵转了闭环能解决吗?步值计数产生AB极性逻辑和正反转网上看到的步进电机驱动程序千篇一概的都是数组存储io状态查表输出,带细分更少。先来梳理一下目前已经此刻做到的内容,内存中有一个数组寄存整个正弦半周期的实时运算的spwm数据,这个数据是按照当前的pwm周期折算过,因此每一个pwm周期依次将数组内容赋值给按时器通道值就可以够在按时器通道管脚输出正弦转变的pwm了。另夕卜利用一个(16205是两个,也可以用非门)io口来控制极性输出,比如高电平输出正弦负半周,低电平输出正弦正半周。接下来需要安排一个合理而简单的数据结构把步进计数、细分和极性控制合为一体。首先咱们用一个s32stepcounter全局量来做步进计数,它的数值与步进电机的实时位置对应,这个变量是一个很关键的变量,因为任意时刻的AB两相spwm数据输出点和极性控制信号都由它产生。假设咱们把它的低八位视为细分步计数(256为最大细分),则这个计步值除256对应整步位置。另外安排一个u8microstep用来控制细分步进它的取值和当前的细分度有关,若是256细分则microstep=1,128细分microstep=2,以此类推.若是电机正转前进一个微步则stepcounter+二microstep,若是反转一个微步贝0stepcounter-二microstep(微步进这部份可以放至ll中断程序里),OK正反转很简单,微步前进自动更新整步。关键点在于如何利用这个计数值产生两个相位的极性信号输出控制和A相B相的spwm数据位置,这里解释一下为何会希望控制都由这一个变量产生:因为这样的程序最简单,虽然这里讲一大堆可是在编程实现时你就看至了就几行弄定;不容易犯错,效率最高,你可以想象的至若是涉及的变量越多操作的代码越多需要考虑的可能性越多也越容易错;便于封装和功能扩展,比如你想做一个AD采样值与电机位置按一个比例同步的程序即转滑阻电机随着动的小玩意儿,略微改改把AD采样值赋给计步值其它都不用管了。先说第一个数据的输出,spwm数组256个,若是不考虑极性则数据位置只和stepcounter的低8位有关,因此A相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论