微控制器
微控制器是将微型计算机的主要部分集成在一个芯片上的单芯片微型计算机。微控制器诞生于20世纪70年代中期,经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。例如电机控制、条码阅读器/扫描器、消费类电子、游戏设备、电话、HVAC、楼宇安全与门禁控制、工业控制与自动化和白色家电(洗衣机、微波炉)等。
微控制器(Microcontroller Unit,即MCU)可从不同方面进行分类:根据数据总线宽度可分为8位、16位和32位机;根据存储器结构可分为Harvard结构和Von Neumann结构;根据内嵌程序存储器的类别可分为OTP、掩膜、EPROM/EEPROM和闪存Flash;根据指令结构又可分为CISC(Complex Instruction Set Computer)和RISC(Reduced Instruction Set Computer)微控制器。
微控制器工作原理
今天,在大量形形色色的产品中,都可以看到微控制器的影子。如果你的微波炉有发光二极管或是液晶显示屏和操作按键,那么它就装有微控制器。现在所有的汽车都至少装有一个微控制器,多的可达六到七个: 发动机、防抱死刹车系统和定速巡航控制都离不开微控制器的控制。任何配有遥控装置的设备几乎都装有微控制器: 电视机、录像机和高端的立体声系统都属于这一类。 精密的单反相机、数码相机、手机、便携摄像机、电话应答机、激光打印机、带来电显示和号码存储等功能的电话、寻呼机、功能全面的电冰箱、洗碗机、洗衣机以及带有显示屏和操作键盘的干衣机……你应该有所了解了。总的来说,任何需要与用户进行交互的产品或设备都内置有微控制器。
在本文中,我们将探讨微控制器,帮助你了解它们的本质和工作原理。之后我们将进一步介绍如何能够亲自动手使用微控制器。提前透露一下,我们将制作一个带有微控制器的数字时钟!此外,我们还将制作一支数字温度计。 在整个过程中,你将学到大量关于微控制器如何应用于商业产品的知识。
背景知识
如果你对数字逻辑、门电路和线路连接不熟悉,那么请先阅读以下内容:
位和字节
布尔逻辑的应用
电子门工作原理
什么是微处理器?
一个微处理器就是一个计算机。所有的计算机——无论我们所说的个人台式计算机或是一台大型计算机或是一个微控制器——都有很多共同点:
所有的计算机都有一个用来执行程序的CPU(中央处理单元)。如果你正坐在一台台式计算机前阅读这篇文章,这台计算机的CPU现在正在执行一个程序,这个程序就是用于显示这个网页的Web浏览器。
CPU从某个设备中加载程序。在你的台式计算机上,浏览器程序是从硬盘中载入的。
计算机具有一些用来存储“变量”的RAM(随机存取存储器)。
此外,计算机还有一些输入和输出的设备,这样它才能和用户交换信息。在你的台式计算机上,键盘和鼠标是输入设备,显示器和打印机是输出设备。 硬盘则是一个输入输出设备——它既可以输入又可以输出。
你正在使用的台式机是一种“通用计算机”,它可以运行数以千计的各类程序。而微控制器则是用作特殊用途的“专用计算机”。它专注于做一件事。 微控制器还有许多共同的特点。如果一个计算机具备了以下大部分的特征,那么你就可以称之为“微控制器”:
微控制器都“嵌入”在其他装置(通常是一个消费类产品)内部来控制该产品的功能和操作。 因此,微控制器又被称为“嵌入式控制器”。
微控制器运行一个特定的程序来完成一项专门的工作。该程序存储在ROM(只读存储器)中,一般不会被修改。
微控制器通常是低能耗的装置。 台式计算机的电源插头几乎始终插在墙壁插座中,其功率约为50瓦。电池供电的微控制器的功率大概为0.05瓦。
微控制器有一个专用输入设备,通常(但并不总是)还有一个用作输出的发光二极管或液晶显示屏。 微控制器也从它所控制的装置获取输入信号,并通过向设备中的不同部分发送信号来控制该设备。
例如,电视机中的微控制器从遥控器得到输入信号,然后在屏幕上显示出来。微控制器会控制频道选择器、扬声器和一些如色彩、亮度等显像管的电子调节。 汽车中的发动机控制器从氧气和爆震等传感器中得到输入信号,对燃料混合以及火花塞定时等进行控制。微波炉控制器从操作键盘获得输入信号,在液晶显示屏上显示输出,并控制负责微波发生器开关的继电器。
微控制器通常具有小巧、低成本的特点。 对各个元件的选择都秉持使体积最小化、使成本最低化的原则。
微控制器通常都很耐用,但也并不总是这样。
例如,控制轿车发动机的微控制器必须能够在一般计算机无法承受的温度极限下工作。美国阿拉斯加的汽车的微控制器就需要工作在零下34摄氏度的寒冷天气里,而同样的控制器在美国内华达州则需要工作在零上49摄氏度的炎热环境中。再加上发动机运行发出的热量,发动机箱的温度可高达零上65-80摄氏度。
而录像机内部使用的嵌入式微控制器则没有这么苛刻的要求。
实际上,用作微控制器的处理器多种多样。 例如,数字手机工作原理一文中的移动电话就包含一个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。下面是两种版本的对比:
比较项目BS-1BS-2
随机存取存储器14字节26字节
电可擦除只读存储器256字节2000字节
最大程序长度约75条指令约600条指令
执行速度每秒2,000行每秒4,000行
输入输出引脚816
本文中用到的是一个名为“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语言指令:
for.。.next : 标准循环语句
gosub : 跳转到子程序
goto : 跳转到程序标记处(例如 -“label:”)if.。.then : 标准的“if/then”(如果/那么)判断let : 赋值(可选)return : 从子程序返回
end : 结束程序,进入休眠状态
与输入输出引脚相关的指令:
button : 读取输入引脚上的键值,防反跳并自动重复high : 将输入输出引脚设置为高电平input : 将输入输出引脚的方向设置为输入
low : 将一个输入输出引脚设置为低电平
output : 将输入输出引脚的方向设置为输出
pot : 读取输入输出引脚上的电位计值
pulsin : 读取输入引脚上脉冲的宽度
pulsout : 通过一个输出引脚发出指定宽度的脉冲pwm : 在输出引脚上执行脉冲宽度调制reverse : 反转引脚输入输出方向
serin : 读取输入引脚的串行数据
serout : 在输出引脚写入串行数据
sound : 向输出引脚发送特定频率的声音
toggle : 切换输出引脚上的位
BASIC Stamp的特有指令:
branch : 读取转移表
debug : 向台式计算机上的控制台发送调试字符串eeprom : 将程序下载到EEPROMlookdown : 返回列表中某个值的指针
lookup : 使用索引进行数组查找
nap : 休眠一段时间
pause : 延迟指定的时间
random : 选取一个随机数
read : 从EEPROM中读取值
sleep : 断电指定的时间长度
write : 向EEPROM写入数据
运算:
+ : 加
- : 减
* : 乘(低字)
** : 乘(高字)
/ : 除
// : 取余数
max : 返回两个值中的最大值
min : 返回两个量的最小值
and : 与
| : 或
^ : 异或
and/ : 与非
|/ : 或非
^/ : 异或非
if 语句逻辑:
=
《》
《
《=
》
》=
AND
OR
变量
BS-1中的所有变量都具有预定义的名称(您可以用自己的名称代替这些名称)。 请记住,只有14个字节的RAM(随机存取存储器)可用,所以变量名称应简洁。 以下是标准的名称:
w0, w1, w2.。.w6 : 16位字变量
b0, b1, b2.。.b13 : 8位字节变量
bit0, bit1, bit2.。.bit15 : 1位位变量
由于只有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计算机进行编程和自定义)这样包含大量示例项目的书,也是极有裨益的。
微控制器ATTINY88-AU的参数
高性能、低功耗AVR?8位微控制器?高级RISC架构–123条强大指令–大多数单时钟周期执行–32 x 8个通用工作寄存器–完全静态操作?高耐久性非易失性内存段–4K/8K字节的系统内自编程闪存程序内存–64/64字节ES EEPROM–256/512字节内部SRAM–写入/擦除周期:10000次闪存/100000次EEPROM–数据保留:85°C下20年/25°C下100年–软件安全编程锁定?外围设备功能–一个8位定时器/计数器,带单独的预分频器和比较模式–一个16位定时器/计数器,带预分频器,并进行比较和捕获E模式–6通道或8通道10位ADC–主/从SPI串行接口–面向字节的2线串行接口(飞利浦I2c兼容)–可编程看门狗定时器,带单独的片内振荡器–片内模拟比较器–插脚更改时中断和唤醒?特殊微控制器功能–调试片内调试系统–输入-系统可通过SPI端口进行编程-上电复位和可编程断电检测-内部校准振荡器-外部和内部中断源-三种睡眠模式:空闲、ADC降噪和断电-芯片内温度传感器?I/O和软件包-24条可编程I/O线路:?28针PDIP?28垫QFN–28程序可编程I/O线路:?32线TQFP?32板QFN?32球UFBGA?工作电压:–1.8–5.5V?温度范围:–-40°C至+85°C?速度等级:–0–4 [email protected]–5.5V–0–8 [email protected]–5.5V–0–12 [email protected]–5.5V?低功耗–主动模式:1 MHz,1.8V:240微安–1.8V时的断电模式:0.1微安