基于单片机控制步进电机报告

基于单片机控制步进电机报告
基于单片机控制步进电机报告

电子赛培训课作品

设计报告

题目:单片机控制步进电机

姓名:

班别:

学号:

序号:

完成时间:2012-5-17

华南理工大学广州学院电子信息工程学院

目录

引言 (1)

一、系统方案的选择和论证 (1)

二、总体设计 (2)

三、单元电路设计 (3)

四、整体测试 (4)

五、结论 (5)

六、总结 (6)

七、参考文献 (6)

单片机控制步进电机

摘要:本设计采用一块AT89C52单片机对一个四相步进电机进行控制,使步进电机在安全温度内按输入的步数和转动的方向进行运行。控制电机转动的方法采用四相八拍控制法。本设计采用矩阵键盘实现步进电机不同转动步数的输入以及转向的控制,还有对键盘实现锁键和开锁的作用。用DS18B20代替电机的测温系统,实现超温报警和停机的功能。

引言

随着数字化技术发展,数字控制技术得到了广泛而深入的应用。步进电机是一种将数字信号直接转换成角位移或线位移的控制驱动元件, 具有快速起动和

停止的特点。因为步进电动机组成的控制系统结构简单,价格低廉,性能上能满足工业控制的基本要求,所以广泛地应用于手工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,投影仪、数码摄像机、大型望远镜、卫

星天线定位系统、医疗器件以及各种可控机械工具等等。

设计内容:采用单片机控制一个三相单三拍的步进电机工作。

要实现的功能:

一、步进电机的旋转方向由正反转控制信号控制;

二、步进电机的步数由键盘输入,可输入的步数分别为3、6、9、12、15、

18、21、24和27步,且键盘具有键盘锁功能,当键盘上锁时,步进电机不接受输入步数,也不会运转。只有当键盘锁打开并输入步数时,步进电机才开始工作;

三、电机运转的时候有正转和反转指示灯指示;

四、电机在运转过程中,如果过热,则电机停止运转,同时红色指示灯亮,同时警报响。

本次设计的意义:

1) 了解51系列单片机及外围相关芯片、电路的工作原理和接口技术,学会进行控制系统软件程序设计。

2) 编制程序完成步进电机速度、方向、及旋转角度的控制。

3) 设计相关的硬件电路,软硬调试实现步进电机速度、方向、及旋转角度

的控制,分析结果。

4) 学会运用“自动控制原理”、“现代控制理论”和“计算机控制技术”所

学理论知识进行控制器的设计和计算机控制的算法实现。为今后毕业设计、将来工作做必要的知识储备。

一、系统方案选择和论证

本设计由于需要实现9个不同步数的输入以及其它功能的输入,所以可以采用独立键盘和矩阵键盘,实现步进电机的步数由键盘输入且键盘具有键盘锁功能。考虑到单片机的端口数量有限和编程和方便性,最后决定采用矩阵键盘。在步进电机方面由于此次设计的软件采用proteus,在此软件中只有一个四相步进电机

的模型,然后考虑到步进电机控制方法的难易度最后决定采用四相八拍控制法,由于单片机不能直接驱动步进电机,所以P2口在输出后接入ULN2803,ULN2803输出后接电机,通过此芯片放大控制电压。在测温方面一开始打算用一个温度传感器开关去实时监测电机的温度,当温度过高的时候就断开开关;但考虑到系统的可操作性、准确性、编程的难易度及仿真软件的限制,最后决定采用DS18B20

代替电机的测温系统,实现电机在运转过程中,如果过热,则电机停止运转,同时红色指示灯亮,同时警报响。在转向方面用不同颜色的LED灯指示正转和反转。当电机温度超过安全温度时,报警灯会闪烁和报警铃会鸣响,并让电机停止运转同时锁住键盘。

基于单片机和proteus的步进电机控制电路的基本组成如图2-1所示。

图2-1

二、总体设计

图2-2

三、单元电路设计

1、电机工作状态指示模块

如图3-1所示

图3-1

功能:指示单片机目前的工作状态,当电机的温度超出安全温度的时候,报警灯闪的同时,报警器也会响。

2、单片机驱动电机模块(如图3-2)

图3-2

功能:单片机输出的程序通过ULN2803电机驱动器给步进电机一个脉冲信号,使步进电机实现按输入步数正转与反转。

3、电机温度监测模块(如图3-3)

图3-3

功能:实时监测电机的温度,当电机超过安全温度时,单片机会发出警报并停止电机工作。

4、键盘输入模块(如图3-4)

图3-4

功能:通过预设使每一个键盘具有一个特定的功能,从而实现按设计要求控制电机的需求。

四、整体测试

1、安全温度下电机正转(如图4-1)

图4-1

此时电机正转,正转指示灯亮,功能正常实现。

2、安全温度下电机反转(如图4-2)

图4-2

此时电机反转,反转指示灯亮,功能正常实现。

3、超出安全温度时电机停止工作并报警(如图5-1)

图5-1

此电机温度超出安全温度50,报警灯闪烁,报警器鸣响,键盘锁住禁止输入。同时指示停机前电机转动的方向。功能正常。

4、当键盘锁住时键盘无法使用

刚开机时,为防止出现事故,整个功能键盘是锁住的,只有解锁后才能对电机进行控制,在运行过程当中,当键盘锁住后,将保持停机前的状态,并禁止对电机进行操作。其它功能还是正常运行。结论是正常。

