- Arduino開(kāi)發(fā)實(shí)戰(zhàn)指南:LabVIEW卷
- 余崇梓
- 3978字
- 2019-01-01 00:54:19
第1章
Arduino硬件
本章主要講述Arduino硬件,講述Arduino與單片機(jī)系統(tǒng)的關(guān)系、Arduino獨(dú)有的一些特性、Arduino的開(kāi)發(fā)團(tuán)隊(duì)及起源、Arduino所擁有的硬件資源,并詳細(xì)介紹如何將Arduino連接到PC,使PC能夠識(shí)別Arduino硬件。
1.1 什么是Arduino
1.1.1 Arduino與單片機(jī)
在了解Arduino之前,我們有必要先來(lái)了解一下單片機(jī)。那么,什么是單片機(jī)呢?單片機(jī)是指一個(gè)集成在一塊芯片上的完整計(jì)算機(jī)系統(tǒng)。盡管它的大部分功能集成在一塊小芯片上,但是它具有一個(gè)完整計(jì)算機(jī)所需要的大部分部件:CPU、內(nèi)存、內(nèi)部和外部總線系統(tǒng),目前大部分單片機(jī)還會(huì)具有外存。同時(shí)集成諸如通信接口、定時(shí)器、實(shí)時(shí)時(shí)鐘等外圍設(shè)備。而現(xiàn)在最強(qiáng)大的單片機(jī)系統(tǒng)甚至可以將聲音、圖像、網(wǎng)絡(luò)、復(fù)雜的輸入/輸出系統(tǒng)集成在一塊芯片上。
Arduino是單片機(jī)的最小系統(tǒng),是一塊基于開(kāi)放源代碼的USB接口的簡(jiǎn)單I/O接口板,并且具有簡(jiǎn)單易用的類似Java、C語(yǔ)言的IDE(集成開(kāi)發(fā)環(huán)境)。Arduino可以用作獨(dú)立項(xiàng)目開(kāi)發(fā)的控制核心,也可以與PC進(jìn)行直接的USB連接,完成與PC上軟件的交互。Arduino電路板可以自己加工或者購(gòu)買成品,開(kāi)源的IDE可以免費(fèi)下載。
然而,Arduino又不同于其他可以在市場(chǎng)上找到的單片機(jī)平臺(tái),因?yàn)樗哂邢率霆?dú)有的特性:
● Arduino來(lái)自一個(gè)教育環(huán)境開(kāi)發(fā)項(xiàng)目,所以非常適合新手快速地開(kāi)始自己的工程項(xiàng)目。
● Arduino可以運(yùn)行在多種平臺(tái)下,支持支持Windows、Linux、Mac OS系統(tǒng)。
● Arduino可以通過(guò)USB端口進(jìn)行編程,非常方便。
● Arduino有非常易用的IDE。
● Arduino的硬件和軟件都是開(kāi)源的,可以免費(fèi)下載原理圖、PCB圖,自己購(gòu)買元器件制作Arduino電路板。
● Arduino有非常大的用戶群,所以可以找到非常多的資源,包括接口板卡、軟件程序以及應(yīng)用項(xiàng)目。
1.1.2 Arduino的開(kāi)發(fā)團(tuán)隊(duì)及起源
Arduino的核心開(kāi)發(fā)團(tuán)隊(duì)成員包括:Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti。
Massimo Banzi之前是意大利伊夫雷亞(Ivrea)一家高科技設(shè)計(jì)學(xué)校的老師。他的學(xué)生們經(jīng)常抱怨找不到便宜好用的微控制器。2005年冬天,Massimo Banzi跟David Cuartielles討論了這個(gè)問(wèn)題。David Cuartielles是一個(gè)西班牙籍芯片工程師,當(dāng)時(shí)在這所學(xué)校做訪問(wèn)學(xué)者。兩人決定設(shè)計(jì)自己的電路板,并邀請(qǐng)了Banzi的學(xué)生David Mellis為電路板設(shè)計(jì)編程語(yǔ)言。兩天以后,David Mellis就寫出了程序代碼。又過(guò)了三天,電路板就完工了。這塊電路板被命名為Arduino。幾乎任何人,即使不懂電腦編程,也能用Arduino做出很酷的東西,比如對(duì)傳感器作出回應(yīng)、閃爍燈光,還能控制電動(dòng)機(jī)。隨后Banzi、Cuartielles和Mellis把設(shè)計(jì)圖放到了網(wǎng)上。為了保持源碼設(shè)計(jì)的開(kāi)放性理念,而版權(quán)法可以監(jiān)管開(kāi)源軟件,卻很難用在硬件上,他們決定采用共享創(chuàng)意許可。共享創(chuàng)意是為保護(hù)開(kāi)放版權(quán)行為而出現(xiàn)的類似GPL的一種許可(license)。在共享創(chuàng)意許可下,允許任何人生產(chǎn)電路板的復(fù)制品,還能重新設(shè)計(jì),甚至銷售原設(shè)計(jì)的復(fù)制品。你不需要支付版稅,甚至不用取得Arduino團(tuán)隊(duì)的許可。然而,如果你重新發(fā)布了引用設(shè)計(jì),你必須說(shuō)明原始Arduino團(tuán)隊(duì)的貢獻(xiàn)。如果你調(diào)整或改動(dòng)了電路板,你的最新設(shè)計(jì)必須使用相同或類似的共享創(chuàng)意許可,以保證新版本的Arduino電路板也會(huì)一樣的開(kāi)放。唯一被保留的只有Arduino這個(gè)名字。它被注冊(cè)成了商標(biāo)。如果有人想用這個(gè)名字賣電路板,那他們可能必須付一點(diǎn)商標(biāo)費(fèi)用給Arduino的核心開(kāi)發(fā)團(tuán)隊(duì)成員。
1.2 Arduino的硬件組成
Arduino硬件有很多種版本,詳細(xì)介紹可參考附錄A,本書(shū)以Arduino Uno R3為例進(jìn)行介紹。
1.2.1 Arduino Uno概覽
Arduino Uno是一個(gè)基于ATmega328單片機(jī)的開(kāi)發(fā)板。它有14個(gè)數(shù)字輸入/輸出端口(6個(gè)端口可以作為PWM輸出)、6個(gè)模擬輸入端口、一個(gè)16MHz陶瓷晶振、一個(gè)USB連接端口、一個(gè)電源插座、一個(gè)ICSP編程接口(可用于SPI通信)、一個(gè)復(fù)位按鈕。它包含支持單片機(jī)工作所需要的所有外圍電路,是單片機(jī)的最小系統(tǒng)板。簡(jiǎn)單地把它用USB數(shù)據(jù)線連接到計(jì)算機(jī),或使用交流適配器或者直流電源給它供電,它就可以工作。Arduino Uno R3實(shí)物圖如圖1-1所示。Arduino Uno R3的參數(shù)如表1-1所示。

