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






4.79/5 (13投票s)
本文是一系列关于嵌入式系统及其应用的第二部分。它将使用 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 作为我们机器人的“大脑”。
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` 参数有四种不同的选择:
-
Bit (1 位)
-
Nib (半字节,4 位)
-
Byte (8 位)
-
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 时发生的现象相同。我认为在未来几年,尤其是在未来十年,机器人领域将取得巨大成就,也许我们可以实现我们童年的一些梦想。行走、说话、思考的机器人,能够造福人类的许多方面。