MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 ·...

29
MicroMouse102 广州致远电子有限公司 IEEE 国际标准电脑鼠 产品用户手册 Date:2007/08/13 V1.2 ©2007 Guangzhou Zhiyuan Electronics CO., LTD I/29 MiroMouse102 工程样机用户手册 Date: 2007/08/13 V1.2 广州致远电子有限公司 www.embedtools.cn 类别 内容 关键词 电脑鼠、IEEE、走迷宫、机器人 介绍 IEEE 电脑鼠 MiroMouse102 的硬件电路原理、 软件设计方法等。 IEEE 国际标准电脑鼠 User mannual

Transcript of MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 ·...

Page 1: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

I/29

MiroMouse102 工程样机用户手册Date: 2007/08/13 V1.2

广州致远电子有限公司 www.embedtools.cn

类别 内容 关键词 电脑鼠、IEEE、走迷宫、机器人

摘 要 介绍 IEEE 电脑鼠 MiroMouse102 的硬件电路原理、

软件设计方法等。

IEEE 国际标准电脑鼠 User mannual

Page 2: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

II/29

目 录

1. 硬件结构 .............................................................................................................................................1

1.1 简介 ...............................................................................................................................................1 1.2 硬件原理 .......................................................................................................................................2

2. 反射式红外线传感器 .........................................................................................................................9

2.1 反射式红外线传感器设计方案....................................................................................................9 2.2 一体化红外接收头工作原理......................................................................................................10 2.3 检测障碍物的软件设计 .............................................................................................................10

3. 迷宫挡板检测 ...................................................................................................................................12

3.1 原理分析 .....................................................................................................................................12 3.2 调制信号产生 .............................................................................................................................12 3.3 抗干扰处理 .................................................................................................................................13 3.4 软件设计参考 .............................................................................................................................14

4. 电机的调速 .......................................................................................................................................20

4.1 电机的调速 .................................................................................................................................20 4.2 程序设计 .....................................................................................................................................21

5. MICROMOUSE 车速检测 ..............................................................................................................24

5.1 车速检测程序设计 .....................................................................................................................24

6. 使用 JTAG 引脚作 GPIO................................................................................................................26

6.1 使用方法 .....................................................................................................................................26

Page 3: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

1/29

1. 硬件结构

1.1 简介

MicroMouse102 电脑老鼠,采用美国 LuminaryMicro 公司生产的 32 位 ARM CortexM3处理器 LM3S102,控制和检测红外传感器;主 CPU 根据检测到的传感信号,控制电机驱

动电路调整行走路径,直到到达终点。

Page 4: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

2/29

1.2 硬件原理

MicroMouse102 电脑鼠原理图如图 1.1 所示。

图 1.1 MicroMouse102 电脑鼠原理图

IN19

IN21

VCC2

OUT23

NC4

GND5

VS6

OUT17

VREF8

U4TA7291SC150.1u

DP5V0

12 JP7MOTOR1

DP5V0

RWC2

RWC1IN1

9

IN21

VCC2

OUT23

NC4

GND5

VS6

OUT17

VREF8

U3TA7291SC140.1u

DP5V0

12 JP6

MOTOR2

DP5V0

LWC2

LWC1

LEFT WHEELRIGHT WHEEL

DP5V0

1 2 JP1

PB7/nTRST1

PB6/CCP1/C0+2

PB5/C0O3

PB4/C0-4

nRST5

LDO6

VDD7

GND8

OSC09

OSC110

PA0/U0Rx11

PA1/U0Tx12

PA2/SSICLk13

PA3/SSIFss14

PC0/TCK/SWCLK28

PC1/TMS/SWDIO27

PC2/TDI26

PC3/TDO/SWO

25

PB3/I2CSDA24

PB2/I2CSCL23

VDD22

GND21

PB1/32KHz20

PB0/CCP019

GND18

VDD17

PA5/SSITx16

PA4/SSIRx15

U5LM3S101/102

+C13300μF/25V

DP5V0

R1710K

D8RF

Q28050

SEND

INFRAREDIN

R1847

R1910K

DP5V0_INF

OUT1

GND2

VCC3

U6

IR-RX

C16475

INFRAREDOUT2

R1110K

D6RF

Q18050

SEND

INFRAREDIN

R1247

R1310K

DP5V0_INF

OUT1

GND2

VCC3

U2

IR-RX

C6475

INFRAREDOUT1

R2110K

D9RF

Q38050

SEND

INFRAREDIN

R2247

R2310K

DP5V0_INF

OUT1

GND2

VCC3

U7

IR-RX

C17475

INFRAREDOUT3

RWC1

RWC2

LWC2

LWC1

SENDINFRARED

INFRAREDOUT1INFRAREDOUT2INFRAREDOUT3

DP3V3GND

DP3V3GND

GNDDP3V3

12

34

56

78

910

1112

1314

1516

1718

1920

CON1

JTAG

RP110K

RP210K

DP3V3

JTAG_nTRSTJTAG_TDIJTAG_TMSJTAG_TCK

JTAG_TDO

JTAG_nTRST

JTAG_TDIJTAG_TMSJTAG_TCK

JTAG_TDO

Y16M

C718P

C1318P

OSC0

OSC1

OSC0OSC1

nRST

Vin1

GND2

EN3

Vout5

RSN4

U1SP6201

KEY1

RS1

R510K

R1470K

DP5V0

R60

R7470

D3POWERnRST

C12104

C10104

C11475

DP3V3

LDO

C8104C9105

KEY2

KEY3

KEY2

KEY3

KEY2KEY3

LEFT_PULSE

R24200

RIGHT_PULSE

R2510K

DP3V3

