轻松玩转Arduino(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-23 05:39:08

点击下载

作者:张亮

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

轻松玩转Arduino

轻松玩转Arduino试读:

前言

Preface

Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。2005年冬天,Massimo Banzi跟David Cuartielles讨论了这个问题。David Cuartielles 是一个西班牙籍晶片工程师,当时在这所学校做访问学者,两人决定设计自己的电路板,并引入Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程序代码。又过了三天,电路板就完工了。Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,该酒吧是以1000年前意大利国王Arduin的名字命名的。为了纪念这个地方,他将这块电路板命名为Arduino。

随后,anzi、Cuartielles 和 Mellis 把设计图放到了网上。版权法可以监管开源软件,却很难用在硬件上,为了保持设计的开放源码理念,他们决定采用 Creative Commons(CC)的授权方式公开硬件设计图。在这样的授权下.任何人都可以生产电路板的复制品,甚至还能重新设计和销售原设计的复制品。人们不需要支付任何费用,甚至不用取得Arduino团队的许可。然而,如果重新发布了引用设计,则必须声明原始Arduino团队的贡献。如果修改了电路板,则最新设计必须使用相同或类似的 Creative Commons(CC)的授权方式,以保证新版本的Arduino电路板也会一样是自由和开放的。唯一被保留的只有Arduino这个名字,它被注册成了商标,在没有官方授权的情况下不能使用它。Arduino 发展至今,已经有了多种型号及众多衍生控制器推出

Arduino之所以称为开源式硬件,是由于其具有简单易用、扩展丰富、完全开源的特点,电子爱好者可以在不用系统学习电子硬件知识的情况下,很快掌握电子系统的设计开发知识,根据自己的想法可以使Arduino构成各种实用的小产品,从简单的跑马灯、抢答器到复杂的多足机器人系统,Arduino 可以说是上天入地无所不能,只有你想不到的,没有其做不到的。

Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino 简单的开发方式使得开发者更关注创意与实现,更快地完成自己的项目开发,大大节约了学习成本,缩短了开发周期。

因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。虽然在一些专业的硬件工程师看来,Arduino只是一个再简单不过的8位单片机的最小系统,但对于那些没有专业知识的电子爱好者——创客们来说,这比他们以前玩过的矿石收音机、组装一台计算机等要复杂很多了,既需要有硬件方面的知识,还需要有专业的单片机及C语言基础,这使得他们在使用 Arduino 设计开发电子系统时会遇到很多这样那样的问题,有些爱好者因此对Arduino产生了望而却步的心理。目前国内大部分Arduino类书籍都是翻译的外文资料,千篇一律,没有任何新意。

鉴于上述情况,笔者根据自己十余年的电子硬件系统设计经验编写了本书。本书以Arduino开发板中的中端系列——Arduino UNO开发板为蓝本,全面系统地讲解了Arduino的基础知识、硬件结构、各典型接口应用及多个综合系统应用的设计和分析等。本书的内容区别于市面上其他相关参考书籍,主要以实例为主,偏重于实用性,书中每个案例都经过了实践验证,具有很强的实用指导性,使读者能从实践中掌握Arduino的开发与应用技术。

参加本书编写的人员有:周新、张明霞、张亮、薛云飞、王丽俊、寇海军、赵红芳、王雪亮、赵宝全、朱明英、刘旭阳、刘东淼、曹振华、张伯龙、孟凡新等,在本书的编写过程中,参阅了不少同类书籍,并从互联网上收集了部分资料,从中得到了不少启发和收益,在此一并表示感谢。

本事适合电子设计爱好者学习使用,同时可作为自动化、机电一体化及机器人等专业在校师生的参考用书。

由于作者知识水平有限,加之时间仓促,本书难免有不足之处,望广大读者批评指正。编者第1章初识Arduino

Arduino是一个基于开放原始码的软硬体平台,构建于开放原始码 simple I/O界面,并且具有使用类似Java、C语言的Processing/Wiring开发环境。

Arduino包含两个主要部分:硬件部分可以用来作电路连接和Arduino电路板;另一个是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板,程序便会告诉Arduino电路板要做些什么。

Arduino开发板是一块基于开放源代码的USB接口SimpleI/O接口板(最原始的开发板包括12通道数字 GPIO,4通道PWM 输出,6~8通道10bit ADC输入通道,因为开发板可以个人 DIY,也可以生产厂家免版权生产,所以目前具有多种性能更强的开发板),并且具有使用类似Java、C语言的IDE集成开发环境,让您可以快速使用 Arduino 语言与Flash或Processing…等软件,作出互动作品。

Arduino 能通过各种各样的传感器来感知环境,通过控制灯光、电动机和其他装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,收录进微控制器。对Arduino的编程是利用Arduino编程语言(基于Wiring)和Arduino开发环境(基于Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,通过它们之间进行通信(如Flash,Processing,MaxMSP)来实现。1.1 Arduino的特点

Arduino较准确地用中文表达的发音是“二追衣No”,其中“追衣”中的“追”为重音,“衣”轻音辅助,然后两个字尝试连起来快速发一个音。后面“No”就是英文 no 的发音。Arduino具有以下优点:(1)开放原始码的电路图设计,程式开发界面免费下载,也可依需求自己修改。(2)DFRduino 可使用 ISP 下载线,自我将新的IC程序烧入「bootloader」。(3)可依据官方电路图,简化 DFRduino 模组,完成独立运作的微处理控制器。(4)可简单地与传感器、各式各样电子元件连接(如红外线、超声波、热敏电阻、光敏电阻、伺服电动机等)。(5)支援多样的互动程式,如Flash,Max/Msp,VVVV,PD,C,Processing等。(6)使用低价格的微处理控制器(ATMEGA168V-10PI)。(7)USB接口,不需外接电源,另外提供9VDC输入接口。(8)应用方面,利用 DFRduino,突破以往只能使用鼠标、键盘、CCD 等输入装置的互动内容,可以更简单地达成单人或多人游戏互动。1.2 Arduino硬件介绍

说白了,Arduino 主要是 AVR 单片机的最小系统加一些稳压电路、USB 转串口电路、LED,初看来设计也没什么特别的,但是Arduino有它自身的优势。(1)Arduino是开放性的产品,不管是硬件电路,还是软件开发平台都是开源的,这样就会有很多第三方的爱好者来扩展硬件及软件,从而Arduino的外围资源就非常丰富了。(2)Arduino容易上手,由于主体硬件已经搭建好,能用USB下载程序,(驱动在IDE软件目录自带)编程平台封装了很多底层函数,通俗易用。(3)Arduino的设计初衷就是让广大爱好者,不必拘泥于技术细节,而是充分发挥想象力和创造力,体验其中的乐趣。1.2.1 Arduino主控芯片介绍1.ATmega系列芯片

目前Arduino的主流控制芯片就是ATMEL公司的AVR单片机,AVR单片机是时下非常流行的单片机,当然它的优势也是非常明显的。

1)简便易学,费用低廉

首先,对于非专业人士来说,选择AVR单片机的最主要原因是由于进入AVR单片机开发的门槛非常低,只要会操作计算机就可以学习 AVR 单片机的开发。单片机初学者只需一条ISP下载线,把编辑、调试通过的软件程序直接在线写入AVR单片机,即可开发AVR单片机系列中的各种封装器件。AVR单片机因此在业界号称“一线打天下”。

其次,AVR 单片机便于升级,AVR 程序写入是直接在电路板上进行程序修改、烧录等操作,从而便于产品升级。

最后,AVR单片机费用低廉。学习AVR单片机可使用ISP在线下载编程方式(即把PC上编程好的程序写到单片机的程序存储器中),不需购买仿真器、编程器、擦抹器和芯片适配器等,即可进行所有 AVR 单片机的开发应用,这可节省很多开发费用。程序存储器擦写可达10000次以上,不会产生报废品。

2)高速、低耗、保密

