Arduino中国 | Flamingo EDA

CAT | 手册

USBtinyISP也是一款为AVR单片机设计的基于USB接口的ISP下载线,使用它可以为大部分AVR单片机下载程序。在Arduino IDE中,USBtinyISP是一直被支持的下载线,用来下载其bootloader,与之前使用的USBasp 下载线相比,使用起来更加简单了;-)

首先从这里下载USBtinyISP驱动程序,将其解压缩到硬盘上备用。将下载线通过USB线连接到计算机后,系统会提示找到相应的硬件:

在随后出现的“找到新的硬件向导”对话框中,选“否,暂时不”,然后单击“下一步”按钮:

在随后出现的对话框中,选“从列表或指定位置安装(高级)”,然后单击“下一步”按钮:

接着指定之前解压缩开的驱动文件所在的目录:

单击“下一步”按钮之后,系统就开始安装USBtinyISP所需要的驱动文件:

最后单击“完成”按钮,就大功告成了:

此时在系统的硬件管理器中,我们能够找到“USBtinyISP AVR Programmer”,表明该下载线已经可以使用了:

USBtinyISP V2在设计的时候,设置了相应的跳线来为单片机供电。在为Arduino下载bootloader的时候,我们需要将该跳线短路,这样就不需要再为Arduino提供额外的电源了:

用6芯的连接线将USBtinyISP和Arduino上的ICSP座连接起来:

注意由于Arduino的ICSP座并没有设计反插反的座,你需要6芯连接线上带三角形的那一位是对应于ICSP座上的“1”:

a

硬件连接好之后,此时可以打开Arduino的IDE了。在菜单“Tools”->“Board”列表中选择好你的Arduino板子的型号之后,就可以通过菜单“Tools”->“Burn Bootloader”->“w/ USBtinyISP”来下载Arduino的bootloader:

整个下载的过程中,USBtinyISP上红色的BUSY灯会一直亮着,表明其正在工作:

整个下载过程会持续一段时间,但速度与USBasp相比还是要快一些。下载完成之后,在Arduino IDE窗口中会显示“Done burning bootloader”:

Apr/09

19

Arduino L298N 电机驱动扩展板

之前设计的基于L293D的直流电机驱动扩展板,虽然也能够接两个直流电机,但由于从于对接口数目的考虑,因此无法分别控制两路电机的旋转方向。此外,在带动较大功能的电机时,L293D也显得稍有些不足。出于这些考虑,在吸纳了一些网友的建议之后,此处设计了一个基于L298N的电机驱动扩展板。L298N是S一种高电压、大电流电机驱动芯片,其中最高工作电压可达46V,持续工作电流为2A,瞬间峰值电流更是可达 3A。该芯片内含两个H桥的高电压大电流全桥式驱动器,可以直接驱动两个直流电动机。

该扩展板在电路连接上首先要考虑的是如何给电机供电,如果你的Arduino采用的是外部供电方式(比如接9V的变压器时),而且该供电方式同你的电机也是驱配的(比如9V的直流电机),那么就可以将电机接到MA(A+和A-两个接线座)或者MB(B+和B-两个接线座)上:

然后再将VM跳线接到VIN端就:

另外一起连接方式是直接给电机单独提供一个不超过35V的电源,分别接在电机扩展板的GND和VEX接线座上,电机同样还是接在MA或者MB上:

但VM跳线此时则需要接到VEX端:

从控制原理上讲,L298N与L293D基本是一样的,都是分别通过两根方向引脚来控制电机的旋转方向,再通过一根使能引脚上的PWM信号来控制电机的转速。具体到该扩展板上,电机MA的方向引脚为Arduino的13和12号管脚,速度引脚则是Arduino的10号管脚;电机MB的方向引脚为Arduino的11和8号管脚,速度引脚则是Arduino的9号管脚。示例代码如下所示:

// motor A
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 10;

// motor B
// motor A
int dir1PinB = 11;
int dir2PinB = 8;
int speedPinB = 9;

unsigned long time;
int speed;
int dir;

void setup() {
  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);

  time = millis();
  speed = 0;
  dir = 1;
}

void loop() {
  analogWrite(speedPinA, speed);
  analogWrite(speedPinB, 255 - speed);
  // set direction
  if (1 == dir) {
    digitalWrite(dir1PinA, LOW);
    digitalWrite(dir2PinA, HIGH);
    digitalWrite(dir1PinB, HIGH);
    digitalWrite(dir2PinB, LOW);
  } else {
    digitalWrite(dir1PinA, HIGH);
    digitalWrite(dir2PinA, LOW);
    digitalWrite(dir1PinB, LOW);
    digitalWrite(dir2PinB, HIGH);
  }
  if (millis() - time > 5000)  {
    time = millis();
    speed += 20;
    if (speed > 255) {
      speed = 0;
    }
    if (1 == dir) {
      dir = 0;
    } else {
      dir =1;
    }
  }
}

