通过51单片机来控制直流电机
原理很简单了 直接上电路图和源程序吧
看不清楚图的请点保存 或者点开连接地址看大图
下面是针对上面电路图的程序
(直接复制粘贴进去运行 还是那句话 程序别光是复制粘贴 要一句句看懂 看出核心的那一段代码是怎么利用单片机加上一个芯片来控制电机的为以后自己写其他驱动程序打基础 )
;----------------------------------------------
;名称:51单片机来控制直流电机
;主频 6M晶震 51系列单片机
;编译环境:keil c51编译通过
;www.51hei.com单片机教程网原创,可以任意修改和作为学习测试用途
;备注 :程序的关键部分是 T1定时中段程序里面 看PWM 是怎么控制电机转动的
;要改变电机的方向其实很简单
;4个小车状态子程序 你应该能看懂吧
;另外当然就是要去看下 驱动电机的芯片 L293D 了 嘿嘿 就是什么H桥什么的
; 当然电子基本攻扎实的 自己做个电路也是一样的 不过这芯片也就几块钱
; 节约时间的话就买来电路搭起就OK
;2009-5-15
;---------------------------------------------
;------------------------------------------------
;内存分配定义
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
突然想到要利用键盘控制电机调速的同志。。T1 的入口参数就是 ntwkz ntwky
ntwkz equ 3Dh ;左电机PWM脉宽设置
ntwky equ 3Ch ;右电机PWM脉宽设置
T1每次中断就从10档开始自减 一直减到你设置的档位 然后输出PWM波形
只需要改变 3DH 3CH 中的值 那么就可以实现调速功能了
另外想说下 平时也有很多事 因此不能尽快回复大家的帖子 请大家原谅下
一些基础的资料我会整理后发完整的上来给大家
不需要回复和登陆
希望大家理解和支持。
- 关于RTX51 TINY的分析与探讨(05-30)
- 浅析8051模块化编程技巧(05-28)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 锁相环控制及初始化简析(08-27)
- 基于MSP430自动胀管控制器的研究(09-07)
- 嵌入式C实现延时程序的不同变量的区别(03-01)