首先,AVR单片机是高速嵌入式单片机,具有以下特点。(1)AVR单片机具有哈佛结构,具备IMIPS/MHz的高速运行处理能力、超功能精简指令集(RISC)、快速的存取寄存器组、单周期指令系统,从而大大优化了目标代码的大小、执行效率,部分型号FLASH非常大,特别适用于使用高级语言进行开发。(2)多累加器型,数据处理速度快。AVR单片机具有32个通用工作寄存器,相当于有32条立交桥,可以快速通行。(3)中断响应速度快。AVR单片机有多个固定中断向量入口地址,可快速响应中断。

其次,AVR单片机耗能低。对于典型功耗情况,WDT关闭时为100nA,更适用于电池供电的应用设备。有的器件最低1.8V即可工作。

最后,AVR单片机保密性能好。它具有不可破解的位加密锁LockBit技术,保密位单元深藏于芯片内部,无法用电子显微镜看到。

3)I/O口功能强,具有A/D转换等电路(1)AVR单片机的I/O口是真正的I/O口,能正确反映I/O口输入/输出的真实情况。工业级产品,具有大电流(灌电流)10~40mA,可直接驱动可控硅SCR或继电器,节省了外围驱动器件。(2)AVR单片机内带模拟比较器,I/O口可用作A/D转换,可组成廉价的A/D转换器,ATmega48/8/16等器件具有8路10位A/D。(3)部分AVR单片机可组成零外设元件单片机系统,使该类单片机无外加元器件即可工作,简单方便,成本又低。(4)AVR 单片机可重设启动复位,以提高单片机工作的可靠性,有看门狗定时器实行安全保护,可防止程序走乱(飞),从而提高了产品的抗干扰能力。

到目前为止 Arduino 用到的处理器有 ATmega168A-PU、ATmega328P-PU、ATmega1280-16AU、ATmega2560-16AU。表1-1列出了各型号的主要参数。表1-1 各型号主要参数对比2.ATmega 芯片引脚

1)ATmega168/328引脚(1)引脚排列(2)引脚功能

VCC:数字供电电源。

GND:地。

端口B(PB7:0):

端口B为8位双向I/O口,并具有可编程的内部上拉电阻(每个选定位)。其输出缓冲器具有对称的驱动特性,可以输出和输入大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。芯片复位时端口B为三态,即不稳定状态。

根据不同的时钟选择熔丝设置,PB6可以作为反相振荡放大器和内部时钟工作电路的输入端。

