通用步进电机控制器设计(精通单片机汇编语言的朋友进)

任务:
1.步进电机驱动器能驱动四相步进电机。
2.驱动器用两线控制方式,一根控制方向,一根控制速度。
3.能用按键分别控制电机的启动与停止,正转,反转。
4. 能用按键分别设定正转或反转的步数。
5. 能从按键调整正转或反转的速度。
6. 能显示设定的正转或反转的步数.
希望各位按上面要求做,给我提供源程序,并附必要的程序说明,另外给我个电路原理图(元件要清晰的)
我是单片机初学者,希望懂的朋友指点下
有电路原理图的朋友传到我的邮箱吧 48495944@163.com
我要象这种比较清晰的图片
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/qj20082008/pic/item/c9ccfa50c404b4521038c2ed.jpg
元器件的型号要清楚的
没时间编程序的朋友,给我提供个完整的电路图也行的,元件型号要清楚哦
beyondwpd - 助理 三级:估计你也不懂做,不懂做就别来这里捣乱,100分是不多,如果有人能按要求提供给我资料的话,分不是问题,RMB就不必要花了,这是我的单片机作业,我不可能每次做作业都要花RMB吧。

实验七:8255A+8253+8259A

<实验目的>
了解步进电机的的基本控制原理,掌握控制步进电机的转速、转向的程序设计方法。
<实验内容>
用8255A的PA0~3分别控制步进电机的A、B、C、D四相,“1”则该相绕组通电,“0”则不通电。步进电机的驱动原理是使各相绕组依次通电来使其作步进式旋转,通过通电顺序和切换频率来调节其转速和转向。步进电机可以四相四拍或四相八拍方式工作,即通电顺序为:A→B→C→D→A;A→AB→B→BC→C→CD→D→DA→A。按相反的顺序即可改变电机的旋转方向。本实验系统采用的是:AB→BC→CD→DA→AB。
注:电机在起动和停止时,不应该突然起、停。而应采用逐渐加速、减速的方式。至于起、停所需时间则依产品型号而定。
<实验电路>
8255A: PA0~3与步进电机的BA~BD相连;
8253: GATE0接+5v;
CLK0接393分频器的T2插孔(4.9125/4MHz),或T3~6插孔(分别是8、16、32、64分频);
CS接译码器单元的Y2;
数据线D0~7与系统数据总线单元任一插座相连;
译码单元: 译码器输入A、B、C与系统地址线A2、A3、A4相连;
译码器控制端G与系统地址线A0下方的G相连。
8259单元: CS端与译码器单元的Y0相连;
D0~7与系统数据总线单元任一插座相连;
最后,将8253的OUT0与8259的IR7相连。

<实验程序>
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 3400H
H8: JMP P8259
PORT0 EQU 0FFE0H
PORT1 EQU 0FFE1H
;-------------------初始化-------------------
P8259: CLI
MOV AX,OFFSET INT8259
MOV BX,003CH
MOV [BX],AX
MOV BX,003EH
MOV AX,0000H
MOV [BX],AX
CALL FOR8259
MOV SI,0000H
I8255: MOV DX,0FFDBH
MOV AL,8AH
OUT DX,AL
MOV BL,03
P8253: MOV DX,0FFD9H ;
IN AL,DX ;选择3种转速
TEST AL,01H
JNZ QQQ
TEST AL,02H
JNZ WWW
MOV DX,0FFEBH ;转速0
MOV AL,34H
OUT DX,AL
MOV DX,0FFE8H
MOV AL,00H
OUT DX,AL
MOV AL,096H
OUT DX,AL
JMP OVER1
QQQ: MOV DX,0FFEBH ;转速1
MOV AL,34H
OUT DX,AL
MOV DX,0FFE8H
MOV AL,00H
OUT DX,AL
MOV AL,010H
OUT DX,AL
JMP OVER1
WWW: MOV DX,0FFEBH ;转速2
MOV AL,34H
OUT DX,AL
MOV DX,0FFE8H
MOV AL,00H
OUT DX,AL
MOV AL,0F0H
OUT DX,AL
OVER1: STI

;中断子程序------------------------------------
INT8259:CLI
MOV DX,0FFD8H
MOV SI,0FFD9H//通过PB7控制正反转
IN AL,SI
AND AL,80H
JZ X59
XX59: MOV AL,BL
OUT DX,AL
SHL BL,1
CMP BL,18H
JZ A1
CMP BL,12H
JNZ C1
MOV BL,03H
JMP C1
A1: MOV BL,09H
C1: MOV AL,20H
MOV DX,PORT0
OUT DX,AL
STI
IRET
X59: MOV AL,BL
OUT DX,AL
SHR BL,1
CMP BL,81H
JZ A2
CMP BL,88H
JNZ C2
MOV BL,0CH
JMP C2
A2: MOV BL,09H
C2: MOV AL,20H
MOV DX,PORT0
OUT DX,AL
STI
IRET

