BLOG > Arduino > DIY,自制Arduino Duemilanove主控板

DIY,自制Arduino Duemilanove主控板

EarthRunner项目已完成了大约1/3,机器人小车已经能自主避障运行,也能通过网页进行遥控动作。下一步的计划就是加上云台和无线摄像头,以便于能通过网页实时以小车的视野来观察环境。另外,还要打造一个遥控器,能够利用APC220来远程控制小车,让它能够脱离电脑进行远程的控制。

为了打造遥控器,另外还需要再买一个Arduino主控板。不过看看淘宝的大多数卖家都卖100-160的价格,想想实在是不太值得。怎么说Arduino也是开源的硬件,那些拿着公板电路抄来的板子,怎么能够卖这么高呢。于是就想着自己买元件来DIY一个。从Arduino网站下载了Duemilanove的电路图和PCB版layout图,把元件一个个列出来,就开始准备动工了。最难解决的是PCB问题,如果自己找人做的话,数量少成本会很高,还好淘宝上找到有同城卖家只卖5元一块。淘宝真是万能啊,于是找齐了其他元件,就准备开工啦。


元件清单:
  • 贴片电阻 1K:    R4, R5, R6, R7, R8, R9
  • 贴片电阻 10K:   R1, R10, R11
  • 贴片电容 22P:   C2, C3
  • 贴片电容104M 0.1UF:   C1, C4, C5, C8, C9, C10, C11, C12, C13
  • 贴片电解电容47uF,25V:   C6, C7
  • IC1 ATMEGA168 或 ATMEGA328
  • IC2 FT232RL
  • IC3 NDT2955
  • IC4 MC33269D
  • IC5 LM358D
  • 晶振 16MHz: Q2
  • 贴片保险丝 500mA: F1
  • 二极管: D1
  • 贴片发光二极管:绿色或红色共四个
  • 排针插座: 8P*2, 6P*2
  • IC插座: 直列28针 一个
  • 按钮开关一个: S1
  • 2.1电源座一个
  • 方口USB 90度 插座一个
我从来没焊过贴片元件和集成块,焊这么精密的东西还是第一次,为了顺利焊接,还特地去买了0.8mm的焊锡丝。终于要动手了,决定把最困难的元件放在第一个焊接。实现USB转串口功能的FT232RL芯片是针脚最密集的IC,一旦挑战失败,剩下的工作也就不必进行了。

P1000634
5元买来的PCB空板

P1000638
在放大镜的帮助下,终于用一把尖头烙铁成功焊上FT232RL,这是我第一次焊接IC和贴片元件,不容易啊~~~

P1000640
有了前面的经验,后面就顺利多了,继续焊上了第二个IC

P1000644
虽然有点歪歪扭扭,但是终于所有贴片元件都基本焊接完成……

P1000653
全部焊接完成,电源插座我没有焊接,因为我不需要外接电源

P1000655
插上ATMEGA328PU 把这块板子作为 EarthRunner一号小车的主控板了:)

在奋斗了2个半小时后,终于所有的焊接工作都全部完成,我把EarthRunner一号的程序刷进板子,安装在小车上,替换下淘宝买来的那块arduino主控板,经过测试,板子正常工作。终于,只花了67元的材料费用就DIY了一块Arduino Duemilanove主控板,虽然自己焊的有点歪歪扭扭(好歹是第一次焊贴片元件嘛~),但比起上次在淘宝花了159买的那块板子还是划算多了。

另外,今天顺便改了下EarthRunner的代码,新增了一个扬声器。现在小车转弯时能够鸣笛了(左转、右转的笛声不同哦)。同时在小车上简单安装了无线摄像头,但是没有安装云台,视角只能是固定的。下一步就是要增加云台了,拭目以待吧。

P1000658
EarthRunner一号,v1.2


PS:有人反映说,没有详细介绍过Arduino Duemilanove,好吧,我就Copy/Paste一段吧:

概述