根据不同的时钟选择熔丝设置,PB7可作为振荡放大器的反向输出端,如果内部标定RC振荡器作为芯片时钟源,PB6/PB7可以作为 T/C1、T/C2比较模块的输出。

端口C(PC5:0):

端口C为8位双向I/O口,并具有可编程的内部上拉电阻(每个选定位)。其输出缓冲器具有对称的驱动特性,可以输出和输入大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。芯片复位时端口C为三态即不稳定状态。

PC6/RESET:

如果RSTDISBL位被编程,PC6作为一个I/O引脚,请注意,PC6的电气特性与端口C的其他引脚不同。

如果 RSTDISBL 熔丝位未编程,PC6作为复位输入,该引脚上的低电平持续时间大于最小脉冲长度将产生复位,即使系统时钟没有运行。

端口D(PD7:0):

端口 D为8位双向 I/O 口,并具有可编程的内部上拉电阻(每个选定位)。其输出缓冲器具有对称的驱动特性,可以输出和输入大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。芯片复位时端口D为三态即不稳定状态。

AVCC:AVCC为内部A/D转换器供电电源引脚。

AREF:AREF为内部A/D转换器模拟参考电源(基准)引脚。(2)ATmega1280/2560引脚

ATmega1280/2560的各引脚功能和ATmega168/328基本相同,其引脚排列图如图1-1所示:图1-1 ATmega1280/2560引脚排列图1.2.2 Arduino 开发板介绍1.Arduino Duemilanove 开发板(主控芯片 ATmega168/328 2种)

Arduino Duemilanove开发板实物图如图1-2所示,介绍如下。(1)微控制器核心:AVRmega328P-PU(处理速度可达20MIPS)。(2)工作电压:+5V。(3)外部输入电压:+7~+12V(建议)。(4)极限值:+6V≤Vin≤+20V。(5)数字信号I/O接口:14(共中6个PWM输出接口)。(6)模拟信号输入接口:6。(7)DC I/O接口电流:40mA。(8)SRAM静态存储容量:1KB。(9)EEPROM存储容量:512B。(10)时钟频率:16MHz。2.Arduino Nano开发板(主控芯片 ATmega168/328 2种贴片式)

Arduino Nano开发板实物图如图1-3所示,介绍如下。图1-2 Arduino Duemilanove开发板实物图图1-3 Arduino Nano开发板实物图(1)12个数字输入/输出端口D2~D13。(2)8个模拟输入端口A0~A7。(3)1对TTL电平串口收发端口RX/TX。(4)6个PWM端口,D3、D5、D6、D9、D10、D11。(5)采用AtmelAmega328P-AU单片机。(6)支持USB下载及供电。(7)支持外接5~12V直流电源供电。(8)支持9V电池供电。(9)支持ISP下载。3.Arduino Uno开发板(主控芯片 ATmega328)

Arduino Uno开发板实物图如图1-4所示。

Arduino UNO是Arduino官方于2010年末新推出的一款易用型开源控制器,作为原有Arduino Duemilanove的升级版。主要改进体现在以下方面。图1-4 Arduino Uno开发板实物图

USB 转串口电路部分,Arduino UNO 采用的是一块 ATMega8U2单片机,相比较原来Duemilanove所有的FT232RL,Atmega8U2单片机除了提供传统的USB转串口功能外,还可以让用户自己编程定义其他功能,例如,可以把 USB 口配置成鼠标、键盘、游戏摇杆、摄像头等,当然,这些应用还有待Arduino团队来公布具体的实施方案。4.Arduino Mega2560开发板(主控芯片ATmega2560)

Arduino Mega2560开发板实物图如图1-5所示,Arduino Mega 是一块以 ATmega2560为核心的微控制器开发板,本身具有54组数字 I/O input/output端(其中14组可作PWM输出),16组模拟比输入端,4组UART(hardware scrial ports),使用16MHz crystal oscillator。由于具有 bootloader,因此能够通过 USB 直接下载程序而无需经过其他外部烧写器。供电部分可选择由USB直接提供电源,或者使用AC-to-adapter及电池作为外部供电。图1-5 Arduino Mega2560开发板

由于开放源代码,以及使用Java概念(跨平台)的C语言开发环境,让Arduino的周边模块及应用迅速成长,而吸引爱好者使用Arduino的主要原因是可以快速使用Arduino语言与 Flash或Processing…等软件通信,作出多媒体互动作品。Arduino开发IDE界面基于开放源代码的原则,可以让您免费下载使用电源设计。

Arduino Mega的供电系统有两种选择,USB直接供电或外部供电。电源供应的选择将会自动切换。外部供电可选择AC-to-DC adapter或者电池,此控制板的极限电压范围为6~12V,但倘若提供的电压小于6V,则I/O口有可能无法提供到5V的电压,因此出现不稳定;倘若提供的电压大于12V,稳压装置则有可能发生过热保护,更有可能损坏Arduino Mega。因此,建议的操作供电为6.5~12V,推荐电源为7.5V或9V。1.3 Arduino UNO开发板详解1.3.1 Arduino UNO开发板的初步认识

图1-6是一张Arduino UNO主板的照片,在照片旁边注释了Arduino主板最重要的组成部分。下面将逐一解释它们的功能和作用。图1-6 Arduino UNO主板

