专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

51单片机学习之3-步进电机

作者:佚名   来源:本站原创   点击数:  更新时间:2013年10月20日   【字体:

第八集

讲解用移位和或运算实现流水灯的方法《51单片机复习笔记2》里面的代码。

讲解了用函数的方法实现流水灯。

 

第九集

一、ULN2003芯片。

用于增强单片机IO口的驱动能力。

ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。

ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。

ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,5V 的工作电压下它能与TTL CMOS 电路

直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V-95的电压,输出还可以在高负载电流并行运行。ULN2003 采用DIP—16 SOP—16 塑料封装。


 

 





 


 
 

一、蜂鸣器

驱动蜂鸣器很简单,由于51单片机的IO口驱动能力还不足以驱动蜂鸣器,所以需要加一个三极管来做电子开关控制蜂鸣器。(当然也可以用ULN2003)。上面电路图中其实不接电阻也可以驱动蜂鸣器,当然R26的分支需要去掉。FM接在单片机的P2^3IO口上并给低电平即可让蜂鸣器鸣响。
 
 

 

第十集

一、步进电机

 步进电机和我们以前玩的四驱车里面的马达是不一样的。里面的马达是连续旋转的,而步进电机却是一步一步地转动,准确来说是每次只转动一个很小的角度,用手也是转不动的。

对于角位移步进电机可以通过控制脉冲的个数来控制角位移量(即几个脉冲就转动几个步距角),达到准确定位的目的。可以通过控制脉冲的频率来控制步进电动机的转动速度和加速度达到调速的功能。

步进电机按相数分可分为:单相、双相和多相三种。

 

步进电机的工作原理:(这里是3相步进电机)里面的1234是转子,外面的AA1BB1CC1是定子。

 

 

1相励磁方式:

 

A相通电时,产生A-A1轴线方向的磁通,并通过转子形成闭合回路。这时候AA1就成了电磁铁的NS极。在磁场的作用下,转子总是力图转到磁阻最小的位置,也就是要转到转子的齿对齐AA1极的位置,也就是说转子的13会对着定子的AA1(图a);

紧接着B相通电(AC两相不通电),转子就会向顺时针方向转42对齐到定子的B1B(图b

紧接着C相通电(AB两相不通电),转子就会向顺时针方向转13对齐到定子的C1C(图c

当一直重复着上面的步骤ABC那么转子就会一直顺时针方向转动。每转动一次都只是转动一个固定的角度,也就是步距角。。当重复的速度越快,那么转动的速度也就越快。

这种通电方式是1相励磁方式。

 

 

1-2相励磁方式:



 

 

A相先通电,转子就会向顺时针方向转13对齐到定子的AA1(图a

接着在A相通电的情况下,继续给B相通电。这时BB1极对转子24产生磁力,但是AA1继续拉住13,因此转子会转到两个磁拉力平衡为止(如图b),从外看来,转子顺时针转动了一个很小的角度。

接着A相断电,B相继续通电。这时转子顺时针转动24和定子BB1极对齐(如图c)

接着B相通电的情况下,给C相通电。这时CC1极对转子31产生磁力,而BB1会继续拉住24,因此转子会顺时针转动一个小角度(如图d)。

一直重复以上步骤AABBBCCCAA.....,一样可以让步进电机转动起来,其中每一个步骤通电都会让步进电机转动一个角度,这个角度是1相励磁方式角度的一半(1/2),这就是称为最小步距角。

 



 

这种步进电机叫减速步进电机(里面有减速齿轮),减速比是1/64

里面减速齿轮转动64圈,外面的转子才转动1圈。

驱动电压为5V,步进()角度5.625*1/64,采用5线4相。

线的顺序是VCCABCD


 

1相励磁方式驱动程序代码:实现让步进电机转动360°。

 

现在知道步进电机的最小步距角是5.625*1/64  = 0.087890625°

1相励磁方式 每通一相电(即每转动一次)的角度应该是最小步距角的2倍(即 0.087890625°*2=0.17578125)。一个循环就是4相: ABCD(即0.17578125*4=0.703125°)。

那么一个循环就是0.703125°,要几个循环才能转动360°呢?360°/0.703125 = 512个循环。
 

下面这份代码是通过按位方式给ABCD相轮流通电。
 

#include "reg51.h"

#define uchar unsigned char 

#define uint unsigned int 

 

sbit DA = P1^0;                    // A

sbit DB = P1^1;                    // B

sbit DC = P1^2;                    // C

sbit DD = P1^3;                    // D
 

 

void delay(uint x)

 

{
   
uint y;

   for(;x>0;x--)

    for(y=10;y>0;y--);

 

 

}

void main()

{  

   uint i = 512;

   uchar delayCout = 25;

   while (i--)                // 循环512次 就转动360°的角度。

   {

      DA = 1;                 // A相通电

      delay(delayCout);        // 需要延时一小段时间让硬件反应的过来

      DA = 0;                 // A相断电

   

      DB = 1;                 // B相通电

      delay(delayCout);        // 需要延时一小段时间让硬件反应的过来

      DB = 0;                 // B相断电

   

      DC = 1;                 // C相通电

      delay(delayCout);         // 需要延时一小段时间让硬件反应的过来

      DC = 0;                 // C相断电
 

 

      DD = 1;                 // D相通电

      delay(delayCout);        // 需要延时一小段时间让硬件反应的过来

      DD = 0;                 // D相断电

   }

   while(1);                  // 旋转完后就停在这里,避免重复执行main函数

}

 

上面那份源码很好理解,下面是按逻辑运算实现的通断ABCD四相:

#include "reg51.h"

#define uchar unsigned char 

#define uint unsigned int 

 

void delay(uint x)

 

{
  
uint y;

 for(;x>0;x--)

    for(y=10;y>0;y--);

 

 

}

void main()

{  

   uint i = 512; 

   uchar Xh;

   uchar delayCout = 25;

 

   while (i--)                        // 循环512次 就转动360°的角度。调整角度

   {

      Xh = 3;

      P1 = 0x01;                      // P1 == 0000 0001 相当于 P1^01  A相通电

      delay(delayCout);                // 延时一段时间让步进电机能反应过来

      while(Xh--)

      { 

          P1 <<= 1;                    // 第一次循环 0000 0001<<1 = 0000 0010 相当于 P1^1 1同时将P1^00 A相断电 B相通
                                            电
每次循环都会将1向左移动一位
        
delay(delayCout);            // 这里是调节切换速度,即转动速度

       }

    }

   while(1);                         // 旋转完后就停在这里,避免重复执行main函数

 

}

 

 

 

 


步进电机主要知道它的工作原理和计算角度。步进电机最大的方便是可以精确控制转动角度和速度。

关闭窗口

相关文章