英语原文共 221 页,剩余内容已隐藏,支付完成后下载完整资料
第三章 你好,世界
大多数新的编程环境,语言或设备的第一个任务是“Hello world”程序的某个版本。 这是最简单的程序之一,因为它的目标是测试环境是否正确设置,并显示编程语言和特定环境的基本语法。 就微控制器而言,这通常包括打开或关闭LED。
在任何类型的受控系统中,都有四个基本部分:控制器,控制接口,工厂和反馈接口。 通常控制器是一个微控制器。 微控制器可能专门用于这个单一的任务,或处理一些相关的子系统。 由于微控制器的丰富性和低成本,通常在单个系统中使用多个微控制器,每个微控制器通过一个最终微控制器向每个低级微控制器发送命令来处理不同的任务。
图3.1:一个基本的受控系统图
工厂是要控制的设备。 这可以是电机,传感器或其他子系统的控制器。 这通常是要定义的系统的第一部分,并且在使用市售产品的情况下可能是不变的。
在几乎所有可能的系统中,仅仅将受控系统与微控制器直接连接到控制器将破坏其中一个组件或者什么都不会发生。例如,试图用微控制器可以提供的功率来驱动电机,可能会在电机移动之前破坏微控制器。因此,必须有一些组件或子系统将控制器可以安全提供的信号转换为受控系统实际可以使用的信号。这可以像二进制on / o一样简单?信号转换为点亮LED所需的电流,或者更复杂,例如计算机发送给打印机打印出文件的信息,并且可以是任意数量的格式或标准。反馈接口反向执行相同的作用。工厂返回微控制器的任何信息都必须转化为微控制器能够理解的内容。除了简单地翻译数据之外,这两个接口可能需要调整信号的电压或电流以防止损坏或提供必要的电力以使工厂运行。最后,并非所有系统都需要这两个接口。有些只用一个或另一个进行操作。
在控制LED的情况下,系统组件是微控制器,与LED的连接(包括任何必要的支持电路)以及LED本身。 在这个例子中没有反馈。
3.1点亮一个led灯
接下来的两节将介绍使用微控制器开启和关闭LED的过程。本节将介绍所涉及的电子器件,第3.2节将介绍所需的编程。虽然许多学生或业余爱好者只是简单地将几个组件组合在一起,并决定结果要么足够,灾难性的或需要修复,正确的程序要深入得多,并且可以扩展到任何正在设计的系统并且还防止意外破坏所涉及的任何电气部件。
重要的是要注意这是一个迭代过程。如果每个步骤都没有考虑到后续步骤而完成,并且没有回头去改变以前的步骤,那么系统通常最终会比他们需要的更加复杂,低效和昂贵。虽然这个例子看起来可能首先尝试,但这是因为仔细考虑和多次迭代才能创建尽可能简单的系统。
步骤1:确定要求和设计约束
在做其他事情之前,决定系统的最终结果是至关重要的。 无论是提起五吨钢水坩埚还是让使用者知道机器,这些要求将为整个系统奠定基础。 另外,定义一些设计约束或目标可以帮助在满足要求的几种可能性之间进行选择。 这些目标通常与可靠性,成本和简单性相关。 对于这个例子来说,要求非常简单:开启和关闭? 一个明亮的LED可以在光线充足的房间内轻松识别开/关状态。 同时,目标是尽可能简化控制界面,这意味着避免使用任何形式的补偿或电平转换。
步骤2:选定一个led
市场上有数百种LED,其颜色,亮度,封装尺寸,电压和电流要求以及其他视角等不同。 所有这些因素都需要考虑和确定需要什么样的价值以及匹配这个价值的重要性。 在这个例子中,最重要的要求是LED的亮度足够高以便可见。 由于设计限制,必须考虑两个额外的特性,即正向电压和电流,即试图将LED的要求保持在微控制器可提供的范围内,这将在稍后解决。 这些限制以及关于颜色和封装的若干任意决定导致选择建兴电子部件号为LTL-2F3VEKNT的圆5mm封装中的红色LED; 数据表可通过在线搜索获得。
图3.2包含本数据表的摘录,其中包含三个所需信息:发光强度,正向电压和正向电流测试条件。 如要求中所述,LED的亮度是最重要的。 根据数据表,所选LED在20mA的测试条件下发射最小值为4200 mcd(毫坎德拉)。 一个坎德拉(1000mcd)被定义为与普通蜡烛的亮度大致相同,该蜡烛的亮度足以在光线充足的房间中容易地看到。 该LED发光强度是必要的四倍以上,因此符合该要求。
图3.2:摘自LED部件LTL-2F3VEKNT的数据手册[16]
正向电压是开启LED所需的电压。 如果前方的电压电平不符合,LED将不会打开,并且会像开路一样工作。 对于选择的LED,该电平通常为2.0V,但可以高达2.4V。 最后一条信息是测试条件正向电流。 这是允许流过LED的最大推荐电流,也是提供额定亮度的电流。较低的电流将提供较少的光。
步骤3:确定微控制器的功能
通常,用于给定应用的微控制器将高度依赖于该应用的要求。 例如,不需要使用高端32位微控制器来控制LED。 就本例而言,Atmel生产的ATmega644p将被使用。 在数据手册中可以找到几乎任何人想知道的关于微控制器技术规格的信息。 从该微控制器数据手册的第325页开始,微控制器的所有电气特性都可用,包括绝对最大额定值和测试条件。 这些测试条件是长期应用的普遍接受的安全限制,因此应该用作系统的设计限制。
图3.3包含一些重要的信息。 首先它提供了多种电压下的灌入(输入)和源(输出)的电流限制。 另外,注释三和四指定了一组引脚的最大电流。 如果微控制器执行几项任务,例如控制整个LED组,则必须检查这个限制。 在这个例子的情况下,5V的最大电流为20mA可用于为LED供电。
图3.3:ATmega644p数据手册325-326摘录的最大汇/源功能
设计控制界面
步骤4:比较系统需求和控制器能力
既然图3.1的系统和控制器块已经定义好了,现在是时候确定控制接口的必要条件了。 其中的第一步是比较控制器可用的内容和系统要求的内容。 在这种情况下,两个(20mA)的最大电流是相同的,并且微控制器可以提供必要的2.0到2.4V。 由于控制器可以提供必要的一切,控制界面可以保持相当简单,不需要任何形式的电平转换,放大器或外部电流源。
拉电流和灌电流
有两种可能的方法来设置LED电路。 第一种方法是让微控制器成为LED的电源,并通过LED和一个电阻将微控制器的数字输出端接地,如图3.4所示。
图3.4:使用微控制器作为电流源(左侧)或作为电流吸收器(右侧)的电路图。
第一种使用微控制器作为电流源的方法是图3.4中的左侧示意图。这通过一个电阻将LED连接到地。当所连接的单片机的引脚被设置为逻辑高电平时,电源按照箭头所示的方向流向地面,点亮LED。第二种使用微控制器作为接收器的方法是右手示意图。在这种方法中,LED永久连接到电压源。当微控制器的数字输出设置为高电平时,该引脚被设置为相同的电压,导致电压差为0V。由于这个差异是重要的价值,没有电流流动。当引脚设置为低电平时,它接地。这允许电流沿着箭头的方向流入微控制器,点亮LED。在这种情况下,打开LED的逻辑与之前的方法相反,因为逻辑高将转为0。因为电源和芯片DO之间没有电压差异,这被称为低电平有效,与上面的高电平有效方法相反。
正如之前从数据表中所确定的,ATmega644p的接收器和源功能在每个引脚20mA时相同。 然而,并非总是如此,因为许多微控制器可以吸收比他们所能获得的更多的电流。 第二种方法,即下沉电流和低电平有效逻辑,因此更常用,以及将在此处使用的方法。
步骤5 :选择电阻
本身,LED在开启时具有显着的阻力。 这会导致流过非常高的电流,很可能在此过程中烧毁LED和微控制器,而不包含图3.3和3.4中所示的限流电阻。
确定所需电阻的值取决于几个变量:微控制器的电源电压,二极管正向电压,二极管正向电流和吸收电流。
如前所述,所选LED的正向电压为2.0V,正向电流为20mA。 因此,电阻的大小必须允许最大值为20mA,并且5V电源的剩余3V电压下降。 使用欧姆定律:
V = IR
R = V=I
R = 3V=20mA
R = 150
这是必需的最小电阻器尺寸,因此总是舍入到下一个标准电阻器值非常重要。 即使计算结果为标准值也是如此。 所有电阻器都有一个容差,这意味着对于便宜的普通电阻器,实际电阻值通常在5%或10%的误差范围内。 如果在此应用中使用10%容差电阻,则选择150电阻可能导致实际使用135电阻,导致实际电流高于额定20mA。 通过四舍五入到220,下一个标准值,低于20mA的电流得到保证。
在许多情况下,进一步减少从微控制器引出或传送给微控制器的电流可能是有利的。通常优选尽可能降低电流,同时仍然达到最低要求,原因很多。
功率:根据焦耳定律,功率等于电流乘以电压。 由于该功率必须来自某个地方,因此减少电流将减少功耗。 如果这种电力恰好来自电池,电池寿命将会得到改善。
热量:每当电力被诸如电阻等物质吸收时,最终都会产生热量。 这种热量浪费电力,会对长期性能产生不利影响,并且如果发热量过高,会对用户造成危险。
可靠性:增加电流,特别是接近最大值时,会增加组件的磨损和撕裂,降低其可靠性和使用寿命。过度的热量会加剧这个问题。
全局极限:正如前面在第3步中3.1节所述,引脚组可以下沉或源极的电流是有限的,远低于单个引脚极限的总和。 因此,如果要控制八个LED,端口B每个管脚一个,每个管脚将被限制在12.5mA以保持在100mA限制内; 这仍然假定端口D和XTAL2未被使用。 通过将电流减少到必要的最小值而不是最大允许值,可以同时运行更多的设备。
在之前的步骤中,有关于20mA电流的假设。 此时电流将低于此值,这意味着虽然没有组件会失效,但需要重新检查亮度。 从LED数据资料的最后一页,可以确定发光强度与电流成正比。 使用220电阻计算电流,13.6 mA,并以线性关系使用该电阻,发现LED的发光强度为2856 mcd。 虽然明显低于最初的4200 mcd,但仍远高于蜡烛的水平(1000 mcd)。 使用计算所需最小值的概念,电流必须至少为4.76mA,因此最大可用电阻值将为630。
3.2编程“Hello World”
与大多数“HelloWorld”程序一样; 这个很短。 它将被整体呈现,然后逐一分解。 对C编程语言的基本理解将会有所帮助,尽管这不是必需的。 在进入微控制器之前并使用外设之前,应首先查看数据表,了解器件的操作并了解每个相关寄存器的用途。 在ATmega644p上,数字I / O使用三种类型的寄存器,其中四个8位端口中的每一个需要每种类型中的一种,另外还有一个与上拉电阻相关的附加寄存器,共有13个寄存器。 指定端口已经被推广到“X”在这里。 本章第4节包含有关这些寄存器如何在硬件中操作和交互的更多信息。
PORTx - 端口x数据寄存器
四个PORTx寄存器控制数字输出产生的信号。 每个位对应微控制器上的一个单独的引脚。 如果该端口被设置为要输入的任何或全部引脚,则该寄存器的相应位中的1将启用该引脚上的上拉电阻。 有关控制上拉电阻及其用途的更多信息,请参阅本章后面的第3.4节。
DDRx – 端口x数据方向寄存器
这些寄存器控制端口上给定的引脚是输入还是输出。 如果寄存器中的位为高,则相应的引脚被配置为输出。 ATmega644p上电时的默认值是所有引脚都是输入。
PINx - 端口x输入引脚地址
无论数据方向如何,该寄存器都会读取引脚的当前值。 当一个引脚被设置为输入时,该引脚没有连接到其他任何地方,并且上拉电阻为0,相应位的值可能会随机改变。 如果上拉电阻导通,则该引脚在未连接时将读取高电平。 如果数据方向设置为输出,则该寄存器将与端口x匹配。
MCUCR – 单片机控制寄存器
该寄存器的第四位对数字I / O非常重要。 该引脚PUD是上拉电阻的全局禁用。 当设置为1时,即使DDRx和PORTx被配置为使用它们,上拉也会被禁用。
现在,知道每个寄存器都做了什么,它们可以在应用程序中使用。
# include lt;avr/io.hgt;
int main ( void ) {
DDRA = 0 xff;
PORTA = 0xfe;
return 0;
}
该程序将打开连接到ATmega644p引脚40的LED,然后结束(引脚配置在前言的图1中显示)。 由于微控制器的特性,只要为微控制器和LED供电,该LED就会保持工作状态。 为了更好地理解这个程序是如何工作的,下面将解释每一行。
# include lt;avr/io.hgt;
这一行告诉编译器包含指定的头文件(avr / io.h)。 几乎所有针对任何AVR系列处理器编写的程序都将包含这一行,因为它又包含了额外的文件,这些文件定义了很多内存结构,例如所有寄存器的名称。 大多数微控制器制造商或编译器都会在它们的微控制器中包含所有寄存器名称的头文件。如果不存在,程序员将被迫按内存地址而不是名称寻址寄存器。
int main ( void ) {
这是主要功能。 每个程序都必须有一个主要功能,并且它是程序执行开始的地方。 该行还指定程序不会将任何信息作为输入(v
全文共20947字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[10911],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。