本節書摘來自華章計算機《Arduino開發實戰指南:LabVIEW卷》一書中的第1章,第1.2節,作者:餘崇梓著
1.2 Arduino的硬件組成
Arduino硬件有很多種版本,詳細介紹可參考附錄A,本書以Arduino Uno R3為例進行介紹。
1.2.1 Arduino Uno概覽
Arduino Uno是一個基於ATmega328單片機的開發板。它有14個數字輸入/輸出端口(6個端口可以作為PWM輸出)、6個模擬輸入端口、一個16MHz陶瓷晶振、一個USB連接端口、一個電源插座、一個ICSP編程接口(可用於SPI通信)、一個復位按鈕。它包含支持單片機工作所需要的所有外圍電路,是單片機的最小系統板。簡單地把它用USB數據線連接到計算機,或使用交流適配器或者直流電源給它供電,它就可以工作。Arduino Uno R3實物圖如圖1-1所示。Arduino Uno R3的參數如表1-1所示。
Arduino Uno是2011年9月25日在紐約創客大會(New York Maker Faire)上發佈的。型號名字 Uno 是意大利語中“一”的意思,用來表達Arduino軟件的1.0版,即 Uno Punto Zero(意大利語的“1.0”)版。
Uno不同於以前的所有版本,因為它不使用FTDI USB至串行驅動芯片,而使用ATmega16U2(ATmega8U2到版本R2)作為一個USB至串行轉換器。
Uno R2版本有一個下拉電阻將ATmega8U2的HWB線拉到地,使其更容易進入DFU模式。
Uno R3版本有以下一些新特性。
引腳變化:在靠近AREF引腳的地方添加了SDA和SCL引腳,同時在Reset引腳附近添加了一個IOREF引腳和一個未連接的Reserved引腳。IOREF引腳用來給擴展板提供參考電壓,使擴展板可以和5V以及3.3V的Arduino板都能夠兼容。未連接的Reserved引腳用作將來的擴展。
更穩定的復位電路。
使用ATmega16U2代替ATmega8U2。
1.2.2 Arduino Uno供電
Arduino Uno可採用通過USB端口供電或使用外部電源供電,供電電源是自動選擇的。
可以使用AC/DC適配器或者電池進行外部供電。Arduino板上有AC/DC電源適配器接口,也有供電池使用的Power端口。外部供電電壓為6~20V。如果供電電壓小於7V,5V引腳上的電壓可能低於5V,系統可能會不穩定;如果供電電壓超過12V,穩壓器可能會過熱並可能損壞板卡。推薦的供電電壓範圍是7~12V。
電源引腳如下:
Vin,當使用外部供電的時候,該引腳為Arduino電路板的輸入電壓引腳。
5V,該引腳輸出Arduino板上穩壓器產生的5V電壓。如果給該引腳加電壓,將會損壞Arduino板。
3.3V,該引腳輸出Arduino板上穩壓器產生的3.3V電壓,最大電流為50mA。
GND,接地引腳。
IOREF,這個引腳將單片機工作電壓作為參考電壓提供給shield板,以便shield板能夠根據這個參考電壓選擇合適的電壓源或者使能電壓轉換器來工作在5V或者3.3V。
1.2.3 Arduino Uno存儲
ATmega328有32 KB(其中0.5 KB用於bootloader)存儲空間。它也有2 KB的SRAM和1 KB的EEPROM(可以使用EEPROM Library進行讀寫)。
1.2.4 Arduino Uno輸入及輸出
Arduino Uno上14個數字I/O端口中的每一個都可以被用作輸入或者輸出,使用pinMode、DigitalWrite,以及digitalRead函數。它們工作在5V。每個I/O端口可以提供或者接收最大40 mA的電流並有一個20~50kΩ內部上拉電阻(默認斷開)。
此外,一些端口還有其他專門的功能。
串口(Serial):0(RX)和1(TX)用於接收(RX)和發送(TX)TTL串行數據。這些引腳接到ATmega8U2(USB至串口芯片)的相應引腳上。
外部中斷:2和3,這些引腳可以配置為中斷觸發,在低電平、上升沿、下降沿或者數值改變的時候產生一箇中斷,詳細功能見attachInterrupt() 函數。
PWM:3、5、6、9,提供8位PWM輸出。使用analogWrite()函數產生PWM輸出。
SPI通信:10(SS)、11(MOSI)、12(MISO)、13(SCK)。這些引腳支持SPI通信,可以使用SPI library進行SPI通信。
LED:13,有一個內置的LED與數字引腳13相連。當該引腳為高電平時,LED亮;當該引腳為低電平時,LED滅。
Analog Input:Arduino Uno有6個模擬輸入,A0~A5,每個模擬輸入端口提供10位的分辨率(即1024個不同的值)。默認情況下它們測量的電壓範圍為0~5V,當然,測量電壓範圍的上限也可以通過AREF引腳來設定,並可以通過 analogReference()函數使用。此外,一些模擬輸入引腳有專門的功能。
TWI:A4或者SDA、A5或者SCL。要支持TWI通信可以使用Wire Library。
AREF:模擬輸入端口的參考電壓。支持使用 analogReference()函數。
Reset:將Reset置為低電平可以對單片機進行復位。通常用於給Shield板添加一個復位開關。
附錄B是Arduino和ATmega328的端口映射,ATmega168和ATmega328的映射是相同的。
1.2.5 Arduino Uno通信
Arduino Uno有很多種通信方式,它可以和另一台計算機、另一個Arduino或者其他微控制器進行通信。Arduino Uno上的ATmega328可以通過數字引腳0(RX)和1(TX)進行UART TTL(5V)串行通信。Arduino板上的ATmega16U2實現通過USB端口進行串口通信,在計算機上這個端口為一個虛擬串口。ATmega16U2固件使用便攜的USB COM驅動,所以不需要外部驅動。雖然不需要外部驅動,但是在Windows上需要一個*.inf文件。 Arduino軟件包括一個串口監聽器,允許簡單的文本數據被髮送到Arduino電路板或者接收來自Arduino電路板的文本數據。當通過USB進行串口數據通信的時候RX和TX 的LED會閃爍(通過數字引腳0和數字引腳1進行串口通信的時候LED不會閃爍)。
使用軟件串口通信庫(Software Serial library)可以通過Arduino Uno的任意數字端口進行串行通信。
ATmega328還支持I2C(TWI)和SPI通信。Arduino軟件包含一個Wire Library庫來簡化I2C總線的使用。對於SPI通信,可以使用SPI Library庫。
1.2.6 Arduino Uno自動復位
在程序下載前,除了使用手動方式通過復位按鈕進行復位外,在Arduino Uno的設計中,允許和Arduino連接的計算機通過軟件的方式進行復位。ATmega8U2/16U2的一個硬件流程控制線(DTR)通過一個100μF的電容連接至ATmega328的復位引腳。當這條線被拉低的時候,可以將ATmega328復位。該功能允許使用者在下載代碼時,只需在Arduino IDE環境中按Upload按鈕便可進行復位。
如果要禁用auto-reset功能,可以將標記為“Reset-EN”的焊接線斷開;將“Reset-EN”焊接在一起,又可以重新使能auto-reset。也可以使用一個110Ω的電阻將reset連接到5V,從而禁用auto-reset。
1.2.7 Arduino Uno USB過流保護
Arduino Uno有可更換的熔絲來防止計算機的USB接口短路和過電流。 雖然大多數計算機內部提供了保護,但熔絲提供了更多一層的保護。如果USB端口的電流超過500 mA,熔絲會自動斷開直到短路或過載問題被解決。
1.2.8 Arduino Uno的物理特性
Arduino Uno PCB的最大長度和寬度為2.7inch(英寸)和2.1inch,USB連接器和電源接口延伸到Arduino板以外。板上有四個用來固定的螺絲孔。注意,數字端口7和8的間距是160mil,而不像其他端口間距一樣是100mil的整數倍。
1.2.9 Arduino Uno 原理圖與參考設計
Arduino參考設計可以使用ATmega8、ATmega168或ATmega328。目前的模板使用ATmega328,但在參考設計及原理圖中使用的是ATmega8。不同Arduino板上的三種單片機的引腳配置都是相同的。Arduino引腳與AVR單片機引腳對應關係可參看附錄B。Arduino Uno R3的原理圖可參見附錄C。