51 单片机的直流电机驱动如下图所示为 L298N 焊接的供电板子,怎么用呢?首先,介绍下上面的接口部分,一共五个部分。第一部分: L298N 芯片。这就 不用多说了,百度文库上有很多关于这个芯片的资料,我就不多说了。第二部分: A1 、A2、 B1、 B2 四个接口分别用来连接直流电动机或者是步进电机。A1 和 A2 是一组,驱动一个电机。B1 和 B2 一组驱动另一个电机。第三部分: VDD 接口,可以接一个六节 1.5V 的五号电池的正极。(右边那个 GND 是共地端,要将你用的开发板的 GND 和这个仪器接上,同时也是电源的共地接口)第四部分: 节四节 1.5V 五号电池的正极。负极接 GND。第五部分: 这里一共有六个接口:1.ENA 使能 A1、A2 的接口,也就是说假如 ENA 不接高电平,那么A1、A2 驱动的电机是不可能可以驱动的。 2 ENB 同上。 3A1、A2、B1、B2 你可以用你的开发板的四个 I\O 口接它们,它们的高低电平将直接影响到第二部分输出的高低电平(经过芯片的放大,这是的电压已经很高了,这就是作用)。假如你想驱动电机 A 运转,可以在 A1 上加高电平 A2上加低电平 。这样电机就有了电势差,就可以云装了,调整电势差可以改变正传反转和加减速(PWM 来控制)。下面上源码,源码收集于网上,原著不详,现回馈大家。#include#define uchar unsigned char#define uint unsigned intsbit INPUT1 = P1^0; //控制口sbit INPUT2 = P1^1;sbit INPUT3 = P1^2;sbit INPUT4 = P1^3;sbit ENA = P1^4; //产生 PWM 波sbit ENB = P1^5;uint MA=0,MB=0;uint SpeedA=20;//50%占空比uint SpeedB=20;void delay(uint z) {uint x,y;for(x=z;x>0;x--)for(y=125;y>0;y--);} void main(void){delay(1000);delay(1000);INPUT1=1;INPUT2=0;INPUT3=1;INPUT4=0;TH0 = 0xF4;TL0 = 0x48;TH1 = 0xF4;TL1 = 0x48;TMOD = 0x11;TR0 = 1;TR1 = 1;ET0 = 1;ET1 = 1;EA = 1; while(1){}} //时钟 0 中断处理函数void time0_int() interrupt 1 using 1{TR0=0;TH0=0xF4;TL0=0x48;MA++; if(MA< SpeedA){ ENA = 1;}else ENA = 0;if(MA == 40){ MA = 0;}TR0 = 1;}//时钟 1 中断处理函数void time1_int() interrupt 3 using 1{TR1=0;TH1=0xF4;TL1=0x48;MB=MB + 1;if(MB < SpeedB){ ENB=1;}else ENB = 0;if(MB == 40){ MB = 0;}TR1 = 1;}