英语原文共 13 页,剩余内容已隐藏,支付完成后下载完整资料
中文翻译
驱动直流电机
现在是时候继续前进到控制直流电机。如果您在构建需要使用电机的机器人或任何设备,控制电机的技术是必须要学习的。驱动电机需要比Arduino的高电流可以安全地从它的输出提供,所以我们需要使用晶体管和二极管,以确保我们有足够的电流驱动电机。二极管要向Arduino提供足够的保护电流。
对于我们的第一个项目,我们将学习使用一个非常简单的方法控制电机,然后将继续使用非常流行的L293D电机驱动芯片。后来在本书中,我们还将学习如何使用这些来控制步进电机。
项目15 - 简单的电机控制系统
我们首先将简单地在一个方向上使用功率晶体管、二极管和外部电源到电机和电位来控制直流电机速度。专为高电流负载设计的NPN功率晶体管可以替代TIP120晶体管。不过,我会强烈建议您使用电源达林顿型晶体管,可能有必要以适合的散热器加到晶体管如果它被拉动超过一个安培以上。
外部电源可以是一组电池或“壁式”风格的外部直流电源。电源必须具有足够的电压和电流来驱动电机。电压不得超过要求的电动机。对于我的测试,我使用了500mA、5V直流电源。足以让我用的5V直流电动机转起来。如果您使用的电源电压与比电机更高,你可能会把电机永久损坏。表5-1列出了下一个项目所需的零件。
需要的元件
直流电机
10kΩ 变阻器
TIP120 三极管
IN4001 二极管
电源插头
外电源
1K 电阻
将其连接
首先,确保你的Arduino是通过USB连接线拔下它关闭。现在,采取必要的部件并将它们连接起来,如图5-1所示。正是出于这个项目,你仔细检查所有的电路连接都是有必要的。因为不这样做可能会导致您的组件,甚至你的Arduino的毁坏。二极管尤其是必不可少的,以保护Arduino的反电动势,我们稍后会解释。
图5-1 项目15电路 - 简单电机控制
输入代码:
打开你的Arduino IDE输入清单5-1代码:在上传代码之前,断开给电机供电的外部电源,确保变阻器旋钮能顺时针旋转。然后上传代码到Arduino中。
清单5-1 项目15的代码
//项目15 - 简单电机控制
int potPin = 0 ; // 模拟引脚0连接到变阻器
int transistorPin = 9; // PWM引脚9连接到三极管
transistor int potValue = 0; //从变阻器中读出引脚的模拟值
void setup() {
// 设置连接到三极管引脚模式为输出
pinMode(transistorPin, OUTPUT);
}
void loop() {
//读变阻器的值并转化成0-25
potValue = analogRead(potPin) / 4;
使用这个值控制三极管
analogWrite(transistorPin, potValue);
}
}
上传您的代码之前,断开外接电源到电机,确保电位器逆时针方向旋转。现在上传代码到Arduino。一旦代码被上传,连接外部电源。现在可以转动电位计来控制电机的速度。
项目15 - 电机控制 - 代码概述
首先我们声明三个变量,将持有的值对连接到电位器,连接到晶体管的基极的PWM引脚模值,从模拟引脚脚0中读取来自电位器的返回值。
int potPin = 0; // 模拟引脚0连接到变阻器
int transistorPin = 9; // PWM引脚9连接到三极管
transistor int potValue = 0; // 从变阻器中读出的模拟值
thinsp;在设置()函数我们设置晶体管引脚pin输出码。
void setup() {
// 设置连接到三极管上引脚为输出
pinMode(transistorPin, OUTPUT);
}thinsp;
在主循环中,变量potValue的值设置为从模拟引脚0(potpin)读到的数据除以4的结果:
potValue = analogRead(potPin) / 4;
我们需要读到的值除以4,是因为读到的值的0对应0电压,1023对应5v电压,而要写给三极管作为模拟值的范围只能从0到255的范围,所以我们用4除这个模拟引脚0的值模(最大是1023),得出值最大是255,用于设定模拟输出引脚9(我们用PWM时使用analogWrite),然后代码写入三极管引脚。
analogWrite(transistorPin, potValue);
换句话说,当旋转电位器,不同的值范围从0〜1023被读入,之后把它转换成范围为0〜255,然后把这个值写入PWM数字引脚11,用它改变直流电动机的转速。它向右转到最右侧,电机停止,向左转,电机就加速直到最左端,电机获得最大速度。该代码是非常简单的,没有包含什么新东西。
现在让我们来看看在这个项目中使用的硬件,看看它是如何工作。
项目15 - 电机控制 - 硬件概述
该电路基本上分为两部分。部分1是我们的电位器,其连接到5V和接地。中间引脚接到模拟引脚0。随着电位器旋钮旋转时,电阻分压器的发生变化,给中间引脚一个0-5V的电压,然后用Arduino模拟引脚0读出电压值。
第二部分是用于控制电机的电源。 Arduino上的数字引脚最大能输出40mA(毫安)的电流。但是,数据表说,一个电机以最大速度运行时需要约500mA电流。这明显大于Arduino的输出能力。如果试图用Arduino的引脚直接驱动电机,会对Arduino造成严重的永久性损害。
因此,我们需要找到一种方法具有更高的电流供给。因此,我们取电从外部电源,这将给我们足够的电流。我们可以使用从Arduino输出的5V,当连接到外部电源,可提供高达800mA的电流。然而,Arduino的板是昂贵的,如直流电动机连接到大电流时,特别容易烧坏。因此,为了保证板子的安全,我们将发挥它的安全和使用外接电源。此外,为了保证板子的安全,也是为了电机需要使用超过了Arduino板能提供的电压(如9V、12V电压),或更大的倍数时,应该使用一个外部电源供电。
然而,这一方案控制电机的速度,因此,我们需要一种方法来控制,以使电动机加速、减速。这是在TIP-120晶体管用武之地。
晶体管
晶体管是也可以用作数字开关功率放大器。在我们的电路,我们使用它作为一个开关。因为我们使用的是在这个项目中晶体管的类型的电子符号看起来像图5-2。
图5-2 NPN型三极管
该晶体管具有三个引腿:一个是基极,一个是集电极,一个是发射极。这些被标记为B,C和E在图上。在我们的电路,通过数字引脚9连接到5V到基极,集电极被连接到电机上的一个终端。当通过数字引脚9输出电压到基极时,三极管打开,允许电流通过它的发射极和集电极之间流动,从而提供动力。其连接在串联此电路的电机。通过在基部施加小电流,我们可以控制在发射极和集电极之间的较大的电流。
晶体管几乎是任何一块现代电子设备的关键部件。许多人认为晶体管是二十世纪最伟大的发明。对于双极型晶体管,通过基极引线的电流与允许的电流(大致)成比例,但更大的量从集电流向发射极。基极电流和相应的集电极电流之间的比率被称为增益。我们在这个项目中所使用的功率达林顿晶体管的增益为大约1000,这意味着基极流过的(1毫安)的小电流可以控制在发射极和集电极之间的电流的放大器。因为我们输入脉冲信号时,晶体管每秒被接通和断开许多次,用集电极与发射极之间的脉冲电流控制电机速度。
电机
电动机是一个电磁铁,当电力提供给它,它具有一个磁场。当除去功率,磁场产生突变,这个突变的磁场产生反电动势,施加在电机线圈上。这会严重损害你的Arduino的,这就是为什么二极管已被放置来防止这种反向电流。
白色条纹在二极管通常去到地。功率会从正极侧流至负侧。在我们周围有它的错误的方式,没有权力将流下来它。然而,如果电机是产生“反电动势”(电动势)并发送当前回落导线,二极管将充当阀并防止它这样做。因此,在我们的电路中的二极管到位,以保护您的Arduino。
在给定的时间一给定的电路,二极管可以是正向偏置(阳极比阴极更正)或反向偏置(阴极比阳极更正)。简单的二极管导通时也正向偏置,并进行很少的反向偏置时。二极管在一种情况下行为不同于其他,但合适的方向取决于我们希望它在给定的电路实现的目标。在这种情况下,我们希望提供一个安全的路径(即不通过Arduino或晶体管),放置一个二极管与阴极(白色条纹),以在电机的阳极(另一引线)到电机的晶体管侧的电源侧将实现此目的。当我们有电机接通时,二极管被反向偏置,所以它通过一个可忽略不计的漏电流。当晶体管关断时,来自电机的感应电压正向偏置二极管,这给感应电流安全放电路径。
如果要一个直流电动机直接连接到一个电流表,而不连接其他元件。然后旋转电机的轴,你会看到电动机产生电流。这正是风力涡轮机是如何工作的。当我们给电机上电,让他旋转起来,我们再拔掉电源,电动机将继续以自己的惯性旋转,直到它停止。在这短短的时间,电机不通电旋转,它会产生电流。这就是所谓的“反电动势”)。这时二极管用作阀,并确保电流不会回流到到电路和损坏其他部件。
二极管
二极管是单向阀。二极管允许在一个方向上流动的电流,而不允许反向流动。这与单向阀在水管中只允许水朝一个方向流动但不能反向流动的原理完全相同。当我们使用的LED,并且具有极性。连接电源的正极到LED的长脚上,使LED点亮。转变LED引脚的接法,不但LED不会发光,也阻止了电流通过LED的引脚。如果你把周围的LED时,LED不但不能照亮又可防止电力来自全国各地的终端流动。二极管上靠近负极导线一边有一个白色的环。该1N4001二极管周围有旁边的阴极(负极)铅白带。其它二极管可能以不同的标记阴极,例如在玻璃 - 体或金属壳体二极管黑条。试想一下作为屏障,电流通过从没有屏障的终端二极管。当反向电压并尽量使其流过具有该带的一侧,电流将被停止。
二极管是在保护电路免受反向电压,如果把一个电源接错,或者如果一个电压反向,时电路会发生“backEMF”(反电动势)时保护电路中的元件需要用到二极管。因此,始终尝试使用他们在您的电路中存在由于使用者操作不当或EMF现象造成的电源接反的危险时,我们总是试着在电路里使用二极管以防止损坏电路。
项目16 - 使用L293D电机驱动器IC
在我们以前的项目中,我们使用的晶体管来控制电机。在这个项目中,我们将使用一个非常受欢迎的电机驱动器IC称为L293D。使用这种芯片的优点是,我们可以在同一时间控制两个电动机,以及控制它们的方向。该芯片还可以用于控制步进电机,像你在项目28中看到的那样(还可以使用引脚能够编程的软件,称为SN754410,,并且具有较高的电流额定值的输出。)该IC具有其自身的内部二极管,所以我们并不需要一个二极管用于该项目。
所需的部件
表5-2列出了项目16规定的部分。
直流电机
L293D或SN754410电机
驱动芯片
10KΩ 变阻器
扳钮开关
10KΩ 电阻
散热片
2个0.1uF的电容
把元件连接起来
首先,确保你的Arduino是通过USB连接线拔下来了没有上电。现在采取必要的部件并将它们连接起来,如图5-3所示。上电之前再次全面仔细检查电路。该L293D在使用时会变得非常热热,因此建议使用散热片给L293D散热。使用一种特殊的热环氧树脂胶,导热双面胶带把散热器粘到芯片顶部,或使用夹式式散热器。该散热片越大越好。但是要注意,运行时L293D温度可以足够热融化在面包板或触碰任何电线上的塑料。请勿触摸散热器,以免燃烧到你自己。并确保你不离开电路通电一方它过热的情况下无人值守。在项目中使用万用板而不使用面包板是对的,这样可以防止芯片过热损坏面包板。
图5-3 项目16电路图(参见彩色版插图)
输入代码
一旦你确信你的电路连接正确后,上传清单5-2的代码。请不要在此阶段连接外部电源。
清单5-2 项目16的代码
//项目16-使用L293D电机驱动芯片
#define switchPin 2 //定义扳钮开关
#define motorPin1 3 // L293D输入1
#define motorPin2 4 //L29D输入2
#define speedPin 9 // L293D 使能引脚1
#define potPin 0// 连接变阻器的模拟引脚
int Mspeed = 0;//变量存储当前速度值thinsp;
void setup()
{
//设置开关引脚为INPUT
pinMode(switchPin, INPUT);
//设置其他引脚为OUTPUT
pinMode(motorPin1, OUTPUT);
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[153605],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。