LEFT_PULSERIGHT_PULSE

R310kR410k

DP3V3

C4104

C5104

D1LED

R2220

D2LED

R8220

D4LED

R9220

D5LED

R10

220

D7LED

R14

220

DP3V3

JTAG_nTRST

JTAG_TDI

JTAG_TMS

JTAG_TCK

JTAG_TDO

LDO

1

JP2+5V

DP5V0

1

JP11RWC2

1

JP5INFRAREDOUT1

1

JP13INFRAREDOUT2

1

JP8LWC1

1

JP9LW

C2

1

JP3

+3.3V

DP3V3

1

JP12INFRAREDOUT3

1

JP10RW

C1

DP3V3

1

JP4INFRAREDIN

D11PHOTO

D10LED

R26200

R2710K

DP3V3

D13PHOTO

D12LED

R20

200

R15

200R28

200

R16

200

INFRAREDIN

INFRARED

C2475

C3105

C1822u

C1922uC2022u

LX1

GND2

VOUT3

SHDN4

VBATT5

U2

SP6641A-5V

DP3V3

C2122u

L122uH

D141N5819

C22

22u

C23

104 DP5V0_INF

(5V输入)

Page 5: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

3/29

1.2.1 电源电路

电脑鼠的电源采用 4 节 1.5V 的 5 号电池供电,电源插座为 2.54-2T 型插座,如图 1.2所示。

DP5V0

12

JP1+ C1

3300μF/25V

DP5V0(5V输入)

图 1.2 电源接口电路

1.2.2 LDO 和复位电路

LDO 和复位电路如图 1.3 所示。LDO 和复位电路采用 Sipex 公司性价比高的单芯片解

决方案 SP6201EM5-3.3。5V 电源经过 SP6201 可以输出 3.3V 最大 200mA 电流给微处理器

和用户外设供电。SP6201 还有使能输入和 Reset Not 输出引脚,通过这些引脚实现对微处

理器的复位控制。

Vin1

GND2

EN3

Vout 5

RSN 4

U1

SP6201

KEY1

RS1

R510K

R1

470K

DP5V0

R6

0

R7

470

D3POWERnRST

DP3V3

C2475

C3105

图 1.3 LDO 和复位电路

使能(非关断)输入:LDO 通过拉底 EN 管脚关闭,通过拉高 EN 管脚打开。如果不

需要关断 LDO,EN(管脚 3)应连接到 IN(管脚 1),来保持调节器输出在任何时候都有

效。使能阈值为 9V,在整个温度和 VIN 电压范围内的变化不能大于 100mV。使能阈值的

变化总在 100mV 以内。关断电流保证小于 1uA,用户不需要总是将使能管脚拉底(0V)。

标准的 TTL 或 CMOS 电平可使器件从完全运行到完全关闭。 Reset Not(VOUT良好)输出:所有固定输出的版本器件都提供一个 VOUT 良好指示器,

管脚 4(RSN)。这是一个开漏、逻辑输出管脚,当由 VOUT 提供的电压超过规定调节范围

的 4%时,它可用来使微处理器或微控制器保持复位。Reset Not 功能包含一个 1%的滞后,

使得不会因为 LDO 的输出噪声而发出错误的警告。Reset Not 功能在 10~50us 内起作用。

1.2.3 升压电路

升压芯片采用 Sipex 公司的低静态电流、高效率的升压芯片 SP6641A,升压电路如图 1.4 所示。输入电压 3.3V,输出电压 5V。

Page 6: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

4/29

LX 1

GND2 VOUT 3

SHDN4 VBATT5U2

SP6641A-5V

DP3V3

C21

22u

L1

22uH

D141N5819

C22

22u

C23

104

DP5V0_INF

图 1.4 升压电路

1.2.4 JTAG 接口电路

电脑鼠(MicroMouse102)的 JTAG 电路采用 ARM 公司提出的标准 20 脚 JTAG 仿真

调试接口,JTAG 信号的定义及与 LM3S 系列单片机的连接图如图 1.5 所示。

1 23 45 67 89 1011 1213 1415 1617 1819 20

CON1

JTAG

RP110K

RP210K

DP3V3

JTAG_nTRSTJTAG_TDIJTAG_TMSJTAG_TCK

JTAG_TDO

图 1.5 JTAG 接口电路

1.2.5 LED 电路

电脑鼠有 5 个独立的 LED,通过 LM3S 系统单片机的 GPIO 口直接控制,如图 1.6 所示。

电路采用了 I/O 口灌电流的驱动方式来驱动 LED,LM3S 系统单片机的灌电流为 2~8mA(可配置),所以不需要驱动就可以点亮 LED。GPIO 引脚输出高电平时 LED 熄灭,低电

平时 LED 点亮。

Page 7: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

5/29

D1 LED R2

220

D2 LED R8

220

D4 LED R9

220

D5 LED R10

220

D7 LED R14

220

DP3V3

JTAG_nTRST

JTAG_TDI

JTAG_TMS

JTAG_TCK

JTAG_TDO

图 1.6 LED 电路

1.2.6 独立按键电路

电脑鼠设计有 2 路独立的输入按键,都直接输入到 CPU 的 GPIO 输入引脚,如图 1.7所示。当按键未按下时,由于 R3、R4 上拉电阻的作用,CPU 检测到引脚为高电平;当按

键按下时,CPU 检测到引脚为低电平。

KEY2

KEY3

KEY2

KEY3

R310k

R410k

DP3V3

C4 104

C5 104

图 1.7 独立按键电路

1.2.7 电机驱动电路

电机采用直流减速电机,最高输出转速为 800 转/分钟,工作电压为 DC3V。电机驱动

