微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机学习之3-步进电机

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

时间:11-30 来源:互联网 点击:
第八集

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

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

第九集

一、ULN2003芯片。

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

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

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

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

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

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




一、蜂鸣器

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


第十集

一、步进电机

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

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

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

步进电机的工作原理:(这里是3相步进电机)里面的1,2,3,4是转子,外面的A、A1、B、B1、C、C1是定子。

1相励磁方式:

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

紧接着B相通电(A、C两相不通电),转子就会向顺时针方向转4、2对齐到定子的B1、B(图b)

紧接着C相通电(A、B两相不通电),转子就会向顺时针方向转1、3对齐到定子的C1、C(图c)

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

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

1-2相励磁方式:



设A相先通电,转子就会向顺时针方向转1、3对齐到定子的A、A1(图a)

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

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

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

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



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

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

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

线的顺序是VCC、A、B、C、D。

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

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

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

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

下面这份代码是通过按位方式给A、B、C、D相轮流通电。

#include"reg51.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitDA=P1^0;//A相

sbitDB=P1^1;//B相

sbitDC=P1^2;//C相

sbitDD=P1^3;//D相

voiddelay(uintx)

{
uinty;

for(;x>0;x--)

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

}

voidmain()

{

uinti=512;

uchardelayCout=25;

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

{

DA=1; //A相通电

delay(delayCout); //需要延时一小段时间让

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top