通过一个按键控制电机的速度,该怎样?

用一个按键控制电机的转速,汇编,该如何呢?自加或者自减的话,改如何弄

按下加1键,速度增加,按下减1键,速度降低,最高速度为100转/分,最低转带为25转/分,按下停止键,电机停转。速度值要求在数码管上显示出来。
1.要求分析
按上面的分析,改变转速,只要改变P1.0~P1.3轮流变低电平的时间即可达到要求,这个时间不应采用延时来实现,因为会影响到其他功能的实现。这里以定时的方式来实现。下面首先计算一下定时时间。
按要求,最低转速为25转/分,而上述步进电机的步距角为7.5,即每48个脉冲为1周,即在最低转速时,要求为1200脉冲/分,相当于50ms/脉冲。而在最高转速时,要求为100转/分,即48000脉冲/分,相当于12.5ms/脉冲。可以列出下表
表1 步进电机转速与定时器定时常数关系
速度 单步时间(us) TH1 TL1 实际定时(us)
25 50000 76 0 49996.8
26 48077 82 236 48074.18
27 46296 89 86 46292.61
28 44643 95 73 44640.155
?? … … … …
100 12500 211 0 12499.2
表中不仅计算出了TH1和TL1,而且还计算出了在这个定时常数下,真实的定时时间,可以根据这个计算值来估算真实速度与理论速度的误差值。
表中TH1和TL1是根据定时时间算出来的定时初值,这里用到的晶振是11.0592M。有了上述表格,程序就不难实现了,使用定时/计数器T1为定时器,定时时间到后切换输出脚即可。
2.程序实现
定义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 ;主程序结束
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-05
2个键多好啊,一个加速一个减速,呵呵!不知道你做过“按键控制LED灯的亮度”没? 原理是:通过PWM调制,输给LED灯占空比不同的脉冲,即可得不同电压值0~5V
什么电机?智能电机,通过输给01010就可得不同速度?呵呵,步进电机吧
你去查下PWM调制的资料吧!
第2个回答  2013-07-05
SETB StartEnd
第3个回答  2013-07-05
步进电机的驱动实例
要求:控制电路如图3所示,开机后,电机不转,按下启动键,电机旋转,速度为25转/分,按下加1键,速度增加,按下减1键,速度降低,最高速度为100转/分,最低转带为25转/分,按下停止键,电机停转。速度值要求在数码管上显示出来。
1.要求分析
按上面的分析,改变转速,只要改变P1.0~P1.3轮流变低电平的时间即可达到要求,这个时间不应采用延时来实现,因为会影响到其他功能的实现。这里以定时的方式来实现。下面首先计算一下定时时间。
按要求,最低转速为25转/分,而上述步进电机的步距角为7.5,即每48个脉冲为1周,即在最低转速时,要求为1200脉冲/分,相当于50ms/脉冲。而在最高转速时,要求为100转/分,即48000脉冲/分,相当于12.5ms/脉冲。可以列出下表
表1 步进电机转速与定时器定时常数关系
速度 单步时间(us) TH1 TL1 实际定时(us)
25 50000 76 0 49996.8
26 48077 82 236 48074.18
27 46296 89 86 46292.61
28 44643 95 73 44640.155
�6�8 … … … …
100 12500 211 0 12499.2
表中不仅计算出了TH1和TL1,而且还计算出了在这个定时常数下,真实的定时时间,可以根据这个计算值来估算真实速度与理论速度的误差值。
表中TH1和TL1是根据定时时间算出来的定时初值,这里用到的晶振是11.0592M。有了上述表格,程序就不难实现了,使用定时/计数器T1为定时器,定时时间到后切换输出脚即可。
2.程序实现
定义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 ;主程序结束
;---------------------------------------本回答被网友采纳