很早之前入手了一塊Arduino
Mega2560,當時只是認為其操作簡單且更加人性化狭莱,開源方便奥裸,想了解了解。最新搞項目想用Arduino試試控制8路舵機证杭,但網上找的Servo庫大多說只支持9田度,10接口,很是惱火(資料怎么寫就怎么搬解愤,到底是不是只支持9镇饺,10接口有幾個知道?又有幾個知道為什么送讲?)奸笤。
另外本人長期逛各種論壇惋啃,發(fā)現(xiàn)國內民間創(chuàng)客極客水平還是普遍低下的,Arduino雖說開源但國內確實找不到多少參考資料监右,這無形之中成了小小的阻礙边灭,于是本人花了點時間為廣大Arduino愛好者整理翻譯此份資料,一是想豐富網上資源健盒,二是以一種更加簡便的方式帶部分人入門绒瘦。了解原理才能談創(chuàng)意,不求甚解只能做個小玩家扣癣。
了解Arduino的最好平臺當然是官網惰帽,我相信官網肯定不會遺漏自己產品最有特色的東西,因此以它為參考絕對沒錯父虑。另外该酗,必要部分輔助以百科,以及各位廣大親愛博友的資料(就不一一列舉了士嚎,在此謝過)呜魄。本文以Arduino Mega 2560為基礎解釋,其他板子都差不多航邢。
一:概述
Arduino Mega 2560是基于ATmega2560的微控制板耕赘,有54路數(shù)字輸入/輸出端口(其中15個可以作為PWM輸出),16路模擬輸入端口膳殷,4路UART串口操骡,16MHz的晶振,USB連接口赚窃,電池接口册招,ICSP頭和復位按鈕。簡單地用USB連接電腦或者用交直流變壓器就能使用勒极。
Mega 2560 是Arduino Mega系列的升級版是掰。Mega 2560與之前的板子(最大)不同在于:它沒用FTDI USB-to-serial驅動芯片,而是用ATmega16U2編程作為USB-to-serial傳輸器(V1版本使用8U2)辱匿。
總結如下:
控制器ATmega2560
工作電壓5V
輸入電壓(推薦)7-12V
輸入電壓(限制)6-20V
數(shù)字I/0口54 (含15路PWM輸出)
模擬輸入口16
每個I/0口直流電流40 mA
3.3v口直流電流50 mA
閃存(Flash Memory)256 KB(其中8 KB用作bootloader)
靜態(tài)存儲器(SRAM)8 KB
EEPROM4 KB
時鐘16 MHz
二:電源
這部分就不說了键痛,涉及3.3v和5v供電。
三:存儲器
ATmega2560有256k的閃存可存儲程序(其中8kb用作bootloader)匾七,有8kb的SRAM和4kb的EEPROM(可使用EEPROM library(點擊看詳細介紹)進行讀寫)絮短。
(1)RAM
隨機存取存儲器(英文:random access memory,RAM)又稱作“隨機存儲器”昨忆,是與CPU直接交換數(shù)據的內部存儲器丁频,也叫主存(內存)。它可以隨時讀寫,而且速度很快席里,通常作為操作系統(tǒng)或其他正在運行中的程序的臨時數(shù)據存儲媒介叔磷。存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器奖磁。這種存儲器在斷電時將丟失其存儲內容改基,故主要用于存儲短時間使用的程序。 按照存儲信息的不同署穗,隨機存儲器又分為靜態(tài)隨機存儲器(英文:Static RAM寥裂,SRAM)和動態(tài)隨機存儲器(英文Dynamic RAM,DRAM)案疲。
SRAM不需要刷新電路即能保存它內部存儲的數(shù)據。而DRAM(Dynamic Random?Access Memory)每隔一段時間麻养,要刷新充電一次褐啡,否則內部的數(shù)據即會消失,因此SRAM具有較高的性能鳖昌,但是SRAM也有它的缺點备畦,即它的集成度較低洁桌,相同容量的DRAM內存可以設計為較小的體積畔勤,但是SRAM卻需要很大的體積,且功耗較大跛蛋。所以在主板上SRAM存儲器要占用一部分面積糕档。SRAM的速度快但昂貴莉恼,一般用小容量的SRAM作為更高速CPU和較低速DRAM
之間的緩存(cache)。
(2)EEPROM
帶電可擦可編程只讀存儲器--一種掉電后數(shù)據不丟失的存儲芯片速那。 EEPROM 可以在電腦上或專用設備上擦除已有信息俐银,重新編程。一般用在即插即用端仰。EEPROM的擦除不需要借助于其它設備捶惜,它是以電子信號來修改其內容的,而且是以Byte為最小修改單位荔烧,不必將資料全部洗掉才能寫入吱七,徹底擺脫了EPROM?Eraser和編程器的束縛。
(3)閃存(Flash Memory)鹤竭,EEPROM的變種:
在斷電情況下仍能保持所存儲的數(shù)據信息分為NOR型與NAND型閃存(NAND型更為普遍常見踊餐,一般說的是NAND型):
內存和NOR型閃存的基本存儲單元是bit,用戶可以隨機訪問任何一個bit的信息诺擅。
而NAND型閃存的基本存儲單元是頁(Page)市袖。每一頁的有效容量是512字節(jié)的倍數(shù)。NAND型閃存以塊為單位進行擦除操作(一塊一塊地擦)。閃存的寫入操作必須在空白區(qū)域進行苍碟,如果目標區(qū)域已經有數(shù)據酒觅,必須先擦除后寫入,因此擦除操作是閃存的基本操作微峰。一般每個塊包含32個512字節(jié)的頁舷丹,容量16KB;而大容量閃存采用2KB頁時蜓肆,則每個塊包含64個頁颜凯,容量128KB。
簡言之仗扬,RAM數(shù)據斷電不可保存症概,因而常用于CPU與外設之間做緩存用;EEPROM掉電數(shù)據不丟失早芭,用于編程讀寫使用彼城;有時由于需要改寫的數(shù)據量比較大,因而在EEPROM基礎上出現(xiàn)了Flash Memory(NAND型)退个。我們編寫好程序之后就是在bootloader引導下下載到Flash Memory里面的(因為每次程序下載都有重新刷新一個區(qū)域塊來保存下載的程序募壕,因而使用Flash Memory)。我相信新手對各種存儲器都會有一定了解了语盈。
四:輸入輸出
54路接口都可作為輸入輸出舱馅,并使用pinMode(), digitalWrite()和digitalRead()(點擊看詳細介紹)功能。5v電壓操作刀荒,每個接口的電流最大40mA并且接口有內置20-50千歐的上拉電阻代嗤。另外,有的接口有特殊功能照棋。
Serial(串口):
Serial 0:0 (RX) and 1 (TX);
Serial 1: 19 (RX) and 18 (TX);
Serial 2: 17 (RX) and 16 (TX);
Serial 3: 15 (RX) and 14 (TX).
一共四組串口资溃。其中Serial0也被連接到Tmega16U2 USB-to-TTL Serial芯片(上文有介紹,我們USB連接電腦用的就是這個串口)烈炭。RX接收數(shù)據溶锭,TX傳輸數(shù)據。
External Interrupts(外部中斷):
2 (interrupt 0),
3 (interrupt 1),
18 (interrupt 5),
19 (interrupt 4),
20 (interrupt 3),
21 (interrupt 2)符隙。
每個引腳都可配置成低電平觸發(fā)趴捅,或者上升、下降沿觸發(fā)霹疫。詳見attachInterrupt()(點擊看詳細介紹)功能拱绑。
PWM(脈沖調制):
2~13口;
44~ 46口丽蝎。
提供8位PWM輸出猎拨。由analogWrite()(點擊看詳細介紹)功能實現(xiàn)膀藐。
SPI(串行外設接口):
50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)。使用SPI ?library(點擊看詳細介紹)庫實現(xiàn)红省。
SPI额各,是一種高速的,全雙工吧恃,同步的通信總線虾啦,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳痕寓,同時為PCB的布局上節(jié)省空間傲醉,提供方便,正是出于這種簡單易用的特性呻率,如今越來越多的芯片集成了這種通信協(xié)議硬毕。
SPI總線系統(tǒng)是一種同步串行外設接口,它可以使MCU與各種外圍設備以串行方式進行通信以交換信息礼仗。外圍設置FLASHRAM昭殉、網絡控制器、LCD顯示驅動器藐守、A/D轉換器和MCU等。SPI總線系統(tǒng)可直接與各個廠家生產的多種標準外圍器件直接接口蹂风,該接口一般使用4條線:串行時鐘線(SCLK)卢厂、主機輸入/從機輸出數(shù)據線MISO、主機輸出/從機輸入數(shù)據線MOSI和低電平有效的從機選擇線CS(有的SPI接口芯片帶有中斷信號線INT惠啄、有的SPI接口芯片沒有主機輸出/從機輸入數(shù)據線MOSI)慎恒。
SPI的通信原理很簡單,它以主從方式工作撵渡,這種模式通常有一個主設備和一個或多個從設備融柬,需要至少4根線,事實上3根也可以(用于單向傳輸時趋距,也就是半雙工方式)粒氧。也是所有基于SPI的設備共有的,它們是SDI(數(shù)據輸入)节腐、SDO(數(shù)據輸出)外盯、SCLK(時鐘)、CS(片選)翼雀。
(1)MOSI– SPI總線主機輸出/ 從機輸入(SPI Bus Master Output/Slave?Input)饱苟;
(2)MISO– SPI總線主機輸入/ 從機輸出(SPI Bus Master Input/Slave?Output);
(3)SCLK –時鐘信號狼渊,由主設備產生箱熬;
(4)CS – 從設備使能信號,由主設備控制(Chip select),有的IC此pin腳叫SS城须。
其中CS是控制芯片是否被選中的蚤认,也就是說只有片選信號為預先規(guī)定的使能信號時(高電位或低電位),對此芯片的操作才有效酿傍。這就允許在同一總線上連接多個SPI設備成為可能烙懦。
接下來就負責通訊的3根線了。通訊是通過數(shù)據交換完成的赤炒,這里先要知道SPI是串行通訊協(xié)議氯析,也就是說數(shù)據是一位一位的傳輸?shù)摹_@就是SCLK時鐘線存在的原因莺褒,由SCK提供時鐘脈沖掩缓,SDI,SDO則基于此脈沖完成數(shù)據傳輸遵岩。數(shù)據輸出通過?SDO線你辣,數(shù)據在時鐘上升沿或下降沿時改變,在緊接著的下降沿或上升沿被讀取尘执。完成一位數(shù)據傳輸舍哄,輸入也使用同樣原理。這樣誊锭,在至少8次時鐘信號的改變(上沿和下沿為一次)表悬,就可以完成8位數(shù)據的傳輸。在點對點的通信中丧靡,SPI接口不需要進行尋址操作蟆沫,且為全雙工通信,顯得簡單高效温治。在多個從設備的系統(tǒng)中饭庞,每個從設備需要獨立的使能信號,硬件上比I2C系統(tǒng)要稍微復雜一些熬荆。
例:現(xiàn)有1舟山,2號設備支持SPI接口,則可以都掛到主控的SPI線上惶看,之后如果要控制1號設備捏顺,則由主控發(fā)送CS=1號,選中1號設備纬黎,那么1號設備就可以通過MOSI幅骄,MISO兩根線在SCLK時鐘控制下和主機進行通信了。
LED:
13引腳本今。這是板上自帶的LED燈拆座,高電平亮主巍,低電平滅。
TWI:
20 (SDA) 和21 (SCL)挪凑。使用Wire library(點擊查看詳細介紹)實現(xiàn)功能孕索。
TWI(Two—wire Serial Interface)接口是對I^2C總線接口的繼承和發(fā)展,完全兼容I^2C總線躏碳,具有硬件實現(xiàn)簡單搞旭、軟件設計方便、運行可靠和成本低廉的優(yōu)點菇绵。TWI由一根時鐘線和一根傳輸數(shù)據線組成肄渗,以字節(jié)為單位進行傳輸。TWI_SCL\TWI_SDA是TWI總線的信號線咬最。SDA是雙向數(shù)據線翎嫡,SCL是時鐘線SCL。在TWI總線上傳送數(shù)據永乌,首先送最高位惑申,由主機發(fā)出啟動信號,SDA在SCL 高電平期間由高電平跳變?yōu)榈碗娖匠岢缓笥芍鳈C發(fā)送一個字節(jié)的數(shù)據圈驼。數(shù)據傳送完畢,由主機發(fā)出停止信號望几,SDA在SCL 高電平期間由低電平跳變?yōu)楦唠娖健?/p>
模擬輸入:
Mega2560有16個模擬輸入,每個提供10位的分辨率(即2^10=1024個不同的值)碗脊。默認情況下他們測量0到5v值¢献保可以通過改變AREF引腳和analogReference()功能改變他們變化范圍的上界。
AREF:是AD轉換的參考電壓輸入端(模擬口輸入的電壓是與此處的參考電壓比較的)祈坠。使用analogReference()(點擊查看詳細介紹)完成功能害碾。
例:
參考電壓是5V,AD精度是10位的赦拘,
在模擬輸入端輸入2.5V慌随,AD轉換結果就是512(1024×(5/2.5))
Reset:低電平有效,不用多說了吧躺同。
五:通信
Arduino Mega2560提供4路UARTs通信阁猜,即Serial通信。數(shù)據通過ATmega8U2/ATmega16U2時候指示燈會閃爍(除了0和1口)蹋艺。
使用SoftwareSerial library(點擊看詳細介紹)可以使用Mega2560的任意數(shù)字接口通信剃袍。Mega2560同樣支持TWI和SPI通信。
六:編程
Mega2560使用Arduino IDE環(huán)境編程(這個相信再新的新手也知道)捎谨。事先在閃存(Flash Memory)里燒入bootloader引導程序(上文介紹有8kb)民效,這樣我們就可以每次下載程序了憔维。它使用的是原始的STK500通信協(xié)議。(bootloader一般使用C語言或者匯編編寫畏邢,考慮部分人的興趣业扒,這里也提供些資料:bootloader)。
你也可以繞過bootloader利用Arduino ISP通過ICSP (In-Circuit Serial?Programming)header來編程(這是采用額外編程器的方式舒萎,這種方式當然不贊成程储,很麻煩)。
The ATmega16U2(上面說的串口編程芯片臂寝,Mega2560的特色)固件源碼可以從Arduino
repository獲得章鲤。ATmega16U2/8U2使用DFU?bootloader下載,可以用以下方式激活:
1.V1版本的板子:連接板子后面的跳線(靠近意大利的地圖)交煞,之后重置ATmega8U2(1版本為這個芯片)咏窿。
2.V2及之后的版本:有個將8U2/16U2 HWB線連到地的電阻,它使板子很容易進入DFU模式素征,你之后可以使用Atmel's FLIP software(Windows) 或者DFU
programmer(Mac OS X and Linux) 下載新的固件集嵌。或者你可以使用額外的編程器通過ISP下載(跟上面跳過bootloader下載程序時的方法一樣御毅,此方法高端案贰)。具體參考:Seethis user-contributed
tutorialfor more information.
七:自動(軟件)復位:
不說了端蛆。
八:USB過流保護:
不說了凤粗,好的硬件設計應該這么做。
九:物理特性和兼容:也不說了今豆,都是繼承和發(fā)展嫌拣。