首先需要了解USB接口。若想将Arduino主板连接到计算机,只需要一根USB连接线。同时,还可以用建立起来的USB连接完成不同的工作。

① 上传新的程序到主板

② 负责Arduino主板和计算机之间的通信。

③ 为Arduino主板供电(5V)。

作为一个电子设备,Arduino主板需要电源供给。一种方法是将它连接到计算机的USB口上,不过这在某些情况下并非是一个好的解决方法。有些项目并不需要一台计算机,如果仅仅是为了给Arduino主板提供电源而在边上摆放一台开着的计算机,则很浪费。并且,USB口仅能够提供5V电源,在很多情况下,可能需要更高的工作电压。

在这种情况下,最好的解决方法是利用一个直流电源,如图1-7所示,用一个直流电源给Arduino主板提供9V电源(一般而言,建议电压范围为7~12V),只要电源的接头信号为DC2.1mm,中间的针为正极即可,把插头插到Arduino主板的电源插座上,Arduino主板就会立即开始工作,即便它并未被连接到计算机上。值得一提的是,即便在插入插头时Arduino主板已经和计算机连接起来,它还是会自动切换到外接电源供电模式。

注意一点,老版本的Arduino主板(Arduino-NG和Diecimila)并不能在USB供电和外接电源供电两种模式之间自动切换,它们是通过一个电源跳线(跳线边上印有文字PWR-SEL)来进行切换的。遇到这种主板,你需要手动通过跳线的方式来设定它究竟是采用EXT(外接电源)还是USB(USB电源)方式来供电,如图1-8所示。图1-7 9V直流电源图1-8 较老版本的Arduino主板有一个电源选择跳线

现在,相信你已经了解Arduino主板有两种电源供电模式。并且,Arduino主板还可以给其他设备提供电源。你可以知道一些小“插座”,在它的边上标注了“电源供给引脚”(后面会称它们为引脚群或排母,因为这些排母都是直接连接到单片机各个引脚上的)。

·从排母中标注为3V3和5V的引脚连接引线出来,可以分别给3.3V和5V的电子设备、元器件供电。

·从两个标注了ground的引脚连接引线出来,可以连接到电子设备、元器件的Gnd,以使得它们能够和Arduino主板共地。

·有一些项目是可移动的,所以它们需要一个可移动的电源,如电池,你可以把移动电源的正、负极连接到Arduino主板的Vin和Gnd引脚上。

如果通过Arduino的电源插座供电,而接头却损坏了,那么还可以直接把电源输出线的正极连接到Vin,负极连接到Gnd。

在主板的右下方可以看到6个模拟输入引脚,它们分别被命名为A0~A5。可以将模拟传感器的signal引脚连接到它们上面,这些引脚可以让Arduino主板获得模拟传感器的模拟值(0~5V的电压值),然后根据模拟值,由低(0V)到高(5V)转换成0~1023的某个值。我们将仍使用这些引脚,将一个温度传感器连接到Arduino主板上。

主板顶端的14个引脚全部都是I/O引脚,它们分别被命名为D0~D13。你可以依照项目设计的需要将这些引脚设置为输出型或输入型,也就是说,可以用它们读取一个拨到开关、按键开关的开启、关闭状态,或者点亮、熄灭一个LED灯。

14个I/O引脚中的6个引脚(D3、D5,D6,D9,D10和D11)还能够同时作为模拟输出引脚。在模拟输出模式下,这6个引脚可以将0~255的值转换成一个模拟电压输出。

所有的引脚都连接到微控制器上,一个微控制器内包含 CPU 及一些外围功能,如 I/O通道。市面上有大量不同厂商生产的不同类型的微控制器,不过Arduino经常使用Ateml公司的Atmega328和Atmega168微控制器。这两个都是8位微控制器。

现代计算机一般都是从硬盘装入程序然后执行,而微控制器则需要预先进行编程。这意味着需要将程序通过一根连接线上传到微控制器中,一旦程序上传完毕,程序就会保存在微控制器中,并覆盖微控制器中原有的程序,一旦给Arduino主板插上电源,Arduino主板就会根据上传并保存在微控制器中的程序自动放行。有时需要让Arduino从头开始执行程序,以可以通过按下主板中央偏右的Reset按钮让主板重置,重置后Arduino会从程序的第一行重新开始执行。1.3.2 ArduinoUNO开发板实际电路分析

大概了解了ArduinoUNO开发板的基本结构后,我们来深入介绍ArduinoUNO开发板的电路组成,图1-9所示为ArduinoUNO开发板的电路原理图。图1-9 Arduino组成电路图(Arduino UNO Rev3)1.处理器电路

1)处理器

Arduino主要以2个芯片为主,第1个是Atmel公司生产的Atmega8系列单片机,较新的版本为Atmega328(或atmega32U4),旧版有AtmegA8和Atmega168。这几个单片机的架构都一样,只是内存大小不同而已。当然,价线上也有所差异,因此在商品化的过程中就要考虑内存的大小,选择适合的系列。

由表1-2可以看到,差异比较大的是FLASH部分。表1-2 Atmega系列单片机内存空间比较

