单片机怎么控制电机转动圈数
发布网友
发布时间:2022-04-23 03:22
我来回答
共1个回答
热心网友
时间:2023-10-23 19:07
1、首先电机要是可调速的;
2、用两个按钮,分别接入单片机的两个输入脚,一个按钮作为增速计数用,一个作为减速计数用。每按一次增速按钮,单片机计数一次,并输出控制信号控制电机增加速度,减速按钮反之。
3、例如用单片机pwm控制电机转速:
带注释软件清单
;
==========使用单元设定==========
//.
.................................使用单元设定
DIS0
EQU
30H
DIS1
EQU
31H
DIS2
EQU
32H
DIS3
EQU
33H
LED
EQU
34H
TM1
EQU
35H;
TM2
EQU
36H;
INTV
BIT
37H;
中断标志
THX
EQU
38H;
定时脉宽高电平
CISHU
EQU
39H
FIRST
BIT
41H;
检测加减是否第一次按下
SET1
BIT
42H
SETZ0
EQU
43H;设定当前设定值SETZ0~SETZ3
SETZ1
EQU
44H
SETZ2
EQU
45H
SETZ3
EQU
46H
TM3
EQU
47H;
循环次数单元
JIA1
BIT
48H;
单步加标志
LIANJIA
BIT
49H;
连加标志
JIAN1
BIT
50H;
单步减标志
LIANJIAN
BIT
51H;
连减标志
SETDATA
EQU
52H;
设定速度暂存单元
REALDATA
EQU
53H;
实测速度暂存单元
YK1
EQU
54H;
上次输出数据暂存单元
KP
EQU
56H;比例系数
KI
EQU
57H;
积分系数
EK
EQU
58H;
设定值和实测值的差值
EK1
EQU
59H;
上次的EK值
OUTPUT
EQU
60H;
EK2
EQU
61H;
EK-EK1的值
ONPRESS
BIT
62H;
判定ENTER键是否弹起标志
TMS
EQU
63H;
闪烁时长
SHAN
BIT
64H;
闪烁标志
;
==========主程序==========
ORG
0000H
SJMP
MAIN
ORG
0013H;
外部中断1入口地址
AJMP
INX1
ORG
001BH;
定时器T1中断入口地址
AJMP
ITX1
ORG
0070H
MAIN:
MOV
SP,#70H;
设定堆栈指针入口地址
ACALL
INIT;
调用初始化程序
M1:
JB
SET1,FLASH;
当前为设置状态则跳到闪烁显示模块
ACALL
DISP;
否则为一般显示
SJMP
NEXTT
FLASH:
ACALL
DISP1
NEXTT:
ACALL
DELAY;
调用按键延时程序
ACALL
M2;调用按键程序
DJNZ
CISHU,M1;
第隔100MS刷新一下实测值
MOV
CISHU,#20
ACALL
CONTROL;
调用控制调速模块
SJMP
M1
//
==========初始化模块==========
INIT:MOV
DPTR,#0FD00H
;
设置PA、PB为输出口,PC为输入口
MOV
A,#03H
MOVX
@DPTR,A
MOV
TMOD,#21H
;
定时器/计数器T1为方式2,定时器/计数器T0为方式1
MOV
TL0,#00H
;
定时器/计数器T0赋初值#00H
MOV
TH0,#00H
MOV
THX,#0BBH
;
输出单元赋初值#0BBH,即脉冲高电平宽度
MOV
TH1,THX
MOV
TL1,THX
SETB
TR1
;
启动定时器/计数器T1
SETB
TR0
;
启动定时器/计数器T0
SETB
ET1
;
允许定时器/计数器T1溢出中断
SETB
EX1
;
允许外部中断1中断
SETB
IT1
;
选择边沿触发
SETB
EA
;
CPU开中断
SETB
07H;
SETB
SHAN
CLR
11H;
检测是否成功
MOV
LED,#7FH。