圖1-1 Arduino Uno R3實(shí)物圖
表1-1 Arduino的總體參數(shù)

Arduino Uno是2011年9月25日在紐約創(chuàng)客大會(huì)(New York Maker Faire)上發(fā)布的。型號(hào)名字Uno是意大利語(yǔ)中“一”的意思,用來(lái)表達(dá)Arduino軟件的1.0版,即Uno Punto Zero(意大利語(yǔ)的“1.0”)版。
Uno不同于以前的所有版本,因?yàn)樗皇褂肍TDI USB至串行驅(qū)動(dòng)芯片,而使用ATmega16U2(ATmega8U2到版本R2)作為一個(gè)USB至串行轉(zhuǎn)換器。
Uno R2版本有一個(gè)下拉電阻將ATmega8U2的HWB線拉到地,使其更容易進(jìn)入DFU模式。
Uno R3版本有以下一些新特性。
● 引腳變化:在靠近AREF引腳的地方添加了SDA和SCL引腳,同時(shí)在Reset引腳附近添加了一個(gè)IOREF引腳和一個(gè)未連接的Reserved引腳。IOREF引腳用來(lái)給擴(kuò)展板提供參考電壓,使擴(kuò)展板可以和5V以及3.3V的Arduino板都能夠兼容。未連接的Reserved引腳用作將來(lái)的擴(kuò)展。
● 更穩(wěn)定的復(fù)位電路。
● 使用ATmega16U2代替ATmega8U2。
1.2.2 Arduino Uno供電
Arduino Uno可采用通過(guò)USB端口供電或使用外部電源供電,供電電源是自動(dòng)選擇的。
可以使用AC/DC適配器或者電池進(jìn)行外部供電。Arduino板上有AC/DC電源適配器接口,也有供電池使用的Power端口。外部供電電壓為6~20V。如果供電電壓小于7V,5V引腳上的電壓可能低于5V,系統(tǒng)可能會(huì)不穩(wěn)定;如果供電電壓超過(guò)12V,穩(wěn)壓器可能會(huì)過(guò)熱并可能損壞板卡。推薦的供電電壓范圍是7~12V。
電源引腳如下:
● Vin,當(dāng)使用外部供電的時(shí)候,該引腳為Arduino電路板的輸入電壓引腳。
● 5V,該引腳輸出Arduino板上穩(wěn)壓器產(chǎn)生的5V電壓。如果給該引腳加電壓,將會(huì)損壞Arduino板。
● 3.3V,該引腳輸出Arduino板上穩(wěn)壓器產(chǎn)生的3.3V電壓,最大電流為50mA。
● GND,接地引腳。
● IOREF,這個(gè)引腳將單片機(jī)工作電壓作為參考電壓提供給shield板,以便shield板能夠根據(jù)這個(gè)參考電壓選擇合適的電壓源或者使能電壓轉(zhuǎn)換器來(lái)工作在5V或者3.3V。
1.2.3 Arduino Uno存儲(chǔ)
ATmega328有32KB(其中0.5KB用于bootloader)存儲(chǔ)空間。它也有2KB的SRAM和1KB的EEPROM(可以使用EEPROM Library進(jìn)行讀寫)。
1.2.4 Arduino Uno輸入及輸出
Arduino Uno上14個(gè)數(shù)字I/O端口中的每一個(gè)都可以被用作輸入或者輸出,使用pinMode、DigitalWrite,以及digitalRead函數(shù)。它們工作在5V。每個(gè)I/O端口可以提供或者接收最大40mA的電流并有一個(gè)20~50kΩ內(nèi)部上拉電阻(默認(rèn)斷開(kāi))。
此外,一些端口還有其他專門的功能。
● 串口(Serial):0(RX)和1(TX)用于接收(RX)和發(fā)送(TX)TTL串行數(shù)據(jù)。這些引腳接到ATmega8U2(USB至串口芯片)的相應(yīng)引腳上。
● 外部中斷:2和3,這些引腳可以配置為中斷觸發(fā),在低電平、上升沿、下降沿或者數(shù)值改變的時(shí)候產(chǎn)生一個(gè)中斷,詳細(xì)功能見(jiàn)attachInterrupt()函數(shù)。
● PWM:3、5、6、9,提供8位PWM輸出。使用analogWrite()函數(shù)產(chǎn)生PWM輸出。
● SPI通信:10(SS)、11(MOSI)、12(MISO)、13(SCK)。這些引腳支持SPI通信,可以使用SPI library進(jìn)行SPI通信。
● LED:13,有一個(gè)內(nèi)置的LED與數(shù)字引腳13相連。當(dāng)該引腳為高電平時(shí),LED亮;當(dāng)該引腳為低電平時(shí),LED滅。
● Analog Input:Arduino Uno有6個(gè)模擬輸入,A0~A5,每個(gè)模擬輸入端口提供10位的分辨率(即1024個(gè)不同的值)。默認(rèn)情況下它們測(cè)量的電壓范圍為0~5V,當(dāng)然,測(cè)量電壓范圍的上限也可以通過(guò)AREF引腳來(lái)設(shè)定,并可以通過(guò)analogReference()函數(shù)使用。此外,一些模擬輸入引腳有專門的功能。
● TWI:A4或者SDA、A5或者SCL。要支持TWI通信可以使用Wire Library。
● AREF:模擬輸入端口的參考電壓。支持使用analogReference()函數(shù)。
● Reset:將Reset置為低電平可以對(duì)單片機(jī)進(jìn)行復(fù)位。通常用于給Shield板添加一個(gè)復(fù)位開(kāi)關(guān)。
附錄B是Arduino和ATmega328的端口映射,ATmega168和ATmega328的映射是相同的。
1.2.5 Arduino Uno通信
Arduino Uno有很多種通信方式,它可以和另一臺(tái)計(jì)算機(jī)、另一個(gè)Arduino或者其他微控制器進(jìn)行通信。Arduino Uno上的ATmega328可以通過(guò)數(shù)字引腳0(RX)和1(TX)進(jìn)行UART TTL(5V)串行通信。Arduino板上的ATmega16U2實(shí)現(xiàn)通過(guò)USB端口進(jìn)行串口通信,在計(jì)算機(jī)上這個(gè)端口為一個(gè)虛擬串口。ATmega16U2固件使用便攜的USB COM驅(qū)動(dòng),所以不需要外部驅(qū)動(dòng)。雖然不需要外部驅(qū)動(dòng),但是在Windows上需要一個(gè)*.inf文件。Arduino軟件包括一個(gè)串口監(jiān)聽(tīng)器,允許簡(jiǎn)單的文本數(shù)據(jù)被發(fā)送到Arduino電路板或者接收來(lái)自Arduino電路板的文本數(shù)據(jù)。當(dāng)通過(guò)USB進(jìn)行串口數(shù)據(jù)通信的時(shí)候RX和TX的LED會(huì)閃爍(通過(guò)數(shù)字引腳0和數(shù)字引腳1進(jìn)行串口通信的時(shí)候LED不會(huì)閃爍)。
使用軟件串口通信庫(kù)(Software Serial library)可以通過(guò)Arduino Uno的任意數(shù)字端口進(jìn)行串行通信。
ATmega328還支持I2C(TWI)和SPI通信。Arduino軟件包含一個(gè)Wire Library庫(kù)來(lái)簡(jiǎn)化I2C總線的使用。對(duì)于SPI通信,可以使用SPI Library庫(kù)。
1.2.6 Arduino Uno自動(dòng)復(fù)位
在程序下載前,除了使用手動(dòng)方式通過(guò)復(fù)位按鈕進(jìn)行復(fù)位外,在Arduino Uno的設(shè)計(jì)中,允許和Arduino連接的計(jì)算機(jī)通過(guò)軟件的方式進(jìn)行復(fù)位。ATmega8U2/16U2的一個(gè)硬件流程控制線(DTR)通過(guò)一個(gè)100μF的電容連接至ATmega328的復(fù)位引腳。當(dāng)這條線被拉低的時(shí)候,可以將ATmega328復(fù)位。該功能允許使用者在下載代碼時(shí),只需在Arduino IDE環(huán)境中按Upload按鈕便可進(jìn)行復(fù)位。
如果要禁用auto-reset功能,可以將標(biāo)記為“Reset-EN”的焊接線斷開(kāi);將“Reset-EN”焊接在一起,又可以重新使能auto-reset。也可以使用一個(gè)110Ω的電阻將reset連接到5V,從而禁用auto-reset。
1.2.7 Arduino Uno USB過(guò)流保護(hù)
Arduino Uno有可更換的熔絲來(lái)防止計(jì)算機(jī)的USB接口短路和過(guò)電流。雖然大多數(shù)計(jì)算機(jī)內(nèi)部提供了保護(hù),但熔絲提供了更多一層的保護(hù)。如果USB端口的電流超過(guò)500mA,熔絲會(huì)自動(dòng)斷開(kāi)直到短路或過(guò)載問(wèn)題被解決。
1.2.8 Arduino Uno的物理特性
Arduino Uno PCB的最大長(zhǎng)度和寬度為2.7inch(英寸)和2.1inch,USB連接器和電源接口延伸到Arduino板以外。板上有四個(gè)用來(lái)固定的螺絲孔。注意,數(shù)字端口7和8的間距是160mil,而不像其他端口間距一樣是100mil的整數(shù)倍。
1.2.9 Arduino Uno原理圖與參考設(shè)計(jì)
Arduino參考設(shè)計(jì)可以使用ATmega8、ATmega168或ATmega328。目前的模板使用ATmega328,但在參考設(shè)計(jì)及原理圖中使用的是ATmega8。不同Arduino板上的三種單片機(jī)的引腳配置都是相同的。Arduino引腳與AVR單片機(jī)引腳對(duì)應(yīng)關(guān)系可參看附錄B。Arduino Uno R3的原理圖可參見(jiàn)附錄C。
1.3 連接Arduino與PC
了解了Arduino的硬件結(jié)構(gòu),我們就可以進(jìn)行Arduino與PC的連接了。
1)準(zhǔn)備Arduino板及USB線。
準(zhǔn)備好Arduino Uno R3板,并準(zhǔn)備好USB線,如圖1-2所示。
2)下載Arduino軟件。
在Arduino官方網(wǎng)站上免費(fèi)下載軟件。
Arduino官方網(wǎng)站鏈接如下:http://arduino.cc/en/Main/Software。
下載完成后的安裝文件如圖1-3所示。
3)安裝Arduino軟件。
雙擊Arduino IDE安裝文件,開(kāi)始軟件安裝,在安裝選項(xiàng)中默認(rèn)安裝Arduino software,并選擇安裝USB driver,如圖1-4所示。安裝過(guò)程如圖1-5所示,安裝完成界面如圖1-6所示。安裝完成后可以在安裝目錄下看到安裝的文件,如圖1-7所示。

