二相步进电机控制系统的设计Word文档下载推荐.docx

上传人:b****6 文档编号:20239439 上传时间:2023-01-21 格式:DOCX 页数:18 大小:620.27KB
下载 相关 举报
二相步进电机控制系统的设计Word文档下载推荐.docx_第1页
第1页 / 共18页
二相步进电机控制系统的设计Word文档下载推荐.docx_第2页
第2页 / 共18页
二相步进电机控制系统的设计Word文档下载推荐.docx_第3页
第3页 / 共18页
二相步进电机控制系统的设计Word文档下载推荐.docx_第4页
第4页 / 共18页
二相步进电机控制系统的设计Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

二相步进电机控制系统的设计Word文档下载推荐.docx

《二相步进电机控制系统的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《二相步进电机控制系统的设计Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

二相步进电机控制系统的设计Word文档下载推荐.docx

电机相数不同,其步距角也不同,一般二相电机的步距角为0.9°

、三相的为0.75°

/1.5°

、五相的为0.36°

/0.72°

在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。

如果使用细分驱动器,则‘相数’将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。

保持转矩(HOLDINGTORQUE):

是指步进电机通电但没有转动时,定子锁住转子的力矩。

它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。

由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成为了衡量步进电机最重要的参数之一。

比如,当人们说2N.m的步进电机,在没有特殊说明的情况下是指保持转矩为2N.m的步进电机。

DETENTTORQUE:

是指步进电机没有通电的情况下,定子锁住转子的力矩。

DETENTTORQUE在国内没有统一的翻译方式,容易使大家产生误解;

由于反应式步进电机的转子不是永磁材料,所以它没有DETENTTORQUE。

3设计总方案分析

本设计包括硬件和软件两部分,设计思想是化整为零和化零为整,即电路模块化,然后再整合模块功能作用,达到要求的目的。

把原来复杂的电路分成一个个简单的模块,这样化繁为简,可以逐个击破,便于设计编程;

当把分开的每一个模块都搞定,设计出来时,再通过单片机这个核心部分,将每个模块糅合在一起。

例如本设计中,可以把步进机的控制化成功能键输入部分,显示部分和二相步进机驱动电路部分。

3.1系统总框图

图1系统总框图

3.2总原理图和最终效果

设计的最终效果通过硬件仿真图可以看到,以单片机ATmega128为核心的控制系统,由PE口与PG口进行开关按键的设置,具体为:

PG0接K2启动/停止开关,低电平为停止状态,高电平为启动状态;

PE4接K3正/反转开关,高电平为正转,低电平为反转;

PE0接K0四拍通电方式,PE1接K1双四拍通电方式,;

PE2接K1八拍通电方式,按任一键可以使电机进行转换到相应的工作方式。

PF口与PD口外接4位LED数码管,显示步进步数进而实现4位数值的显示。

PB口作为输出口外接负载,具体由PB7接绿色发光二极管,使其在电机停转时亮;

PB5接红色放光二极管,使其在电机正转时亮;

PB4接黄色发光二极管,使其在电机发转时亮。

PB0-PB3外接驱动电路ULN2003A的B端4个输入端,路ULN2003A的B端4个输出端外接二相步进电机,这样即可通过控制单片机的PB口输出电平来实现二相步进电机的启动,停止,正反转以及四拍,八拍运转。

具体工作过程需通过对单片机编程来实现。

总原理效果图如图2。

图2系统总电路图

4硬件电路设计

4.1二相步进机驱动电路的设计

方案

本方案用到二相六线式的步进电机和ULN2003A集成电路由于采用采用单极性控制,即线圈电流方向固定,只按一个方向流动,而要求四相单拍,双拍和八拍,所以所设计的驱动电路将电机两组带中心抽头的线圈的接线柱接高电平,其余四线按顺序依次接在ULN2003A的输出侧,当ULN2003A的输出端依次给低电平时,这样就可以保证步进机中线圈的电流方向一致。

4.1.1单极性二相步进机接法

二相步进机定子上有4个极,转子是两个相背的齿。

二相六线步进电机的结构如图3电机转动是通过控制绕组和电源接通或开断的变化频率呈步进状态,系统每发一个步进脉冲信号,电机则步进一步。

其转向取决与通电相序,电机相数不同,其步距角也不同,一般二相电机的步距角为0.9°

,在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。

电机有两组带中心抽头的线圈,要求单极性,所以两组带中心抽头接高电平,其余丝线A、B、C、D依次接入低电平时可以保持电流方向一致。

图3二相六线步进电机的结构图

4.1.2ULN2003A集成电路应用

原理:

ULN2003A也是一个7路反向器电路,即当输入端为高电平时ULN2003输出端为低电平,当输入端为低电平时ULN2003输出端为高电平,继电器得电吸合。

运用ULN2003A可以连接要求的单极性控制控制电路。

ULN2003A原理图如图4图所示,管脚图如图5所示。

图4ULN2003A原理图

图5ULN2003A管脚图

4.1.3驱动效果图