2)处理器功耗

Atmega328和Atmega2560都只能承受最大6V的输入电压。根据Atmel的器件手册,甚至只是接近这个最大电压时,芯片的运作都“可能影响可靠性”。正常的供电电压是1.8~5.5V。较低的电压会降低最大可以工作的时钟速度。

AVR消耗的功率主要取决于CPU的工作频率。时钟频率越高,电流消耗越大。16MHz的正常模式(Active Mode)中,Atmega328需要5.0V上的10mA(0.010A)电流,也就是1/20W;空闲模式(Idle Mode)下,只要不到2.5mA(0.0025A),而掉电模式(Power-down Mode)就不到1μA(0.000001A)了。

Arduino Mega2560上用的大芯片 AtmelAVR Atmega2560只比较小的 ATMega328在5V/16MHz时的耗电多一倍;20mA(0.020A)。它的待机电流小于6mA(0.006A),而掉电模式在室温或接近室温下不到1μA(0.000001A),温度升高到85℃时耗电提高到3μA。

时钟速度和其他影响功耗的选项,如看门狗定时器和掉电检测机制,是通过芯片的配置熔丝来设置的。这些选项不能通过软件来控制,需要专门的芯片编程器来改变。

当芯片被设置为睡眠和停机时进入省电模式(待机和掉电)。这两种模式的区别是,在空闲模式下,片内外围设备仍然正常运作,可以通过产生中断把处理器带离睡眠状态;而掉电模式下为了达到它的低功耗,会关闭外围设备。

3)I/O驱动

两种芯片的每个I/O引脚都可以扇出(source)或灌入(sink)最多40mA(0.040A)的电流。这足以与大多数外部电路衔接了。包括点亮几个 LED,但是不足以驱动哪怕是小型的电机、风扇或电磁阀等大功率负载,线圈电阻超过125Ω的5V继电器可以直接驱动,但是需要在线圈上并接一个反向二极管以防止磁场衰落时(当继电器线圈掉电时)产生对芯片有害的逆向电压。

注意:要记住所有I/O的总电流是200mA(0.2A),所以不可能同时在所有I/O线上输出40mA。

4)复位信号

在Arduino上,AVR的重启信号连接到多个元件上,来自串口的DTR信号通过一个100nF(0.1μF)的电容耦合到重启线上。这颗电容使得信号电平的变化可以触发芯片的重启,同时避免串口线上的电平始终使芯片在重启不运作状态。在重启线和+5V之间接了一颗10kΩ的上拉电阻,以防止偶尔的电噪声误触发重启电路。一个人工重启按钮也可以把重启线短路到地,引起芯片重启。

重启信号还连接到电源扩展插座和在线串行编程(ICSP)插座。

5)时钟

AVR 接一个石英晶体或一个陶瓷谐振器来提供稳定和精确的时间基准。根据元件的不同,还需要一些其他的分立元件。石英晶体一般需要容量很小的负载电容接在两个引脚和地之间。这些电容给振荡电路在起振时提供足够的负载,其容量一般只有几皮法(常见的是22pF),而且PCB上信号走线产生的容抗通常足够保证运行的稳定。

陶瓷谐振器一般需要高阻值的电阻(常见1MΩ或更高)跨在两个引脚上,以稳定其工作,降低不需要的谐波。

6)去耦电容

ArduinoUno 有单个100nF(0.1μF)去耦电容C6,安装的位置靠近处理器芯片,用于过滤电源总线上由处理器芯片本身产生的噪声,也给芯片提供一个微型电源缓冲,芯片的功耗在不同的时钟周期会有波动并产生尖峰。

Arduino Mega2560有3个类似的去耦电容C4、C5和C6,也在比较靠近Atmea2560芯片的地方,其功用是相同的。

Arduino Uno和Arduino Mega2560在模拟参考电压(AREF)和地之间都有一个100nF(0.1μF)的电容,以稳定给模拟数字转换电路(ADC)外围设备使用的模拟参考电压。

7)指示灯

Arduino Uno和Arduino Mega2560都有一个专门的LED,接在D13(Arduino Umo的PB5和Arduino Mega2560的PB7)上,通过一个1kΩ的电阻接到地上。这个LED又叫做可编程LED,它的功能是由软件决定的;与其相反,绿色的LED指示灯只要电路板有电就会亮。USB接口芯片上还接了TA RC的LED来表示串口上的动作。2.供电电路

最早的Arduino I/O电路板有非常简单的电源电路。虽然简单,但这个电路具有很多功能,可以接稳压或不稳压电源,可以把电源供应给插到扩展插座上的任何盾板(Shield)。图1-10所示为最初的Arduino Serial电路图电源部分。图1-10 最初的Arduino Serial电路图电源部分

1)电源插座

图1-10中左边没有标记的方块是用于DC(Direct Current,直流)输入的柱式电源插座。这个符号的外形类似于柱式电源插座本身的侧视图,不过引脚排列和实际排列并不一致。在Arduino Serial和现在Arduino Uno的电路图上用的符号是一样的,不过都没有正确反映厂家的引脚编号和实体连接器本身,也不是业界标准的符号。

