本来准备回复帖子的 想想还是开个楼 把图和程序贴出来 原理很简单了 直接上电路图和源程序吧
看不清楚图的请点保存 或者点开连接地址看大图 下面是针对上面电路图的程序 (直接复制粘贴进去运行 还是那句话 程序别光是复制粘贴 要一句句看懂 看出核心的那一段代码是怎么利用单片机加上一个芯片来控制电机的 为以后自己写其他驱动程序打基础 )
;---------------------------------------------- ;名称: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
[ 原 创 ] Suse| haozi 2009.5.15 1:24 www.51hei.com 转载请注明出处
|