单片机报告.docx
《单片机报告.docx》由会员分享,可在线阅读,更多相关《单片机报告.docx(12页珍藏版)》请在冰豆网上搜索。
单片机报告
课程设计
题目:
单片机控制步进电机的设计
姓名:
专业:
学号:
2011年10月27日
1、设计题目的背景
1.步进电机的原理
步进电动机又称为脉冲电动机,是数字控制系统的一种执行元件,其功用是将脉冲信号变换为相应的角位移或直线位移,既给一个脉冲电信号,电动机就转动一个角度或前进一步,根据结构和工作原理,步进电动机分为:
永磁式、混合式、反应式。
步进电机的驱动原理是通过它每相线圈的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲来控制,所以调节脉冲的频率便可改变步进电机的转速,微控制器最适合控制步进电机。
另外,由于电机的转动惯量的存在,其转动速度还受驱动功率的影响,当脉冲的频率大于某一值(本实验为f.>100hz)时,电机便不再转动。
实验电机共有四个相位(A,B,C,D),按转动步骤可分单4拍(A->B->C->D->A),双4拍(AB->BC->CD->DA->AB)和单双8拍(A->AB->B->BC->C->CD->D->DA->A).
2.应用领域
(1)在数控钻床的应用
(2)在数控铣床的应用
(3)在计算机外部设备的应用
(4)在电火花切割机床中的应用
(5)在电子雕花机中的应用
二、设计原理
1、设计目的
(1)了解步进电机的基本原理,掌握步进电机的转动编程方法
(2)了解影响电机转速的因素有哪些
三、电路设计
1.单片机型号的选择
现在普遍的用的是80C31和80C51,80C51的EA加上高低电平,决定单片机访问内部或外部的程序存储器,EA高电平时,访问内部程序存储器,但当程序计数器(PC)值超过0FFH时单片机自动转向外部程序存储器。
当EA为低电平时,不管单片机有无内部存储器,只访问外部存储器。
80C31没有内部存储器,所以EA必须接地,这样单片机只能选择外部程序存储器。
所以选80C51性能比较好。
2、硬件电路图
四软件设计
1、程序框图
2、程序
MAIN_CODESEGMENTCODE
MAIN_BITSEGMENTBIT
MAIN_DATASEGMENTDATA
STACKSEGMENTIDATA
CMD_8279XDATA0bF01H
DATA_8279XDATA0bF00H
RSEGMAIN_DATA
StepControl:
DS1
buffer:
DS8
SpeedNo:
DS1
StepDelay:
DS1
StartStepDelay:
DS1
StartStepDelay1:
DS1
RSEGMAIN_BIT
bFirst:
DBIT1
bClockwise:
DBIT1
bNeedDisplay:
DBIT1
RSEGSTACK
DS20H
CSEGAT0000H
LJMPSTAR
CSEGAT000BH
LJMPTIMER0
RSEGMAIN_CODE
STAR:
MOVSP,#STACK-1
ACALLINIT8279
SETBbFirst
SETBbClockwise
MOVStepControl,#33H
MOVSpeedNo,#5
MOVTMOD,#02H
MOVTH0,#55
MOVTL0,#55
MOVIE,#82H
MOVBuffer+7,#0
MOVbuffer+6,#0
MOVbuffer+5,#0
MOVbuffer+4,#0
MOVbuffer+3,#10H
MOVbuffer+2,SpeedNo
MOVbuffer+1,#10H
MOVbuffer,#0
STAR2:
MOVR0,#buffer
acalldisplay8
STAR3:
ACALLScan_Key
JCSTAR5
JNBbNeedDisplay,STAR3
CLRbNeedDisplay
ACALLStep_SUB_1
SJMPSTAR2
STAR5:
CLRTR0
CJNEA,#10,$+3
JNCSTAR1
MOVbuffer+4,buffer+5
MOVbuffer+5,buffer+6
MOVbuffer+6,buffer+7
MOVBuffer+7,A
SJMPSTAR2
STAR1:
CJNEA,#14,$+3
JNCSTAR3
MOVDPTR,#DriverTab
CLRC
SUBBA,#10
RLA
JMP@A+DPTR
DriverTab:
SJMPDirection
SJMPSpeed_up
SJMPSpeed_Down
SJMPExec
Direction:
CPLbClockwise
JBbClockwise,Clockwise
MOVbuffer,#1
AntiClockwise:
JNBbFirst,AntiClockwise1
MOVStepControl,#91H
SJMPDirection1
AntiClockwise1:
MOVA,StepControl
RRA
RRA
MOVStepControl,A
SJMPDirection1
Clockwise:
MOVbuffer,#0
JNBbFirst,Clockwise1
MOVStepControl,#33H
SJMPDirection1
Clockwise1:
MOVA,StepControl
RLA
RLA
MOVStepControl,A
Direction1:
SJMPSTAR2
Speed_up:
MOVA,SpeedNo
CJNEA,#11,Speed_up1
SJMPspeed_up2
Speed_up1:
INCSpeedNo
MOVbuffer+2,SpeedNo
Speed_up2:
SJMPSTAR2
Speed_Down:
MOVA,SpeedNo
JZSpeed_Down1
DECSpeedNo
MOVbuffer+2,SpeedNo
Speed_Down1:
SJMPSTAR2
Exec:
CLRbFirst
ACALLTakeStepCount
MOVDPTR,#StepDelayTab
MOVA,SpeedNo
MOVCA,@A+DPTR
MOVStepDelay,A
CJNEA,#50,$+3
JNCExec1
MOVA,#50
Exec1:
MOVStartStepDelay,A
MOVStartStepDelay1,A
SETBTR0
AJMPSTAR2
StepDelayTab:
DB250,125,83,62,50,42,36,32,28,25,22,21
TIMER0:
PUSHACC
DJNZStartStepDelay,TIMER0_1
MOVA,StartStepDelay1
CJNEA,StepDelay,TIMER0_5
SJMPTIMER0_2
TIMER0_5:
DECA
MOVStartStepDelay1,A
TIMER0_2:
MOVStartStepDelay,A
MOVA,StepControl
CPLA
MOVP1,A
CPLA
JBbClockwise,TIMER0_3
RRA
SJMPTIMER0_4
TIMER0_3:
RLA
TIMER0_4:
MOVStepControl,A
MOVA,R6
ORLA,R7
JZTIMER0_1
SETBbNeedDisplay
DJNZR7,TIMER0_1
DJNZR6,TIMER0_1
CLRTR0
TIMER0_1:
POPACC
RETI
Step_SUB_1:
MOVR5,#4
MOVR0,#buffer+7
Step_SUB_1_1:
MOVA,@R0
DEC@R0
JNZStep_SUB_1_2
MOV@R0,#9
DECR0
DJNZR5,Step_SUB_1_1
Step_SUB_1_2:
RET
TakeStepCount:
MOVA,buffer+4
MOVB,#10
MULAB
ADDA,buffer+5
MOVB,#10
MULAB
ADDA,buffer+6
MOVR7,A
MOVA,B
ADDCA,#0
MOVB,#10
MULAB
XCHA,R7
MOVB,#10
MULAB
XCHA,B
ADDA,R7
XCHA,B
ADDA,buffer+7
MOVR7,A
MOVA,B
ADDCA,#0
MOVR6,A
CJNER7,#0,TakeStepCount1
RET
TakeStepCount1:
INCR6
RET
INIT8279:
MOVA,#34H
MOVX@DPTR,A
CLRA
MOVDPTR,#CMD_8279
MOVX@DPTR,A
INIT8279_1:
CALLCLEAR
MOVA,#90H
MOVX@DPTR,A
RET
CLEAR:
MOVA,#0DEH
MOVDPTR,#CMD_8279
MOVX@DPTR,A
WAIT1:
MOVXA,@DPTR
JBACC.7,WAIT1
RET
SCAN_KEY:
MOVDPTR,#CMD_8279
MOVXA,@DPTR
READ_FIFO:
ANLA,#7
JZNO_KEY
READ:
MOVA,#40H
MOVX@DPTR,A
MOVDPTR,#DATA_8279
MOVXA,@DPTR
ACALLKEY_NUM
SETBC
SCAN_KEY1:
RET