打印本文 关闭窗口 | ||||||||||||||||||||||||||
微控制器工作原理来源于瑞达科技网 | ||||||||||||||||||||||||||
作者:佚名 文章来源:网络 点击数 更新时间:2011/1/18 文章录入:瑞达 责任编辑:瑞达科技 | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
微控制器工作原理1. 引言 2. 什么是微处理器? 3. 微控制器的使用 4. BASIC Stamp程序设计 5. BASIC Stamp的实际操作 6. 制作数字时钟 7. 制作数字温度计 引言 今天,在大量形形色色的产品中,都可以看到微控制器的影子。如果你的微波炉有发光二极管或是液晶显示屏和操作按键,那么它就装有微控制器。现在所有的汽车都至少装有一个微控制器,多的可达六到七个: 发动机、防抱死刹车系统和定速巡航控制都离不开微控制器的控制。任何配有遥控装置的设备几乎都装有微控制器: 电视机、录像机和高端的立体声系统都属于这一类。 精密的单反相机、数码相机、手机、便携摄像机、电话应答机、激光打印机、带来电显示和号码存储等功能的电话、寻呼机、功能全面的电冰箱、洗碗机、洗衣机以及带有显示屏和操作键盘的干衣机……你应该有所了解了。总的来说,任何需要与用户进行交互的产品或设备都内置有微控制器。 在本文中,我们将探讨微控制器,帮助你了解它们的本质和工作原理。之后我们将进一步介绍如何能够亲自动手使用微控制器。提前透露一下,我们将制作一个带有微控制器的数字时钟!此外,我们还将制作一支数字温度计。 在整个过程中,你将学到大量关于微控制器如何应用于商业产品的知识。
什么是微处理器?一个微处理器就是一个计算机。所有的计算机——无论我们所说的个人台式计算机或是一台大型计算机或是一个微控制器——都有很多共同点:
你正在使用的台式机是一种“通用计算机”,它可以运行数以千计的各类程序。而微控制器则是用作特殊用途的“专用计算机”。它专注于做一件事。 微控制器还有许多共同的特点。如果一个计算机具备了以下大部分的特征,那么你就可以称之为“微控制器”:
实际上,用作微控制器的处理器多种多样。 例如,数字手机工作原理一文中的移动电话就包含一个Z-80处理器。Z-80处理器是一个8位微处理器,它诞生于二十世纪七十年代,最初用于当时的家用计算机中。GPS接收机工作原理中的Garmin全球定位系统,包含一个低功耗版的Intel 80386处理器,据说是这样。Intel 80386处理器最初是专为台式计算机设计的。 在许多产品中,例如微波炉,对于微控制器性能的要求很低,价格是主要的考虑因素。 在这样的情况下,制造商开始设计专用的微控制器芯片——一种专为成本低、体积小且功耗低设计的嵌入式中央处理器。Motorola 6811和Intel 8051都是这种芯片的成功典范。另外还有Microchip公司生产的名为“PIC 微控制器”的系列控制器,也非常受欢迎。从今天的标准来看,这些中央处理器简易得令人难以置信;但是大批量购买的价格非常低廉,而且往往只需一片就可以满足产品设计者的需要。 一个典型的低端微控制器芯片中约有1000字节的只读存储器和20字节的随机存取存储器,有8个输入输出引脚。大批量生产这种芯片,单位成本不过几美分。 当然,你也不能指望在这种芯片上运行像Microsoft Word这样的程序——因为 Microsoft Word需要约30兆字节的随机存取存储空间和每秒可执行几百万条指令的处理器。不过控制一台微波炉可不需要Microsoft Word这么复杂的程序。你要使用微控制器完成的是一个具体的任务,而且低成本、低功耗运行才是最重要的。 微控制器的使用在电子门工作原理一文中,你了解到了7400系列TTL(晶体管逻辑电路)元件,在哪里购买以及如何装配它们。 你会发现要实现一个简单的装置通常需要很多门电路。 例如,在数字时钟部分,我们所设计的时钟可能需要15到20片芯片。微控制器的主要优势之一就在于,软件(你编写并在控制器上执行的那个小程序)可以取代许多门电路。 因此,本文中我们将用微控制器制作一台数字时钟。 这将是一台非常昂贵的数字时钟(近200美元!),但是在这一过程中,你将积累下今后几年使用微控制器需要的各种知识。 即使并不实际动手制作这样一个数字时钟,阅读相关内容就能让你获益良多。 这里用到的一款微控制器是专为方便日常生活设计的。 它是Parallax公司开发的名为“BASIC Stamp”的微控制器。 BASIC Stamp是一个兼容BASIC程序设计语言的PIC微控制器。使用BASIC程序设计语言使得微控制器的软件编写变得十分容易。 微控制器配套提供了一个9伏电池供电的母板,通过和计算机的一个端口相连对其进行编程。没有一个制造商会在实际的产品中使用BASIC Stamp——因为 Stamp价格高且速度慢(相对而言)。 但是,为进行实验建模或一次性演示产品使用Stamp非常普遍,因为它的设置和使用是令人难以置信的轻松。 该微控制器之所以被称为“Stamps”是因为它只有一张邮票大小。 Parallax公司生产了两种版本的BASIC Stamp:BS-1与BS-2。下面是两种版本的对比:
本文中用到的是一个名为“BASIC Stamp修正版D”的微控制器(如下图所示)。
BASIC Stamp修正版D是一个BS-1芯片,安装在一块9伏电池供电的母板上。配套组件包括:电压调节器、程序连接电缆、输入输出引脚插针以及一小块建模区域。你也可以单独购买一块BS-1芯片,在面包板上和其他元件相连。修正版D只不过更加方便一些。 从上表可以看出,你不可能用BASIC Stamp做出非常奇特的东西来。BS-1的75行(256字节的电可擦除只读存储器可以存放约75行BASIC语言程序)程序的限制有相当的局限性。然而,你可以做些精巧的东西,Stamp非常小巧并用电池供电,这就意味着它几乎可以适用于任何地方。 BASIC Stamp程序设计您需要使用BASIC程序设计语言对BASIC Stamp进行编程。如果对BASIC语言已经有一些了解,您会发现Stamp中的BASIC语言非常易懂,只是略显零散。如果您不懂BASIC语言,但是您会使用如C、Pascal或是Java等程序设计语言,那么掌握BASIC对您来说是易如反掌。如果您没有任何编程经验,建议您先阅读一下学习编程。下面是Stamp BASIC编程所用到指令的简要列表。 标准BASIC语言指令:
与输入输出引脚相关的指令:
BASIC Stamp的特有指令:
运算:
if 语句逻辑:
变量 BS-1中的所有变量都具有预定义的名称(您可以用自己的名称代替这些名称)。 请记住,只有14个字节的RAM(随机存取存储器)可用,所以变量名称应简洁。 以下是标准的名称:
由于只有14个字节的内存可用,所以w0和b0/b1在RAM中是相同的位置,w1和b2/b3是相同的位置,以此类推。 此外,bit0到bit15位于w0中(因而b0/b1也是如此)。 输入输出引脚 您可以看到,BS-1中有14条指令与I/O引脚相关。之所以要强调这一点是因为输入输出引脚是BASIC Stamp与外界交流的唯一途径。BS-1有8根输入输出引脚(编号0到7),BS-2有16根输入输出引脚(编号0到15)。 这些输入输出引脚都是双向的,就是说既可以从引脚上读输入值也可以通过引脚输出。要向引脚发送值,最简便的方法是使用HIGH或LOW指令。 使用语句high 3可以在引脚3上发出一个1(+5伏),使用LOW则发出一个0(接地)。这里的3号引脚是任意选取的——您可以对0到7号任意引脚输出电平信号。 关于输入输出引脚有许多有趣的指令。 例如,如果您按照POT指令要求在电位计(可变电阻器)两端并联一个电容器,POT指令就可以读出电位计的设置。 PWM指令可以发出脉冲宽度的调制信号。借助类似这样的指令,为Stamp添加控制和驱动功能要轻松得多。有关语言的详细信息,请参见documentation。此外,诸如斯科特·爱德华所著Programming and Customizing the BASIC Stamp Computer(对BASIC Stamp计算机进行编程和自定义)这样包含大量示例项目的书,也是极有裨益的。 BASIC Stamp的实际操作如果您想实际操作一下BASIC Stamp,上手是十分容易的。您所需要的就是一台台式计算机,和一个BASIC Stamp入门工具包。入门工具包包括Stamp微控制器、编程电缆以及一个运行于台式计算机的应用程序,该应用程序将BASIC程序下载到Stamp中。 入门工具包可以从Parallax公司这样的制造商那里获得,也可以从Jameco公司这样的供应商那里获得。如果读过有关门电路和数字时钟的文章,您会对Jameco公司耳熟能详。从Parallax公司您可以订购“BASIC Stamp D入门工具包”(部件号 27202),从Jameco公司您可以订购部件号为140089的入门工具包。您将收到 Stamp(如下图)、编程电缆、软件和操作说明书。两家公司的定价均为79美元。有时,Parallax公司会推出特别版本的入门工具包,称为“必备基础、一网打尽”,这个特别版本除上述内容外,还包括斯科特·爱德华编写的Programming and Customizing the BASIC Stamp Computer(对BASIC Stamp计算机进行编程和自定义)一书。 Stamp的连接十分容易。您只需将其连接到计算机的并行端口, 然后运行DOS 应用程序来编辑您的BASIC程序,并将该程序下载到Stamp中就可以了。以下是一个典型的编辑器(选自斯科特·爱德华的书中)的截图:
要在此编辑器中运行程序,请按ALT+R组合键。编辑器应用程序将检查BASIC程序,然后通过电缆将程序发送到Stamp上的EEPROM(电可擦除只读存储器)。 随后,Stamp会执行该程序。在这个例子中,程序在I/O引脚3上生成方波。如果引脚3上连接有逻辑探针或LED(发光二极管),您将看到,LED每秒钟亮灭两次,这是由于它根据PAUSE指令,每隔250毫秒改变一次状态。了解LED的详细信息,请参阅有关门电路的文章。一节9伏的干电池可以让这个程序运行几个星期。缩短LED处于打开状态的时间(例如亮50毫秒,灭450毫秒),或者用NAP r指令代替PAUSE指令,都可以节约电能。 制作数字时钟花79美元让一只LED亮起来似乎有些奢侈。你肯定更想用BASIC Stamp制作出更实用的东西。花上100多美元,你就可以制作一台精致的数字时钟!这好像也过于奢侈,但以后做其他各种装置时,你会发现这些元件都可以重复利用。 我们将使用BASIC Stamp的输入输出引脚来显示数字。在数字时钟部分,我们了解了如何连接7447芯片的7段显示发光二极管。7447芯片可以和BASIC Stamp协同工作。将BASIC Stamp的四根输入输出引脚直接与7447相连,就可以很容易的显示0到9的数字。BS-1版本的Stamp有8根输入输出引脚,这样可以直接驱动两片7447芯片。 就一个时钟而言,需要至少显示4个数字。为了用8个输入输出引脚驱动4片7447,我们需要更有创造性一些。下图给出了一种解决办法:
上图中,8根输入输出引脚从左边引入。该方法用4个输入输出引脚驱动全部的4片7447。剩余的4个引脚,用来按顺序激活4片7447(芯片上的“E”表示“Enable 使能”——7447芯片上的5号引脚)。要让这个系统工作,Stamp的程序首先通过4根数据线发出第一个数字,并且把第一片7447的E引脚与第一根控制线置位,从而把7447激活。然后发出第二个数字,激活第二片7447,就这样按顺序不停的反复激活四片7447。 实际上,稍微改动一下连线,一片7447就可以实现这些功能。使用74154多路转换芯片以及一些驱动,就可以用这种方法驱动多达16个数字。 这就是实际中控制发光二极管显示屏的标准方法。如果你有一个老式的发光二极管显示的计算器,边晃动边观察显示屏。你会发现同一时刻只有一个数字被点亮。这种技术被称为多路复用显示。 这种技术在时钟和计算器上有很好的应用,但是存在两个重要问题:
另一方法是使用液晶显示屏。 液晶显示屏应用广泛,而且与Stamp连接方便。 例如,下图所示的两行字母数字式的液晶显示屏在Jameco公司(部件号150990)和Parallax公司(部件号27910)都可以买到。 此处展示的是一个典型的液晶显示屏,将液晶显示屏插在面包板上,便于和其他芯片连接:
这类液晶显示屏的优点:
唯一美中不足就是,这样的一个液晶显示屏要花费59美元。显然,没有人会在烤箱上装这样的显示屏。 而设计烤箱时,一般会先用这样的显示屏作样品试验,而后用自己设计的芯片和软件驱动便宜的显示屏,用于最终的产品。 驱动这样的显示屏,你只需提供5伏以上的电源和地线(Stamp的9伏电池满足这两个条件),然后把Stamp的一个输入输出引脚与显示输入线连接。 要将Stamp的输入输出引脚连接到像液晶显示屏这样的设备,我能找到的最轻松的方法,是使用Jameco公司生产的连线工具(部件号34577)和30-gauge规格的连接线(部件号22541)。这样不需要焊接,并且连接结实、可靠。 下面的程序中,BASIC Stamp完成了一个时钟的功能,通过液晶显示屏输出时间(假定液晶显示屏接在Stamp输入输出0号引脚上):
这个程序中,通过SEROUT命令向液晶显示屏发送数据。 序列 (254, 1) 用于清空液晶显示屏,其中254是转义字符,1是清空屏幕的指令。 序列(254, 135)用于定位光标。其他两个SEROUT指令只是将文本字符串发送到显示屏。 这种方法将得到一个比较精确的时钟。通过调整PAUSE语句,可以将每天的误差控制在数秒之内。显然,真正的时钟需要一到两个按钮来校正时间—— 在这个程序中,你需要在向 Stamp 载入程序前,预先设置时间。 此方法简单、有效,但并不十分准确。如果你需要提高计时精度,在Stamp上连接实时时钟芯片是一种好的选择。这样,每过一秒左右就会从芯片读取时间并显示出来。实时时钟芯片中使用石英晶体获得极佳的精确度。 时钟芯片通常还包含日期信息,并可以自动进行闰年修正。 要让实时时钟和Stamp实现对接,一个简单的办法是使用称为Pocket Watch B的元件。
Pocket Watch B在Jameco公司(部件号145630)和Parallax公司(部件号 27962)都可以买到。该元件只有一枚硬币大小,包括时钟芯片、石英晶体和与输入输出引脚通信用的串行接口。它的价格在30美元左右,也不适用于烤箱,但却非常适合在搭建样品模型时使用。 制作数字温度计现在您对Stamp和液晶显示屏有了初步的了解,我们再加一个元件就可以制作一支数字温度计。 制作数字温度计需要用到芯片DS1620。 该芯片包含:
DS1620有两种工作模式: 一种作为独立的恒温芯片;另一种则是与计算机相连作温度计使用。 电可擦除只读存储器用来保存当前的工作模式和恒温模式设定值。 DS1620与Stamp的连接十分简单。 该芯片有8根引脚。从Stamp引出的5伏以上电源接入DS1620的8号引脚; 电源地线接DS1620的4号引脚。3根Stamp输入输出引脚驱动DS1620的以下三根引脚:
例程代码中,假设:
完整连线如下图所示:
DS1620可以从Jameco公司(部件号146456)或Parallax公司(部件号27917)的“应用工具包”中获得,这一工具包包括芯片、电容器、一些有用的文档和示例代码。 或者,你也可以从Jameco公司单独购买该芯片(部件号114382)。如果你是第一次使用此芯片,还是建议你购买“应用工具包”,里面的文档会非常有用。 你可以将DS1620芯片安装在Stamp的母板的实验建模区,也可以装在单独的面包板上。安装完毕,将液晶显示屏与Stamp的3号输入输出引脚相连,载入并运行下面的程序:
运行这个程序,你会发现这一温度计是以0.5度的精度,以摄氏度为单位显示温度。
DS1620芯片测量温度的精度为0.5摄氏度。这个芯片用9位2-补码二进制数表示华氏-110至250度(摄氏-55至125度)范围内的温度。把接收到的数值除以2就是实际温度的数值。2-补码是一种表示负值的便捷方法。下面列出了4位2-补码四位二进制数据所代表的数值:
通常用四位二进制数表示0到15的数值,而四位2-补码二进制数表示-8到7。最左边一位决定了数值的正负。如果数值为负,我们可以通过把其他各位取反加1的方法,得到其绝对值。 以下是上述数字温度计程序执行的操作:
之后,程序进入循环。 每秒向DS1620芯片发出指令获取目前温度信号,读取 DS1620返回的9位的数据,将其保存在变量w0中。Stamp通过切换时钟信号一次发送或接收一位数据信号,与DS1620通信。变量w0(16位)与b0/b1(8位)与 bit0/bit1/.../bit15(1位)占有相同的存储空间,当我们从bit8开始插入从DS1620 获取的位数据,并将w0变量除以2时,实际上我们就是在将数据右移,以便把从 DS1620获取的9位温度信号保存在变量w0中。 温度保存在w0中之后,display子例程判断读数的正负,然后以摄氏度为单位,在液晶显示屏上正确显示读数。 摄氏度到华氏度的单位换算如下:
这样,我们就完成了一个非常昂贵的温度计的制作。 它有些什么用途呢? 这有一个好主意。 例如你在一家制药公司工作,需要在全国范围内运输药品,药品运输全程温度要保持恒定,否则药品会失效。 你可以用 Stamp 制作一台温度数据记录仪。 Jameco公司(部件号143811)和Parallax公司(部件号27960)都出售称为“RAM 封装模块”的元件。 它包含具备串行接口的低功耗8千字节(也可以选择32千字节)RAM芯片。 可以给你的Stamp配上该元件(或相似产品),编写代码,每分钟将读取的温度数值保存在随机存取存储器中。 然后,你可以将 Stamp随药品一起打包,在运输过程结束时取回Stamp。 RAM模块会包含整个运输过程的温度历史记录,通过记录你可以知道药品是否解冻过。 掌握微控制器的工作原理之后,你可以借助Stamp制作出大量类似这样的小巧实用的设备。 |
||||||||||||||||||||||||||
打印本文 关闭窗口 |