圖1-2 Arduino Uno R3及USB線

圖1-3 Arduino IDE軟件Windows版安裝文件

圖1-4 Arduino IDE軟件安裝選項(xiàng)

圖1-5 Arduino IDE軟件安裝過(guò)程

圖1-6 Arduino IDE軟件安裝完成界面

圖1-7 Arduino IDE軟件安裝完成后的文件夾
4)將Arduino Uno通過(guò)USB線連接到計(jì)算機(jī),自動(dòng)安裝驅(qū)動(dòng)程序。
將Arduino Uno通過(guò)USB線連接到計(jì)算機(jī)以后,Windows會(huì)自動(dòng)安裝驅(qū)動(dòng)程序,如圖1-8所示。驅(qū)動(dòng)安裝完成后可以在設(shè)備管理器里面看到Arduino Uno設(shè)備以及其所使用的串行端口,如圖1-9所示。

圖1-8 Arduino驅(qū)動(dòng)自動(dòng)安裝

圖1-9 在設(shè)備管理器中查看Arduino設(shè)備
- 從零構(gòu)建知識(shí)圖譜:技術(shù)、方法與案例
- Spring 5.0 By Example
- Mastering Adobe Captivate 2017(Fourth Edition)
- Getting Started with ResearchKit
- Python神經(jīng)網(wǎng)絡(luò)項(xiàng)目實(shí)戰(zhàn)
- Android開(kāi)發(fā)案例教程與項(xiàng)目實(shí)戰(zhàn)(在線實(shí)驗(yàn)+在線自測(cè))
- Learning Vaadin 7(Second Edition)
- C#程序設(shè)計(jì)(項(xiàng)目教學(xué)版)
- Programming Microsoft Dynamics? NAV 2015
- RocketMQ實(shí)戰(zhàn)與原理解析
- Magento 2 Beginners Guide
- Arduino機(jī)器人系統(tǒng)設(shè)計(jì)及開(kāi)發(fā)
- JavaScript編程精解(原書(shū)第2版)
- Visual C++程序設(shè)計(jì)與項(xiàng)目實(shí)踐
- C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)