五、结论

经测试,整体电路工作正常,实现了要求的所有功能。由于延时的原因,有些功能会出现一定的误差,比如:有时按下键去的时候电机会没有反应,因为程序还没有执行到这里。本设计有多个不足之处,比如:电机在没有走完输入的步数之前是不能对电机进行其它的控制,就算此时电机已经超出了安全温度也不能及时的报警和停机。由于延时的效果,使得电机在执行输入的相应的步数的时候会出现一点偏差,但是走的总步数是没有错的。对此,我提出改进方案为,用定时器中断方式,每隔一断时间去检查,看电机是否已超出安全温度,这样就能及

时的停机。我还会增加一个紧急停机按钮,使得现场出现紧急情况的时候能实现紧急停机。我还会再增加一个加速控制钮和一个减速控制钮,使电机在连续转动时能平稳的运行以及起步和停机。对电路进行调整后,如果可以的话,还可以加上可视功能,显示电机现在走了几步,目前的温度如何。

六、总结

在此次设计中,由于是第一次接触步进电机,出于对步进电机的不了解,就在用多少拍控制电机方面我参考了网上不少资料以及不少相关的书籍,最后确定用八拍控制法最合适,四相八拍控制法被普遍认为是比较好用的一种控制方法。刚开始不知道电机在转动的时候会有惯性效应,即如果在上一个脉冲控制下没有完全走完,但是下个脉冲已经过来了,这就会产生堵转和失步现象。所以在执行程序的时候要增加一点延时。在做足了所有的准备后,电机还是不能正确的转动,我曾经一步把注意力放在程序上,但是后来在参考一本资料的时候偶然发现其电机的接线图有所不同,这让我开始注意到,也许硬件电路的设计出了问题,果然在后来对硬件电路进行调整后,实现了预定的功能。

在实现了电机能合理的转动的情况下,我就把温度监测部分加进来。但这不是简简单单的增加一个子函数的问题,它关系到整个程序的运行,使得整个程序都要做出相应的调整,这真的是牵一发而动全身。同样一个变量我放在主函数里比较大小与放在子函数里比较都会有不一样的效果,一个能正确实现相应的功能,而另一个却不会。这也让我在编程方面积累了一点经验。当测温这一块加进来后,由于程序增加了不少,而且里面还有相当一部分的延时语句,所以,单片机对键盘的扫描就不再那么及时了,这就出现了有时按下键去却没反应的现象。这是我以后要改进的地方。

七、参考文献

【图书文献】

[1]、作者:高洪志,《MCS-51单片机原理及应用技术教程》,北京,人民

邮电出版社,2009年4月出版,第314~316页。

[2]、作者:丁向荣,《STC系列增强型8051单片机》,北京,电子工业出

版社,2011年1月出版,第289~290页。

[3]、作者:周润景,《单片机电路设计、分析与制作》,北京,机械工业

出版社,210年8月出版,第16~25页。

【网络文献】

[1]、https://www.360docs.net/doc/bc18848082.html,/view/c5f8513331126edb6f1a10f4.html,

2010-12-15, 基于单片机的步进电机控制系统(汇编及C语言程序各一

个)

[2]、https://www.360docs.net/doc/bc18848082.html,/view/5a3aa642a8956bec0975e3c1.html,

2010-10-07,基于单片机控制的步进电机___毕业论文

附程序:

#include

#include //包含_nop_()函数定义的头文件

#define uchar unsigned char

#define uint unsigned int

uchar beheavecount[]={0x00,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; uchar

opbeheavecount[]={0x00,0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};

//uchar

beheavecount[]={0x00,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

uchar step,temp,lock,lock2,i,o,time,flag;

sbit DQ=P3^3;

sbit wrong=P0^3;

sbit warning=P0^2;

void keyscan();

void delay(uint z);

void beheave(uchar x);

void Write(uchar dat);

uchar Read();

void Init();

void delayms(uint i);

void tempereture();

void main()

{

step=lock=lock2=0;

i=1;

o=0x00;

P0=0x00;

P2=0xff;

P0=0x02;

wrong=0;

while(1)

{

warning=0;

tempereture();

if(flag==1)

{

warning=0;

keyscan();

if(step==30) //锁键

{

step=0;

lock=0;

}

if(step==31) //解锁

{

lock=1;

step=0;

}

if(step==32&&o==0x00) //换正向

{

step=0;

P0=0x02;

lock=0;

i=9-i;

i++;

if(i>8)

i=1;

i++;

if(i>8)

i=1;

}

if(step==32&&o==0xff) //换反向

{

step=0;

P0=0x01;

lock=0;

i=9-i;

i++;

if(i>8)

i=1;

i++;

if(i>8)

i=1;

}

}

if(flag==0)

{

warning=1;

delay(200);

wrong=~wrong;

lock=0;

}

if(lock&&step>0)

beheave(step);

}

}

void keyscan() //键盘处理函数

{

P1=0xfe;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0) //消除抖动

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp) //判断按下哪个键

{

case 0xee:step=3;break;

case 0xde:step=6;break;

case 0xbe:step=9;break;

case 0x7e:step=12;break;

}

while(temp!=0xf0) //判断键是否已回位

{

temp=P1;

temp=temp&0xf0;

}

//lock=1;

}

}

