(特价书)Arduino高级开发权威指南(原书第2版)
Arduino开源硬件资深专家数年一线工作经验结晶。本书深入浅出地介绍了Arduino微控制器与Arduino的概念
- 定价:¥59.00
- 校园优惠价:¥28.32 (48折) (马上了解)
- 评分:




(已有4条评价)
- 促销活动:
- 此商品暂时缺货(可留下联系方式,到货将第一时间通知您)
-
如果您急需团购,可点击“团购急调”按钮将此书加入购物车,由客服人员为您协调调货!
>> 查看详细说明
信息提示
关闭
如果您急需团购,可点击“团购急调”按钮将此书加入购物车,由我们的客服人员为您协调调货!
- 团购订单标准如下:
- 单品满30册可选择团购服务。
- 提交团购订单后,服务人员会主动和您联系,并根据您的会员等级、购买数量、金额、时间、配送要求等情况和您协商,以促成最终的成交。
- 有关团体购书的任何问题请随时联系:(010)63970506
编辑推荐
迈向Arduino专业级开发阶段必读的一本书。
采用Arduino开发者中最新、最流行的Arduino UNO R3平台。
首本介绍基于Arduino进行复杂嵌入式系统建模与设计的书籍。
内容简介
书籍 计算机书籍
《Arduino高级开发权威指南(原书第2版)》是Arduino开源硬件资深专家数年一线工作经验结晶。本书深入浅出地介绍了Arduino微控制器与Arduino的概念。第1章和第2章简要介绍了Arduino的概念、Arduino UNO R3控制板,以及使用Atmel公司ATmega328控制器的UNO R3控制板的主要功能特性,同时为新手提供了编程简介,包括Arduino的开发环境以及如何烧写程序。第3章主要介绍嵌入式系统的设计过程,让你能以系统考量和循序渐进的方式轻松应对设计复杂系统的问题。第4~7章具体介绍了ATmega328微控制器的工程资料以及端口技术,涉及串行数据通信子系统、模数转换器、中断子系统、定时器子系统。第8章展示了一系列应用样例,例如,自动风扇制冷系统、艺术灯光系统、飞行模拟器操控面板、潜水机器人、气象站等。
作译者
Steven F.Barrett,博士分别于1979年在内布拉斯加州立大学(奥马哈)获得电机工程学士学位,1986年在爱达荷大学(莫斯科)获得电机工程硕士学位,1993年在得克萨斯州立大学奥斯汀分校获得博士学位。他是IEEE高级会员,研究方向涉及数字与模拟图像处理、计算机辅助激光手术和嵌入式控制系统。他是怀俄明州和科罗拉多州注册认证的专业工程师。他与Daniel Pack博士著有6本关于嵌入式微控制器和嵌入式系统方面的教材。他分别于2004年因为在教育方面的杰出成就而获得卡内基基金会授予的“怀俄明州年度最佳教授”,2008年获得NSPE(美国国家专业工程师学会)授予的专业工程师高等教育奖和高等教育优秀奖。
潘鑫磊,资深创客,现供职于DFROBOT。他是国内最早一批Arduino爱好者,在嵌入式系统和硬件开发方面拥有非常丰富的经验。他开发的项目涉及Arduino。硬件模块、互动控制产品、机器人等。
目录
《Arduino高级开发权威指南(原书第2版)》
前言
第1章 入门 1
1.1 概述 1
1.2 入门 1
1.3 Arduino UNO R3 3
1.4 案例:自主迷宫导航机器人 5
1.4.1 结构图 6
1.4.2 UML活动图 7
1.4.3 Arduino UNO R3系统 7
1.5 Arduino开源原理图 7
1.6 其他基于Arduino的硬件平台 9
1.7 扩展Arduino平台的硬件功能特性 9
1.8 Arduino软件 10
1.9 Arduino UNO R3/ATmega328芯片硬件功能 10
1.9.1 内存单元 12
1.9.2 端口系统 12
1.9.3 内部系统 13
1.10 应用:Arduino设备套件 16
1.11 小结 17
1.12 参考文献 17
1.13 本章习题 17
第2章 编程 18
2.1 概述 18
2.2 编程大图 18
2.3 解析程序 20
2.3.1 注释 21
2.3.2 包含文件 21
2.3.3 函数 22
2.3.4 程序常量 24
2.3.5 中断处理器定义 24
2.3.6 变量 24
2.3.7 主程序 25
2.4 基本的编程概念 25
2.4.1 运算符 25
2.4.2 编程结构 29
2.4.3 决策处理 30
2.5 Arduino开发环境 32
2.5.1 背景 33
2.5.2 Arduino开发环境简介 33
2.5.3 速写本概念 34
2.5.4 Arduino软件、库以及Arduino语言参考资料 34
2.6 应用1:机器人红外距离传感器 36
2.7 应用2:艺术照明系统 39
2.8 小结 39
2.9 参考文献 40
2.10 本章习题 40
第3章 嵌入式系统设计 41
3.1 什么是嵌入式系统 41
3.2 嵌入式系统设计流程 42
3.2.1 项目说明 42
3.2.2 背景研究 42
3.2.3 前期设计 43
3.2.4 设计 43
3.2.5 实现原型 45
3.2.6 初步测试 45
3.2.7 完整并准确的文档记录 46
3.3 案例:Blinky 602A自主迷宫导航机器人系统设计 46
3.4 应用:Blinky 602A机器人的控制算法 51
3.5 小结 57
3.6 参考文献 58
3.7 本章习题 58
第4章 串行数据通信子系统 59
4.1 概述 59
4.2 串行通信 59
4.3 串行通信术语 60
4.4 串行USART 62
4.5 串行系统运行以及使用Arduino开发环境功能编程 65
4.6 串行系统运行以及在C开发环境中的编程 68
4.7 SPI在Arduino开发环境中编程 71
4.8 SPI在C开发环境中编程 72
4.9 两线串行接口——TWI 73
4.10 应用1:SD/MMC卡模块通过USART扩展 73
4.11 应用2:通过ISP对ArduinoUNO R3控制板的ATmega328芯片编程 76
4.12 小结 78
4.13 参考文献 78
4.14 本章习题 78
第5章 模数转换器 79
5.1 概述 79
5.2 采样、量化和编码 80
5.3 模数转换过程 83
5.3.1 换能器接口设计电路 83
5.3.2 运算放大器 85
5.4 模数转换技术 88
5.5 Atmel公司的ATmega328芯片ADC系统 89
5.5.1 框架图 89
5.5.2 寄存器 90
5.6 使用Arduino开发环境为模数转换功能编程 92
5.7 使用C开发环境为模数转换功能编程 92
5.8 实例:ADC雨量计指示灯 93
5.8.1 ADC雨量计指示灯(使用Arduino开发环境) 94
5.8.2 ADC雨量计指示灯(使用C开发环境) 97
5.8.3 ADC雨量计指示灯(基于Arduino开发环境的C编程混合优化) 102
5.9 一位模数转换(阈值检测器) 103
5.10 数模转换器(DAC) 105
5.10.1 数模转换器(使用Arduino开发环境) 106
5.10.2 数模转换器(外接转换器) 106
5.11 应用:艺术作品照明系统——优化 107
5.12 小结 109
5.13 参考文献 110
5.14 本章习题 111
第6章 中断子系统 112
6.1 概述 112
6.2 ATmega328中断系统 113
6.3 中断编程 113
6.4 基于C语言及Arduino开发环境的中断编程 114
6.4.1 外部中断编程 114
6.4.2 内部中断编程 117
6.5 前台处理和后台处理 121
6.6 中断例程 121
6.6.1 C语言中的实时时钟 121
6.6.2 Arduino开发环境中的实时时钟 123
6.6.3 用C语言中断驱动的USART 125
6.7 小结 134
6.8 参考文献 134
6.9 本章习题 134
第7章 定时器子系统 136
7.1 概述 136
7.2 有关定时器的术语 136
7.2.1 频率 137
7.2.2 周期 137
7.2.3 占空比 137
7.3 定时器系统概述 138
7.4 应用 139
7.4.1 输入捕捉——测量外部定时事件 140
7.4.2 计数事件 140
7.4.3 输出比较——对外部设备接口产生定时信号 141
7.4.4 工业实施案例研究(PWM) 141
7.5 Atmel公司的ATmega328控制器上的定时器系统概述 142
7.6 Timer 0系统 143
7.6.1 运行模式 144
7.6.2 Timer 0寄存器 146
7.7 Timer 1 148
7.7.1 Timer 1寄存器 149
7.8 Timer 2 151
7.9 利用Arduino开发环境中内置的时钟功能在Arduino UNO R3控制板上编程 154
7.10 用C语言编写定时器系统 154
7.10.1 C语言中的精确延时 154
7.10.2 C语言中的PWM 156
7.10.3 在C语言中输入捕获模式 157
7.11 基于C语言的伺服电机控制的PWM系统 158
7.12 小结 162
7.13 参考文献 162
7.14 本章习题 163
第8章 Atmel AVR系列微控制器运行参数和接口 164
8.1 概述 164
8.2 运行参数 165
8.3 电池供电 167
8.3.1 嵌入式系统电压和电流消耗规格 167
8.3.2 电池特性 167
8.4 输入设备 168
8.4.1 开关 168
8.4.2 开关接口电路中的上拉电阻 169
8.4.3 开关去抖动 169
8.4.4 键盘 170
8.4.5 传感器 174
8.4.6 LM34温度传感器案例 176
8.5 输出设备 176
8.5.1 发光二极管 176
8.5.2 七段码LED显示 176
8.5.3 代码样例 178
8.5.4 三态LED指示灯 179
8.5.5 点阵屏 180
8.5.6 使用C编程液晶字符显示屏(LCD) 182
8.5.7 使用Arduino开发环境编程液晶字符显示屏(LCD) 188
8.5.8 大功率直流设备 189
8.6 直流电磁阀控制 189
8.7 直流电机速度和方向控制 190
8.7.1 直流电机运行参数 191
8.7.2 H桥方向控制 191
8.7.3 伺服电机接口 192
8.7.4 步进电机控制 192
8.7.5 交流设备 198
8.8 驱动其他设备 199
8.8.1 报警器、蜂鸣器 199
8.8.2 振动电机 199
8.9 扩展实例1:自动风扇制冷系统 200
8.10 扩展实例2:艺术灯光系统 207
8.11 扩展实例3:飞行模拟器操控面板 211
8.12 扩展实例4:潜水机器人 231
8.12.1 需求 233
8.12.2 结构图 233
8.12.3 电路图 234
8.12.4 UML活动图 234
8.12.5 微控制器程序 235
8.12.6 项目衍生 237
8.13 扩展实例5:气象站 237
8.13.1 需求 237
8.13.2 结构图 238
8.13.3 电路图 238
8.13.4 UML活动图 240
8.13.5 微控制器程序 241
8.14 小结 248
8.15 参考文献 248
8.16 本章习题 249
附录A ATmega328寄存器设置 252
附录B ATmega328头文件 256
前言
本书将向大家介绍Arduino微控制器与Arduino的概念。由Massimo Banzi、David Cuartielles、Tom。Igoe、Gianluca Martino以及David Mellis等人组成的具有远见卓识的Arduino团队于2005年掀起了一场微控制器领域的革命,带来了开源硬件的概念。该团队以开放基于单片机硬件设计平台的所有设计细节的方式鼓励大家分享创新与创意。这种方式已经在软件开发环境中流行多年。
本书适合从事不同行业的读者以及爱好者阅读。首先,延续Arduino的概念,本书适合那些在项目中需要一定硬件处理能力但却没有较深电子类专业背景的艺术从业人员,如设计系学生、艺术家以及摄影师等。其次,也适合为学校做研发或者做展览项目的初级、中高等院校学生。第三类主要人群就是针对那些在高级设计项目中需要控制单元,但却往往没有上过电气或者计算机工程课程,因而并没有基于微控制器应用背景的工程类学生。最后,这本书也为实践型科学家以及工程师提供了Atmel公司AVR系列微控制器的高阶内容。第2版已经根据最新的Arduino UNO R3处理器进行了更新,修改了一些新版Arduino开发环境的内容并添加了多个案例。
本书主要内容
为了满足这样一个广泛的读者群体,我们把这本书分为几个部分来满足不同读者的需求。第1章和第2章专门针对微控制器的入门级用户。第1章简单介绍Arduino的概念、Arduino UNO R3控制板,以及使用Atmel公司ATmega328控制器的UNO R3控制板的主要功能特性。第2章则为新手提供了编程简介,包括介绍Arduino的开发环境以及如何烧写程序。它也为熟练的开发工程师提供了一个精炼的回顾。
第3章主要介绍嵌入式系统的设计过程。让你能以系统考量和循序渐进的方式轻松应对设计复杂系统的问题。
第4~7章具体介绍了ATmega328微控制器的工程资料以及端口技术。这几章专门针对工程类专业学生以及实践型工程师。但即便是初学者,你也能通过较易理解的内容以及大量的样例有所斩获。
第8章展示了富含不同技术水平的一系列应用样例。
致谢
很多人参与了本书的创作。我要感谢来自Arduino设计团队中的Massimo Banzi,他为写作本书提供了大量技术支持以及鼓励。感谢Morgan & Claypool出版社的Joel Claypool多年来对我和Daniel Pack大量写作项目的支持。同时为我们提供了使用部分在本书中包含的Atmel公司AVR系列微控制器的背景资料的公布权限。我还想感谢位于美国科罗拉多州博尔德的SparkFun Electronics公司、Atmel公司,以及位于加利福尼亚州帕洛阿尔托的ImageCraft为我们在本书中提供的图片和数据资料。
我想将这本书献给我的挚友及写作伙伴Dr. Daniel Pack,他曾因卓越的无人飞行器研发当选“sit this one out”。他大部分的作品来源于之前在Morgan&Claypool出版社的项目。在2000年的时候,Daniel建议我们一起写一本关于微控制器的书。我一直都想这么做,但是顾忌于很多其他人有类似的打算,所以迟迟没有提笔。在Daniel的鼓励下,我们共同合作创作了第一本书(之后又合作了6本)。我的挚友Daniel是一位好父亲也是个孝顺的儿子,同时他也是个好丈夫,一位具有极高的职业素养的杰出工程师。我将此书献给我的这位好朋友。我想我们将会有更多的合作。
最后更感谢陪伴我多年的妻子Cindy。
Steve Barrett
怀俄明州拉勒米市
2012年4月
书摘
第1章
入门
目标本章将向你介绍如下内容:
开源硬件Arduino的概念。
Arduino UNO R3控制板的设计。
介绍Arduino UNO R3控制板的不同特性和命名。
研究ATmega328微控制器的特性及功能。
罗列并简介其他Arduino控制板。
介绍如何扩展Arduino的硬件功能。
通过Arduino软件下载、配置并成功执行一段测试程序。
1.1概述
欢迎来到Arduino的世界!开源硬件Arduino的概念是由卓有远见的Arduino研发团队提出的,其成员包括来自意大利伊夫雷亚的Massimo Banzi、David Cuartilles、Tom Igoe、Gianluca Martino以及David Mellis等。Arduino研发团队的目标是研发一款简单易用的微控制器硬件及软件的产品线,从而使大家都能轻松发挥出处理能力。
本书延续了Arduino的设计理念,旨在能服务更大的读者群体。第1章和第2章为想要快速了解Arduino控制板及其易用软件平台的你而准备。如果你对ATmega328主微控制器的更多特性感兴趣,请参阅第3~8章,我们将向你详细解说。
秉承Arduino开源的精神,贯穿全书包含大量的软硬件样例。希望你能在了解Arduino的同时乐在其中,也能为你基于Arduino的项目开发收集有用的资源。
1.2入门
本章旨在让你快速入门基于Arduino的硬件平台。为了能使用基于Arduino的控制器,你需要如下软硬件工具:
一个基于Arduino的硬件控制器平台
一款兼容Arduino的电源
Arduino软件
Arduino硬件
. 贯穿全书都将使用Arduino UNO R3控制板。位于美国科罗拉多州博尔德的SparkFun Electronics出品的Arduino入门套件如图1.1所示,售价约为100美元。这款套件由如下元件组成:Arduino控制板、一根用于连接电脑主机编写程序的USB数据线、一块可以用来搭建外部原型硬件、跳线以及许多其他常用电子元件的小面包板。本章后面内容中会介绍一些其他的基于Arduino的控制板套件。UNO R3控制板可以单独购买,售价在30美元。
图1.1Arduino UNO R3入门套件(SparkFun Electronics许可使用)
电源
在项目开发期间,Arduino控制板能够直接通过USB端口供电工作。不过,我们强烈推荐使用外部电源供电。这能够满足有大电流工作要求的项目开发需求,从而避免USB端口供电不足的问题。SparkFun Electronics推荐使用DC 2.1mm中心正极插头的7~12V适配器电源供电。你能够在大量的电子类产品销售公司或网站上购买到这款通用的适配器。例如,Jameco编号为133891的电源模块就能满足要求:9V DC输出电压,额定输出300mA电流,同时使用2.1mm中心正极插头。其售价不到10美元。
Arduino软件
同时你还需要称为Arduino开发环境(Arduino Development Environment)的Arduino软件。你可以通过Arduino官网(www.arduino.cc)免费下载。在本章末的应用部分,我们将向大家介绍如何使用软件、加载驱动并且教会大家在Arduino UNO R3控制板上运行一个样例程序。
在接下来的内容中,将说明Arduino UNO R3控制板以及其主控器Atmel公司的ATmega328的性能和设计布局上的信息。同时会讨论其他一些基于Arduino的控制板,以及如何使用扩展板的概念去扩展Arduino UNO R3控制板的功能。
1.3Arduino UNO R3
Arduino UNO R3控制板如图1.2所示。从左边说起,控制板上安装有一个USB接口,用于通过电脑主机对其进行编程(代码烧录)。控制板也可以通过在系统编程技术(In System Programming, ISP)进行编程,后面我会对其进行更详细介绍。6引脚的ISP编程接口在控制板右侧的边缘。
图1.2Arduino UNO R3设计布局(该图经Arduino团队(www.arduino.cc)许可使用)(CS-SA-BY)
该控制板内置USB转串口电路,通过USB转串口芯片实现电脑主机与Arduino板载的ATmega328处理器的通信系统进行数据通信。Arduino UNO R3同时设计有多个小型贴片LED指示灯,从而为你的开发提供串口发送和接收灯光指示,以及一个额外的可控LED指示灯,便于测试使用。控制板顶部的排母接口包括:模拟量信号采集参考电压接口、PWM脉宽信号输出接口、数字信号输入/输出(I/O)接口以及串行数据通信接口。而在控制板底部的排母接口则包括:模数转换系统的模拟信号输入接口、I2C通信接口以及供电端子。最后剩下的是位于板子左下方的外部供电插座。通过板子上下两排的排母插座也能够非常方便地连接Arduino扩展板,为你的主控器扩展额外的功能。
Arduino主处理器——ATmega328
Arduino UNO R3的主处理器使用的是Atmel公司的ATmega328。它是一款拥有28个引脚的8位微控制器。ATmega328的架构基于精密指令集计算机(RISC)的概念,使其拥有在20MHz的主频下每秒完成2000万个指令(MIPS)的能力。
ATmega328微控制器包含大量的功能,如图1.3所示。其硬件功能可归纳为如下几个系统:
内存系统
端口系统
定时器系统
模数转换器(ADC)
中断系统
串行通信模块
图1.3Arduino UNO R3控制板
1.4案例:自主迷宫导航机器人
在深入讲解Arduino UNO R3控制系统前,让我们先通过实际的案例来看看前面介绍的这些系统是如何运作的。Graymark公司(www.graymarkint.com)开发了许多成本低并且性能优越的机器人平台。在这个样例中,我们将使用Arduino UNO R3对Blinky 602A机器人进行控制。
Blinky 602A机器人套件包含搭建一个寻线机器人的硬件以及机械支架。机器人的电子处理元件主要由模拟电路构成。机器人通过2个3V直流电机对左右轮独立驱动从而控制运动速度及运动方向。而第3个无电机的支撑轮为机器人提供了平稳的支点。
在这个样例中,我们将会为Blinky 602A机器人平台安装3个夏普GP2D12红外距离传感器,如图1.4所示。机器人将会被放置在一个有白色反射墙包围的迷宫中。这个案例的目标是让机器人能够自主地检测到墙的位置并且自动寻路通过迷宫(如图1.5所示)。机器人在运行前对迷宫的环境一无所知。在Arduino UNO R3控制器中烧录有机器人的控制算法。
图1.4Blinky机器人设计
图1.5Blinky机器人导航迷宫
1.4.1结构图
结构图是一种可视化的工具,通过分割的方式将一个大的项目或目标分为多个可行的小部分。它也有助于罗列出机器人需要使用哪些控制系统中的接口或功能。结构图中的箭头用于指示程序控制机器人的不同部分的数据流方向。图1.6是这个机器人项目中的结构图。
如图1.6所示,机器人有3个主要的系统:电机控制系统、传感器系统以及数字输入/输出控制系统。这3个系统之间通过主控算法桥接,从而实现机器人根据传感器感应并避让墙壁,使其能自主导航走出迷宫。
图1.6Blinky机器人结构图
1.4.2UML活动图
UML(Unified Modeling Language,统一建模语言)是一种面向对象的建模语言,它是运用统一的、标准化的标记和定义实现对软件系统进行面向对象的描述和建模。机器人的UML活动图如图1.7所示。正如你所看到的,在机器人系统启动之后,机器人将循环执行收集数据、判断动作并控制电机的行为,以操纵自己走出迷宫。
1.4.3Arduino UNO R3系统
安装在机器人平台头部边缘的三款红外距离传感器(左、中、右)用来侦测迷宫中的墙壁。传感器的输出值被接入3个ADC(模数转化)的端口。机器人的电机通过PWM端口进行控制。Arduino UNO R3系统通过具有足够驱动能力处理电机需要的最大驱动电流的三极管对电机进行控制。整个系统能够使用一块9V的电池或者一个额定输出电流在2A的电源模块进行供电,电源会被接入带有5V稳压的电源管理系统。我们会在后面几个章节对电子设备接口进行详细描述。
通过这个样例,我们可以了解搭载在Arduino UNO R3上的不同传感器及控制系统能为Blinky机器人带来的不同功能特性。在接下来的几节中,我们将介绍关于Arduino UNO R3处理器和开发软件的信息。
1.5Arduino开源原理图
整个Arduino的产品线都是围绕着卓有远见的开源软硬件概念而设计的。其理念就是通过用户开放、分享软硬件的设计来刺激各种新创意,从而在用户中建立Arduino的概念。也正基于这种理念,Arduino团队公开了Arduino UNO R3控制板的原理图(如图1.8所示)。
图 1.8 Arduino UNO R3开源原理图(该图经Arduino团队许可使用(www.arduino.cc))(CS-SA-BY)
1.6其他基于Arduino的硬件平台
现在已经有大量基于Arduino的硬件平台。你能够通过各种开源硬件供应商购买到这些平台,如美国著名的SparkFun Electronics(www.sparkFun.com)。图1.9向我们展示了来自SparkFun的具有代表性的产品设计。左边为嵌有ATmega328的Arduino Lily Pad,其使用的主处理器和Arduino UNO R3是一样的。Lily Pad的主要设计理念是一款可穿戴并可以直接清洗的电子控制器。
图1.9Arduino变种控制板(该图经SparkFun Electronics许可使用)
最下面的一个则是内置ATmega 2560芯片的Arduino Mega控制板。它拥有54个数字I/O端口,其中14个可配置成PWM输出模式、16个ADC模数转换器以及4通道串行数据通信能力,功能强大。而右侧所展示的则是Arduino Mini Stamp。其设计核心为体积小巧,同时拥有丰富功能ATmega168处理器。
1.7扩展Arduino平台的硬件功能特性
Arduino硬件平台的设计使能够运用插卡的概念为你的系统添加外部的硬件从而获取各种丰富的功能。一般我们将这些功能扩展模块称为扩展板(Arduino Shield),如图1.10所示。这些扩展板的接口设计一般都能直接匹配Arduino控制板的硬件接口。图1.10展示的这一款扩展板就提供了一块原型电路焊接区、一个控制器重启按键、一个常见的按钮以及两个发光二极管即指示灯(LED),便于进行项目原型的电路开发及调试。
图1.10Arduino扩展板(该图经SparkFun Electronics许可使用)
本节我们主要简介了Arduino UNO R3以及Arduino衍生的控制板。在1.8节中,我们将一起来看下Arduino开发软件的功能并了解如何对Arduino控制板进行编程。
1.8Arduino软件
接下来,我们将简单介绍如何使用Arduino开发环境对Arduino UNO R3控制板编程。首先,我们需要下载并安装Arduino IDE开发软件。
在Arduino首页(www.arduino.cc)中包含具体的软件安装简介,如何安装USB驱动以及如何在Arduino UNO R3控制板上运行一个样例程序的详细步骤。限于图书篇幅的原因,在这里我们就不重复这一部分的内容,你可以通过官网具体了解。Arduino官网的Getting Started选项卡中提供了这一部分详细并易于理解的具体内容,只需要花上很短的时间,你就可以完成软件下载、安装及其与Arduino控制板进行编程通信的步骤。(Getting Started入门链接:http://arduino.cc/en/Guide/HomePage。)
1.9Arduino UNO R3/ATmega328芯片硬件功能
正如我们之前所提到的,Arduino UNO R3控制板的主控芯片是来自Atmel公司的ATmega328芯片。ATmega328的引脚及框架说明图如图1.11及图1.12所示。接下来将详细介绍处理器。
图1.11ATmega328引脚图(经Atmel公司许可使用)
图1.12ATmega328框架图(经Atmel公司许可使用)
1.9.1内存单元
ATmega328芯片主要内置3个内存单元:电可擦可编程只读存储器(Electrically Erasable Programmable. Read-Only Memory),EEPROM)、静态随机存取存储器(Static Random Access Memory,SRAM)以及用于数据存储的字节寻址EEPROM。接下来简单了解下这3种内存单元的性能。
1.9.1.1系统内可编程闪存EEPROM
大容量的可编程闪存EEPROM是用于存储程序的。它能够以单个单元的形式被擦除并重复编程。此外,如果一个程序需要大量的常数表,它可以在程序中以全部变量的形式与其他程序一起被烧录到闪存EEPROM空间内。闪存EEPROM空间内的非易失性是指,当微控制器掉电时,存储器中的内容不会改变或者丢失。ATmega328配备有32KB的板载可重复编程闪存EEPROM空间。这个内存单元被组织成16K个位置,每个位置上包括16位(即2个字节的内容)。
1.9.1.2字节寻址EEPROM
在程序执行时,字节寻址内存用于存储永久性或会被反复调用的变量。它也是非易失性的。它在程序执行时,常被用于对系统故障和故障数据进行记录。同时,在电源故障期间它能够有效地帮助存储必须保留的数据,但需要周期性充电才能维持工作。使用这类内存的应用主要是存储系统参数、电子锁组合以及电子门解锁序列等信息。ATmega328芯片中配备1024B的EEPROM。
1.9.1.3静态随机存取存储器
静态随机存取存储器(SRAM)存储是易变的。这也就是说,如果你的微控制器掉电时,所有的SRAM内存区内所存储的内容都将被清空丢失。在程序执行期间,所有的内容能够被读写。ATmega328芯片内置2KB自己的SRAM空间。其中一小部分的SRAM空间被分配给了通常的单片机数据寄存单元和板载I/O端口及外围子系统的状态存储。在附录A和附录B中,我们分别提供了一个完整的ATmega328芯片的寄存单元列表及头文件信息。程序运行时,RAM区一般被用于存储全局变量、支持动态内存分配的变量,并为堆栈提供位置(将在后面具体介绍)。
1.9.2端口系统
Atmel公司的ATmega328芯片配备有3个8位数字输入/输出(I/O)端口,被指定为PORTB(8位,PORTB[7:0]),PORTC(7位,PORTC[6:0])以及PORTD(8位,PORTD[7:0])。所有的这些端口还有额外的功能(之后我们再具体介绍)。接下来我们先初步了解下基本的数字I/O端口功能。
如图1.13所示,每个端口都有3个相关的寄存器:
数据寄存PORTx——用于对端口写入输出状态。
数据方向寄存器DDRx——用于指定引脚方向:输出(1)、输入(0)。
输入引脚地址PINx——用于从端口读取输入数据。
图1.13b描述了将端口配置为输入或输出模式的设置。如果选择为输入,引脚可以被用于信号输入引脚或者工作在高阻抗(Hi-Z)模式下。
图1.13ATmega328端口配置寄存器
一般来说,在程序运行的第一步,我们就会对控制板的所有端口进行初始化,配置其输入/输出的工作状态以及初始值。通常一个端口上的8个引脚是同时进行配置的。在后面的章节中,我们会具体谈谈如何配置端口引脚的状态以及读写其内容。
1.9.3内部系统
这一节主要介绍ATmega328芯片的内部系统。主要说明微控制器内部系统的一些功能特性。这些内置功能使得微控制器能够实现较为复杂的功能和逻辑。
1.9.3.1时间基准
微控制器是一个复杂的同步状态机。它根据用户编写的程序以连续的方式对程序的每一步做出响应。微控制器的执行序列是一个可预见的读取–解码–执行的步骤。每一个独特的汇编语言程序指令发出一系列的信号,从而控制微控制器的硬件来完成指令有关的操作。
微控制器有序执行这一系列动作的速度取决于一个精准的时间基准,称为时钟。时钟源被连接到整个微控制器的路由系统中,从而提供所有外围子系统的时间基准。ATmega328芯片能够使用一个用户可配置的内部RC(电阻–电容)作为时间基准,或者接入外部时钟源。通过选择可编程熔丝位能够启动内部RC时钟。内部时钟提供4个时钟工作频率,分别为:1MHz、2MHz、4MHz或8MHz。
为了能够提供更多的工作频率,你同样可以配置微控制器工作在外部时钟源模式下。为了提高准确度和稳定性,外部时钟源能够使用一个外部的RC网络、陶瓷谐振器或晶体振荡器。系统设计师需要根据实际应用来选择适当的时间基准频率以及时钟源设备。
1.9.3.2定时子系统
ATmega328芯片配备有辅助的定时器子系统,通过该系统用户能够生成精确的输出信号、测量输入的数字信号的特性(如周期、占空比以及频率等)或者对外部事件进行计数。具体地说,ATmega328有2个8位定时器/计数器以及1个16位计数器。在本书的后面几个章节我们会具体讨论定时器系统的操作、编程及应用。
1.9.3.3脉宽调制通道
脉冲宽度调制或者说PWM信号的特性是固定的频率和不同的占空比(duty cycle)。占空比是指重复的信号为逻辑高电平状态在信号周期内的时间百分比。它能用公式表达为:
占空比[%]=占用时间/时间周期×(100%)
ATmega328芯片内置4路PWM输出通道。其PWM通道拥有从系统时间基准分割出的多路PWM子系统时钟频率的灵活性,从而使用户能够根据实际需求,生成各种各样的PWM通道信号(从高频率低占空比的信号到低频率高占空比的信号)。
PWM信号已经在实际应用中得到广泛使用,例如,私服舵机位置控制以及直流电机转速控制等。在本书后面的内容中我们会具体讨论PWM系统的操作、编程及应用。
1.9.3.4串行数据通信
ATmega328芯片配备有不同的串行数据通信子系统,其中包括:通用同步/异步串行收发器(Universal Synchronous and Asynchronous Serial Receiver and Transmitter, USART)/串行外设接口(Serial Peripheral Interface, SPI)以及两线串行通信接口(I2C/TWI)。所有这些系统通过共同的串行方式来传输数据。在串行通信传输时,计划发送的数据以单个位的形式在固定的时间里从发射端被推送到接收端。
串行USART
串行USART一般用于发送器和接收器之间进行全双工(双向)数据通信。使用USART端口能实现ATmega328微控制器与其他独立设备的数据收发。USART典型应用在于异步数据通信,也就是说,它并不需要接收器和发送器之间使用一个通用的时钟系统来解决它们的同步问题。在USART端口发送字节数据时,是通过发送起始位和终止位数据的方式来维持接收器和发送器之间同步的。
ATmega328芯片的USART端口灵活性很强。它拥有可配置系列数据通信速率的功能,常称为波特率。USART端口也支持携带1个或者2个终止位数据,发送5~9个字节位的数据。此外,ATmega328配备硬件生成的校验位(偶数或奇数)和奇偶校验硬件的接收器。单奇偶校验位可以用来捕捉到一个字节数据中的单个数据位的发送错误。同时USART可配置工作于同步模式。在本书后面的内容中我们会具体讨论USART的操作、编程及应用。
串行外设接口(SPI)
ATmega328芯片的串行外设接口同样也能够用于接收器和发送器之间的两路串行数据通信。在SPI系统中,发送器和接收器需要共享一个通用的时钟源。因此,在发送器和接收器间需要通过一根额外的时钟线来连接,但是与USART通信相比,这一特性也为SPI通信带来了更高的数据传输速率。
SPI拥有16位同步移位寄存器,其中一半是8位数据发送寄存器,而另一半则是8位的数据接收寄存器。发送器通常被指定为主机,因为它需要为接收器和自身之间的连接提供同步时钟源。接收器称为从机。在本书的后面几个章节我们再具体讨论SPI的操作、编程及应用。
两线串行通信接口(I2C / TWI)
TWI子系统允许系统设计师使用两线互连的方案将一系列相关设备,如微控制器、传感器、显示器、记忆存储器等设备,以网络的形式连接到同一系统中。TWI接口最大能同时连接128个设备。其中每个设备具备独立的设备地址,并且能在两线的总线上以高达400kHz的速率进行通信。因此通过TWI接口设备之间在小范围的网络中自由交换数据。我们在本书后半部分会具体讨论TWI系统。
1.9.3.5模数转换器
ATmega328芯片配备8路模数转换器(ADC)子系统。ATmega328芯片的模数转换器系统拥有10位的分辨率。这也就意味着,从0~5V的模拟电压信号接入微控制器的ADC系统后,在微控制器眼中,这个电压信号就是一个从0~1024的二进制数值信号(从十六进制的00到十六进制的3FF)。因此它也提供了ATmega328芯片感应大约4.88mV电压变化的精度。在本书后面几章,我们会深入讨论ADC系统的操作、编程及应用。
1.9.3.6中断系统
一个程序的常规执行步骤根据指定的指令序列进行。然而,往往在实际应用中,我们需要对一些源自微控制器外部或者内部的较高优先级的错误或者状态进行快速响应,因而需要打断常规的程序执行步骤。在这些优先级较高的事件发生时,微控制器必须暂停正常运行并执行特殊事件的行为称为中断服务程序。一旦高优先级事件执行完成后,处理器会返回并继续执行常规的程序步骤。
ATmega328芯片配备26个中断源。其中两个作为外部中断源,其余中断为微控制器上的外围子系统的高效运作提供支持。我们在后面内容中再继续讨论中断系统的操作、编程及应用。
1.10应用:Arduino设备套件
就像艺术家一定会有一本艺术创作使用的草稿本,我们在本书中也会用到一套Arduino设备套件来开发各种有趣的项目。延续Arduino的DIY精神,我们自己拼凑了这个套件,如图1.14所示。其中包括:
一个黄色Pelican小型设备盒(#1040)
一块Arduino UNO R3开发板
两块来自Jameco(美国电子类产品销售网站)3.3×2.1英寸无焊面包板
一块黑色的有机玻璃
我们并不想提供更多的元件细节,更推崇的是大家自己通过想象去开发并构建属于自己的Arduino设备套件。