电机电流小于1A用8050和8550搭H桥是最便宜的方案,电路也非常简单,
电流小于3A可以使用l298N(l298N的原理图我这没有,你自己百度搜把),电流小于43A可以使用BTS7960(这个芯片我用过,主要用于大电流直流电机驱动,挺贵的但是性能很好,学生不建议使用)

,这三种方案元件价格是由低到高的,具体哪个你自己考虑,调速都是使用PWM,
还有就是可以使用MOS管搭H桥也可
单片机PWM驱动电路
//单片机中LED显示电路用三极管驱动电路四个数码管。可以参考一下
#include<reg52.h>
sbit led0=P3^2;
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit ledd=P3^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char g,s,b,d,a;
unsigned ?int num;
void delay(unsigned char x)
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}?
void display()
{
P1=table[d];
led3=0;
delay(5);
led3=1;
P1=table[b];
led2=0;
delay(5);
led2=1;
P1=table[s];
led1=0;
delay(5);
led1=1;
P1=table[g];
led0=0;
delay(5);
led0=1;

}
void ont()
{
num=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
ont();
while(1)
{
if(a==20)
{
a=0;
ledd=~ledd;
num++;
d=num/1000;
b=num%1000/100;
s=num%100/10;
g=num%10;
}
display();
if(num==10000)
{
num=0;
}
} }
void time_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;

}
其中DC-IN 为 20V DC-OUT 为根据需要输出电压,可能为5V,可能为12V。 VCC为5V。PWM为单片机输出信号。DC-OUT输出电流最大为2A(其中2图中8050仅1.5A,是否有合适的三极管推荐)


