65.9K
CodeProject 正在变化。 阅读更多。
Home

机器人/嵌入式系统 - 第二部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (13投票s)

2007年2月2日

CPOL

9分钟阅读

viewsIcon

77018

本文是一系列关于嵌入式系统及其应用的第二部分。它将使用 BASIC Stamp II 微控制器来创建一个简单的机器人。

文章系列

引言

本文是介绍嵌入式系统及其在行业中应用的系列文章的第二部分。在本文中,我们将更多地关注 BASIC Stamp II 微控制器及其在我们的机器人项目中的用途。如果您还没有阅读过《机器人/嵌入式系统 第一部分》,请花些时间阅读,以了解机器人和嵌入式系统的可能性。

上图说明了 BASIC Stamp II 微控制器。在接下来的章节中,我们将详细介绍该微控制器,并概述其架构、存在的输入/输出 (I/O) 引脚以及微控制器的指令集。

背景/参考

理解计算机架构和微控制器对这一系列文章是加分项。我将讨论系统设计和微处理器理论概念。另外,一旦我们开始设计机器人电路,一些基本的电子知识也将有所帮助。

BASIC Stamp 微控制器简史

自 1992 年推出以来,BASIC Stamp 微控制器一直被工程师使用。自推出以来,BASIC Stamp 系列微控制器已发展到六种型号和多种物理封装类型。我们将使用 **BASIC Stamp 2e** 微控制器来构建和控制我们的机器人。

下表列出了 **BASIC Stamp II** 微控制器的型号比较。当然,由于一些更高级微控制器的架构不同,指令集也不同,并且在内部处理方式也不同。

微控制器
描述


BASIC Stamp 2e

  • 固件:1.1
  • 芯片:Ubicom SX28AC
  • 处理器速度:20MHz
  • 程序执行速度:约 4,000 条指令/秒
  • RAM 大小:32 字节(6 个 I/O,26 个变量)
  • EEPROM 程序大小:8 x 2K 字节,约 4,000 条指令
  • 电压要求:5-12 vdc
  • 电流消耗(5v):运行 25mA,睡眠 200µA
  • PBASIC 命令:45


BASIC Stamp 2sx

  • 固件:1.1
  • 芯片:Ubicom SX28AC
  • 处理器速度:50MHz
  • 程序执行速度:约 10,000 条指令/秒
  • RAM 大小:32 字节(6 个 I/O,26 个变量)
  • EEPROM 程序大小:8 x 2K 字节,约 4,000 条指令
  • 电压要求:5-12 vdc
  • 电流消耗(5v):运行 60mA,睡眠 500µA
  • PBASIC 命令:45


BASIC Stamp 2p

  • 固件:1.4
  • 芯片:Ubicom SX48AC
  • 处理器速度:20MHz Turbo
  • 程序执行速度:约 12,000 条指令/秒
  • RAM 大小:38 字节(12 个 I/O,26 个变量)
  • EEPROM 程序大小:8 x 2K 字节,约 4,000 条指令
  • 电压要求:5-12 vdc
  • 电流消耗(5v):运行 40mA,睡眠 350µA
  • PBASIC 命令:61


BASIC Stamp 2pe

  • 固件:1.1
  • 芯片:Ubicom SX48AC
  • 处理器速度:8MHz Turbo
  • 程序执行速度:约 6,000 条指令/秒
  • RAM 大小:38 字节(12 个 I/O,26 个变量)
  • EEPROM 程序大小:16 x 2K 字节(16K 用于源代码)
  • 电压要求:5-12 vdc
  • 电流消耗(5v):运行 15mA,睡眠 150µA
  • PBASIC 命令:61


BASIC Stamp 2px

  • 固件:1.0
  • 芯片:Ubicom SX48AC
  • 处理器速度:32MHz Turbo
  • 程序执行速度:约 19,000 条指令/秒
  • RAM 大小:38 字节(12 个 I/O,26 个变量)
  • EEPROM 程序大小:8 x 2K 字节,约 4,000 条指令
  • 电压要求:5-12 vdc
  • 电流消耗(5v):运行 55mA,睡眠 450µA
  • PBASIC 命令:63

我们将使用 BASIC Stamp 2e 作为我们机器人的“大脑”。

BASIC Stamp 微控制器的特性

BASIC Stamp II 微控制器专为广泛的应用而设计。许多需要具有一定智能水平的嵌入式系统的项目都可以使用 BASIC Stamp 模块作为控制器。每个 BASIC Stamp 微控制器都包含一个 BASIC 解释器芯片、内部内存(RAM 和 EEPROM)、一个 5 伏稳压器、一些通用 I/O 引脚(TTL 电平,0-5 伏)以及一组用于数学和 I/O 引脚操作的内置命令。它们能够每秒运行数千条指令,并使用一种简化的、定制的 BASIC 编程语言(称为 PBASIC)进行编程。我们将在本文中介绍一些 PBASIC 命令。在开始构建机器人时,将介绍更多内容。

BASIC Stamp II 架构 - 内存组织

BASIC Stamp II 微控制器有两种内存:**RAM**(用于程序使用的变量)和 **EEPROM**(用于存储程序本身)。EEPROM 也可用于存储长期数据。

BASIC Stamp II 型号拥有 32 字节的变量 RAM 空间。前六个字节保留用于 I/O 引脚的输入、输出和方向控制。剩余的 26 字节可用于通用变量。它还有一个额外的 `INS`、`OUTS` 和 `DIRS` 寄存器,总共有 38 字节的变量 RAM。这些是影子寄存器,可以通过 `AUXIO`、`MAINIO` 和 `IOTERM` 命令在内存映射中切换。下表将显示 RAM 空间的布局。

