原理很简单了 直接上电路图和源程序吧
下面是针对上面电路图的程序
;----------------------------------------------
;名称:51单片机来控制直流电机
;主频 6M晶震 51系列单片机
;编译环境:keilc51编译通过
;备注 :程序的关键部分是 T1定时中段程序里面 看PWM 是怎么控制电机转动的
;要改变电机的方向其实很简单
;4个小车状态子程序 你应该能看懂吧
;另外当然就是要去看下 驱动电机的芯片 L293D 了 嘿嘿 就是什么H桥什么的
; 当然电子基本攻扎实的 自己做个电路也是一样的 不过这芯片也就几块钱
; 节约时间的话就买来电路搭起就OK
;---------------------------------------------
;------------------------------------------------
;内存分配定义
ntw equ 3Eh ;PWM中断计数器(对T1中断)
ntwkz equ 3Dh ;左电机PWM脉宽设置
ntwky equ 3Ch ;右电机PWM脉宽设置
ntwkzy equ 31h ;左右电机预置PWM脉宽
zjfx bit p2.0 ;左电机方向控制口,0为正转,1为反转
yjfx bit p2.1 ;右电机方向控制口,0为正转,1为反转
;-------------------------------------------------
ORG 0000H
aJMP MAIN
org 000bh
lJMP t0zd
org 001bh
ljmp t1zd
org 0030h
;----------------------------------------------
MAIN :
ACALL XCQJ
ACALL CSH
; ;-----
; ;其他程序。比如数码管 显示 什么什么的
; ;----
AJMP MAIN
;-------------------------------------
;系统初始化
;-----------------------------------
CSH:
MOV TMOD, #11H ;定时器0/1均设置为方式1,定时方式 计耸器按16位工作
mov TH1,#0feh ;
mov TL1,#70h ;PWM调速,定时0.8ms
mov ntw,#10 ;PWM对T1中断计数,即可有10档速度调节
mov ntwkzy,#03 ;左右电机预置PWM脉宽
mov ntwkz,#03 ;左电机调速脉宽,此值为高电平的时间
mov ntwky,#03 ;右电机调速脉宽
SETB ET0 ;开T0中断
setb ET1 ;开T1中断
SETB EA ;系统开中断
SETB TR0 ;启动定时器0
SETB TR1 ;启动定时器1
RET
t0zd:
RETI
;---------------------------------
;小车状态子程序
;---------------------------------
xcqj: ;小车前进
setb zjfx ;左机正转(IN2)
setb yjfx ;右机正转(IN3)
RET
xczz: ;小车左转
clr zjfx ;左机反转(IN2)
setb yjfx ;右机正转(IN3)
RET
xcyz: ;小车右转
setb zjfx ;左机正转(IN2)
clr yjfx ;右机反转(IN3)
RET
xcht: ;小车后退
clr zjfx
clr yjfx
ret
;---------------------------------
;T1中断子程序
;---------------------------------
t1zd:
mov th1,#0feh
mov tl1,#70h
push acc
push psw
djnz ntw,t101 ; NTW 不等于0 则运行T101 等于0 则 送低电平
mov ntw,#10
clr p3.5
clr p3.7
ajmp t1fh
t101: mov a,ntw;这里实现了软件方式的电机调速功能 设置 PWM 高电平的脉冲宽度10个档位这里有一点需要注意 NTW开始是设置的10自减1然后与
;预先设置的左右电机的预设置的档位比较 这里是3 那么就是减7次也就是要等待7个T1中断之后才会SETB P3.5也就是说 这里的档位 值越小 转得越快
cjne a,ntwkz,t102 ; 不相等执行102 相等则顺序执行 比较 左电机预设置 的 PWM数量
setb p3.5
t102: cjne a,ntwky,t1fh ; 比较 右电机预设置 的 PWM数量其实这里我设置的都是一样的档 都是3 实际中可能有些情况需要调节2个轮子的转速度 不过一般情况下
;设置一样的 方便些 不过原理还是要看懂 知道怎么设置
setb p3.7
t1fh: pop psw
pop acc
reti
END
[ 原 创 ] Suse| haozi
2009.5.15 1:24 ,51单片机教程网51hei.com
突然想到要利用键盘控制电机调速的同志。。T1 的入口参数就是 ntwkz ntwky
ntwkz equ 3Dh ;左电机PWM脉宽设置
ntwky equ 3Ch ;右电机PWM脉宽设置
T1每次中断就从10档开始自减 一直减到你设置的档位 然后输出PWM波形
只需要改变 3DH 3CH 中的值 那么就可以实现调速功能了