文档库 最新最全的文档下载
当前位置:文档库 › 3M调试说明书

3M调试说明书

3M调试说明书
3M调试说明书

=============================================================================================================================================================调试说明书

———基于3M人形机器人

目录

一.系统概述 (3)

1.1. 舵机与机器人 (3)

1.2. 舵机的基本认识 (3)

1.3. 舵机PWM信号介绍 (4)

1.3.1 PWM信号定义 (4)

1.3.2 PWM信号控制精度制定 (5)

二. 控制系统硬件定义 (6)

2.1. STC控制板简介 (6)

2.2. 机器人机体简介 (7)

2.3. 连接关系说明 (9)

三. 开发软件介绍 (12)

3.1. KEIL C (12)

3.2. STC_ISP_V3.5 (13)

四. 语言程序架构解析 (15)

4.1. C语言嵌入汇编 (15)

4.2. 汇编语言被嵌入的说明 (15)

4.3. KEIL C下的具体操作步骤 (15)

4.3.1 在KEIL C下建立工程(project) (15)

4.3.2 选择开发芯片类型 (16)

4.3.3 添加程序文件到工程 (16)

4.3.4 设置工程属性 (17)

4.4. C的底层函数说明 (20)

4.5. C的编程说明 (22)

五. 遇到的问题及解决方法 (23)

A&Q (23)

一.系统概述

1.1. 舵机与机器人

我们都知道,机器人有许多个关节,每一个关节我们称为一个自由度。一般的机体,都有十几个自由度,这样才能够保证动作的灵活性。在机器人机体上,我们通常使用舵机作为每一个关节的连接部分。它可以完成每个关节的定位和运动。舵机的控制信号相对简单,控制精度高,反应速度快,而且比伺服电机省电。这些优点是非常突出的。在下面的论述中,许多地方都会涉及到舵机相关的知识,读者应反复详细阅读。

1.2. 舵机的基本认识

舵机的外观入下图所示:

图1-1

这里可以看到,舵机体积十分小巧。机器人使用它是非常合适的。

一般的舵机可以旋转185左右,我们这里留一些余量,算做180度。八位单片机的精度是256,我们也留一些余量,算作250。这样我们可以得到一个基本的对应关系:

Φ

图1-2

舵机转动角度Φ:0-180度

单片机数值 N:0-250

1.3. 舵机PWM信号介绍

1.3.1PWM信号定义

PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。

目前,北京汉库科技的HG14-M舵机可能是这个过渡时期的产物,它采用传统的PWM 协议,优缺点一目了然。优点是已经产业化,成本较低,旋转角度大(目前所生产的都可达到185度);缺点是控制比较复杂,毕竟采用PWM格式。

但是它是一款数字型的舵机,其对PWM信号的要求较低:

(1)不用随时接收指令,减少CPU的疲劳程度;

(2)可以位置自锁、位置跟踪,这方面超越了普通的步进电机;

图1-3

其PWM格式注意的几个要点:

(1)上升沿最少为0.5mS,为0.5-2.5mS之间;(对应舵机旋转0-180度)

(2) HG14-M数字舵机下降沿时间没要求,目前采用0.5Ms就行;也就是说PWM 波形可以是一个周期1mS的标准方波;

(3) HG0680为塑料齿轮模拟舵机,其要求连续供给PWM信号;它也可以输入一个周期为1mS的标准方波,这时表现出来的跟随性能很好、很紧密。

1.3.2 PWM 信号控制精度制定

上面已经提到了八位单片机,我们的舵机需要的是方波信号。单片机的精度直接影响了舵机的控制精度,这里就详细的说明一下。

我们在这里做了一些名词上的定义。DIV 是一个时间位置单位,一个DIV 等于8us ,关系入公式:

时基寄存器内的数值为:(#01H )01 ———(#0FAH )250。

共185度,分为250个位置,每个位置叫1DIV 。则:

PWM 上升沿函数: 0.5mS + N ×DIV

0uS ≤ N ×DIV ≤ 2mS

0.5mS ≤ 0.5Ms+N ×DIV ≤ 2.5mS

根据这些知识。我们就可以开始编程,并做一些初步的实验,学会舵机控制是研究机器人的一个比较技术手段,需要完全掌握。

185÷250 = 0.74度 / DIV

1 DIV = 8uS 250DIV=2mS

图1-4

我们采用的是8位

STC12C5410ADCPU ,其数据分

辨率为256,那么经过舵机极限

参数实验,得到应该将其划分为

250份。

那么0.5mS---2.5Ms 的宽度

为2mS = 2000uS 。

2000uS ÷250=8uS

则:PWM 的控制精度为8us

我们可以以8uS 为单位递增

控制舵机转动与定位。

舵机可以转动185度,那么

185度÷250=0.74度,

则:舵机的控制精度为0.74度

二. 控制系统硬件定义

首先我们对控制板做简单的介绍,而后会对机器人的机体做一个说明。机器人的所有关节都会与控制板相连接。具体定义见下文:

2.1. STC 控制板简介

图2-1

RS232

接口

电源

开关

复位按键 接线端子 单片机

2.2. 机器人机体简介

双足人型机器人共有17个关节,所谓的每一个关节由一个舵机控制。这17个舵机都使用STC控制板完成控制,使机器人完成特定动作。下图是双足机器人站立拍摄的图片。

图2-2

下面对机器人的每一个部分做示意说明

图2-3 外部胸壳

结构件所示的红色的框体是每个关节所对应的舵

2.3. 连接关系说明

控制板上共可以接21个舵机,由于一些客户需要加入其他传感器,故将控制板14至21接线端子暂不作为舵机输出端口,对于双足机器人来说,共有17个关节,这十七个关节的舵机分别接在对应端口上。具体定义如下图所示:

图2-4

其中舵机的三端点接线定义如下:

图2-5

注意:舵机电源可以是5V-7.4V,直流;

舵机信号线电压5V,PWM信号;

为了清晰,我们将12个舵机摆在一排,然后链接至控制板对应端口上。如下图:

图2-6

注意:在控制板上的三端出线遵守统一规则,离单片机近的是控制信号端,然后是舵机正电源,离单片机最远的是地。在舵机连接电路板的时候应该使白色控制信号线查到离单片机近的三端接口上。

1 2 3 4 5 6 7 8 9 10 11 12 对应端口: P2.7 P2.6 P2.1 P2.0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 对应舵机编号:

对应硬件接线:

三.开发软件介绍

STC单片机是基于51控制核的高速单片机。对于程序的编译和链接,我们可以使用KEIL C 帮助完成。

在对芯片进行编程时,我们使用STC公司提供的烧录软件STC_ISP_V3.5。

3.1. KEIL C

我们使用的单片机是STC12C5410D,是51的内核。指令周期都优大幅度的缩减,运行速度自然提高。由于我们使用的是51内核,所以我们可以使用支持C51的开发软件帮助编辑程序和编译链接程序。KEIL C就是这样一款软件。

KEIL C的软件界面如下:

功能菜单

项目文件列表

编辑区

系统信息区

图3-1

在项目中我们可以建立自己的工程,根据工程添加编辑程序文件。最终使用“完全编译”功能完成编译。在烧录单片机之前还应该生成对应的“.HEX”INTEL 二进制文件。有了这个文件,我们才能使用STC提供的软件进行烧写单片机的操作。

3.2. STC_ISP_V3.5

STC _ISP_V3.5是由STC 开发的程序烧写测试综合软件。它可以通过普通的串口(COM )烧写单片机的程序。软件运行稳定。操作相对方便。软件的操作界面如下:

图3-2

1

1

2

3

4

下面给出操作的具体步骤:

1. 选择芯片类型;

2. 选择要烧写的HEX 文件;

3. 设置串行端口和波特率,这里要注意端口号,波特率的选择比较任意一般为38400;

4. 选择外部晶振;与下载无关;清FLASH 区;

5. 点击下载按钮后,打开单片机供电电源。在上电后单片机会自动进入编程状态。通

过提示可以判断是否下载完成。

图3-3

注意:

1. 在选择芯片时一定要看清型号,很容易选错。

2. 应选择外部晶振,如果选择内部晶振,单片可以工作,但是舵机的控制会出现问题。

3. 一定要先点编程按钮,然后在开控制板上的电源,要不下载不会成功。

1

2 3

4

5

四.语言程序架构解析

4.1. C语言嵌入汇编

由于机器人要求一个很准的时钟,并通过这个时钟做准确的延时,所以我们需要使用51的汇编语言帮助。但是在一些处理不严格的地方,我们可以C语言的模块化编程方法帮助完成。在这里我们使用了C语言嵌入汇编的技术。按文件分类,我们一共有两个文件:一个是ASM文件,还有一个是C的文件。他们需要包含在一个工程文件中才能编译通过。

4.2. 汇编语言被嵌入的说明

在次机器人程序中,由于部分是使用的汇编语言编写,为了清晰和直观。我们将汇编程序单独摘出来做成“.asm”的文件,在工程中,我们应该将文件关联到工程目录下,一旦关联,C程序就可以调用汇编子函数了。我们采用模块化编程方法,在调用汇编程序时也是按照子函数的方式直接调用的。使用十分方便。

4.3. KEIL C下的具体操作步骤

4.3.1在KEIL C下建立工程(project)

在“project”菜单下选择“New project”,这时会有对话框询问你将工程保存在什么目录下,并询问工程名称,这个名称将使系统相关的文件都已这个名字为开头,包括我们将要用到HEX文件。如图所示:

图4-1

4.3.2选择开发芯片类型

在设置好文件名和目录以后,系统会询问你所使用的芯片类型。我们这里只使用标准的AT89S52即可。下图是我们的选择。点击“确定”完成工程向导。

图4-2

4.3.3添加程序文件到工程

将制作好的C程序和汇编文件(必须以“.C”“.ASM”为后缀文件名)加入到新的工程中去。我们可以在下图中的对应位置,点击右键并左键点击对应选项添加文件。

这里需要说明一下,如果添加的文件只有C程序而没有添加汇编文件。则在编译的时候会出错。

图4-3

4.3.4设置工程属性

每个工程的要求不一样,在KEIL C中为这些属性做了一个属性选项。我们可以设置好工程属性以方便开发。

首先在“project”菜单下选择“options for File‘xxxxx’”。如下图所示:

图4-4

之后就会弹出工程属性对话框,在第三个“Output”选项卡下,将生成HEX文件

的选项打上对勾,如下图所示:

图4-5

点击确定完成工程属性的调整,这样我们在之后生成的过程中就会生成HEX文件。对于下面的烧录软件来说,需要的就是HEX文件。我们可以选择完全编译,然后看看是否生成了HEX文件。如下图所示:

图4-6

这样我们就可以使用工程中的HEX文件通过STC _ISP_V3.5烧录软件烧录STC12C5410AD了。

4.4. C的底层函数说明

在C程序中有一些函数是我们控制机器人所必需的,下面就对其中最重要的函数做一个说明,这样可以帮助用户开发新的程序。

我们管这个程序叫“PWM_16()”,这个函数没有入口参数,但是有一个数组是与之相关的。这个数组是uchar position[24]={0};

PWM_16()的源程序如下:

void PWM_16( )

{ uchar i=0,j=0;

for(i=0;i<=7;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i];

}

sorting( ); //调用排序函数

N_value( ); //调用N差函数

P1=0xff; //使口P1全部拉高

delay_500us(); //调用延时500us函数

for(i=0;i<8;i++) //延时输出到口P1(八路)

{

for(j=0;j

{

delay_8us();

}

P1=P1&kouchu[7-i];

}

for(i=0;i<8;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i+8];

}

sorting( ); //调用排序函数

N_value( ); //调用N差函数

P2=0xff; //使口P2全部拉高

delay_500us(); //调用延时500us函数

for(i=0;i<8;i++) //延时输出到口P2(八路)

{ for(j=0;j

{

delay_8us();

}

P2=P2&kouchu[7-i];

}

for(i=0;i

delay_20us();

}

这个函数会使用延时的方式输出PWM波形,对应的端口是P1口和P2口。我们在文章开始部分说过。对于一个舵机的0至180度转动,我们在单片机内部是对应1-250的。这样,延时程序首先先延时0.5ms,形成PWM高电平。然后这时根据对应舵机的值拉低电平。每一格需要延时8us。这个数值也是在上面计算出来的。我们通过排序(我们称之为排序函数),判定出哪一个口最先到达延时时间。最先到达的,则最先拉低。他们之间的间距是通过对舵机值做差得到的(我们称之为N差函数)。这样我们就会看到我们需要的八路波形。对P1口做完这些事情后,在对P2口做。

相关文档