要实现四相单四拍,四相双四拍,四相八拍,则要把两组带中心抽头接高电压,其它四线按要求依次接入脉冲信号转换成低电平接入到输入接口A,B,C,D。

如图6所示。

四相单四拍输入的脉冲信号依次是A—B—C—D—A或D—C—B—A—D;

四相双四拍为AB—BC—CD—DA—AB或DA—CD—BC—AB—DA;

四相八拍为AB—B—BC—C—CD—D—DA—A—AB或AB—A—DA—D—CD—C—BC—B—AB。

图6驱动效果图

4.2LED数码管显示器

设计中用到四个LED数码管显示器,LED有共阴共阳数码管两种,使用LED显示器时,要注意区分这两种不同的接法。

为了显示数字或字符,必须对数字或字符进行编码。

七段数码管加上一个小数点,共计8段。

因此为LED显示器提供的编码正好是一个字节。

本实验用共阴LED显示器,根据电路连接图显示16进制数的编码已列在表7。

表7编码表

本部分用到LED显示器,其工作方式有两种:

静态显示方式和动态显示方式。

LED数码管,其原理和数字表扫描显示的原理一致即采用动态显示,动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。

选亮数码管采用动态扫描显示。

所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

设计图中四个数码管进行显示时,PD是位的扫描输出,本部分通过单片机的PD口和PF口的输出,PF为字形码扫描。

如图8步数显示电路

图8步数显示电路

4.3功能按键控制电路

用K0-K2做为通电方式选择键,K0为四相单四拍,K1为四相双四拍,K2为四相八拍;

K3为启动/停止控制、K4方向控制。

设计中把按键接入单片机,通过按键扫描功能输入的情况来达到控制步进机的目的。

其图如图9功能键电路图,接线接到单片机的输入口,作输入信号。

图9功能键电路图

4.4步进电机状态的显示

本部分需要3个发光二极管来显示步进电机状态:

正转时红灯亮,反转时黄灯亮,不转时绿灯亮。

方案一:

软件设计完成,通过输入口的指令查询,然后把信息通过输出口接在3个发光二极管上,这样来完成。

把红绿黄三个发光二极管分别接在PF高四位的PF4,PF5,PF6,当PG0=0,时,PF4=0,PF5=0,PF6=1,绿灯亮;

当PF0=1而且PE4=1时,PF4=1,PF5=0,PF6=0,红灯亮;

当PG0=1而且PE4=0时,PG4=0,PG5=1,PG6=0,黄灯亮;

其软件设计的控制字如表10

PG0

(起动)

PE4

(方向)

PF4

(红灯接口)

PF5

(黄灯接口)

PF6

(绿灯接口)

亮灯

-

1

绿灯亮

红灯亮

黄灯亮

表10

方案二:

硬件接法,只需要把这3个发光二极管接在通过硬件与门和非门来连接来控制3个发光二极管来显示步进电。

其控制如表11,硬件设计图如下图图12起动/方向状态图。

起动接口

方向接口

状态的显示

低电平

高电平

表11

图12起动/方向状态图

5软件设计

软件设计包括流程图和程序编写,这是实现控制的关键。

流程图如下,程序在附录

5.1总流程图

图13系统总流程图

5.2步进机工作方式流程图

步进电机四相单四拍,四相双四拍,四相八拍各模块流程图分别如下图14四相单四拍流程图,图15四相双四拍流程图,图16四相八拍流程图。

其设计时通过time0定时器开控制的。

5.3步数显示部分流程图

步数显示部分流程图如图17。

其显示是通过time2定时器来计算步数,数码管来显示的。

6设计总结和体会

本次设计,设计涉及的内容比较广,如数字电路技术部分,微形计算机控制技术尤其得数字控制技术部分和步进机结构原理工作方式以及数控中等部分,也有学过的AVR单片机系列中的ATmega128单片机。

这些内容,不是单一存在,而是互相渗透牵连万千的。

在了解每部分内容的同时,还要思考它们的联系。

这样才能收到效果。

如步进机,我们了解它的工作原理,知道它是是一种将电脉冲转化为角位移的执行机构。

当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的,而它需要的脉冲从哪来呢,这就涉及单片机了,可以通过单片机设定脉冲输给,单片机还可以通过脉冲频率设定来控制步进机的转动频率即可以控制转速。

还有LED的工作,我们可以再数字电路技术里学习到它显示的原理等等,这些知识单一存在时没意义的,所以我们学习应该会联系。

通过本次设计令我在回忆复习老师课堂讲的理论知识的同时,也进一步达到了学以致用的目的,将课本所学的知识用到了实践上,结合软件和硬件进行,充分锻炼了自己的理论能力和动手能力。

总的来说,设计过程也遇到了种种困难,但在对硬件原理结构的学习中,通过找资料,思考锻炼了自学的能力;

在编程时遇到困难以也学会了如何利用编译软件进行调试,达到最终期望的结果,得到编程训练;

不懂时,通过同学间的讨论交流,学习借鉴也达到了相互合作的目的,完成任务,增进了同学间的合作友谊。

