使用直流/步进两用驱动器可以驱动两台直流电机。分别为M1和M2。引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。(如果信号端IN1接低电平, IN2接高电平,电机M1反转。)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。可参考下图表:
输入部分接线图
输出部分接线图
下面是单片机源程序:
- /********************************************************************
- 实现功能:直流电机调试程序
- 使用芯片:AT89S52 或者 STC89C52
- 晶振:11.0592MHZ
- 编译环境:Keil
- 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
- *********************************************************************/
- #include<reg52.h>
- #define uchar unsigned char//宏定义无符号字符型
- #define uint unsigned int //宏定义无符号整型
- sbit P2_0=P2^0;//M1启动
- sbit P2_1=P2^1;//M1停止
- sbit P2_2=P2^2;//M2启动
- sbit P2_3=P2^3;//M2停止
- sbit P1_0=P1^0;//M1
- sbit P1_1=P1^1;//M1
- sbit P1_2=P1^2;//M2
- sbit P1_3=P1^3;//M2
- /********************************************************************
- 延时函数
- *********************************************************************/
- void delay(uchar t)//延时程序
- {
- uchar m,n,s;
- for(m=t;m>0;m--)
- for(n=20;n>0;n--)
- for(s=248;s>0;s--);
- }
- /********************************************************************
- 主函数
- *********************************************************************/
- main()
- {
- while(1)
- {
- if(P2_0==0){delay(3);if(P2_0==0)//M1启动
- {
- P1_0=1;
- P1_1=0;
- }}
- if(P2_1==0){delay(3);if(P2_1==0)//M1停止
- {
- P1_0=1;
- P1_1=1;
- }}
- if(P2_2==0){delay(3);if(P2_2==0)//M2启动
- {
- P1_2=1;
- P1_3=0;
- }}
- if(P2_3==0){delay(3);if(P2_3==0)//M2停止
- {
- P1_2=1;
- P1_3=1;
- }}
- …………余下代码请下载附件…………
复制代码 问:Ena 和Enb是分别接两个直流电机么?直流电机的剩下那端接哪儿?
答:
不是直接接连个电机 他两端是脉宽调制 举个例子 如果你要实现两个电机不同的转速来达到智能小车转弯的效果你可以这样
四个输入端接在单片机的四个管脚 四个输出端接在两个直流电机 两个使能端也接到单片机的两管脚(就是ENA,ENB)通过写程序来控制
电机的转速写程序的方法有很多的简单说明一下定义一个变量j 然后让j++;当j=20ms的时候吧j清0;送给高电平定义一个i 叫i++;让i=10ms的时候
i=0;送低电平,这就实现了电机转20ms听10ms的过程,由于扫描很快就实现了电机的减速,而你必须在你的单片机的使能端管脚送一个低电平
减速机要ENA=0;(让此管教的电压小于2.5v)他才能执行电机调速的过程,ENB=1是另一个电机全速运行,哪一个电机减速运行就实现了差速转弯了
这只是我自己的理解 也不知道该怎么说希望你能看懂吧。
下载:
l298驱动直流电机程序和教程.rar
(402.08 KB, 下载次数: 358)
|