连到柱式电源插座的两条线(连到电路图上的标着1和3脚的)连到地上。电源插座本身没有标识极性,由电路设计者负责安排极性并画在图上。

柱式电源插座在圆形开口的中央有一根针,其直径应该是2.1mm,开口的内径是5.5mm。在开口的底部有一个弹簧端子,当插头插入时顶住插头外围。这两个端子实现与插头的电感和物理连接。在开口底部还有一个端子,当没有插头插入时和前面说的弹簧端子接触,当插入时与之断开。这个端子可以用来在插入或拨出插头时将电源在内部电源和外部电源之间做切换。Arduino没有用这个端子。

柱式电源插座是非常常用的低压直流电源插座,很多厂家都在生产。随着厂家和型号的不同,插座可以承受16~24V的电压,通过2.5~4.0A的电流。当需要向外部电路供电时,需要考虑这些参数。

迄今为止,所有Arduino产品在外形设计上都保留了这个柱式电源插座。

2)电源输入电路

柱式电源插座上的第二个脚是电源正极,直接连到DI的正极,DI在这里所起的作用是整流器。整流器允许电流按一个方向流动,阻止另一个方向上的流动。DI 的作用是在接错了输入电源的极性时,完全阻止电流流动。这是个很棒的产品安全特性,事半而功倍。

二极管的电路图符号像个箭头,这有助于读者辨别它允许或期望电流流动的方向。在实际元件上,负极端往往印着一条线,以帮助在装配时对准正确极性。不过,它标识的是人们平时说的电流方向,与实际的电子流动方向正好相反。电子(在铜线这样的金属中的载荷子)带的是负电荷,实际上是从负极向正极流动的。

输入端的整流器DI在最初的图纸上标的是IN4004,是很多厂家都生产的一种1.0A(最大)的整二极管。IN4004是编号从IN4001~IN4007这一大类相似的三极管中的一种。不同型号编号的区别主要是最大直流反向电压(VR),从IN4001的50V到IN4007的1000V。IN4004是400V的。

400V 的反向电压对于这个应用程序来说是绰绰有余的,但许多这样的设计决定是基于元件的可靠性和成本的,而不是刚刚好就行。厂家生产的产品种类非常丰富,价格、供货能力和关键参数都有很多可选。考虑到电源插座已经决定了最高输入电压,这个系列的任何一种二极管都可以胜任。

现在的ArduinoUno在这个位置上放的是一颗贴片的IN4007(型号是M7)。

既然装了这个反向保护二极管DI,就得考虑它的最大1.0A电流这个限制因素。Arduino的电路只用1安培(A)的很少部分,但是加上外接电路,总的电流消耗不能超过1.0A 的限制,否则DI会过热直至失效,很可能会导致燃烧,有时候可能冒烟,甚至起火,那气味可不好闻。

如果由其他来源供电,如 USB 接口或其他插座,柱式电源插座和反向保护二极管 DI的限制就被跳过了。DI的整流器特性还防止了电源通过柱式电源插座输送给外部。

DI 的负极连接到电路中好几处。注意,图上有一个显式连接点,表示这里几条线实际在电路原理上是连接在一起的。从这个连接点往上,然后向右折的线是到电压总线VIN(即输入电压总线)的连接。在最初的Arduino Serial上,这条线只连到另外一个地方;在电源扩展插座上也标着 VIN 的那个脚。这个连接使得未稳压的输入电压可以供给扩展盾板。另外,它也可以使外部未稳压的电源输入给 Arduino 板,绕过柱式电源插座和反向保护二极管DI。

在后来的Arduino电路板上,VIN信号还用来帮助决定选择使用哪个电源来给电路板供电。这涉及到更多的电路原理。

在二极管之后,电源信号连接到两个不同类型的电容,即C6和C5。尽管两个电容的符号是类似的(两个分开的平板,简明地描述了电容的构造),但它们有一个微小但是重要的区别:C6是有极性的电解电容,正极在电路图上标了一个小加号(“+”)。有趣的是,实际电容元件上一般在负极上做记号。反之,C5是无极性的,无论哪边朝哪个方向都可以安装到电路板上。把C6装反会使元件失效,可能导致电容膨胀,甚至使外壳裂开。

C6和C5这两个电容构成一个滤波器,就像一个小型电荷水库,过滤掉从电源输入进来的电噪声。

C6标着100u,实际的意思是100μF(微法,小写的希腊字母μ在所有的计算机辅助设计——CAD——软件里都比较难输入,所以一般用英文字母μ代替)。

C5标着100n,意思是100nF(纳法),美国出的图纸上的标法是0.1μF。

电路图上没有标的是两个电容的最大工作电压,这是电容的极限参数。若给电容施加的电压超过标称的工作电压,则会损坏电容,最终使其内部的电解质(在电容内部隔离两个金属层的材料)绝缘失效。工作电压越低,电容就可以做得越小,精明的设计工程师会指定选择元件的耐压值刚好高过电路安全的要求,又足够低,以避免占用过多的空间或增加成本,一般电解电容的工作电压范围是4~50V。在Arduino Uno上起这个作用的两个电容PCI和PC2标着47μF/25V。

3)稳压器