字名称

字节名称

半字节名称

位名称

特别说明

INS

INL, INH

INA, INB, INC, IND

IN0-IN7, IN8-IN15

输入引脚

OUTS

OUTL, OUTH

OUTA, OUTB, OUTC, OUTD

OUT0-OUT7, OUT8-OUT15

输出引脚

DIRS

DIRL, DIRH

DIRA, DIRB, DIRC, DIRD

DIR0-DIR7, DIR8-DIR15

I/O 引脚方向控制

W0

B0, B1

W1

B2, B3

W2

B4, B5

W3

B6, B7

W4

B8, B9

W5

B10, B11

W6

B12, B13

W7

B14, B15

W8

B16, B17

W9

B18, B19

W10

B20, B21

W11

B22, B23

W12

B24, B25

字变量 `INS` 是独特的,因为它只能读取。`INS` 的 16 位反映了 I/O 引脚 P0 到 P15 的状态。它只能读取,不能写入。`OUTS` 包含 16 个输出锁存器的状态。`DIRS` 控制 16 个 I/O 引脚中每个引脚的方向(输入或输出)。

在 `DIRS` 的特定位中为 0,表示相应引脚为输入;为 1,表示相应引脚为输出。例如,如果 `DIRS` 的第 5 位是 0,而第 6 位是 1,则 I/O 引脚 5 是输入,I/O 引脚 6 是输出。输入引脚可以由 BASIC Stamp II 微控制器外部的电路控制,微控制器无法更改其状态。输出引脚被设置为 `OUTS` 寄存器相应位指示的状态。

当 BASIC Stamp II 通电或复位时,所有内存位置都被清零为 0,因此所有引脚都是输入 (`DIRS = %0000000000000000`)。另外,如果 PBASIC 程序将所有 I/O 引脚设置为输出 (`DIRS = %1111111111111111`),那么由于输出锁存器 (OUTS) 在通电或复位时会被清零为全零,它们将最初输出低电平。

总之,`DIRS` 决定引脚的状态是由外部(输入,0)还是由 `OUTS` 的状态(输出,1)设置。`INS` 始终与 I/O 引脚的实际状态匹配,无论它们是输入还是输出。`OUTS` 包含的位只会出现在 `DIRS` 位设置为输出的引脚上。

如前所述,BASIC Stamp II 模块的内存被组织成 16 个 16 位字。前三个字用于 I/O。剩余的 13 个字可用于通用变量。

使用 PBASIC 为 BASIC Stamp II 微控制器定义变量

在 PBASIC 程序中使用变量之前,必须先声明它们。以下是如何为 BASIC Stamp II 微控制器声明变量的示例:

name VAR Size

其中 `name` 是变量的标识符,`Size` 表示变量的存储位数。

对于 BASIC Stamp II 微控制器,`Size` 参数有四种不同的选择:

  1. Bit (1 位)

  2. Nib (半字节,4 位)

  3. Byte (8 位)

  4. Word (16 位)

变量声明示例

示例声明

Range

myBit VAR BIT

值可以是 0 或 1

myNib VAR NIB

值可以是 0 到 15

myByte VAR BYTE

值可以是 0 到 255

myWord VAR WORD

值可以是 0 到 65535

您还可以定义称为数组的多部分变量。数组是相同大小的变量的集合,共享单个标识符(变量名),但被分成编号的单元,称为元素。在 PBASIC 中定义数组的语法是:

name VAR Size(n)

其中 `Size(n)` 告诉 PBASIC 数组有多少个元素。例如:`myArray VAR BYTE(10)` 将创建一个 10 字节的数组。PBASIC 的另一个独特之处在于,您可以通过仅使用数组名而不使用索引值来引用数组的第 0 个元素。

您还可以使用所谓的 `别名` 作为现有变量的替代名称。例如:

myVar VAR BYTE
myAlias VAR myVar

这意味着两个名称都指向同一个物理内存位置。别名还可以作为进入另一个变量一部分的窗口。这可以通过使用 `修饰符` 来完成。例如:

myWord VAR WORD
highByte VAR myWord.HIGHBYTE
lowByte VAR myWord.LOWBYTE

其中 `HIGHBYTE` 表示最高的 8 位,`LOWBYTE` 表示最低的 8 位。所以,如果 `myWord` 的值是 0001110111110000,那么 `HIGHBYTE` 将包含 00011101,`LOWBYTE` 将包含 11110000。

BASIC Stamp II 微控制器还有一个额外的 RAM,称为 Scratch Pad RAM。大小为 64 字节。Scratch Pad RAM 只能使用 `GET` 和 `PUT` 命令访问,并且不能为其分配变量名。SPRAM 的最高位置(位置 63)是一个特殊的、只读的位置,始终包含特殊的运行时信息。下表是 SPRAM 的内容:

Location

BS2

0 至 62

通用 RAM

63

位 0-3:当前程序槽号。

我们将在下一篇文章中介绍更多 BASIC Stamp II 的指令。

关注点

在过去的几年里,机器人领域引起了极大的兴趣和热情。这是由于更便宜、更先进的微控制器变得可用。然而,在我们看到更多有趣和复杂的应用进入市场之前,还有最后一个领域需要解决。那就是行业标准。我认为微软宣布其 Robotics Studio 是朝着这个方向迈出的一步,从目前来看,行业对此表示热烈欢迎!这将导致与早期个人电脑引入 IBM PC 时发生的现象相同。我认为在未来几年,尤其是在未来十年,机器人领域将取得巨大成就,也许我们可以实现我们童年的一些梦想。行走、说话、思考的机器人,能够造福人类的许多方面。

© . All rights reserved.