电路采用专用的单相直流电动机桥式驱动芯片,如图 1.8 所示。

Page 8: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

6/29

IN1 9

IN2 1

VCC 2

OUT2 3

NC 4

GND 5

VS 6

OUT1 7

VREF 8

U4

TA7291S C150.1u

DP5V0

12

JP7

MOTOR1

DP5V0

RWC2

RWC1IN1 9

IN2 1

VCC 2

OUT2 3

NC 4

GND 5

VS 6

OUT1 7

VREF 8

U3

TA7291S C140.1u

DP5V0

12

JP6

MOTOR2

DP5V0

LWC2

LWC1

LEFT WHEEL RIGHT WHEEL

图 1.8 电机驱动电路

TA7291S 是 TOSHIBA 公司生产的单相直流电动机桥式驱动芯片,工作电压 4~20 伏,

最大输出电流 400mA。电动机驱动由输入端 IN1 和 IN2 控制,控制方法如表 1.1 所示。

表 1.1 电机控制

IN1 IN2 OUT1 OUT2 电动机工作模式

0 0 ∞ ∞ 停止,待机(STOP)

1 0 H L 正转(CW)

0 1 L H 反转(CCW)

1 1 L L 刹车(BREAK)

注:电机的正转和反转与 OUT1 和 OUT2 与直流电机的接线有关,这里主要是相对的。

1.2.8 车速检测电路

车速检测用于检测并记录车体运行的路径,通过车速检测记录车体做迷宫的坐标,同

时也起到控制车速和保持左右双轮的速度一致。 检测原理:在左轮和右轮的内则都贴有的光电码盘,码盘由两种颜色组成白色和黑色。

红外发射管安装在车轮光电检测码盘的检测区域,当红外发射与接收管正对着黑色边时,

红外线没有被反射,接收管的电阻很大;当红外发射与接收管正对着白色边时,红外线被

反射,接收管的电阻很小。检测电路如图 1.9 所示。

R24200

R2510K

DP3V3

LEFT_PULSE RIGHT_PULSE

D11PHOTO

D10LED

R26200

R2710K

DP3V3

D13PHOTO

D12LED

图 1.9 车速检测电路

Page 9: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

7/29

在图 1.9 的检测电路中,红外发射与接收管正对着黑色边时,PULSE 输出高电平;正

对着白色边时,PULSE 输出低电平;从黑色边到白色边,PULSE 输出一个下降沿信号;

从白色边到黑色边,PULSE 则输出一个上升沿信号。 LM3S102 单片机可以检测输出脉冲的下降沿信号判断车轮转到的角速度,当检测到

13 个下降沿信号时,轮子转动了一圈。

1.2.9 红外检测电路

红外检测电路是用于迷宫挡板的检测,分为左侧、右侧、前方三个方向,三个方向的

检测原理相同,某一个方向的检测电路如图 1.10 所示。

INFRAREDIN

R2110K D9

RF

Q38050

SEND

INFRAREDIN

R2247

R2310K

DP5V0_INF

OUT1

GND2

VCC3

U7

IR-RX

C17

475

INFRAREDOUT3 R28

200

R16INFRARED

C20

22u

图 1.10 红外检测电路

U7(IR-RX)为一体式红外线接收传感器,当连续收到 38KHz(INFRAREDIN)的红

外线信号时,将产生脉宽 10ms 左右的低电平。如果没有收到信号,便立即输出高电平。 Send 为发射控制端,高电平时发射 38KHz 的红外信号。Out(INFRAREDOUT3)为

接收输出端,低电平表示收到信号。 R16 为发射端的限流电阻,起保护 Q3 管作用;R28 为接收端的限流电阻,防止过大

的 I/O 端口电压,起保护 LM3S 系统单片机的 I/O 口作用。

1.2.10 CPU 及晶振电路

电脑鼠的单片机、晶体振荡器和LDO输出原理如图 1.11所示。该单片机选用LM3S102微处理器。

Page 10: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

8/29

PB7/nTRST1

PB6/CCP1/C0+2

PB5/C0O3

PB4/C0-4

nRST5

LDO6

VDD7

GND8

OSC09

OSC110

PA0/U0Rx11

PA1/U0Tx12

PA2/SSICLk13

PA3/SSIFss14

PC0/TCK/SWCLK 28

PC1/TMS/SWDIO 27

PC2/TDI 26

PC3/TDO/SWO 25

PB3/I2CSDA 24

PB2/I2CSCL 23

VDD 22

GND 21

PB1/32KHz 20

PB0/CCP0 19

GND 18

VDD 17

PA5/SSITx 16

PA4/SSIRx 15

LM3S101/102

RWC1

RWC2LWC2

LWC1

SENDINFRARED

INFRAREDOUT1INFRAREDOUT2INFRAREDOUT3

DP3V3GND

DP3V3GND

GNDDP3V3

JTAG_nTRST

JTAG_TDIJTAG_TMSJTAG_TCK

JTAG_TDO

Y16M

C7 18P

C13 18P

OSC0

OSC1

OSC0OSC1

nRST

C12104

C10104

C11475

DP3V3

LDO

C8104

C9105

KEY2KEY3

LEFT_PULSE

RIGHT_PULSE

LDO

图 1.11 CPU 及晶振电路

LM3S102 微处理器有 3 组电源输入引脚,用于多点输入和多点接地,这样提高了微处

理器的抗干扰能力。对于每一组电源都接了 0.1uF 的高频电容,起到高频旁路作用;接一

个 475 的电容是为了使 DP3V3 电源更稳定。 LDO 输入引脚接了一个 0.1uF 的高频旁路电容和 1uF 的滤波电容,可输出稳点的 2.5~