现在该把输入进来的电压稳定后提供给Arduino电路的其他部分使用了。IC2是一个三脚固定正电压稳压器芯片。在最初的电路图上没有给出型号编号。因为最初的Arduino是靠口耳相传,是由每个个人在制作电路板时根据自己的需求、可用资源判断决定要用什么元件的。

这个地方常用的是LM7805固定正电压稳压器。这个芯片在业余爱好者里被广泛使用。尽管国半(美国国家半导体公司)已经不再生产它了,很多其他厂家还在做。国半提供了它的详细器件手册:www.national.com/ds/LM/LM7512C.pdf。

这个元件有几种固定电压输出,包括5V、12V和15V。5V的LM7805至少需要7V输入才能保证稳定的5V输出。电流额定值为在有正确散热条件下可略超过1A。

最初的 Arduino 文档推荐输入电压为7~12V。这种精神面貌型的稳压器叫做线性稳压器,因为输入的电压直接通过元件,超过的电压要以热的形式耗散掉,因此当输入电压提高或输出电流消耗提高时,这个热会产生一些问题。

对于TO-220封装来说(LM7805还有更大的TO-3的封装),热阻(thermal resistance,半导体结到环境的热阻)是50℃/W。对于最小7V输入,只有0.5A电流使用的情况,这就要算到1W(7V-5V=2V,2V×0.5A=1W)的能量耗散了,也就是使芯片上的温度比周围环境高50℃,这就很热了!大幅提高输入电压或输出电流,就会使芯片进入热关闭的自我保护,直到温度回归合理程度。

稳压器的输出应该是5V,误差是5%,也就是4.75~5.25V之间。5V输出连到另一个滤波电容C7。C7和C6是一样的,是一个标着100μF的有极性的电解电容,且其功能也相同,就是滤掉来自电源的瞬变和毛刺。在最初的Arduino Serial上,+5V的电源总线接到电源扩展插座(标着+5V的脚),使稳压的电源可以供给附加电路。+5V的总线还直接给Atmega8单片机和RS-232/TTL电平转换电路供电,后面再详加叙述。

电路图上还可以看到稳压的5V 连接了作为电源指示的 LED1。一个220Ω 的限流电阻R2串在回路中,以控制流经这个LED的电流。只要Arduino有电,这个LED就会一直亮着。

如果外面有稳压的+5V电源,Arduino也可以直接由电源扩展插座的+5V脚供电。

4)电源电路的演变

现在的Arduino Uno和ArduinoAmega2560的电源输入和调整电路与它们的前辈基本上是相同的。Arduino Uno把100nF电容从稳压器的输入端移到了输出端,而Arduino Mega2560没有做这个改动。

型号发展过程中有一些有趣的事情。看下Uno或Mega2560的电路图,上面的电路里有两个5V稳压器。这是为了在PCB上能够放多个元件封装而采取的技术,最终只会有一个稳压器实际焊在 PCB 上。为了防止混淆,可以给两个元件定相同的编号,但是使用不同的后缀。比如,如果直插和贴片两种封装的电阻都画在了图上,可以把一个标为R1A,另一个标为R1B。如果生产时某种封装的元件没有,则可以直接用另一种封装来替换,而不需要修改PCB或返工。相同的技术也用在了ArduinoUnoSMD的贴片Atmega328处理器芯片上。

当USB接口引入,换掉老的RS-232接口时,人们对电源电路做了更多变动。USB标准让接口在通信的同时可以提供有限的、经过整流的电力给设备。USB 插座直接取稳压的5V供给整个电路。第一个USB型号需要自己正确地插好跳线来连接电源部分,后续的型号用了一个模拟比较器和一个低阻抗金属氧化物半导体场效应管(MOSFET)开关来智能地选择最高可用的电压。另外,在USB电源转接头接了一个500mA自恢复熔断器,以避免Arduino或外接电路的故障对主机PC造成任何损害。自恢复熔断器通常有非常低的电阻,可以通过500mA(0.5A)的电流。如果流过的电流超过这个值,熔断器就会变热,增加其内部阻值,从而降低能够流过它的电流。一旦电流降下来,熔断器就凉下来,从而其内部的阻值就降下来了。要注意的是,这个过程不可能无限重复,因为熔断器的热应力最终会失效。

最早几个本的USB电路板用了一个FTDIUSB接口芯片,里面有一个3.3~5V的稳压器。这个稳压器可以给其他电路提供最高50mA电流的3.3V电源。低于5V的电压正越来越流行,因为电子设备需要更低的功率消耗。

Arduino Uno和Arduino Mega2560去掉了FTDIUSB接口芯片,换成另一个AVR单片机,专门用来做USB通信。它们还在电路板上加了单独一个3.3V稳压芯片,以替换掉USB接口芯片里的稳压器功能。国半的LP2985低压差稳压器可以在3.3V上提供最高150mA的电流,是之前的3倍。

从图1-11可以看出,Arduino电源部分的前端,这么多年没有大的变化,图1-11是Arduino Mega2560的部分电路图,ArduinoUno把C2从IC2的输入移到了输出,其他地方和图1-11中的电路是一样的。图1-11 Arduino Mega2560的电源部分