;8259A初始化==============================
FOR8259:MOV AL,13H
MOV DX,PORT0
OUT DX,AL
MOV AL,08H
MOV DX,PORT1
OUT DX,AL
MOV AL,09H
OUT DX,AL
MOV AL,7FH ;IRQ7
OUT DX,AL
RET
CODE ENDS
END H8
<思考与练习>
1. 计算出步进电机走一步旋转的角度,能否精确的回到原点。
答:18度,能。
2.如何控制步进电机的起、停?
答:用8253的GATE0门控制,高电平时起,低电平时停。
3.如何控制步进电机的转速和转向?
答:进入中断,通过8355A的PB7输入来控制正反转向;
将控制信号通过8255的PB读入AL,判断AL的第0位,第1位,来选择转速。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-01-05
拜托,就在百度上一搜,资料以大堆,不懂单片机的人看一下也就会了。
再说这里也回不上图片,真么传电路原理图呀?
给你一段程序自己看吧,估计要改一下程序才能实现你的功能。
定义DSB-1A实验板的S1为启动键,S2为停止键,S3为加1键,S4为减1键,程序如下:

StartEnd bit 01H ;起动及停止标志
MinSpd EQU 25 ;起始转动速度
MaxSpd EQU 100 ;最高转动速度
Speed DATA 23H ;流动速度计数
DjCount DATA 24H ;控制电机输出的一个值,初始为11110 111
Hidden EQU 10H ;消隐码
Counter DATA 57H ;显示计数器
DISPBUF DATA 58H ;显示缓冲区

ORG 0000H
AJMP MAIN
ORG 000BH
JMP DISP
ORG 001BH
JMP DJZD
ORG 30H
MAIN:
MOV SP,#5FH
MOV P1,#0FFH
MOV A,#Hidden
MOV DispBuf,A
MOV DispBuf+1,A
MOV DispBuf+2,A

MOV DjCount,#11110111B
MOV SPEED,#MinSpd ;起始转动速度送入计数器
CLR StartEnd ;停转状态
MOV TMOD,#00010001B ;
MOV TH0,#HIGH(65536-3000)
MOV TL0,#LOW(65536-3000)
MOV TH1,#0FFH;
MOV TL1,#0FFH
SETB TR0
SETB EA
SETB ET0
SETB ET1

LOOP: ACALL KEY ;键盘程序
JNB F0,m_NEXT1 ;无键继续
ACALL KEYPROC ;否则调用键盘处理程序
m_NEXT1:
MOV A,Speed
MOV B,#10
DIV AB
MOV DispBuf+5,B ;最低位
MOV B,#10
DIV AB
MOV DispBuf+4,B
MOV DispBuf+3,A
JB StartEnd,m_Next2
CLR TR1 ;关闭电机
JMP LOOP
ORL P1,#11110000B
m_Next2:
SETB TR1 ;启动电机
AJMP LOOP ;主程序结束
;---------------------------------------
D10ms:
……
;---------延时程序,键盘处理中调用
KEYPROC:
MOV A,B ;获取键值
JB ACC.2,StartStop ;分析键的代码,某位被按下,则该位为1
JB ACC.3,KeySty
JB ACC.4,UpSpd
JB ACC.5,DowSpd
AJMP KEY_RET
StartStop:
SETB StartEnd ;启动
AJMP KEY_RET
KeySty:
CLR StartEnd; ;停止
AJMP KEY_RET
UpSpd:
INC SPEED;
MOV A,SPEED
CJNE A,#MaxSpd,K1 ;到了最多的次数?
DEC SPEED ;是则减去1,保证下次仍为该值
K1:
AJMP KEY_RET
DowSpd:
DEC SPEED
MOV A,SPEED
CJNE A,#MAXSPD,KEY_RET ;不等(未到最大值),返回
MOV SPEED,#MinSpd;
KEY_RET:
RET

KEY:
……获取键值的程序
RET

DjZd: ;定时器T1用于电机转速控制
PUSH ACC
PUSH PSW
MOV A,Speed
SUBB A,#MinSpd ;减基准数
MOV DPTR,#DjH
MOVC A,@A+DPTR
MOV TH1,A
MOV A,Speed
SUBB A,#MinSpd
MOV DPTR,#DjL
MOVC A,@A+DPTR
MOV TL1,A
MOV A,DjCount
CPL A
ORL P1,A
MOV A,DjCount
JNB ACC.7,d_Next1
JMP d_Next2
d_Next1:
MOV DjCount,#11110111B
d_Next2:
MOV A,DjCount
RL A
MOV DjCount,A ;回存
ANL P1,A
POP PSW
POP ACC
RETI

DjH: DB 76,82,89,95,100,106,110,115,119,123,12……
DjL: DB 0,236,86,73,212,0,214,96,163,165
……

DISP: ;显示程序
POP PSW
POP ACC
……
RETI
BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
END
第2个回答  2008-01-06
RMB,给RMB就有人帮你做出很详细的方案,100分你就自己留着用吧
第3个回答  2008-01-09
这种资料到处都是
不用浪费分数在这里求教的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网