2.75V 电压。 晶体振荡器标配 6.000MHz 的石英晶振,晶振引脚是经过连接器与微处理器连接,可

方便地更换晶振。

Page 11: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

9/29

2. 反射式红外线传感器

2.1 反射式红外线传感器设计方案

反射式红外传感器探测障碍物的原理参见图 2.1 所示,发射管与接收管平行同向安装,

接收管只能接收到发射回来的红外线信号。发射管向外发射红外线后,如果在有效距离范

围内存在反射表面,则反射回来的信号将会被检测到。如果不存在反射表面或则反射表面

距离太远,接收传感器将不能检测到信号。

图 2.1 反射式红外线传感器探测原理

方案一:不调制的反射式红外发射-接收器。由直流电直接驱动红外管发光,这样电路

简单,成本较低。但由于所有物体只要温度高于零摄氏度,都会向外发送红外线,且太阳

光和日光灯中最强,所以该很容易受到外界干扰。驱动电路如图 2.2 所示。

图 2.2 不调制的反射式红外发射-接收电路

方案二:脉冲调制的反射式红外发射-接收传感器。考虑到环境干扰主要是直流分量,

如果采用带有交流分量的调制信号,在平均电流不变的情况下,瞬时电流可以很大,这样

也大大提高了信噪比,可以有效避免外界环境变化对系统检测精度的影响。 电路原理图如图 2.3 所示,由可调电阻 R1,红外线发光管 D1 和三极管 Q1 构成的电

路为红外线发射电路。R1 可以调节红外线发光管的发光强度,Q1 起驱动作用。 在接收电路中,U1 为一体式红外线接收传感器 IRM8601S,,它内部集成自动增益控

制电路、带通滤波电路、解码电路及输出驱动电路。但由于它是开漏输出,所以输出端需

接一个上拉电阻,见图 2.3 中的 R3。其中 R2 是限流电阻,C1 滤出电源高频干扰。

发射

接收

Page 12: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

10/29

Send

Pulse

D1RF

Q1

8050

RP1

10K R310K

C2475

R247

VCC

OUTR1

270

OUT1

GND2

VCC3

U1

IRM8601

C1

104

图 2.3 电路原理图

2.2 一体化红外接收头工作原理

一体式红外线接收传感器 IRM8601S,它内部集成自动增益控制电路、带通滤波电路、

解码电路及输出驱动电路。当连续收到 38KHz 的红外线信号时,将产生脉宽 10ms 左右的

低电平。如果没有收到信号,便立即输出高电平。如图 2.4 所示,Send 为发射控制端,高

电平时发射 38KHz 的红外信号。Out 为接收输出端,低电平表示收到信号。

图 2.4 波形图

2.3 检测障碍物的软件设计

根据接收头是否检测到经过反射的红外线信号,就可以判断是否存在障碍物。由于接

收头检测到信号时只产生一个负脉冲,所以只需要在检测时使能红外线发射,一次检测结

束后使能无效,程序设计参考流程图如图 2.5 所示。

Page 13: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

11/29

图 2.5 程序流程图

接收头有一定的

响应时间

开始发送 38KHz

的红外线

Page 14: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

12/29

3. 迷宫挡板检测

3.1 原理分析

Micromouse 中文名为“电脑鼠”,电脑鼠在迷宫中行进时是靠侦测路面情况前进的。

它的左右传感器不但要检测是否存在支路(没有挡板就是一条支路)还要避免和挡板碰触。

因此电脑鼠每一侧在正常情况就需要两组红外传感器,一组检测稍微远一点的距离,判断

是否存在支路,一组检测稍微近一点的距离,判断是否即将碰触挡板。 由此看出,电脑鼠每侧都需要两组传感器,但是如果只用一组传感器来完成两个参数

的检测是否可行呢?我们知道,如果使用非调制的普通红外接收头,就可以根据接收到的

信号的强弱来计算距离,可是非调制的抗干扰差,但是如果使用调制的一体化接收头,检

测信号输出的是数字信号,这样通过检测传感器输出信号的强弱来计算距离的方法肯定行

不通,但还有没有其他方法可以实现距离的测量呢?答案是肯定的。 把上面测距的原理反过来,我们可以通过改变发射出的接收传感器能够识别的信号强

度,当接收头刚好能接收到信号时,记录下此时发射的强度,这样也就可以大致测算出距

离。 改变输出接收传感器所能识别信号的强度的方法有两种: 1. 改变输出信号的能量,改变输出信号的能量又有两种方法:

改变输出信号的幅度,如图 2.3 所示,改变 Send 端的输出电压或调节可调电

阻 R1 的阻值就可以实现 改变输出信号的占空比,如图 2.3 所示,改变输出的 38KHz 信号的占空比就

可以实现 2. 改变输出信号的频率,由于一体化接收头是 38KHz 的带通滤波器,所以发射信号

的频率偏离 38KHz 越多,能检测到的有效信号就越少。这样也就可以改变有效发射信号的

强度。

如果通过改变输出信号的幅度,就需要还需要一个 D/A 转换器或手动调节 R1,这样

要不增加了成本要不不适用于自动控制。如果通过改变占空比的方式就需要使用 PWM 功

能,但 PWM 功能已经被驱动小车的电机占用,所以只能通过改变输出信号的频率来实现

测距,这样只需要一个定时器就可以完成功能。

3.2 调制信号产生

本设计中采用定时器 1 产生 38KHz 的调制信号,由 PB5 输出,该端口连接到图 2.3 中

的 Pulse 端口。在中断中翻转 PB5 输出信号,所以要产生频率为 f 的脉冲,定时器的频率

