机器人的伺服电机机器人的伺服电机是用来将机器人大脑发出的运动指令转换为运动动作的部件,相当于人的肌肉的作用。
本讲教你如何连接、调整以及测试机器人伺服电机。
为此,你需要理解和掌握控制伺服电机方向、速度和运行时间的相关PBASIC 指令及其编程技术。
由于精确地控制伺服电机是决定机器人性能的关键,所以,在把伺服电机安装到机器人底盘之前先熟悉这些内容是非常重要而且必需的。
连续旋转伺服电机简介机器人伺服电机有很多种,本讲要介绍的主要是能够使你的轮式机器人两个轮子不停旋转的连续旋转伺服电机,如图2-1所示。
图中指出了该伺服电机的外部配件,这些配件将在本讲或后续章节中用到。
任务1:将伺服电机连接到教学板在本任务中首先将伺服电机连接到电源和BASIC Stamp模块的I/O口,然后搭建一个LED 电路来监视BASIC Stamp模块发送到伺服电机的运动控制信号。
连接伺服电机所需的零部件● 帕拉斯公司生产的连续旋转伺服电机2个;● 搭建LED电路所需的零配件(LED和470欧姆电阻)2套连接伺服电机到教学底板把三位开关拨至0位切断教学底板的电源(图2−2)。
图2-3显示的是教学板上伺服电机接线端子。
你可以用板上的跳线来选择伺服电机的供电电源是来自机器人套件中的电池盒Vin还是来自外接直流电源Vdd。
要移动跳线帽,你必须向上把跳线帽从原来短接的2个脚上拔下来,然后把跳线帽压进你想短接的2个脚上去。
如果使用6V电池组,将两个伺服电机接线端子之间的跳线帽接Vin,参照图2-3(左图)所示。
如果使用7.5 V、1000 mA的直流电源,将跳线帽接Vdd,参照图2-3(右图)所示。
本书中所有的示例和说明都是用电池组供电。
图2-4是你将要搭建的电路的示意图,跳线设定接Vin。
注意:每个伺服电机的控制电缆有三根线,其中白色的线用来传送电机的控制信号,红色用来接到电源上,而黑色的则是地线。
这些线的颜色的定义在伺服电机出厂时就已经定义好。
以后你将会在工程上看到,许多电气元件都是通过线的颜色来标记电线所承担的功能。
● 连接伺服电机到教学底板,如图2-4所示。
● 连接完成后,搭建好的系统如图2−5图所示(不含LED监视电路)。
● LED监视电路如图2-6所示。
左边是电气原如果使用的是套件中的电池组,选择Vin。
如果使用的是AC-DC 直流电源,选择Vdd。
理图,右边是在面包板上的接线图。
该电路能够监视控制伺服电机的信号。
为什么呢?从图2-4的伺服电机连线图可知,两个伺服电机的控制信号线(白色)分别接到了微控制器的P12和P13口,即由微控制器的P12和P13口输出的控制信号控制两个伺服电机的运动;图2-6所示的LED监控指示电路正好也是指示的P12和P13口的信号,所以图2-6的LED 电路可以监控伺服电机的控制信号。
任务2:伺服电机调零所谓伺服电机调零是指,当发送一个特定的控制信号(零点标定信号)给伺服电机时,让电机保持静止的过程。
由于伺服电机在工厂没有预先调整,它们在接收到该零点标定信号时可能会转动。
因此你要用螺丝刀调节伺服电机模块内的调节电阻让伺服电机保持静止。
这就是伺服电机调零过程。
调整完成之后,你要测试伺服电机,验证其功能是否正常。
测试程序将发送控制信号让伺服电机顺时针和逆时针以不同的速度旋转。
调零工具机器人套件中提供的螺丝起子是唯一在本任务中需要的额外的工具。
发送零点标定信号图2-7显示的信号是发送到与P12连接的伺服电机的零点校准信号,称为零点标定信号。
即如果伺服电机零点已经调节好,发送这个信号给电机就可以让电机保持静止不动。
这是一个脉冲时间间隔为20ms,脉冲宽度为1.5 ms的脉冲序列信号。
要让机器人的大脑即BS2微控制器能够产生图2-7所示的零点标定信号,必须用到几个新的PABSIC指令:PULSOUT指令、PAUSE指令,和DO…LOOP循环语句。
PULSOUT指令用来让微控制器产生一个5V电平脉冲,其指令格式和指令参数如下:PULSOUT Pin, Duration指令参数Pin用来确定是给微控制器的哪个I/O脚输出脉冲,而Duration则是用来确定脉冲的宽度的时间单位数,其时间单位是2微秒。
因此,要给P12引脚产生图2-7所示的1.5ms 的高电平脉冲信号,需要输入如下的指令行:PULSOUT 12, 750显然,如果知道脉冲要持续多长时间,你就可以方便地计算出PULSOUT指令的参数Duration 的值:Duration变量=脉冲持续时间/2微秒。
按照此公式,零点标定脉冲的宽度变量:Duration=0.0015s/0.000002s=750。
PULSOUT指令只产生脉冲,要控制脉冲之间的间隔必须用到PBASIC语言的PAUSE指令。
PAUSE指令的使用格式如下:PAUSE DurationDuration 是PAUSE指令的参数,它的值告诉BASIC Stamp微控制器在执行下一条指令之前要等待多久。
Duration的单位是千分之一秒,即毫秒。
假如你想等待1秒,可以给Duration 赋值为1000。
指令表示如下:PAUSE 1000如果想要等待2秒,表示如下:PAUSE 2000因此,要实现图2-7所示的零点标定信号,必须在PULSOUT指令后添加如下语句:PAUSE 20要持续不断地产生图2-7所示的脉冲序列信号,还必须将PULSOUT语句和PASUSE语句放到DO…LOOP循环中。
对于计算机或者微控制器而言,它们作为机器人的大脑,与人类或者其它生物的大脑相比,具有一个最大的优势就是,它们可以毫不怨言地不断重复做同一件事情。
如果你要你的微控制器不断重复同样的操作,只需将相关的指令放到指令关键词DO 和LOOP之间。
因此,你要让微控制器不断产生零点标定信号,只需将PULSOUT语句和PAUSE语句放到DO和LOOP之间。
最后能够产生图2-7零点标定信号的程序模块如下:例程: CenterServoP12.bs2' CenterServoP12.bs2' This program sends 1.5 ms pulses to the servo connected to' P12 for manual centering.' {$STAMP BS2}' {$PBASIC 2.5}DEBUG "Program Running!"DOPULSOUT 12, 750PAUSE 20LOOP注意:以上程序一旦执行,将永远执行下去,直到你关断微控制器的电源为止,下一个任务将指导你如何控制重复执行的次数。
最好每次只对一只电机做标定,因为这样的话,在你调节电机时你就可以听到(为何用听到,而不用看到?)什么时候电机停止。
上面的程序只发送零点标定信号到P12,下面的步骤将指导你从如何调整电机,使其保持静止状态。
在调节完连接到P12上的伺服电机后,用同样的方法调节连接到P13口的电机。
● 将教学底板三位开关拨到“2”,打开电源。
● 输入、保存并运行程序CenterServoP12.bs2。
如果电机没有进行零点标定,它的连接喉就会转动,而且你也能听到里面马达转动的响声。
● 如果电机还没有进行零点标定,按照图2-8所示的步骤,用螺丝刀轻轻调节伺服电机上的电位器,直到电机停止转动。
(仔细倾听电机的声音,确信电机已经停止转动)● 验证连接到P12 的信号监视电路的LED 灯是否发光,如果发光,表明零点标定脉冲已经发送给连接到P12 口上的电机了。
如果电机已经完成了零点调节,它不会转动。
但是损坏了或有故障的电机有时也不转动。
任务4将在电机安装到机器人底盘之前排除这种可能。
● 如果电机确实不再转动,下面你可以自己对连接到P13的伺服电机进行测试并做零点标定。
该你了 对连接到P13的伺服电机做零点调整● 利用下面程序对连接到P13的伺服电机重复上述过程:程序示例: CenterServoP13.bs2' CenterServoP13.bs2' This program sends 1.5 ms pulses to the servo connected to' P13 for manual centering.' {$STAMP BS2}' {$PBASIC 2.5}DEBUG "Program Running!"DOPULSOUT 13, 750PAUSE 20LOOP注意:如果上述任务完成后,不再进行后面的任务,一定要记得将教学板的电源断开。
任务3:如何保存数值和计数在任务2中,你已经知道如何使用循环语句让微控制器不断产生零点标定信号。
当然,你在编写某个程序时,肯定并不总是需要机器人永远执行同一个操作或者说任务,而只希望它执行一段指定的时间或者执行一些固定的次数。
这时,你就要在PBASIC 程序中用于到变量。
变量用来保存数值。
后面的机器人程序很大程度上都要依赖使用变量。
用变量保存数值的最主要的作用就是程序能用这些变量来计数。
一旦你的程序能计数,你就能控制和跟踪事件发生的次数。
用变量存储数值,数学运算和计数变量可以用来储存数值。
PBASIC语言在使用一个变量之前,要先给该变量起一个名字,并说明该变量的大小类型。
这叫声明一个变量。
声明一个变量的PBASIC语法如下:variableName V AR Size实际声明变量时,你用你自己起的名字代替variableName,Size用来说明变量的大小类型,PBASIC程序中可以声明的变量类型如下:Bit —存储0或者1;Bib —用来存储0到15之间的任意数值;Byte —用来存储0到255之间的任意数值;Word —用来存储0到65535之间的任意数值,或者-32768到32767之间的任意数值。
注意:为何有上述特定的变量类型大小呢?请参考二进制的说明。
下面的例程包含两个“word”大小的变量:value V AR WordanotherValue V AR Word在声明变量之后,你也可以对它初始化,即给它一个初始值。
value = 500anotherValue = 2000在“value = 500”中,符号“=”是个运算符。
你可以利用其它一些运算符和变量进行数学运算。
在这里有两个乘法运算的例子:value = 10 * valueanotherValue = 2 * value程序示例: VariablesAndSimpleMath.bs2这个例程演示了如何对变量进行声明、初始化和运算。
● 在运行程序之前,对DEBUG指令要显示的内容进行预测。
● 输入、保存并运行程序VariablesAndSimpleMath.bs2。