为了对电机的工作状态有更加直观的理解,扩展板上还专门添加了4个LED来分别表示电机的转动方向,其亮度也正好表明了电机转速的高低,非常方便:

另外,该扩展板上还设计了一个VL跳线,是用来对为L298N选择逻辑电平的,通常我们接到V5V这端,即从Arduino板子上取得该逻辑电压。

上述VL跳线如果接VEX的话,相应的逻辑电压则是通过电机外接电源VEX分压后得到的,该分压器采用的是LM3940,其最高耐压值为35V,这也一定程序上决定了该扩展能够随受的最高电压为35V。

May/08

2

Arduino Mini使用手册

Arduino Mini虽然非常小巧,但同样具有Arduino的所有功能,只是在使用上稍有区别。标准版的Arduino板上自带USB转串口的下载电路,因此只需要再加一条USB线就可以完成所有的开发工作。Arduino Mini出于体积上的考虑,将程序下载电路和功能电路分开了,因此开发过程稍显麻烦一些。

由于Arduino Mini没有相应的下载电路,因此程序下载需要借助相应的USB适配器来完成:

将Arduino Mini和USB适配器插到万用板上后,首先用线将两者的5V和GND连接起来:

接着再将两者的TX和RX分别连接起来:

最后再通过一个100nF的电容,将USB适配器上的DTR(上排第6个引脚)和Arduino Mini上的RST连接起来。这部分电路是借助DTR上的信号,对Arduino Mini进行复位,Arduino Diecimila提到的自动复位,指的就是这个:

好了,连上USB线,开始为你的Arduino Mini下载程序吧,所有的操作跟标准版的Arduino是完全一样的:)

No tags

Nov/07

28

Arduino XBee模块使用手册

XBee是美国MaxStream公司基于ZigBee技术的一个无线传输模块,该模块使用起来非常简单,我们只需要简单的把数据输入到一个模块,它就能自动的被发送到无线连接的另一端,同时也支持AT 命令进行高级配置。

这里介绍的Arduino XBee模块包括一块针对Arduino量身定制的扩展板,以及一个XBee Pro模块:

使用这样一对Arduino XBee模块,我们就可以实现一个最简单的包含两个结点的ZigBee网络,完成Arduino之间的无线通信。ZigBee技术本身也支持多个结点组成的复杂网络。

XBee模块在正常工作之前必须进行相应的设置。对XBee模块的设置既可以按照XBee手册里介绍的AT指令,通过串行终端完成,也可以借助X-CTU这一工具来完成,你可以在这里下载本文用到的版本进行安装。

将Arduino XBee扩展板连接到Arduino母板上,然后将Arduino XBee扩展板上的两个跳线置于USB一端,这样X-CTU才能通过Arduino的USB接口对XBee模块进行配置:

注意,下面的步骤会用到Arduino的USB接口以及TX和RX管脚,所以请确保运行在Arduion上的工程里没有对串行接口的操作,或者将AVR芯片从Arduino板上取下之后再进行下面的步骤。

在用USB电缆将Arduino与PC机连接好之后, 运行X-CTU软件。首先我们在“PC Settings”中里选择对应的通信端口,并设置好波特率等参数。XBee模块出厂里默认的设置为9600,8N1。

此时我们可以单击“Test/Query”按钮,来测试是否能够正确地连接上XBee模块。如果一切正常,我们将看到如下的对话框。如果通信参数设置都是正确的,但仍然无法与XBee模块通信上,则请检查USB连线和Arduino XBee扩展板上的跳线,必要的时候可以拨掉Arduino上的ATmega单片机再试。

测试正常之后转到“Modem Configuration”。首先单击“Modem Parameters and Firmware”中的“Read”按钮读出XBee模块中的当前参数,接着在读出的“Networking & Security”中将“Channel”设为“C”,将“PAN ID”设置为“1234”。

我们在这里要实现的是一个最简单的点对点网络,所以只需要对另外一个Arduino XBee模块做完全相同的设置就可以了。两个Arduino XBee模块都设置好之后,运行两个X-CTU并在“PC Settings”中选择不同的通信接口,分别对两个Arduino XBee模块进行控制。

在X-CTU的“Terminal”中我们可以手工输入需要XBee模块传输的数据,这些数据在收到之后会被自动发送到另一个XBee模块,并在另一个X-CTU的“Terminal”中显示出来。其中蓝色的表示发送的数据,红色的表示接收的数据:

至此,基本说明你的Arduino XBee模块能够正常收发数据了,接下去要做的就是在Arduino工程里如何利用XBee进行无线数据的收发了。通过上面的步骤不难看出,在Arduino工程中只需要将要发送的数据通过Arduino的串行通信接口发送给XBee模块就可以了,然后在另一个Arduino模块中通过串行接口读出来就可以了。但要想要构建更加复杂的网络,就得仔细读读XBee的使用手册,并好好了解ZigBee技术了;-)

No tags

Nov/07

17

Arduino下载线使用手册