要为 2f。在本设计中要产生 38KHz 的频率,定时器中断频率为 76KHz。

程序清单 3.1 为定时器 1 的初始化函数,程序清单 3.2 为中断服务函数,在这里翻转

PB5 口输出状态。

程序清单 3.1 定时器 1 初始化

void PULSEIni(void)

{

GPIODirModeSet(GPIO_PORTB_BASE, SEND | PULSE, GPIO_DIR_MODE_OUT); // 设置为输

Page 15: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

13/29

GPIOPinWrite( GPIO_PORTB_BASE,SEND | PULSE,0); // 红外线初始时停止发射

SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER1 ); // 使能定时器 1 外设

TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER); // 设置定时器 1 为周期触发

TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/76000); // 设置定时器装载值

TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);

TimerEnable(TIMER1_BASE, TIMER_A);

IntEnable(INT_TIMER1A);

}

程序清单 3.2 定时器 1 服务函数

void Timer1A_ISR(void)

{

TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器 1 中断

GPIOPinWrite(GPIO_PORTB_BASE, PULSE,GPIOPinRead(GPIO_PORTB_BASE, PULSE) ^ PULSE);

// 翻转 GPIO B5 端口

}

3.3 抗干扰处理

红外线在空气中传播和反射受外界的干扰,如果测量距离刚好处在能够检测到信号的

临界状态,保持距离不变,传感器输出信号也可能不确定。这样就需要在软件中进行抗干

扰处理。参考程序如程序清单 3.3 所示。

程序清单 3.3 抗干扰处理程序

GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND); // 发送脉冲

Delay(150); // 延时

for(i=0,j=0;i<10;i++) // 检测接收信号

{

if(GPIOPinRead(GPIO_PORTA_BASE, OUT_L)==0)

j++;

}

GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND); // 停止发送

if(j>5) // 左边存在挡板

{

}

else // 左边存在支路

{

}

图 3.1 为抗干扰程序在 Micromouse 中运行后用逻辑分析仪抓到的波形图,Pulse 为

38KHz 的输出信号,Send 高电平有效,有效时发送红外线脉冲,OUT 为一体化接收头输

……

……

Page 16: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

14/29

出端,该图所示为接收头探测到障碍物,软件在 Send 信号无效(下降沿)前完成检测 OUT输出信号,从图中可以看出,此时正处于 OUT 有效信号的中间,所以软件里延时参数能

保证正确检测到信号。

图 3.1 传感器检测波形图

3.4 软件设计参考

图 3.2 为用一组红外实现两组参数(是否存在挡板和是否太接近挡板)的检测流程图。

在 Micromouse 中,用到了三组(左、前、右)反射式红外检测传感器,左边和右边的传

感器各自都需要检测两组参数,而前方的传感器只需要探测有无挡板,存在挡板就必须根

据策略转换行进方向,若不存在就可以继续前进。如图 3.3 所示为 Micromouse 红外检测的

程序设计流程图。红外检测参考程序见程序清单 3.4 所示,该程序中使用了五个 LED 用来

指示传感器检测的状态,由于这几个LED硬件上连接到 JTAG,关于如何切换GPIO和 JTAG功能参见 6 使用 JTAG 引脚作 GPIO。

Page 17: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

15/29

图 3.2 探测远近两个参数的流程图

图 3.3 Micromouse 红外检测流程图

此频率仅作为参考,要

根据实际检测距离来确定。

结合可调电阻 R1 变可

以实现挡板和防碰撞的检

测。

Page 18: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

16/29

程序清单 3.4 Micromouse 红外检测函数

//--------------------------------------------------------------------------------------------------------------------------------------

--

// 函数名称: Check_Infrared

// 函数功能: 红外检测函数

// 入口参数: option,选择检测的参数。

// 0,检测所有参数

// 1,检测左侧挡板

// 2,检测前方挡板

// 3,检测右侧挡板

// 4,检测左侧安全距离

// 5,检测右侧安全距离

// 出口参数: State,反应传感器状态。State 每四位代表一个参数状态。从左至右 20 位(0xXXXXX)分别

// 表示五个参数:左侧远距,左侧近距,前方,右侧近距,右侧远距。如值为 0x11100 表示左侧有挡板,

// 且太靠近左侧挡板,前方有挡板,右方没有挡板。

//--------------------------------------------------------------------------------------------------------------------------------------

--

unsigned long Check_Infrared(unsigned char option)

{

unsigned long State = 0;

unsigned char j = 0,i = 0;

if(option == 4 || option == 5) // 如果只需测近距,直接跳到装载定时器为 35KHz 的程序处

goto jinju;

TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/76000); // 设置定时器装载值

if(option==0||option==1)

{

GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND); // 发送调制脉冲

Delay(150);

GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND); // 停止发送调制脉冲

for(i=0,j=0;i<10;i++) // 传感器输出信号检测

{

if(GPIOPinRead(GPIO_PORTA_BASE, OUT_L)==0)

j++;

}

if(j>5) // 左边存在挡板

{

if(option == 1) // 只测此一个参数

return 1; // 直接返回

GPIOPinWrite(GPIO_PORTC_BASE, DLL, 0); // 点亮指示灯 DLL

State |= 1 << 16;

}

else // 左边存在支路

{

Page 19: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

17/29

if(option == 1)

return 0;

GPIOPinWrite(GPIO_PORTC_BASE, DLL, DLL); // 熄灭指示灯 DLL

State |= 0 << 16;

}

}

if(option==0||option==2)

{

GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);

Delay(150);

GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);

for(i=0,j=0;i<10;i++)

{

if(GPIOPinRead(GPIO_PORTA_BASE, OUT_F)==0)

j++;

}

