Arduino uno的制作与调试Word文档格式.docx
《Arduino uno的制作与调试Word文档格式.docx》由会员分享,可在线阅读,更多相关《Arduino uno的制作与调试Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
这块板子中还是有存在一些比较难焊的地方。
1)芯片ATmega8U2
ArduinoUNO与之前Arduino2009版本的最大不同在于USB转串口部分,Arduino2009采用的是FTDI专用芯片FT232RL,而ArduinoUNO采用的是用一块ATmega8U2模拟出串口的做法。
这一改动着实带来了不小的麻烦,第一是该方案所采用的ATmega8U2芯片基本上在市场上很难找到,另外一点就是该芯片的封装加大了焊接的难度和成本。
芯片ATmega8U2的封装很小,而且它芯片的外面没有引脚,可以看到的是它的焊盘非常的小。
焊接方法为:
在各个焊盘上滴上锡,完了后检查一下有没有焊盘连接在一起的,然后用镊子夹住芯片ATmega8U2,小心的对准位置,对准后用镊子压住芯片,用电烙铁在一边的周围滑动加热,使得焊盘上的锡熔化,则芯片的引脚就焊在了焊盘上,同样的,其他三边也这样。
焊完之后用万用表检查一下。
2)贴片晶振及其他的贴片元器件
因为左手是拿镊子夹住器件对准位置,右手拿电烙铁,所以没有另外的手来添加焊锡。
这时就需要先在对应的一个焊盘上滴一点焊锡,再将器件对准位置,用电烙铁在上面加热,焊锡熔化就与元器件连接在一起,在焊接另外一个焊盘。
焊接完成后如图4所示。
再用万用表检查各个焊点。
图4Arduinounorev1
2、原理图分析
1.外接电源输入部分
ArduinoUNO可以使用外接电源进行输入,A是电源输入口,电源的输入的范围为7V到12V.。
图5中B是二极管,二极管的特性是单向导通。
使用二极管的目的是:
即使电源输入的正反极性反转,也不会烧毁线路板上的元器件。
C是稳压管,把输入电压稳定在5V。
由于C器件的输入和输出间需要一定的压差,所以A的输入电压不能低于7V。
另外,如果A的输入电压过高,会使得器件C输入和输出电压差过大,从而使得C因为温度过高也烧毁。
用户在使用外接电源输入时,请把输入电源的电压范围控制在7V到12V之间。
原则上,越靠近7V越好。
图5外接电源输入部分
2.USB电源输入部分
ArduinoUNO也可以使用USB口直接供电。
图6中A是USB接头,可以给ArduinoUNO提供5V的电压。
B是保险管,当UNO所需要的电流大于500mA的时候,该保险管会自动断开,以防止损坏电脑。
图中C是10K的排阻,用来对上面提到的外接电源输入进行分压。
当外接电源输入电压VIN大于7V时,D器件的第3脚由于电压高于D器件的第2脚(3.3V),所以D器件的第1脚输出高电平。
器件E是PMOS,当D器件的第1脚输出高电平时,器件E处于截至状态,从而切断了USB接口的供电。
当外接电源输入电压VIN小于6V时,D器件的第3脚由于电压低于D器件的第2脚(3.3V),所以D器件的第1脚输出低电平。
器件E处于导通状态,此时,ArduinoUNO由USB口进行供电。
器件F是线性稳压器,负责把5V电源转变成3V电源,该器件能给ArduinoUNO提供大约50mA的电流。
图6USB电源输入部分
3.ATmega8U2/ATmega16U2
ATmega8U2和ATmega16U2是USB接口芯片,其特征包括:
1)8K/16K字节的Flash,支持自擦写功能。
512字节EEPROM和512字节SRAM(8U和16U的不同处是Flash容量)
2)内置Boot-Loader功能。
3)支持USB全速,包含4个USB输入输出端口
4)包含内置晶振。
5)操作电压范围为2.7V到5.5V。
2.7V时,最大工作频率是8MHz,4.5V时,最大工作频率是16MHz。
3、Arduinouno板子的调试
1.USBtinyISP的驱动安装
Arduinouno的调试用到工具官方支持下载线USBtinyISP。
USBtinyISP也是一款为AVR单片机设计的基于USB接口的ISP下载线,使用它可以为大部分AVR单片机下载程序。
在ArduinoIDE中,USBtinyISP是一直被支持的下载线,用来下载其bootloader,与之前使用的USBasp下载线相比,使用起来更加简单。
首先下载USBtinyISP驱动程序,将其解压缩到硬盘上备用。
将下载线通过USB线连接到计算机后,系统会提示找到相应的硬件:
在随后出现的“找到新的硬件向导”对话框中,选“否,暂时不”,然后单击“下一步”按钮:
在随后出现的对话框中,选“从列表或指定位置安装(高级)”,然后单击“下一步”按钮:
接着指定之前解压缩开的驱动文件所在的目录:
单击“下一步”按钮之后,系统就开始安装USBtinyISP所需要的驱动文件:
最后单击“完成”按钮,就大功告成了:
此时在系统的硬件管理器中,我们能够找到“USBtinyISPAVRProgrammer”,表明该下载线已经可以使用了:
USBtinyISP在设计的时候,设置了相应的跳线来为单片机供电。
在为Arduino下载bootloader的时候,我们需要将该跳线短路,这样就不需要再为Arduino提供额外的电源了:
2.ATMega8U2固件烧写与驱动安装
安裝好USBtinyISP驱动之后,首先要向ATMega8U2内写入相应的USB固件(firmware)。
在Arduino-0022安装目录下的hardware\arduino\firmwares目录下,我们可以找到为ArduinoUNO编译好的USB固件文件UNO-dfu_and_usbserial_combined.hex。
编译时需要调用avrdude,我们先从arduino0022中找到avrdude的两个文件,avrdude.exe,avrdude.conf,如下图:
把他们放入arduino-0022\hardware\arduino\firmwares文件夹下面
ArduinoUNO上为ATMega8U2单片机也留出了ICSP接口,我们可以借助它来下载相应的USB固件,使用的工具是USBTinyISP。
把tinyISP与8U2芯片上方的ICSP接口连接好。
ICSP线的街头上,有一个小三角,那个指向的是1号口。
板子上ICSP的1号口也都有标记,如图:
然后进入命令状态,进入arduino-0022\hardware\arduino\firmwares目录,输入命令:
avrdude-pat90usb82-F-Pusb-cusbtiny-Uflash:
w:
UNO-dfu_and_usbserial_combined.hex
-Ulfuse:
0xFF:
m-Uhfuse:
0xD9:
m-Uefuse:
0xF4:
m-Ulock:
0x0F:
m
这段命令后半部分是设置熔丝位,熔丝低位ff,高位d9,扩展位f4,lock位0f。
完成以后我们就可以把uno的usb口连接电脑,测试是否下载成功(如果下载固件失败,很可能是ATmega8U2焊接失败)。
在win7下连接后,会提示找到新硬件
因为系统驱动中没有包含,所以会提示安装失败,不要紧。
这时进入控制面板中的系统
在有感叹号的uno上点右键,选择更新驱动。
然后选择手工查找驱动
选择驱动目录,默认是在arduino-0022\drivers目录下。
提示不用管,安装就可以。
3.ATmega328芯片bootloader的烧写
用6芯的连接线将USBtinyISP和Arduino上的ICSP座连接起来:
注意由于Arduino的ICSP座并没有设计反插反的座,你需要6芯连接线上带三角形的那一位是对应于ICSP座上的“1”:
硬件连接好之后,此时可以打开Arduino的IDE了。
在菜单“Tools”->
“Board”列表中选择好你的Arduino板子的型号之后,就可以通过菜单“Tools”->
“BurnBootloader”->
“w/USBtinyISP”来下载Arduino的bootloader:
整个下载的过程中,USBtinyISP上红色的BUSY灯会一直亮着,表明其正在工作:
整个下载过程会持续一段时间,但速度与USBasp相比还是要快一些。
下载完成之后,在ArduinoIDE窗口中会显示“Doneburningbootloader”:
4.测试
到现在为止,板子已经全部好了,接下来将导入程序进行测试。
拔掉USBtinyISP下载器,直接用USB连接板子。
可以看到工作指示灯亮。
然后打开Arduino的IDE,在菜单“File”->
“Example”->
"
Basics"
->
Blink"
。
然后点
把程序下载到板子里去。
在下载过程中,板子上的RX、TX灯会闪亮,下载完成后
黄色的灯L每隔一秒闪一次,表示调试成功了。
4、Arduinouno中常用的基本函数
1.结构
viodsetup()初始化变量、管脚模式、调用库函数等;
voidloop()连续执行函数内的语句。
2.功能
1)数字I/O
pinMode(pin,mode)数字IO口输入输出模式定义函数,pin表示为0~13,mode表示为INPUT或OUTPUT。
digitalWrite(pin,value)数字IO口输出电平定义函数,pin表示为0~13,value表示为HIGH或LOW。
比如定义HIGH可以驱动LED。
intdigitalRead(pin)数字IO口读输入电平函数,pin表示为0~13,value表示为HIGH或LOW。
比如可以读数字传感器。
2)模拟I/O
intanalogRead(pin)模拟IO口读函数,pin表示为0~5(ArduinoDiecimila为0~5,Arduinonano为0~7)。
比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。
analogWrite(pin,value)-PWM数字IO口PWM输出函数,Arduino数字IO口标注了PWM癿IO口可使用该函数,pin表示3,5,6,9,10,11,value表示为0~255。
比如可用于电机PWM调速或音乐播放。
3)时间函数
delay(ms)延时函数(单位ms)。
delayMicroseconds(us)延时函数(单位us)。
4)数学函数
min(x,y)求最小值
max(x,y)求最大值
abs(x)计算绝对值
constrain(x,a,b)约束函数,下限a,上限b,x必须在ab之间才能返回。
map(value,fromLow,fromHigh,toLow,toHigh)约束函数,value必须在fromLow与toLow之间和fromHigh与toHigh之间。
pow(base,exponent)开方函数,base的exponent次方。
sq(x)平方
sqrt(x)开根号