电源LED指示灯没有出现在图1-11中,它现在的限流电阻(RN3C)是1kΩ。没有用分离(独立)的电阻,现在的Arduino用了排阻(Resistor Network),里面有几个相同的电阻。这样就更易于自动装配,只需要安装一个元件,而不是一堆元件。

图1-12画出了新增的电源电路,包括智能电压选择电路和3.3V稳压器。自恢复熔断器没有画在图上,它包含在从USB插座来的USBVCC电源总线上。图1-12 时新Arduino中新增的电源电路3.USB接口

正如第一代 Arduino I/O 板用了 RS-232插座和附属电路来和这个世界通话,现在的Arduino用上了流行的USB接口。USB接口是一个工业标准,由USB实施者论坛公司(USB Implementers Forum)维护。USB 规范和其他与 USB 标准相关的信息可以在 USB 官网中找到。

从RS-232到USB的转变恐怕是不可避免的,多数现在的PC和笔记本电脑都把一度流行的RS-232接口换成了更小的USB端口。有USB到RS-232适配器可以把老的Arduino硬件和新的PC连起来。

从ArduinoUno和ArduinoMega2560开始,USB接口由另一个AtmelAVR芯片Atmeg8U2提供。它有内置的全速USB外围设备,而Atmega328和Atmeg2560没有。1.4 Arduino开发环境(Arduino IDE)1.4.1 获取Arduino IDE

Arduino的开发环境(Arduino IDE)完全免费,且是绿色开源的,无须安装,下载完成并解压缩后可以直接打开使用,在Arduino的网站http://www.arduino.cc的Download页面内提供压缩包的下载链接,如图1-13所示。图1-13 Arduino IDE下载页面1.4.2 安装驱动

Arduino IDE 可以运行于所有较新和最新的 Windows 操作系统中,如 Windows XP、XPWindows Vista和 Windows7,安装IDE软件包非常简单,因为它是一个自解压的ZIP文件,所以你甚至不需要执行任何安装动作,只需要下载IDE Windows版本的ZIP包,然后根据喜好把它解压到指定的文件夹中即可。

在第一次启动Arduino IDE之前,还需要安装Arduino主板的USB驱动。驱动的选择需要根据手头持有的Arduino主板的具体型号及Windows的具体版本来进行。并且每次插一块新的Arduino主板到计算机的USB口上都需要安装一次驱动。

下面介绍一下安装驱动的步骤。(1)首先连接下载程序用的下载线。将数据线的圆口一端插在 Arduino328板子上,如图1-14所示:(2)将数据线的扁口一端插在计算机的USB接口上,如图1-15所示。

插好后,Arduino328控制板上的电源指示灯会被点亮,计算要屏幕上会出现一个对话框,如图1-16所示。(3)选择从列表或指定位置安装,单击“下一步”按钮,出现如图1-17所示的对话框。图1-14 将USB线连接至ArduinoUNO开发板图1-15 将USB另一端连接至计算机图1-16 选择“自动安装软件”图1-17 选择“在搜索中包括这个位置”(4)单击下一步按钮,出现如图1-18所示对话框。(5)这时只要等待即可,稍后会出现如图1-19所示的对话框。图1-18 开始安装图1-19 完成安装(6)单击“完成”按钮,驱动就安装好了,下次再将数据线插到计算机上就不会出现安装驱动对话框了,插上数据线即可下载程序。1.4.3 程序烧录

通过上述过程,驱动已经安装完成,下面来讲解一下程序的烧录过程。(1)先确认Arduino板子连接计算机的默认COM位置,如图1-20所示。图1-20 确认默认的COM位置(2)单击启动Arduino系统软件(arduino-1.0),如图1-21所示。图1-21 启动Arduino系统软件(3)Arduino板子选COM,与Arduino板子连接计算机的USB口默认COM一致,单击“确认”按钮,如图1-22所示。(4)选择Arduino UNO R3板子的型号,单击“确认”按钮,如图1-23所示。(5)选择编写好的程序,这里用一个已经编写好的闪灯程序来进行演示,如图1-24所示。(6)单击Upload键,烧录软件到Arduino板子,如图1-25所示。图1-22 选择开发板COM图1-23 选择开发板型号图1-24 选择编写好的程序图1-25 开始烧录(7)如图1-26所示,Arduino板子有2个LED灯(TX RX),当软件完成烧录后,这2个LED灯会同时闪几秒钟。图1-26 TX/RX灯闪烁1.4.4 Arduino IDE用户界面

IDE软件打开后会自动创建一个空的程序,这个程序会临时以当前日期来命名。在保存这个程序的时候,还可以给它改一个更合适的名字。

图1-27展示的是打开了一个程序的IDE界面。1.File(文件)菜单

对以文件形式保存在计算机上操作系统中的程序进行操作时,要使用File菜单。File菜单中的常见项有New(新建)、Open(打开)、Save(保存)、Save As(另存为)、Close(关闭)和Print(打印),它们的功能和常见软件中的完全一样。Page Setup(页面设置)菜单项设置打印输出的最基本页面组合选择,包括页边距和方向(垂直或水平),以及根据当前所选择的系统打印机可以做的一些选择,如打印纸的大小。Upload(上传)、New、Open和Save菜单项与菜单下面工具条里对应的图是完全一样的。

File菜单如图1-28所示。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载