if(j>5) // 前面存在挡板

{

if(option == 2)

return 1;

GPIOPinWrite(GPIO_PORTC_BASE, DF, 0); // 点亮指示灯 DF

State |= 1 << 8;

}

else // 前面没有挡板

{

if(option == 2)

return 0;

GPIOPinWrite(GPIO_PORTC_BASE, DF, DF); // 熄灭指示灯 DF

State |= 0 << 8;

}

}

if(option==0||option==3)

{

GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);

Delay(150);

GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);

for(i=0,j=0;i<10;i++)

{

if(GPIOPinRead(GPIO_PORTA_BASE, OUT_R)==0)

j++;

}

if(j>5) // 右边存在挡板

{

if(option == 3)

Page 20: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

18/29

return 1;

GPIOPinWrite(GPIO_PORTB_BASE, DRR, 0); // 点亮指示灯 DRR

State |= 1 << 0;

}

else // 右边存在支路

{

if(option == 3)

return 0;

GPIOPinWrite(GPIO_PORTB_BASE, DRR, DRR); // 熄灭指示灯 DRR

State |= 0 << 0;

}

}

jinju:

TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet()/70000); // 设置定时器装载值

if(option == 0||option == 4)

{

GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);

Delay(150);

GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);

for(i=0,j=0;i<10;i++)

{

if(GPIOPinRead(GPIO_PORTA_BASE, OUT_L)==0)

j++;

}

if(j>8) // 左边太靠近挡板,应向右调

{

if(option == 4)

return 1;

GPIOPinWrite(GPIO_PORTC_BASE, DL, 0); // 点亮指示灯 DL

State |= 1 << 12;

}

else // 左边正常

{

if(option == 4)

return 0;

GPIOPinWrite(GPIO_PORTC_BASE, DL, DL); // 熄灭指示灯 DL

State |= 0 << 12;

}

}

if(option ==0 || option == 5)

{

GPIOPinWrite( GPIO_PORTB_BASE,SEND , SEND);

Delay(150);

Page 21: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

19/29

GPIOPinWrite( GPIO_PORTB_BASE,SEND , ~SEND);

for(i=0,j=0;i<10;i++)

{

if(GPIOPinRead(GPIO_PORTA_BASE, OUT_R)==0)

j++;

}

if(j>8) // 右边太靠近挡板,应向左调

{

if(option == 5)

return 1;

GPIOPinWrite(GPIO_PORTC_BASE, DR, 0); // 点亮指示灯 DR

State |= 1 << 4;

}

else // 右边正常

{

if(option == 5)

return 0;

GPIOPinWrite(GPIO_PORTC_BASE, DR, DR); // 熄灭指示灯 DR

State |= 0 << 4;

}

}

return(State); // 返回

}

Page 22: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

20/29

4. 电机的调速

4.1 电机的调速

直流电机的转速控制在本设计中通过PWM来控制,LM3S102单片机则刚有两路PWM输出,非常适合用于控制两个电机的转速。

两路 PWM 是 LM3S102 通用定时器 0(Timer0)的三种工作模式之一,16 位 PWM 模

式。该模式是将一个 32 位的定时器,折分成两个 16 位的定时器 TimerA 和 TimerB。这些

定时器为计数寄存器(GPTMTnR)递减计数,递减到 0 时自动加载预装载值(GPTMTnILR)。当然预装载值也是由用户设定,该直也就决定了定时周期,也即 PWM 的输出周期。

当计数器的值与预装载值相等时,输出 PWM 信号有效,当计数器的值与匹配寄存器

(GPTMnMATCHR)的值相等时,输出 PWM 信号失效。通过软件可以设定 PWM 输的信

号有效和信号无效的电平状态。当 GPTMCTL 寄存器的 TnPWML 位值为 0 时,信号有效

为高电平,信号无效为低电平;TnPWML 位值为 1 时,则反之。如图 4.1 所示。

输出信号

计数

0x411A

0xC350

TnPWML=0

TnPWML=1

TnEN置位

GPTMTnR=GPTMnMR GPTMTnR=GPTMnMR

时间

图 4.1 16 位 PWM 模式输出

占空比的约定:占空比为在一个周期内,输出有信号有效电平占整个周期时间的比率。

在这里为以统一软件控制的约定,用户 API 函数输入的占空比值越大,电机转速越快,正

向运行和反向运行都一样。 为了简化占空比输出的计算,将计数寄存器与匹配寄存器值相等时,输出的电平信号

为驱动电机的有效信号。例如将 PWM 周期时间设定为 60000 个时钟节拍,需要输出驱动

电机的占空比为 75%,则设置匹配寄存器值为 75*6000。 由于电机的转向不一样,所以电机驱动的有效电平也需要调整,通过控制 TnPWML实现。

Page 23: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

21/29

4.2 程序设计

Timer0 的两路 16 定时器 TimerA 和 TimerB 的 PWM 输出引脚分别为 PB0 和 PB6,PB0和 PB6 分别控制左轮和右轮驱动器 TA7291S 的 IN1 引脚,而它们的 IN2 引脚分别由 GPIO输出的 PA4 和 PA5 控制。 左轮的控制函数如程序清单 4.1 所示。 该函数的第 1 个参数 sel 为选择轮子的控制方式:0 为停止,1 为轮子向前,2 为轮子

向后;percen 参数为占空比,其最大值为 99,最小值为 1,对于轮子的停止控制该参数无

效。

程序清单 4.1 左轮控制函数

void LeftWheelRun(int sel,unsigned char percen)