Arduino Duemilanove ("2009") 是一个基于ATmega168(datasheet)或者ATmega328(datasheet) 的微控制器板,有14路数字输入/输出,其中六路可作为PWM输出,6路模拟输入,一个16MHz晶振,一个USB连接器,一个电源插座,一个ICSP 座,和一个复位按钮。它已包括一个微控制器应有的一切,直接将它用USB线连上计算机或者用一个电源适配器给它供电,就可以开始使用了。

 "Duemilanove" 在意大利语中是2009的意思,名字取自发布年份,Duemilanove目前是Arduino USB系列中的最新型号。

电路设计参考

总体参数

微控制器 ATmega168/ATmega328
操作电压 5V
推荐输入电压 7-12V
极限输入电压 6-20V
数字I/O脚数 14 , 其中六路提供PWM输出
模拟输入脚数 6
I/O脚直流电流 40 mA
3.3伏脚的电流 50 mA
闪存 16 KB (ATmega168) or 32 KB (ATmega328) ,其中2KB用于bootloader
SRAM 1 KB (ATmega168) or 2 KB (ATmega328)
EEPROM 512 bytes (ATmega168) or 1 KB (ATmega328)
时钟频率 16 MHz


电源

Arduino Duemilanove 可以由USB口或者外接电源供电,电源会自动切换。外部电源(非USB模式)可以是电源适配器或者电池,适配器可以用2.1毫米中心正极的插头接在Arduino板的电源插座上,由电池引出的电源线可以插在地(GND)脚和电源输入(POWER)的VIN脚。这块板子可以在外部电源6-20V之间工作,然而如果外部供电小于7V,那么5V的输出脚可能会达不到额定输出电压5V,如果输入电压超过12V,稳压器可能会过热,推荐的输入电压范围在7-12V.

电源针脚描述如下:

  • VIN. Arduino板由外部供电时的电源输入脚(相对于USB供电),你可以经由此脚给Arduino供电,或者由外部电源适配器供电时,由此脚读取输入电压。
  • 5V. 经过稳压的电源,可以给微控制器或其它板上的器件供电,此电源可以来自VIN,或者来自USB电源或其他5V供电。
  • 3V3. 由板上的FTDI芯片产生的3.3v电压,最大提供50ma电流。
  • GND. 接地.

存储

ATmega168 有16K闪存来保存代码(其中2K用于BOOTLOADER),ATmega328有32K闪存,同样2K用于BOOTLOADER,ATmega168有 1K SRAM和512字节的EEPROM,可以由EEPROM库函数来读写,ATmega328有2K SRAM和1K EEPROM。

输入输出

14个数字脚每一个都可以用作输入输出,用pinMode(),digitalWrite和digitalRead()函数来操作。这些针脚的工作电压是5V,每一个都可以提供或者接受最大40mA的电流,并且有内置的上接电阻,默认处于断开状态,电阻值为20-50千欧,除此之外,一些脚有特别的用处:

  • 串口: 0 (RX) and 1 (TX). 用于接收(RX)和传送(TX)TTL串行数据,这两脚接在相应的FTDI芯片USB转到TTL串行芯片上。
  • 外部中断: 2 and 3. 这两脚可以配置成中断触发,由外部低电平,上升和下降或者电平的变化,参见attachInterrupt函数。
  • PWM: 3, 5, 6, 9, 10和11. 提供8位PWM输出,函数analogWrite()。 
  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). 这些脚用来支持SPI通信,虽然硬件支持这一特性,但目前在Arduino语言中无相应的函数提供这一操作。
  • LED: 13. 内置的LED,接在数字脚13上,此脚输出高电平时,LED点亮,否则熄灭。

Duemilanove 提供6路模拟输入,每一路输入解析值为10位(1024个可能值),默认的度量值从接地到5V,可以从AREF脚改变这一参考电压,通过函数analogReference()控制,并且其中某些脚有特殊用途。

  • I2C: 4 (SDA) and 5 (SCL). 支持 I2C (TWI)通信,由库函数 Wire library提供支持。

其它板上的针脚定义:

  • AREF. 模拟输入的参考电压,能过analogReference()函数操作。 
  • Reset. 复位,将它设为低于电平来复位微控制器,典型应用是在模块将内部的复位键挡住后,在外部添加一个复位按钮连接到此脚。

