《一份很用心的H桥驱动扫盲教程.docx》由会员分享,可在线阅读,更多相关《一份很用心的H桥驱动扫盲教程.docx(11页珍藏版)》请在优知文库上搜索。
1、一份很用心的H桥驱动扫盲教程什么是H桥?H桥是一个比较简单的电路,通常它会包含四个独立控制的开关元器件(例如MoS-FET),它们通常用于驱动电流较大的负载,比如电机,至于为什么要叫H桥(H-Bridge),因为长得比较像字母H,具体如下图所示:这里有四个开关元器件QI,Q2,Q3,Q4,另外还有一个直流电机M,Dl,D2,D3,D4是MoS-FET的续流二极管:开关状态下面以控制一个直流电机为例,对H桥的几种开关状态进行简单的介绍,其中正转和反转是人为规定的方向,实际工程中按照实际情况进行划分即可;正转通常H桥用来驱动感性负载,这里我们来驱动一个直流电机;打开Ql和Q4:关闭Q2和Q3;此时
2、假设电机正转,这电流依次经过QI,M,Q4,在图中使用黄色线段进行标注,具体如下图所示:正转反转另外一种状态则是电机反转;此时四个开关元器件的状态如下;关闭QI和Q4:打开Q2和Q3;此时电机反转(与前面介绍的情况相反),这电流依次经过Q2,M,Q3,在图中使用黄色线段进行标注,具体如下图所示;反转调速如果要对直流电机调速,其中的一种方案就是;关闭Q2,Q3;打开Ql,Q4上给它输入50%占空比的PWM波形,这样就达到了降低转速的效果,如果需要增加转速,则将输入PWM的占空比设置为100%;停止状态这里以电机从正转切换到停止状态为例;正转情况下;Ql和Q4是打开状态;这时候如果关闭Ql和Q4,
3、直流电机内部可以等效成电感,也就是感性负载,电流不会突变,那么电流将继续保持原来的方向进行流动,这时候我们希望电机里的电流可以快速衰减;这里有两种办法:第一种:关闭Ql和Q4.这时候电流仍然会通过反向续流二极管进行流动,此时短暂打开Ql和Q3从而达到快速衰减电流的目的;第二种:准备停止的时候,关闭Ql,打开Q2,这时候电流并不会衰减地很快,电流循环在Q2,M,Q4之间流动,通过MoS-FET的内阻将电能消耗掉;应用实际使用的时候,用分立元件制作H桥是很麻烦的,市面上已经有很多比较常用的IC方案,比如常用的L293D、L298N、TA7257P,SN754410等。接上电源、电机,通过输入控制信
4、号就可以驱动电机了;下面是某宝上的L298N模块,比较常见,对于新手玩家非常友好,接线也十分简单:1.298N模块这个模块有一个板载5V稳压器,该稳压器可使用跳线的方式进行使能。如果电机电源电压高达12V,我们可以启用5V稳压器,并且5V引脚可以用作输出,例如给ArdUinO板供电。但是,如果电动机电压大于12V,则必须断开跳线,因为这些电压会损坏板载5V稳压器。在这种情况下,5V引脚将用作输入,因为我们需要将其连接到5V电源,以使IC正常工作。我们在这里可以注意到,该IC的电压降约为2V。因此,如果使用12V电源,则电动机端子上的电压约为10V,这意味着我们将无法从12V直流电动机中获得最大
5、速度。这里使用Arduino为例,这是网上找的一个Demo整体的框架如下图所示;1.29N架构#defineenA9#defineini6#definein27#definebutton4introtDirection=0;intpressed=false;voidsetup()pinMode(enAzOUTPUT);piMode(inOUTPUT);pinMode(in2,OUTPUT);pinMode(button,INPUT);/SetinitialrotationdirectiondigitalWrite(inl,LOW);voidloop()Readpotentiometervalu
6、eintpotValue=analogRead(AO);MapthepotentiometervaluefromOto255intpwmutpt=map(potValue,0,1023,0,255);/SendPWMsignaltoL298NEnablepinanalogWrite(eA,pwmutput);Readbutton-Debounceif(digitalRead(button)=true)pressed=!pressed;while(digitalRead(button)=true);delay(20);/Ifbuttonispressed-changerotationdirect
7、ionif(pressed=true&rotDirection=O)digitalWrite(inl,HIGH);digitalWrite(in2zLOW);rotDirection=1;delay(20);/Ifbuttonispressed-changerotationdirectionif(pressed=false&rotDirection=1)digitalWrite(in2zHIGH);rotDirection=0;delay(20);简单描述一下:首先我们需要定义程序所需的引脚和变量。在SetUPO中,我们需要设置引脚模式和电机的初始旋转方向。在IoOP()中,我们先读取电位器值,然后将从中获得的值从0到1023变化,线性映射到PWM信号的0到255的值,将其从0到100%的占空比。然后使用analogWrite()函数将PWM信号发送到L298N板的Enable引脚,该引脚实际上驱动电动机。接下来,我们检查是否按下了按钮,如果是的话,我们将输入1和输入2的状态反置,从而改变电动机的旋转方向。该按钮将用作切换按钮,每次按下该按钮都会改变电动机的旋转方向。某宝上这种小车很多,如下图所示:主控可以换成51单片机或者STM32,当然Arduino也没问题,使用L298N就可以快速搭建一个小车了;票宝的小车