{

switch(sel)

{

/*轮子停止转动*/

case 0:

TimerDisable(TIMER0_BASE,TIMER_A); // 禁止定时器

GPIOPinWrite(GPIO_PORTA_BASE,LWC2,0xff); // 控制引脚输出高电平

GPIODirModeSet(GPIO_PORTB_BASE, LWC1, GPIO_DIR_MODE_OUT); // GPIO 输出

GPIOPinWrite(GPIO_PORTB_BASE,LWC1, 0xff); // GPIO 输出高电平

break;

/*左轮向前*/

case 1:

GPIOPinWrite(GPIO_PORTA_BASE,LWC2, 0xff); // PA4 输出高电平

TimerControlLevel(TIMER0_BASE,TIMER_A,true); // PWM 有效电平方向

GPIODirModeSet(GPIO_PORTB_BASE, LWC1, GPIO_DIR_MODE_HW); // PWM 输出

TimerMatchSet(TIMER0_BASE,TIMER_A,percen*600); // 设置占空比

TimerEnable(TIMER0_BASE,TIMER_A); // 使能定时器

break;

/*左轮向后*/

case 2:

GPIOPinWrite(GPIO_PORTA_BASE,LWC2, 0); // PA4 输出低电平

TimerControlLevel(TIMER0_BASE,TIMER_A,false); // PWM 有效电平方向

GPIODirModeSet(GPIO_PORTB_BASE, LWC1, GPIO_DIR_MODE_HW); // PWM 输出

TimerMatchSet(TIMER0_BASE,TIMER_A,percen*600); // 设置占空比

TimerEnable(TIMER0_BASE,TIMER_A); // 使能定时器

break;

}

Page 24: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

22/29

}

右轮的控制函数如程序清单 4.2 所示。 该函数的第 1 个参数 sel 为选择轮子的控制方式:0 为停止,1 为轮子向前,2 为轮子

向后;percen 参数为占空比,其最大值为 99,最小值为 1,对于轮子的停止控制该参数无

效。

程序清单 4.2 右轮控制函数

void RightWheelRun(int sel,unsigned char percen)

{

switch(sel)

{

/*轮子停止转动*/

case 0:

TimerDisable(TIMER0_BASE,TIMER_B); // 禁止定时器

GPIOPinWrite(GPIO_PORTA_BASE,RWC2,0xff); // 控制引脚输出高电平

GPIODirModeSet(GPIO_PORTB_BASE, RWC1, GPIO_DIR_MODE_OUT); // GPIO 输出

GPIOPinWrite(GPIO_PORTB_BASE,RWC1,0xff); // GPIO 输出高电平

break;

/*右轮向后*/

case 2:

GPIOPinWrite(GPIO_PORTA_BASE,RWC2, 0xff); // PA4 输出高电平

TimerControlLevel(TIMER0_BASE,TIMER_B,true); // PWM 有效电平方向

GPIODirModeSet(GPIO_PORTB_BASE, RWC1, GPIO_DIR_MODE_HW); // PWM 输出

TimerMatchSet(TIMER0_BASE,TIMER_B,percen*600); // 设置占空比

TimerEnable(TIMER0_BASE,TIMER_B); // 使能定时器

break;

/*右轮向前*/

case 1:

GPIOPinWrite(GPIO_PORTA_BASE,RWC2, 0); // PA4 输出低电平

TimerControlLevel(TIMER0_BASE,TIMER_B,false); // PWM 有效电平方向

GPIODirModeSet(GPIO_PORTB_BASE, RWC1, GPIO_DIR_MODE_HW); // PWM 输出

TimerMatchSet(TIMER0_BASE,TIMER_B,percen*600); // 设置占空比

TimerEnable(TIMER0_BASE,TIMER_B); // 使能定时器

break;

}

}

需要注意的是,当 PWM 信号禁止后,其输出引脚的电平状态是保持静止时的状态(可

能为低电平也可能为高电平),导致电机可能不能停止,所以在制停电机时,需要将 PWM引脚改为 GPIO 输出,并且出高电平,使电机刹车停止。 定时器 PWM 初始化函数如程序清单 4.3 所示。

程序清单 4.3 定时器 PWM 初始化

Page 25: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

23/29

void PWMTimer0AIni(void)

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); // 使能定时器 0 模

GPIODirModeSet(GPIO_PORTB_BASE, LWC1|RWC1 , GPIO_DIR_MODE_OUT);

/* 控制引脚输出*/

GPIOPinWrite(GPIO_PORTB_BASE, LWC1|RWC1 , 0xff); // GPIO 输出高电

GPIODirModeSet(GPIO_PORTA_BASE, LWC2|RWC2 , GPIO_DIR_MODE_OUT); // 控制引脚输出

GPIOPinWrite(GPIO_PORTA_BASE, LWC2|RWC2 , 0xff); // GPIO 输出高电

/* 定时器配置*/

TimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR

|TIMER_CFG_A_PWM|TIMER_CFG_B_PWM); // 16 位 PWM 输出

TimerControlLevel(TIMER0_BASE,TIMER_A,false); //有效信号为低电

TimerControlLevel(TIMER0_BASE,TIMER_B,false);

TimerLoadSet(TIMER0_BASE,TIMER_A,60000); // 设定 PWM 频率

TimerLoadSet(TIMER0_BASE,TIMER_B,60000);

}

Page 26: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

24/29

5. Micromouse 车速检测

5.1 车速检测程序设计

本设计中选用了 LM3S102 的 PA0 和 PB1 分别检测左轮和右轮的下降沿的脉冲个数,

为了快速向应检测信号,使用了下降沿触发中断。LM3S102 单片机的特点,任何一个 GPIO引脚都可以配置为中断输入,并且可以作任意设定为高电平触发、低电平触发、下降沿触