有遇到了种种困难的苦闷,也有遇难而上,解决困难时的喜悦。

参考文献

[1]于海生.《微型计算机控制技术》.北京:

清华大学出版社,2004.

[2]陈立周.《单片机原理及其应用》.北京:

机械工业出版社,2007.

[3]陈东云.《ATmega128单片机原理与开发指南》.北京:

机械工业出版社,2006.

[4]张克彦.《AVR单片机实用程序设计》.北京:

北京航空航天大学出版社,2004.

[5]刘宝廷.《步进电动机及其控制驱动系统》.哈尔滨工业大学出版社,2006.

附录

程序

//ICC-AVRapplicationbuilder:

2009/6/3014:

09:

19

//Target:

M128

//Crystal:

4.0000Mhz

#include<

iom128v.h>

macros.h>

unsignedchard4[][8]={{0x21,0x22,0x24,0x28},{0x23,0x26,0x2c,0x29},{0x21,0x23,0x22,0x26,0x24,0x2c,0x28,0x29},

{0x18,0x14,0x12,0x11},{0x19,0x1c,0x16,0x13},{0x19,0x18,0x1c,0x14,0x16,0x12,0x13,0x11}};

unsignedcharscan[4]={0Xf7,0Xfb,0Xfd,0Xfe};

/*选择扫描显示数码管,送PF口选数码管*/

unsignedcharseven_seg[10]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f};

/*0-9的字符表,送PD口显示*/

unsignedcharflag,pai,tt,i,key,k=0;

typedefstruct{

charminute;

charsecond;

}time;

//定义时钟变量

timenow;

voidport_init(void)

{

PORTA=0x00;

DDRA=0x00;

PORTB=0x00;

DDRB=0xFF;

PORTC=0x00;

//m103outputonly

DDRC=0x00;

PORTD=0x00;

DDRD=0xFF;

PORTE=0x00;

DDRE=0x00;

PORTF=0x00;

DDRF=0xFF;

PORTG=0x00;

DDRG=0x00;

}

//TIMER0initialize-prescale:

256

//WGM:

CTC

//desiredvalue:

100Hz

//actualvalue:

99.522Hz(-0.5%)

voidtimer0_init(void)

TCCR0=0x00;

//stop

ASSR=0x00;

//setasyncmode

TCNT0=0x64;

//setcount

OCR0=0x9C;

//starttimer

unsignedchartimer0=0;

#pragmainterrupt_handlertimer0_comp_isr:

16

voidtimer0_comp_isr(void)

//compareoccuredTCNT0=OCR0

timer0++;

if(timer0==50)

{

timer0=0;

i++;

PORTB=d4[flag+pai][i%tt];

if(i==100)

i=0;

}

//TIMER2initialize-prescale:

Normal

100.160Hz(0.2%)

voidtimer2_init(void)

TCCR2=0x00;

TCNT2=0x64;

//setup

OCR2=0x9C;

//start

unsignedchartimer2=0;

#pragmainterrupt_handlertimer2_comp_isr:

10

voidtimer2_comp_isr(void)

//compareoccuredTCNT2=OCR2

timer2++;

if(timer2==100)

{timer2=0;

now.second++;

if(now.second==99)

{now.second=0;

now.minute++;

if(now.minute==99)

now.minute=0;

//callthisroutinetoinitializeallperipherals

voidinit_devices(void)

//stoperrantinterruptsuntilsetup

CLI();

//disableallinterrupts

XDIV=0x00;

//xtaldivider

XMCRA=0x00;

//externalmemory

port_init();

timer0_init();

timer2_init();

MCUCR=0x00;

EICRA=0x00;

//extendedextints

EICRB=0x00;

EIMSK=0x00;

TIMSK=0x82;

//timerinterruptsources

ETIMSK=0x00;

//extendedtimerinterruptsources

SEI();

//re-enableinterrupts

//allperipheralsarenowinitialized

voiddisplay(void)

start();

PORTF=scan[k];

switch(k)

{

case0:

PORTD=seven_seg[now.second%10];

break;

case1:

PORTD=seven_seg[now.second/10];

case2:

PORTD=seven_seg[now.minute%10];

break;

case3:

PORTD=seven_seg[now.minute/10];

}

k++;

if(k==4)k=0;

delay();

key=PING;

if(key==0x00)

voiddelay()/*延时子函数*/

inti,j;

for(i=0;

i<

20;

i++)

for(j=0;

j<

j++);

unsignedcharj;

start()

key=PING;

if(key==0x01)

{j=PINE;

if(j==0x08)

{flag=0;

elseif(j==0x00)

{flag=3;

{

if(j==0x02|j==0x0A)

{TCCR0=0x0E;

pai=1;

tt=4;

TCCR2=0x04;

now.second=00,now.minute=00;

elseif(j==0x01|j==0x09)

{TCCR0=0x0E;

pai=0;

elseif(j==0x04|j==0x0c)

pai=2;

tt=8;

elsePORTB=0x80;

voidmain(void)

now.second=00,now.minute=00;

init_devices();

while

(1)

display();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1