Arduino使用的是Atmel公司的AVR单片机,一般为ATmega8和ATmega168,这一系列的单片机都支持ISP(In System Programmability )编程,无需依赖昂贵的编程器就可以完成程序的下载。Arduino电路在设计上考虑到了ISP功能,也留出了相应的接口(ICSP),从而允许我们通过ISP下载线来完成bootloader的下载。

新买来的Arduino模块上一般都已经预先下载好了bootloader,因此上电之后就能够直接通过Arduino集成开发环境下载相应的Arduino程序。正常情况下我们在用Arduino时是不需要ISP下载线的,但在某些情况下可能会出现在Arduino集成开发环境中无法正常下载程序的现象,这很可能是由于bootloader受损所致。解决的办法就是重新将bootloader烧写到ATmega芯片中,此时你就需要用到这里介绍的ISP下载线了。

Arduio网站上给出的并口下载线电路我只成功地更新过ATmega8的bootloader,而无法为Diecimila上的ATmega168下载bootloader。此外,Arduino给出的这一下载线电路过于简单,没有做相应的隔离和保护, 经常使用可能会对Atmega芯片带来一定的损害。AVR建议使用一片74HC244来隔离并口和ATmega芯片,下面是我所使用的下载线的原理图:

以及自制的下载线:

使用并口下载线的时候,我们需要先到计算机的BIOS中将并口设为ECP(The extended capabilities port )模式,同时将I/O基地址设置成378:

此时在Windows的设备管理器中,我们会发现并口已经被标记为“ECP 打印机端口”:

用鼠标右键单击后从弹出的菜单中选择“属性”命令打开属性对话框,在“资源”页面中我们会看到相应I/O基地址的设置已经生效:

现在就可以用ISP下载线连接计算机并口和Arduino上的ICSP接口了,请特别留意连接方向:ISP下载线六口插座上标有小三角的一端应该靠近 Arduino的ICSP接口上标为1的一端。虽然计算机并口能够为下载电路提供一定的电压,但一般我还是建议给Arduino模块加上5V电压(通过USB线和外接电源都可以),以保证下载过程的稳定。

硬件准备好之后,我们就可以通过相应的软件将bootloader烧到Arduino中。支持AVR下载线的软件比较多,如AVRDUDESLISP等,我们在这里使用的是PonyProg。下载并安装好PonyProg v2.07a BETA版本,启动PonyProg时会提示你进行相应的校准和设置工作。首先选择“Setup”菜单中的“Calibration”命令进行校准,然后再选择“Setup”菜单中的“Intreface Setup…”命令进行相应的并口设置:

根据你的Arduino模块上的芯片类型,从“Device” 菜单中的“AVR micro”子菜单中选择“ATmega8”或者“ATmega168”。你也可以从工具栏上的Device下拉框中进行相应的选择:

首先从“Command”菜单中选择“Read All” 命令,从Arduino模块上读出ATmega中的当前数据和设置,其中最重要的是之后要设置的熔丝位。

然后选择“File”菜单中的“Open Program (FLASH) File…” 命令,打开“Open program (FLASH) content file”对话框。从你的Arduino安装目录下找出对应于的bootloader。对于Arduino 0010版本来讲,我们可以在hardware\bootloaders目录下找到atmega8和atmega168两个目录,分别对应ATmega8和ATmega168芯片所对应的bootloader(文件扩展名为.hex),在atmega168目录下可以找到ATmegaBOOT_168_diecimila.hex和ATmegaBOOT_168_ng.hex两个文件,分别对应Diecimila和NG模块。你需要根据你的Arduino模块的具体情况,加载相应的bootloader文件。

AVR通过熔丝来控制芯片内部的一些功能,比如JTAG,时钟的使用,掉电检测电压,是否允许调试等。熔丝位的配置是为Arduino下载bootloader过程中最复杂的一步,而且设置出错很有可能导致芯片锁死,所以一定要仔细。选择“Command”菜单中的“Security and Configuration Bits …”命令,打开相应的熔丝设置对话框。

Arduino的bootloader对熔丝位有一定的要求,主要是同外部时间设置相关的。对于串口模块采用的ATmega8来讲,相应的熔丝字节要设置成0xCA(Fuse High Byte)和0xFF(Fuse Low Byte),具体每位的含义可以参见Wolf Paulus的文章。在PonyProg中对ATmega8的熔丝位设置为下图所示:

对于NG和Diecimila采用的ATmega168来讲,相应的熔丝字节要设置成0xF8(Extended Fuse Byte), 0xDF(Fuse High Byte)和0xFF(Fuse Low Byte)。在PonyProg中对ATmega168的熔丝位设置为下图所示:

熔丝位设置好之后,选择“Command”菜单中的“Write All”命令,将bootloader下载到Arduino中。下载过程中Arduino上的发光二极管L会不断闪烁。下载完成之后,我们可以通过Arduino集成开发环境下载一个Arduino工程,来验证新下载的bootloader是否能够正常工作。

No tags

Older posts >>