发、上升沿触发和上升或下降沿触发 5 种模式。本应用中使用下降沿触发,其初始化如程

序清单 5.1 所示。

程序清单 5.1 轮子脉冲检测初始化

void WheelPulseIni(void)

{

// 配置引脚为输入

GPIODirModeSet(GPIO_PORTA_BASE, PULSE_R, GPIO_DIR_MODE_IN);

GPIODirModeSet(GPIO_PORTB_BASE, PULSE_L, GPIO_DIR_MODE_IN);

// 配置引脚下降沿触发中断

GPIOIntTypeSet(GPIO_PORTA_BASE,PULSE_R,GPIO_FALLING_EDGE);

GPIOIntTypeSet(GPIO_PORTB_BASE,PULSE_L,GPIO_FALLING_EDGE);

// 使能引脚输入中断

GPIOPinIntEnable(GPIO_PORTA_BASE,PULSE_R);

GPIOPinIntEnable(GPIO_PORTB_BASE,PULSE_L);

// 使能 GPIO PA 口和 GPIO PB 口中断

IntEnable(INT_GPIOA);

IntEnable(INT_GPIOB);

}

左右轮检测脉冲中断处函数如程序清单 5.2 所示。

程序清单 5.2 左右轮检测脉冲中断处函数

//------------------------------------------------------------------------------------

// 函数名称: GPIO_Port_A_ISR

// 函数功能: 右轮检测脉冲中断处函数

//------------------------------------------------------------------------------------

void GPIO_Port_A_ISR (void)

{

unsigned char IntStatus;

IntStatus = GPIOPinIntStatus(GPIO_PORTA_BASE,true); // 读 PA 口中断状态

if(IntStatus&PULSE_R) // 是否为左轮脉冲中断

{

PulCount_R++;

if(PulCount_R >= RightPulse)

{

RightWheelRun(0, 1);

Page 27: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

25/29

WheelStop_R= 1;

}

GPIOPinIntClear(GPIO_PORTA_BASE,PULSE_R); // 清中断

}

}

//------------------------------------------------------------------------------------

// 函数名称: GPIO_Port_B_ISR

// 函数功能: 左轮检测脉冲中断处函数

//------------------------------------------------------------------------------------

void GPIO_Port_B_ISR (void)

{

unsigned char IntStatus;

IntStatus = GPIOPinIntStatus(GPIO_PORTB_BASE,true); // 读 PA 口中断状态

if(IntStatus&PULSE_L) // 是否为右轮脉冲中断

{

PulCount_L++;

if(PulCount_L>= LeftPulse)

{

WheelStop_L= 1;

LeftWheelRun(0, 1);

}

GPIOPinIntClear(GPIO_PORTB_BASE,PULSE_L); // 清中断

}

}

Page 28: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

26/29

6. 使用 JTAG 引脚作 GPIO

由于 LM3S102 管脚资源有限,我们需要使用 PB7 和 PC0~3 做 GPIO 使用,并且可以

从 GPIO 功能转换为 JTAG 引脚功能。该五个引脚都分别与 LED 相连,LED 可以在程序调

试时做指示灯使用。需要特别注意的是,该五个引脚若无法恢复 JTAG 功能,则该芯片无

法再次编程。

6.1 使用方法

使用 GPIODirModeSet()很轻易地将 PB7 和 PV3~0 引脚设置为 GPIO 的输入/输出和

JTAG 功能,系统复位后这几个引脚恢复默认的 JTAG 功能,所以程序只需要解决怎样使这

些引脚在 GPIO 和 JTAG 功能间互换。 在程序清单 6.1 中,是通过上电或复位后首先检测 KEY2 引脚,如果按键有效则进入

死循环,这些引脚则保持 JTAG 功能。否则这些引脚被设置为 GPIO 功能,并继续执行主

程序。 所以要使这些引脚作为 JTAG 功能,首先按住 KEY2 键,然后复位。要使 MCU 复位

后设置这些引脚为 GPIO 口且可以继续执行 flash 内的程序,则在复位时放开 KEY2。

程序清单 6.1 JTAG 引脚作 GPIO

//PB

#define KEY2 GPIO_PIN_3

#define DRR GPIO_PIN_7

//PC

#define DLL GPIO_PIN_3

#define DL GPIO_PIN_0

#define DF GPIO_PIN_1

#define DR GPIO_PIN_2

main()

{

SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB ); // 使能 GPIO B 口外设

SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOC ); // 使能 GPIO C 口外设

GPIODirModeSet(GPIO_PORTB_BASE, KEY2, GPIO_DIR_MODE_IN);

if(GPIOPinRead(GPIO_PORTB_BASE, KEY2)==0) // 如果按下 KEY2 就进入

JTAG

{

while(1);

}

/* 把五个 JTAG 口设置为 GPIO 输出口 */

GPIODirModeSet(GPIO_PORTC_BASE, DLL | DL | DF | DR, GPIO_DIR_MODE_OUT);

GPIODirModeSet(GPIO_PORTB_BASE, DRR , GPIO_DIR_MODE_OUT);

Page 29: MicroMouse102 - SJTUice.sjtu.edu.cn/kc/2008/G03/software/MicroMouse102_8_21.pdf · 2008-07-07 · ta7291s c15 0.1u dp5v0 1 2 jp7 motor1 dp5v0 rwc2 rwc1 in1 9 in2 1 vcc 2 out2 3 nc

MicroMouse102广州致远电子有限公司

IEEE 国际标准电脑鼠

产品用户手册 Date:2007/08/13

V1.2

©2007 Guangzhou Zhiyuan Electronics CO., LTD

27/29

while(1)

{

}

}

……

……