通信

Arduino Duemilanove 有大量的辅助程序来实现与计算机和其它Arduino板,或其它微控制器的通信,ATmega168和ATmega328提供UART TTL(5V)经针脚0(RX)和脚1(TX)的串行通信,板载的FT232RL将USB通信转换为串行通信,FTDI的驱动会在计算机上生成一个虚拟的串口。Arduino开发环境包括一个串口监视器,可以使简单的将数据发送到计算机,或者从计算机接受数据。当通过FTDI芯片进行串行通信时,Rx和Tx灯会闪烁。通过库函数 SoftwareSerial 可以通过Deumilanove的任意数字I/O针脚进行串行通信。

ATmega168和ATmega328同样支持I2C和SPI协议,Arduino环境包含一个Wire库来简化I2C总线的使用,参见 相关文档 。 如果想使用SPI协议,请参考ATmega168或者ATmega328的datasheet。

编程

Arduino Duemilanove 可以使用Arduino开发环境来编程(下载) 在"工具>板类型"菜单中选择相应的Arduino板。

ATmega168 或者 ATmega328 出厂时已烧录了bootloader,这样方便你上传新的代码而不必借用外部的编程器, 它使用STK500通讯协议 (参考文 档, C头文件)。

你也可以绕过bootload,直接使用ICSP来对微控制器编程,详细步骤请参考使用指南

自动(软件)复位

在以前的版本中,上传程序前需要手工按一下复位按钮,而Duenilanove(2009)版本设计成可以通过计算机上的软件来进行复位。 FT232RL硬件上的一根控制线(DTR)已通过一个100NF的电容连接至ATmega168/ATmega328的复位脚,当此线电平下降,复位线电平下降足够的时间使得ATmega168或者ATmega328复位。Arduino环境使用这个特性简化了上传程序的过程,只需要点击“上传”按钮就可以了。这意味着由于DTR可以和上传动作很好的协调,从而使bootloader可以有比较短的超时时间。

这种设计还有其它的含义。当Duemilanove连接到运行MAC OS X或者 LINUX机器上的时候,在每次用软件连接到Arduino板时它都会自动复位.在此后的大约半秒内,bootloader是处于运行状态。bootloader虽然是设计成会自动忽略非法数据(除了上传代码之外的任意数据),在每次连接建立时,它还是会拦截送到板上的最初几个字节数据。因此如果一个在板上运行的小程序需要在第一次运行时接受配置数据,一定要保证和它通信的程序在连接建立后等待约一秒钟才开始发送数据。

Duemilanove 有一条特定的线路,可以被切断从而禁止自动复位。两面的焊点位置可以焊起来从而重新开启自动复位功能,这个点被标识为“RESET-EN”,你也可以用一个110欧的电阻连到5V电源来禁止自动复位,详情请见Arduino 论坛讨论区贴子

USB过流保护 

Arduino Duemilanove 有一个可复位的熔断器来保护计算机的USB口,防止短路或者过流。虽然大部分计算机都有它们内置的保护措施,熔断器还是可以提供额外的保护,如果连到USB口的电源超过500mA,它将自动断开,直到短路或者过流消除。

物理参数

PCB最大长度和宽度分别为2.7,2.1英寸(注:6.0cm,5.33cm),包括USB座和电源插座可能会超过这个数值,三个螺丝孔用来将板子连接到机箱或者其它的表面,注意针脚7和8之间的距离是160mil,并不是其它针脚之间距离100mil的整数倍。

如何念Duemilanove?

下面是这块板子的名字的意大利语发音 WAV, OGG, MP3, FLAC, WMA

如果您喜欢这篇文章,您可以点击下列链接收藏
Del.icio.us Yahoo书签 365Key网摘 天极网摘 我摘 POCO网摘 YouNote网摘 和讯网摘 博啦网
发布时间 发布于 2010-06-14 23:33:35 | 阅读次数 阅读过563次 | 分类 Arduino | 评论 4条评论