P1=0xfd;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xed:step=15;break;

case 0xdd:step=18;break;

case 0xbd:step=21;break;

case 0x7d:step=24;break;

}

while(temp!=0xf0) //判断键是否已回位

{

temp=P1;

temp=temp&0xf0;

}

//lock=1;

}

}

P1=0xfb;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xeb:step=27;break;

case 0xdb:step=30;lock2=0;break;

case 0xbb:step=0;lock2=1;break;

case 0x7b:step=32;o=~o;break;

}

while(temp!=0xf0) //判断键是否已回位

{

temp=P1;

temp=temp&0xf0;

}

//lock=1;

}

}

if(lock2==0)

lock=0;

else if(lock2==1)

lock=1;

}

void beheave(uchar x) //电机转动处理函数

{

uint y=0; //定义一个记录赋值次数的变量

if(o==0xff)

{

do

{

P2=opbeheavecount[i];

if(i==8)

i=1;

else

i++;

y++;

delay(600);

}while(y

}

if(o==0x00)

{

do

{

P2=beheavecount[i];

if(i==8)

i=1;

else

i++;

y++;

delay(600);

}while(y

}

lock=0;

step=0;

}

void Init(void)//初始化

{

//unsigned char flag=0;

DQ = 0; //单片机将DQ拉低

delayms(100); //精确延时大于 480us小于960us

DQ = 1; //拉高总线

delayms(30);

//flag=DQ; //稍做延时后如果flag=0则初始化成功 flag=1则初始化失败

//delay(20);

}

uchar Read(void)//读字节

{

uchar a=0;

uchar dat = 0;

for (a=8;a>0;a--)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delayms(5);

}

return(dat);

}

void Write(uchar dat)//写字节

{

uchar a=0;

for (a=8; a>0; a--)

{

DQ = 0;

DQ = dat&0x01;

delayms(5);

DQ = 1;

dat>>=1;

}

}

void tempereture()

{

unsigned char tl=0,th=0;

unsigned char TN,TD;

Init();

Write(0xCC); // 跳过读序号列号的操作

Write(0x44); // 启动温度转换

delay(100);

Init();

Write(0xCC); //跳过读序号列号的操作

Write(0xBE); //读取温度寄存器等

delay(100);

tl=Read(); //读取温度值低位

th=Read(); //读取温度值高位

if((th&0xf8)!=0x00)//判断高五位得到温度正负标志

{

tl=~tl; //取反

th=~th; //取反

time=tl+1; //低位加1

tl=time;

if(time>255) th++; //如果低8位大于255,向高8位进1 TN=th*16+tl/16; //实际温度值=(TH*256+TL)/16,即:

TH*16+TL/16

//这样得出的是温度的整数部分,小数部分被丢弃了

TD=(tl%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整,

}

TN=th*16+tl/16; //实际温度值=(TH*256+TL)/16,即:

TH*16+TL/16

//这样得出的是温度的整数部分,小数部分被丢弃了

TD=(tl%16)*10/16;

time=TN+TD;

if(time>=50)

{

warning=1;

flag=0;

}

else

{

warning=0;

flag=1;

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

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

}

void delayms(uint a) //如果i是unsigend char类型,则会出现错误结果{

while(a--);

}

单片机控制步进电机和数码管显示

一、设计任务书 设计内容:用80C51单片机设计一个步进电机控制器 设计要求: 1.用8015设计一个四相步进电机。 2.可控制步进电机的启动与停止,正转与反转。 3.10档速度调节。 4.点动控制。 5.可显示电机运行参数。 二、设计总体方案 (一)控制方式的选择 控制主要用于电机速度和方向的转换。控制方式有按键控制和开关控制两种。按键较开关而言,操作更加简便,故选按键控制。 方案一:独立按键。独立按键可自由连接,线路简单。 方案二:编码式键盘。编码式键盘的按键接触点接于74LS148芯片。当键盘上没有闭合时,所有按键都断开,当某一键闭合时,该键对应的编码由74LS148输出。 本次设计所需按键不多,不需要采用复杂编码,考虑硬件条件、线路连接和经济性等方面,选择方案一。 (二)电机电路设计方案的选择 由于条件的限制,对于电机的选择只能是实验台上最小步距角18°的电机,其中已包含了驱动电路。 (三)单片机的选择 方案一:AT89C51高性能8位单片机,内部集成CPU、存储器、寄存器、I/O接口,从而构成较为完整的计算机,价格便宜。 方案二:C8051F005单片机,该单片机是完全集成的混合信号系统及芯片,具有8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还继承了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,执行速度快,但价格较贵。 本次课程设计是在仿真环境下进行,没有太过考虑单片机选择的问题,但就设计本身来讲,从物美价廉的角度考虑,选择方案一较合适。 (四)显示方案的选择 方案一:采用LED数码管。LED数码管是轮流现实的,其利用人烟的视觉暂留特性,使人感觉不到数码管闪动,看到每只数码管都常亮。利用其显示必须不停给数码管数据输入口循环赋值,显示内容较多,编程和接线较为复杂。 方案二:采用LCD1602液晶显示器。LCD1602具有功率小,效果明显,变成容易等优点,且它最多能显示2×16个字符,可以轻松满足设计要求。 由上可知,LCD1602液晶显示器的优点突出,故选择方案二。 (五)软件部分的选择 软件部分的选择主要是指编程语言的选择,编译调试工具根据设计平台选择伟福软件。编程语言主要有以下两种方案。

基于51系列单片机控制步进电机调速实验 (自动保存的)

基于51系列单片机控制步进电机调速实验 实验指导书 仇国庆编写 重庆邮电大学自动化学院 自动化专业实验中心 2009年2月

基于51系列单片机控制步进电机调速实验 实验目的及要求: 1、熟悉步进电机的工作原理 2、熟悉51系列单片机的工作原理及调试方法 3、设计基于51系列单片机控制的步进电机调速原理图(要求实现电机的速度反馈测量,测量方式:数字测量) 4、实现51系列单片机对步进电机的速度控制(步进电机由实验中心提供,具体型号42BYG )由按钮控制步进电机的启动与停止;实现加速、匀速、和减速控制。速度设定由键盘设定,步进电机的反馈速度由LED 数码管显示。 实验原理: 步进电机控制原理 一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。由于输入的是脉冲信号,输出的角位移是断续的,所 以又称为脉冲电动机。随着数字控制系统的发展,步进电动机的应用将 逐渐扩大。 步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来 进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由 脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号 可以由单片机产生。 电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几 何轴线依次分别与转子齿轴线错开。0、1/3て、2/3て,(相邻 两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐, B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图:(图2所示)

用单片机控制步进电机

用单片机控制步进电机 步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 一、步进电机常识 常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。 二、永磁式步进电机的控制 下面以电子爱好者业余制作中常用的永磁式步进电机为例,来介绍如何用单片机控制步进电机。 图1是35BY型永磁步进电机的外形图,图2是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识为C,只要AC、 C、BC、 C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么只要用开关元件(如三极管),将A、、B、轮流接地。 下表列出了该电机的一些典型参数: 表1 35BY48S03型步机电机参数 型号步距角相数电压电流电阻最大静转距定位转距转动惯量 35BY48S03 7.5 4 12 0.26 47 180 65 2.5 有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为0.26A,因此用一块开路输出达林顿驱动器(ULN2003)来作为驱动,通过P1.4~P1.7来控制各线圈的接通与切断,电路如图3所示。开机时,P1.4~P1.7均为高电平,依次将P1.4~P1.7切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电平。如果要改变电机的

基于单片机的步进电机控制系统

编号: 综合智能电子 实训 (论文)说明书题目: 院(系):使用科技学院 专业:电子信息工程 学生姓名: 学号: 指导教师: 2010年 1 月 6 日

目录 引言 第1章简介 1.1 步进电机 第2章步进电机原理 2.1 步进电机的工作原理 2.1.1结构及基本原理 2.1.2 电机的步进顺序 第3章系统的硬件设计 3.1 系统设计方案 3.2 主从机硬件部件介绍 3.2.1A T89S51简介 3.2.2 TGI2864E简介 3.2.3MAX485 串行通信 3.2.4TIP122 3.2.5 MOC70T2 3.3 LCD显示电路设计 3.4 电机驱动模块设计 第4章系统的软件实现 4.1 系统软件主流程图 4.2 系统初始化流程图 4.3 部分子程序 第五章总结 致谢 参考文献 摘要:本文使用单片机、步进电机驱动芯片、字符型LCD和键盘阵列,构建了集步进电机控制器和驱动器为一体的步进电机控制系统。二维工作台作为被控对象通过步进电机驱动滚珠丝杆在X/Y轴方向联动。文中讨论了一种以最少参数确定一条圆弧轨迹的插补方法和步进电机变频调速的方法。步进电机控制系统的开发采用了软硬件协同仿真的方法,可以有效地减少系统开发的周期和成本。最后给出了步进电机控制系统的使用实例。

关键词:步进电机控制系统,插补算法,变频调速,软硬件协同仿真 In this paper, microcontroller, stepper motor driver chips, character LCD and keypad array, build a set of stepper motor controller and driver as one of the stepping motor control system. Two-dimensional table as a charged object by stepper motor drive ball screw in X / Y axis linkage. This paper discusses a minimum of parameters to determine the trajectory of a circular interpolation method and the method of frequency control stepper motor. Stepper motor control system has been developed using the software and hardware co-simulation method, can effectively reduce the system development cycle and cost. Finally, the stepper motor control system application examples.

51单片机驱动步进电机的方法(详解)

51单片机驱动步进电机的方法2019.02 这款步进电机的驱动电压12V,步进角为7.5度. 一圈360 度, 需要48 个脉冲完成!!! 该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5:黄色、6:黑色。 采用51驱动ULN2003的方法进行驱动。 ULN2003的驱动直接用单片机系统的5V电压,可能力矩不是很大,大家可自行加大驱动电压到12V。 ;****************************************************************************** ;*************************步进电机的驱动*************************************** ; DESIGN BY BENLADN911 FOSC = 12MHz 2005.05.19

;--------------------------------------------------------------------------------- ; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!! ; 本步进电机步进角为7.5度. 一圈360 度, 需要48 个脉冲完成!!! ;--------------------------------------------------------------------------------- ; A组线圈对应P2.4 ; B组线圈对应P2.5 ; C组线圈对应P2.6 ; D组线圈对应P2.7 ; 正转次序: AB组--BC组--CD组--DA组(即一个脉冲,正转7.5 度) ;---------------------------------------------------------------------------------- ;----------------------------正转-------------------------- ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R3,#144 正转3 圈共144 脉冲 START: MOV R0,#00H START1: MOV P2,#00H MOV A,R0 MOV DPTR,#TABLE MOVC A,@A+DPTR JZ START 对A 的判断,当A = 0 时则转到START MOV P2,A LCALL DELAY INC R0 DJNZ R3,START1 MOV P2,#00H LCALL DELAY1 ;-----------------------------反转------------------------ MOV R3,#144 反转一圈共144 个脉冲 START2: MOV P2,#00H

基于单片机的步进电机驱动控制

基于单片机的步进电机驱动控制 一、步进电机概述 1.步进电机的定义 步进电机指的是以数字脉冲信号作为电机线或教位移的控制信号,并以数字脉冲频率对电机的转速进行控制的动力控制系统。 在负载正常范围的情况下,步进电机的运行状态只和数字脉冲发生器提供的信号的频率和脉冲占空比有关,一般情况下,电机的状态不受负载的影响。电机的运行角度只和每次所给予的脉冲信号强度有关,而电机的运行速度也只和脉冲信号的频率有直接关 系。这种采用弱点控制强电的控制方式使得步进电机在速度、位移等控制领域有着普通电机不能比拟的优势。 2.驱动控制系统框图 步进电机控制系统有着精确控制、运行稳定的特性,这一其他电机不能比拟的优势使得步进电机得到了广泛的应用。而一般对步进电机控制系统的驱动必须要包含脉冲信 号发生部分,功放部分和驱动控制部分等几个模块电路,我们根据这些通过的模块电路,可将步进电机控制系统的通用框图绘制如下: 在上图的步进电机驱动控制系统方框图中,控制步进电机运行状态的脉冲信号一 般由集成芯片产生,可以是单片机、等智能芯片,也可以是一般的数字电路集成芯片。信号分配环节则要根据步进电机的型号来选择,如四相步进电机有四相四拍和四相 八拍种信号分配的方式;两相步进电机有两相四拍和八拍等脉冲加载形式。功放部分 在驱动环节上显得尤为重要。动态平均电流是步进电机转矩大小的决定因素,前提条件 是电机的速度。电机力矩与平均电流成正比,驱动系统对电机的反电势消弱越多,则平 均电流就越大。 我们一般可以用恒压和恒压串电阻的方法来驱动,或者在条件允许的情况下我们可以用高低压驱动、恒流和细分数等方法来驱动实际的应用过程种,多采用数字集成驱 动芯片作为步进电机的驱动手段。 二、现阶段国内外步进电机驱动的常用方式 1.变频器控制方式 使用变频器对步进电机进行驱动控制时,可以很好的解决步进电机在启动和停止时 容易失步的问题,提高了系统的控制精度。但是变频器的应用成本较高,结构和操作也 比较复杂,无形中提高步进电机的控制难度。 2.PLC控制方式 使用ABB、西门子、欧姆龙等国际知名生产制造商研发的系列产品可以 实现对步进电机的理想化控制,但是基于核心的步进电机控制系统成本高昂,且 难以实现精确控制,在本系统中不太适合。 3.单片机控制方式 随着嵌入式系统在工业控制领域中的广泛应用,以单片机特别是系列单片机 作为控制核心的步进电机控制电路在生产生活领域得到了普及,单片机有着大规模数字

完整的单片机控制步进电机程序

#include "reg52.h" #include "INTRINS.H" #include #include #define uint unsigned int #define uchar unsigned char void check_addr(void); /*地址核对*/ uchar code slave_addr[4]={00, 01, 02, 255}; /*从机地址*/ uchar idata T0low, T0high,common_count,input_order,cmd_in_permit,interval; uchar sent_ok,speed_change,start_up,start_end,address_true,i; uint y1; uint code add[100]={60006,62771,63693,64154,64430,64614,64746,64845,64922,64983,65033,65075,651 11,65141,65167,65190,65211,65229,65245,65260,65273,65285,65296,65306,65315,65323,65331 ,65339,65345,65352,65358,65363,65368,65373,65378,65382,65387,65390,65394,65398,65401,6 5404,65407,65410,65413,65416,65418,65421,65423,65425,65428,65430,65432,65434,65435,654 37,65439,65441,65442,65444,65445,65447,65448,65450,65451,65452,65453,65455,65456,65457 ,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65469,65470,6 5471,65472,65472,65473,65474,65475,65475,65476,65477,65477,65478,65478,65479,65480,654 80,65481}; sbit P2_0=P2^0; /*作输入步进电机的脉冲信号发送口*/ sbit P2_2=P2^2; /*作输入步进电机的旋转方向信号发送口*/ sbit P1_0=P1^0; /*作串口输出信号的使能口, P1_0=0时接通串口,输出信号*/ sbit WD=P1^7; /*看门狗*/ main() { P2_0=0; P2_2=0; /*步进电机的旋转方向待试验后确定*/ P1_0=1; /*开机时需要关断,串口发送功能,需要时再接通*/ WD=1; /*看门狗先为1,电平翻转为喂狗*/ i=0; common_count=0; cmd_in_permit=0; input_order=0; interval=0; address_true=1; speed_change=0; start_up=0;

51单片机控制四相步进电机解析

51单片机控制四相步进电机 2009年07月21日星期二 12:44 51单片机控制四相步进电机 2009-03-01 18:53 接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝网买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相,接线共有六根,外形如下 图所示: 详细内容: https://www.360docs.net/doc/bc18848082.html,/31907887_d.h tml

拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为360/(4×5)=18度。地线与四线接触的顺序相反,电机的转向也相反。 如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四

线脉冲电流的顺序,则可实现对转向的控制。所以,设计了如下电路图: C51程序代码为: 代码一 #include static unsigned int count; static unsigned int endcount; void delay(); void main(void)

单片机步进电机控制实训报告.doc

单片机课程设计——步进电动机系统实训报告 李会民 电子工程系应用电子高职(3)08-1班 二00九年十二月

步进电机控制实训报告 一、实验要求 利用P0输出脉冲序列,74LS244输入开关量,开关K2-K8控制步进电机转换(分6挡).K0,K1控制步进电机转向.必须要K2-K8中一开关和K0,K1中一开关同时为‵1′时步进电机才启动,其他情况步进电机不工作. 步进电机驱动原理是通过对它每线圈中的电流的顺序切换来使电机作步进式旋转.驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速.微电脑控制电机步进电机最合适. 二、实验目的 (a)了解步进电机控制的基本原理 (b)掌握控制步进电机转动编程方法 三、单片机控制原理及电路连线 单片机是用来为步进电机进行控制的,给电机提供时序脉冲,让电机以某一种方式进行运转。硬件部分设计 AT89C51 外围电路设计包含有三部分的设计:键盘模块,晶振模块及复位模块。 通过按键的输入,单片机作为控制的中心决定步进电机的正转,反转,启动及停止等操作。同时通过单片机实现电子时钟控制步进电机。 键盘设计。考虑有两种方式:需要上拉电阻的方式和不需要上拉电阻的方式。由于单片内部设有小的上拉电阻,当外围电路很小时,是可以不考虑前一种方式的。我们的键盘只是起到输入时序的作用,并没有外带大的电路,所以我们选择第二种方式: 当K_1按下时:步进电机处于启动状态; 当K_2按下时:步进电机处于停止状态; 当K_3按下时:步进电机处于正向状态; 当K_4按下时:步进电机处于反向状态; 基于AT89C51的步进电机驱动器控制系统电路原理可以表示为如下图:

51单片机控制步进电机程序及硬件电路图

#include static unsigned int count; //计数 static int step_index; //步进索引数,值为0-7 static bit turn; //步进电机转动方向 static bit stop_flag; //步进电机停止标志 static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快static int spcount; //步进电机转速参数计数 void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒 void gorun(); //步进电机控制步进函数 void main(void) { count = 0; step_index = 0; spcount = 0; stop_flag = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许 TH0 = 0xFE;

TL0 = 0x0C; //设定时每隔0.5ms中断一次TR0 = 1; //开始计数 turn = 0; speedlevel = 2; delay(10000); speedlevel = 1; do{ speedlevel = 2; delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); stop_flag=0; }while(1); } //定时器0中断处理 void timeint(void) interrupt 1 { TH0=0xFE; TL0=0x0C; //设定时每隔0.5ms中断一次count++; spcount--; if(spcount<=0) { spcount = speedlevel; gorun(); } } void delay(unsigned int endcount) { count=0; do{}while(count

基于51单片机的步进电机控制-

基于51单片机的步进电机控制 [摘要]本课程设计的内容是利用51单片机,达到控制步进电机的启动、 停止、正转、反转、两档速度和状态显示的目的,使步进电机控制更加灵活。步进电机驱动芯片采用ULN2803,ULN2803具有大电流、高电压,外电路简单等优点。利用四位数码管增设电机状态显示功能,各项数据更直观。实测结果表明,该控制系统达到了设计的要求。 关键字:步进电机、数码管、51单片机、ULN2803 一步进电机与驱动电路 1.1 什么是步进电机 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 1.2 步进电机的种类 步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。这种步进电机的应用最为广泛。 1.3 步进电机的特点 1.精度高一般的步进电机的精度为步进角的3-5%,且不累积。可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点 2.过载性好其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合; 3.控制方便步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场;

最新51单片机控制四相步进电机电路图汇总

51单片机控制四相步进电机电路图

51单片机控制四相步进电机 接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝网买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相,接线共有六根,外形如下图所 示: 拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为360/(4×5)=18度。地线与四线接触的顺序相反,电机的转向也相反。 如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四线脉冲电流的顺序,则可实现对转向的控制。所以,设计了如下电路图:

C51程序代码为: 代码一 #include static unsigned int count; static unsigned int endcount; void delay(); void main(void) { count = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0;

EA = 1; //允许CPU中断TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许TH0 = 0xFC; TL0 = 0x18; //设定时每隔1ms中断一次 TR0 = 1; //开始计数 startrun: P1_3 = 0; P1_0 = 1; delay(); P1_0 = 0; P1_1 = 1; delay(); P1_1 = 0; P1_2 = 1; delay(); P1_2 = 0; P1_3 = 1; delay(); goto startrun; } //定时器0中断处理 void timeint(void) interrupt 1

51单片机实现步进电机控制

摘要 8051单片机控制步进电机进行简单的转速控制,包括启停变换转速控制等。利用利用https://www.360docs.net/doc/bc18848082.html,单片机实验箱以模拟电压提供电机转速设定值,使用并行模数转换芯片ADC0809 进行电压信号的采集和数据处理转换得到速度给定的数字量,通过单片机的P1 口控制步进电机的控制端,使其按一定的控制方式进行转动。调节步进电机转速,使其与给定值相当,最后,利用ZLG7290模块驱动LED数码管显示速度设定值。通过这个单片机控制系统的设计来掌握A/D转换的原理,了解步进电机的工作原理,掌握它的转速控制方式和调速方法,并且掌握LED显示原理和ZLG7290模块的使用方法,用LED数码管显示模数转换的结果,设计电路的硬件接线图和实现上述要求的程序。最后实现通过改变模拟电压就可以改变步进电机的转速控制,并且在LED 数码管上显示步进电机的转速这一功能。 关键词:51单片机调速步进电机LED显示

绪论 在进行51单片机的学习和实验过程中曾利用51单片机对步进电机进行过简单的控制,包括利用https://www.360docs.net/doc/bc18848082.html,单片机试验箱对步进电机进行转角控制,方向控制等。即按照设定的转动角度步进电机进行动作,来实现步进电机的实时控制,通过设定的方向来实现步进电机的方向反转控制等,并利用利用ZLG7290模块驱动LED数码管显示步进电机的设定值与步进电机实际所转过过的角度,同时显示步进电机的旋转方向等。 这次所进行的步进电机转速控制系统是对步进电机的另一种控制,即实现步进电机的转速控制而不是单单的转动角度控制,并且是通过模拟量输入来时时的控制步进电机的转速。并且通过数码管来显示出所设定的步进电机的转速。

单片机实现步进电机控制

科信学院 单片机系统设计项目(三级项目) 设计说明书 (2012/2013学年第二学期) 题目:基于单片机的步进电机控制______ __ 专业班级:通信工程10级1班___ __ 学生姓名:彭斯媛刘洋何亚惠_ ____ 刘萌李赛___ __ 学号: 100312102 100312101 100312110 100312120 100312128___ __ 指导教师:马小进、贾少锐、李晓东、付佳_ 设计周数: 2周____ ___ :__ ___ 2013年6月21日 设计成绩:

目录 1 步进电机的简介 (3) 1.1 什么是步进电机 (3) 1.2 步进电机的分类 (3) 1.3 步进电机的特点 (3) 1.4 步进电机的原理 (3) 1.5步进电机的驱动电路 (4) 2 89C51单片机 (6) 2.1 单片机引脚图 (6) 2.2 单片机简介 (6) 2.2.1主要特性 (6) 2.2.2 管脚说明 (6) 2.2.3 振荡器特性 (8) 2.2.4 芯片擦除 (9) 3 硬件程序设计 (9) 3.1 系统总体框图 (9) 3.2 最小系统 (10) 3.3驱动部分 (10) 3.4 状态指示部分 (11) 3.5 按键部分 (11) 3.6 时钟部分 (12) 4 Proteus仿真总图 (12) 5实物图 (13) 6系统程序 (13) 7课程设计总结 (15) 8参考文献 (16)

1步进电机简介 1.1什么是步进电机 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 1.2步进电机的分类 步进电机分永磁式(PM)、反应式(VR)、和混合式(HB)三种。永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为 1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为 1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。 1.3步进电机的特点 1.精度高 一般的步进电机的精度为步进角的3-5%,且不累积。可在宽广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反转控制及制动等,这是步进电动机最突出的优点; 2.过载性好 其转速不受负载大小的影响,不像普通电机,当负载加大时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的场合; 3.控制方便 步进电机是以“步”为单位旋转的,数字特征比较明显,这样就给计算机控制带来了很大的方便,反过来,计算机的出现也为步进电机开辟了更为广阔的使用市场; 4.整机结构简单 传统的机械速度和位置控制结构比较复杂,调整困难,使用步进电机后,使得整机的结构变得简单和紧凑。

基于单片机控制步进电机

课程设计(论文)说明书 题目:基于单片机控制步进电机 院(系): 专业:自动化 学生姓名:杨健 学号:0316680007 指导教师:薛云灿 职称: 2017年5 月1日

本课程设计的要求是用51系列单片机对步进电机进行控制,对单片机控制步进电机系统的控制方式和软件设计进行研究,分别从速度控制,正反转进行详细的分析,步进电机是一种常用的执行机构,它的用途是将电脉冲转化为角位移。当步进驱动收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可控制角位移量,从而达到准确定位的目的。 关键字:单片机;步进电机;控制系统;

In this paper, the design used 51microcontroller series of stepper motor control SCM control of the stepper motor control system and software design of the study from the speed and direction, stepper motor electromechanical control the implementation. When stepping drivers receive a pulse signal it stepper motor driven in the direction set by a fixed rotating angular displacement, thus achieving the purpose of accurate positioning; pass control to control the pulse Frequency of motor rotation speed and acceleration so as to achieve the purpose of speed. Key words:Single slice machine;Stepper motor;Control system

基于51单片机步进电机课程设计概要

信息与电气工程学院 课程设计说明书(2012/2013学年第二学期) 课程名称:单片机课程设计 题目:步进电机控制实验 专业班级:自动化1002班 学生姓名:*** 学号:******* 指导教师:苗敬利,王巍 设计周数:2周 设计成绩: 13年6 月17 日

目录 第1章设计目的............................... 错误!未定义书签。第2章设计任务与要求.. (3) 第3章设计思路与方案 (4) 3.1 控制电机正/反向转 (4) 3.2 控制电机运转速度 (5) 第4章硬件电路设计 (5) 4.1 主控模块 (5) 4.2 驱动控制模块 (6) 4.3 按键控制模块 (7) 4.4 显示模块 (8) 第5章系统软件设计 (9) 5.1 主程序 (9) 5.2 子程序 (10) 第6章系统仿真 (10) 6.1 KEIL调试控制程序 (10) 6.2 Proteus仿真 (11) 第7章收获与体会 (12) 附录1 总电路图 (15) 附录2 源程序清单 (16)

步进电机简易控制系统设计 第一章设计目的 步进电机是现代数字控制技术中最早出现的执行部件,步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。需要单片机产生脉冲序列和方向控制控制信号。步进电机的特点是可以将数字脉冲控制信号直接转换为一定数值的机械角位移.并且能够自动产生定位转矩使转轴锁定。对控制系统的研制中最基本的要求就是性能可靠和结构简单。利用AT89S52单片机来设计和开发步进电机的控制系统,可以很好地满足这一要求。驱动程序写入AT89S52单片机中,通过程序控制步进电机的转速与转向。实现软件与硬件相结合的控制方法,使步进电机运行稳定、可靠性高,达到对步进电机的最佳控制。 第2章设计任务与要求 (1)能用按键控制步进电机的正反装运行。 (2)能在一定范围内控制电机的加速和减速。 (3)在不断电的情况下能通过一个按钮能随时控制电机的停止。

步进电机的单片机控制

本设计采用凌阳16 位单片机SPCE061A对步00进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。 步进电机的单片机控制 作者:李通刘志垠 摘要:本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74L S164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。 关键词:步进电机单片机数码管 一、方案论证与比较 1、本设计的重点在于对步进电机的控制和驱动,设计中受控电机为四相六线制的步进电机(内阻33欧,步进1.8度,额定电压12V) 方案一:使用多个功率放大器件驱动电机 通过使用不同的放大电路和不同参数的器件,可以达到不同的放大的要求,放大后能够得到较大的功率。但是由于使用的是四相的步进电机,就需要对四路信号分别进行

放大,由于放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂。 方案二:使用L298N芯片驱动电机 L298N芯片可以驱动两个二相电机(如图1-1),也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。 图1-1 通过比较,使用L298N芯片充分发挥了它的功能,能稳定地驱动步进电机,且价格不高,故选用L298N驱动电机。而使用L298N时,可以用L297来提供时序信号,可以节省单片机IO口的使用;也可以直接用单片机模拟出时序信号,由于控制并不复杂,故选用后者。 2、数码管显示电路的设计 方案一:串行接法 设计中要显示4位数字,用74LS164作为显示驱动,其中带锁存,使用串行接法可以节约IO口资源,但要使用SIO,发送数据时容易控制。 方案二:并行接法 使用并行接法时要对每个数码管用IO口单独输入数据,占用资源较多。

51单片机驱动步进电机__终极完整版

51单片机驱动步进电机__终极(完整版) 在这里介绍一下用51单片机驱动步进电机的方法。这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈360 度 , 需要 48 个脉冲完成!!! 该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5:黄色、6:黑色。 采用51驱动ULN2003的方法进行驱动。 ULN2003的驱动直接用单片机系统的5V电压,可能力矩 不是很大,大家可自行加大驱动电压到12V。

;************************************************ ****************************** ;************************* 步进电机的驱动 *************************************** ; DESIGN BY BENLADN911 FOSC = 12MHz 2005.05.19 ;--------------------------------------------------------------------------------- ; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!! ; 本步进电机步进角为 7.5度 . 一圈 360 度 , 需要48 个脉冲完成!!! ;--------------------------------------------------------------------------------- ; A组线圈对应 P2.4 ; B组线圈对应 P2.5 ; C组线圈对应 P2.6 ; D组线圈对应 P2.7 ; 正转次序: AB组--BC组--CD组--DA组 (即一个脉冲,正转 7.5 度) ;---------------------------------------------------------------------------------- ;----------------------------正转

51单片机控制四相步进电机(详细)

。今天从淘宝网买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相,接线共有六根,外形如下图所示: 拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为3 60/(4×5)=18度。地线与四线接触的顺序相反,电机的转向也相反。

如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四线脉冲电流的顺序,则可实现对转向的控制。所以,设计了如下电路图:

制作的实物图如下:

C51程序代码为: 代码一 #include static unsigned int count; static unsigned int endcount; void delay(); void main(void) { count = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许

TH0 = 0xFC; TL0 = 0x18; //设定时每隔1ms中断一次 TR0 = 1; //开始计数 startrun: P1_3 = 0; P1_0 = 1; delay(); P1_0 = 0; P1_1 = 1; delay(); P1_1 = 0; P1_2 = 1; delay(); P1_2 = 0; P1_3 = 1; delay(); goto startrun; } //定时器0中断处理 void timeint(void) interrupt1 { TH0=0xFC; TL0=0x18; //设定时每隔1ms中断一次 count++; } void delay() { endcount=2; count=0; do{}while(count

相关文档
最新文档