机器人编程之机器人的伺服电机.docx

上传人:安*** 文档编号:17781448 上传时间:2022-05-26 格式:DOCX 页数:32 大小:444.54KB
返回 下载 相关 举报
机器人编程之机器人的伺服电机.docx_第1页
第1页 / 共32页
机器人编程之机器人的伺服电机.docx_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《机器人编程之机器人的伺服电机.docx》由会员分享,可在线阅读,更多相关《机器人编程之机器人的伺服电机.docx(32页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、机器人编程之机器人的伺服电机网络转载导语:机器人的伺服电机是用来将机器人大脑发出的运动指令转换为运动动作的部件,相当于人的肌肉的作用。机器人的是用来将机器人大脑发出的运动指令转换为运动动作的部件,相当于人的肌肉的作用。本讲教你怎样连接、调整以及测试机器人伺服电机。为此,你需要理解和把握控制伺服电机方向、速度和运行时间的相关PBASIC指令及其编程技术。由于准确地控制伺服电机是决定机器人性能的关键,所以,在把伺服电机安装到机器人底盘之前先熟悉这些内容是非常重要而且必须的。连续旋转伺服电机简介机器人伺服电机有很多种,本讲要介绍的主要是可以使你的轮式机器人两个轮子不停旋转的连续旋转伺服电机,如图2-

2、1所示。图中指出了该伺服电机的外部配件,这些配件将在本讲或者后续章节中用到。任务1:将伺服电机连接到教学板在本任务中首先将伺服电机连接到电源和BASICStamp模块的I/O口,然后搭建一个LED电路来监视BASICStamp模块发送到伺服电机的运动控制信号。连接伺服电机所需的零部件帕拉斯公司消费的连续旋转伺服电机2个;搭建LED电路所需的零配件LED和470欧姆电阻2套连接伺服电机到教学底板把三位开关拨至0位切断教学底板的电源图22。图2-3显示的是教学板上伺服电机接线端子。你可以用板上的跳线来选择伺服电机的供电电源是来自机器人套件中的电池盒Vin还是来自外接直流电源Vdd。要挪动跳线帽,你

3、必须向上把跳线帽从原来短接的2个脚上拔下来,然后把跳线帽压进你想短接的2个脚上去。假如使用6V电池组,将两个伺服电机接线端子之间的跳线帽接Vin,参照图2-3左图所示。假如使用7.5V、1000mA的直流电源,将跳线帽接Vdd,参照图2-3右图所示。本书中所有的例如和讲明都是用电池组供电。图2-4是你将要搭建的电路的示意图,跳线设定接Vin。留意:每个伺服电机的控制电缆有三根线,其中白色的线用来传送电机的控制信号,红色用来接到电源上,而黑色的那么是地线。这些线的颜色的定义在伺服电机出厂时就已经定义好。以后你将会在工程上看到,很多电气元件都是通过线的颜色来标记电线所承当的功能。连接完成后,搭建好

4、的系统如图25图所示不含LED监视电路。LED监视电路如图2-6所示。左边是电气原假如使用的是套件中的电池组,选择Vin。假如使用的是AC-DC直流电源,选择Vdd。理图,右边是在面包板上的接线图。该电路可以监视控制伺服电机的信号。为什么呢?从图2-4的伺服电机连线图可知,两个伺服电机的控制信号线白色分别接到了微控制器的P12和P13口,即由微控制器的P12和P13口输出的控制信号控制两个伺服电机的运动;图2-6所示的LED监控指示电路正好也是指示的P12和P13口的信号,所以图2-6的LED电路可以监控伺服电机的控制信号。任务2:伺服电机调零所谓伺服电机调零是指,当发送一个特定的控制信号零点

5、标定信号给伺服电机时,让电机保持静止的经过。由于伺服电机在工厂没有预先调整,它们在接收到该零点标定信号时可能会转动。因此你要用螺丝刀调节伺服电机模块内的调节电阻让伺服电机保持静止。这就是伺服电机调零经过。调整完成之后,你要测试伺服电机,验证其功能是否正常。测试程序将发送控制信号让伺服电机顺时针和逆时针以不同的速度旋转。调零工具机器人套件中提供的螺丝起子是唯一在本任务中需要的额外的工具。发送零点标定信号图2-7显示的信号是发送到与P12连接的伺服电机的零点校准信号,称为零点标定信号。即假如伺服电机零点已经调节好,发送这个信号给电机就可以让电机保持静止不动。这是一个脉冲时间间隔为20ms,脉冲宽度

6、为1.5ms的脉冲序列信号。要让机器人的大脑即BS2微控制器可以产生图2-7所示的零点标定信号,必须用到几个新的PABSIC指令:PULSOUT指令、PAUSE指令,和DOLOOP循环语句。PULSOUT指令用来让微控制器产生一个5V电平脉冲,其指令格式和指令参数如下:PULSOUTPin,Duration指令参数Pin用来确定是给微控制器的哪个I/O脚输出脉冲,而Duration那么是用来确定脉冲的宽度的时间单位数,其时间单位是2微秒。因此,要给P12引脚产生图2-7所示的1.5ms的高电平脉冲信号,需要输入如下的指令行:PULSOUT12,750显然,假如知道脉冲要持续多长时间,你就可以方

7、便地计算出PULSOUT指令的参数Duration的值:Duration变量=脉冲持续时间/2微秒。按照此公式,零点标定脉冲的宽度变量:Duration=0.0015s/0.000002s=750。PULSOUT指令只产生脉冲,要控制脉冲之间的间隔必须用到PBASIC语言的PAUSE指令。PAUSE指令的使用格式如下:PAUSEDurationDuration是PAUSE指令的参数,它的值告诉BASICStamp微控制器在执行下一条指令之前要等待多久。Duration的单位是千分之一秒,即毫秒。假设你想等待1秒,可以给Duration赋值为1000。指令表示如下:PAUSE1000假如想要等待

8、2秒,表示如下:PAUSE2000因此,要实现图2-7所示的零点标定信号,必须在PULSOUT指令后添加如下语句:PAUSE20要持续不断地产生图2-7所示的脉冲序列信号,还必须将PULSOUT语句和PASUSE语句放到DOLOOP循环中。对于计算机或微控制器而言,它们作为机器人的大脑,与人类或其它生物的大脑相比,具有一个最大的上风就是,它们可以绝不怨言地不断重复做同一件事情。假如你要你的微控制器不断重复同样的操纵,只需将相关的指令放到指令关键词DO和LOOP之间。因此,你要让微控制器不断产生零点标定信号,只需将PULSOUT语句和PAUSE语句放到DO和LOOP之间。最后可以产生图2-7零点

9、标定信号的程序模块如下:例程:CenterServoP12.bs2CenterServoP12.bs2Thisprogramsends1.5mspulsestotheservoconnectedtoP12formanualcentering.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!DOPULSOUT12,750PAUSE20LOOP留意:以上程序一旦执行,将永远执行下去,直到你关断微控制器的电源为止,下一个任务将指导你怎样控制重复执行的次数。最好每次只对一只电机做标定,由于这样的话,在你调节电机时你就可以听到为何用听到,而不用看到?什么时候电机停顿。上面的

10、程序只发送零点标定信号到P12,下面的步骤将指导你从怎样调整电机,使其保持静止状态。在调节完连接到P12上的伺服电机后,用同样的方法调节连接到P13口的电机。将教学底板三位开关拨到“2,翻开电源。输入、保存并运行程序CenterServoP12.bs2。假如电机没有进展零点标定,它的连接喉就会转动,而且你也能听到里面马达转动的响声。假如电机还没有进展零点标定,按照图2-8所示的步骤,用螺丝刀轻轻调节伺服电机上的电位器,直到电机停顿转动。仔细倾听电机的声音,确信电机已经停顿转动验证连接到P12的信号监视电路的LED灯是否发光,假如发光,说明零点标定脉冲已经发送给连接到P12口上的电机了。假如电机

11、已经完成了零点调节,它不会转动。但是损坏了或者有故障的电机有时也不转动。任务4将在电机安装到机器人底盘之前排除这种可能。假如电机确实不再转动,下面你可以自己对连接到P13的伺服电机进展测试并做零点标定。该你了对连接到P13的伺服电机做零点调整利用下面程序对连接到P13的伺服电机重复上述经过:程序例如:CenterServoP13.bs2CenterServoP13.bs2Thisprogramsends1.5mspulsestotheservoconnectedtoP13formanualcentering.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!DOPU

12、LSOUT13,750PAUSE20LOOP留意:假如上述任务完成后,不再进展后面的任务,一定要记得将教学板的电源断开。任务3:怎样保存数值和计数在任务2中,你已经知道怎样使用循环语句让微控制器不断产生零点标定信号。当然,你在编写某个程序时,肯定并不总是需要机器人永远执行同一个操纵或讲任务,而只希望它执行一段指定的时间或执行一些固定的次数。这时,你就要在PBASIC程序中用于到变量。变量用来保存数值。后面的机器人程序很大程度上都要依靠使用变量。用变量保存数值的最主要的作用就是程序能用这些变量来计数。一旦你的程序能计数,你就能控制和跟踪事件发生的次数。用变量存储数值,数学运算和计数变量可以用来储

13、存数值。PBASIC语言在使用一个变量之前,要先给该变量起一个名字,并讲明该变量的大小类型。这叫声明一个变量。声明一个变量的PBASIC语法如下:variableNameVARSize实际声明变量时,你用你自己起的名字代替variableName,Size用来讲明变量的大小类型,PBASIC程序中可以声明的变量类型如下:Bit存储0或1;Bib用来存储0到15之间的任意数值;Byte用来存储0到255之间的任意数值;Word用来存储0到65535之间的任意数值,或-32768到32767之间的任意数值。留意:为何有上述特定的变量类型大小呢?请参考二进制的讲明。下面的例程包含两个“word大小的

14、变量:valueVARWordanotherValueVARWord在声明变量之后,你也可以对它初始化,即给它一个初始值。value=500anotherValue=2000在“value=500中,符号“=是个运算符。你可以利用其它一些运算符和变量进展数学运算。在这里有两个乘法运算的例子:value=10*valueanotherValue=2*value程序例如:VariablesAndSimpleMath.bs2这个例程演示了怎样对变量进展声明、初始化和运算。在运行程序之前,对DEBUG指令要显示的内容进展预测。输入、保存并运行程序VariablesAndSimpleMath.bs2。和

15、你的预测进展比照,解释所有的不一样的原因。VariablesAndSimpleMath.bs2Declarevariablesandusethemtosolveafewarithmeticproblems.$STAMPBS2$PBASIC2.5valueVARWordDeclarevariablesanotherValueVARWordvalue=500InitializevariablesanotherValue=2000DEBUG?valueDisplayvaluesDEBUG?anotherValuevalue=10*anotherValuePerformoperationsDEBUG?

16、valueDisplayvaluesagainDEBUG?anotherValueEND程序VariablesAndSimpleMath.bs2是怎样工作的下面的代码定义了两个字变量:value和anotherValue。valueVARWordDeclarevariablesanotherValueVARWord然后,初始化变量,即给刚刚声明的变量赋上你决定的初始值。这两条指令执行后,value的值是500,anotherValue的值是2000。value=500InitializevariablesanotherValue=2000随后的DEBUG指令帮助你理解初始化变量后每个变量存储的

17、数值,由于给value赋值是500,anotherValue赋值2000,因此DEBUG指令向调试终端发送信息:“value=500和“anotherValue=2000并显示。DEBUG?valueDisplayvaluesDEBUG?anotherValue这里又新引入了一个DEBUG指令的格式讲明字符“?,该格式讲明字符用在一个变量名之前,使DEBUG终端显示其名称,以及存储在该变量中的数值,然后回车。这样对于查询一个变量的内容非常方便。下面三行的疑问是:调试终端将显示什么?答案是value的值是anotherValue的10倍,由于anotherValue的值是2000,那么value

18、就是20000,而变量anotherValue不变。.value=10*anotherValuePerformoperationsDEBUG?valueDisplayvaluesagainDEBUG?anotherValue该你了用负数计算假如你想做一些包含负数的计算,你可以使用DEBUG指令的SDEC格式讲明来显示。下面的例子能通过修改程序VariablesAndSimpleMath.bs2得到。删除程序VariablesAndSimpleMath.bs2的下面局部:value=10*anotherValuePerformoperationsDEBUG?valueDisplayvaluesa

19、gain改成如下代码:value=value-anotherValueAnswer=-1500DEBUGvalue=,SDECvalue,CRDisplayvaluesagain运行更改后的程序并验证value的值是否由500变为-1500。计数并控制循环次数最方便的控制一段代码执行次数的方法是利用FORNEXT循环,语法如下:FORCounter=StartValueTOEndValueSTEPStepValueNEXT省略号“表示你可以在FOR和NEXT之间放一条或者多条的程序指令。使用前面的循环前要确保先声明一个变量替换参数Counter。参数StartValue和EndValue可以是

20、数值也可以是变量。语法描绘中位于大括号之间的东西,表示是可选参数。换句话讲,没有它FORNEXT仍将工作,但是你可以将之用于一些特殊目的。你没有必要一定要将变量命名为“counter,例如,你可以用“myCountermyCounterVARWord下面是一个用myCounter来计数的FORNEXT循环例程。每执行一次循环,它会显示myCounter的值。例程:CountToTen.bs2输入、保存并运行程序CountToTen.bs2。CountToTen.bs2UseavariableinaFOR.NEXTloop.$STAMPBS2$PBASIC2.5myCounterVARWordF

21、ORmyCounter=1TO10DEBUG?myCounterPAUSE500NEXTDEBUGCR,Alldone!END该你了不同的初始值和终值以及计数步长你可以给变量StartValue和EndValue赋不同的值修改FORNEXT循环如下:FORmyCounter=21TO9DEBUG?myCounterPAUSE500NEXT运行修改后的程序。BASICStamp往下计数代替了往上计数,你留意到了吗?只要StartValue的值大于EndValue,程序就会这样运行。还记得可选参数STEPStepValue吗?你可以用它来使myCounter以不同步长计数,而不是按9,10,11这

22、样每次增1来计数。例如,你可以让它每次增加2(9,11,13)或者增加5(10,15,20)或者任何你给出的StepValue,递增或者递减都可以。下面的例子是以3为步长向下计数。增加STEP3到FORNEXT循环,如下所示:FORmyCounter=21TO9STEP3DEBUG?myCounterPAUSE500NEXT运行更改后的程序,验证是否以3为步长递减。任务4:测试伺服电机在装配机器人之前还有最后一件事要做,那就是测试伺服电机。在本任务中,你将运行程序,使电机以不同速度和方向旋转。通过测试,可以确保在装配之前电机工作是正常的。这是一个子系统测试的例子。对子系统进展测试是开发经过的好

23、习惯,它不仅仅是让你拆开机器人,而是在组装之前尽可能修补可能出现的一些问题。所谓子系统测试是在将一些分立的部件组装成一个更大的设备之前先对各分立的部件进展测试的经过。在进展机器人竞赛时,这对于你赢得比赛很有帮助。对于工程师而言,无论是开发玩具、汽车和视频游戏,还是开发航天飞机和火星机器人,这都是一个最为根本的技能。十分是在非常复杂的设备中,假如没有事先对子系统进展测试,要找出存在的问题几乎不可能。例如,在太空工程中,假如要拆开一个原形设备以进展维修,将消耗数百万美元。因此,在这样的工程中,必须对所有子系统进展彻底而严格的测试。脉宽控制电机的速度和方向回忆前面的电机零点标定,脉宽为1.5ms的控

24、制信号使电机保持不动,这是通过给PULSOUT指令参数Duration赋值为750来实现的。那么假如控制信号的脉冲宽度简称脉宽不是1.5ms,结果会是如何呢?如今编程发送了一系列1.3ms的脉冲给伺服电机,你仔细研究一下这一系列脉冲,看它如何控制电机。图2-9所示是连续旋转电机将以全速顺时针旋转,全速的范围大约是每分钟50到60转RPM,即约每秒种转一圈。你可以用下面的程序ServoP13Clockwise.bs2将这些脉冲序列发送给端口P13。例程:ServoP13Clockwise.bs2输入、保存并运行程序ServoP13Clockwise.bs2。验证电机的输出轴是否顺时针旋转,并且速

25、度在50到60RPM之间。ServoP13Clockwise.bs2RuntheservoconnectedtoP13atfullspeedclockwise.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!DOPULSOUT13,650PAUSE20LOOP留意:1.3ms的脉冲需要PULSOUT指令的参数Duration的值为650,是一个小于750的数。所有的脉宽都小于1.5ms,即PULSOUT指令的Duration参数要小于750,才能使电机顺时针旋转。当然,在进展上述验证时,一定要将伺服电机连接到控制端口上,并接上电源。例程:ServoP12Clock

26、wise.bs2将PULSOUT指令的参数PIN的值由13改为12,就可以使连接到P12的电机以全速顺时针旋转。把程序ServoP13Clockwise.bs2另存为ServoP12Clockwise.bs2.把PULSOUT指令的参数PIN的值由13改为12,更新注释。运行程序验证连接P12的电机是否顺时针旋转,并且速度在50到60RPM之间。ServoP12Clockwise.bs2RuntheservoconnectedtoP12atfullspeedclockwise.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!DOPULSOUT12,650PAUSE

27、20LOOP例程:ServoP12Counterclockwise.bs2你可能已经猜到将PULSOUT指令的参数Duration设置为大于750的数会使伺服电机逆时针旋转。Duration的值为850可以发出1.7ms宽度的脉冲,如图2-10所示,这将使伺服电机全速逆时针旋转。将程序ServoP12Clockwise.bs2另存为ServoP12Counterclockwise.bs2把PULSOUT指令的参数Duration改为850。运行程序,验证连接P12的电机是否逆时针旋转,并且速度在50到60RPM之间。ServoP12Counterclockwise.bs2Runtheservo

28、connectedtoP12atfullspeedcounterclockwise.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!DOPULSOUT12,850PAUSE20LOOP该你了修改上述例程中PULSOUT指令的参数PIN,使连接P13的电机逆时针转动例程:ServosP13CcwP12Cw.bs2你可以使用两个PULSOUT指令使两个伺服电机同时旋转,你也可以使它们向互相相反的方向旋转。输入、保存并运行程序下面的程序ServosP13CcwP12Cw.bs2。运行程序,验证连接到P13的电机是否全速逆时针旋转,而连接到P12的电机全速顺时针旋转。Se

29、rvosP13CcwP12Cw.bs2RuntheservoconnectedtoP13atfullspeedcounterclockwiseandtheservoconnectedtoP12atfullspeedclockwise.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!DOPULSOUT13,850PULSOUT12,650PAUSE20LOOP下面的理解非常重要。想一想:当电机安装在机器人底盘的两侧,一个顺时针旋转而另一个逆时针旋转,将使机器人沿直线运动。听起来是否有些乖僻?假如你无法理解,试试这样:l把两个电机背靠背放在一起重新运行程序。该你了调整

30、速度和方向两个电机全速转动时,两个PULSOUT指令的参数Duration有四种不同的组合,在后面的章节中编写机器人运动的程序时,这些组合经常会被用到。程序ServosP13CcwP12Cw.bs2发送了这些组合中的一种,850给P13,650给P12。通过测试不同的运动组合,并填写表2-1的运动描绘栏,你将渐渐熟悉这些组合并为你自己建立一个参考。当机器人安装完成后,尝试一下这些运动组合,填写下表的运动行为栏,你就会看到每种数据组合使它如何运动。l试试下面的PULSOUTDuration组合,将结果填写到描绘列。FORNEXT循环控制电机的运行时间到目前为止,你已经完全理解了脉冲宽度控制连续旋

31、转电机速度和方向的原理。控制电机速度和方向的方法是非常简单的,当然也有一个简单的方法来控制电机运行的时间,那就是用FORNEXT循环。下面是FORNEXT循环的例子,它会使电机运行几秒钟。FORCOUNTER=1TO100PULSOUT13,850PAUSE20NEXT你计算一下这段代码能使电机转动确实切时间。每执行循环一次,PULSOUT指令将持续1.7ms,PAUSE指令持续20ms,执行一次循环大概额外需要1.3ms,那么FORNEXT循环整体执行一次的时间是:1.7ms+20ms+1.3ms=23.0ms,本循环执行100次,即就是23.0ms乘以100,时间=100*23.0毫秒=1

32、00*0.023秒=2.3秒。假设你要让电机运行4.6秒,FORNEXT循环必须执行上面两倍的次数。FORcounter=1TO200PULSOUT13,850PAUSE20NEXT例程:ControlServoRunTimes.bs2输入、保存并运行程序ControlServoRunTimes.bs2.验证是否与P13连接的电机首先逆时针旋转2.3秒,然后与P12连接的电机旋转4.6秒。ControlServoRunTimes.bs2RuntheP13servoatfullspeedcounterclockwisefor2.3s,thenruntheP12servofortwiceaslon

33、g.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!counterVARByteFORcounter=1TO100PULSOUT13,850PAUSE20NEXTFORcounter=1TO200PULSOUT12,850PAUSE20NEXTEND假设你想让两个电机同时都运行,给与P13连接的电机发出850的脉宽,给与P12连接的电机发出650的脉宽,如今执行一次循环要用的时间是:1.7ms与P13连接的电机1.3ms与P12连接的电机20ms中断持续时间1.6ms代码执行时间-一共是24.6ms假如你想使电机运行一段确定的时间,可以计算出需要循环的次数或讲需要

34、发出的脉冲数量如下:脉冲数目=时间/0.0246秒=时间/0.0246假设你想让电机运行3秒,计算如下:脉冲数目=3/0.0246=122如今,你可以将FORNEXT循环中EndValue的值设为122,程序如下:FORcounter=1TO122PULSOUT13,850PULSOUT12,650PAUSE20NEXT例程:BothServosThreeSeconds.bs2下面的程序是让两个电机先向一个方向旋转3秒,然后反向旋转3秒钟的例子。l输入、保存并运行程序BothServosThreeSeconds.bs2。BothServosThreeSeconds.bs2Runbothserv

35、osinoppositedirectionsforthreeseconds,thenreversethedirectionofbothservosandrunanotherthreeseconds.$STAMPBS2$PBASIC2.5DEBUGProgramRunning!counterVARByteFORcounter=1TO122PULSOUT13,850PULSOUT12,650PAUSE20NEXTFORcounter=1TO122PULSOUT13,650PULSOUT12,850PAUSE20NEXTEND验证一下每个电机是否沿一个方向运行3秒然后反方向运行3秒。你是否留意到当电机同时反向的时候,它们总是保持以相反的方向运行?这将有什么作用呢?该你了预计电机运行时间,设定一个你想让电机运行的时间。用0.024除时间所得到的结果就是你需要执行的循环次数。更改程序BothServosThreeSeconds.bs2使两个电机都运行你所设定的时间。比拟预计的时间与实际运行的时间。记住当做完实验后断开系统的电源。工程素质和技能归纳帕拉斯伺服电机的接线图和接线;伺服电机控制信号的监控电路和电路搭建;伺服电机的零点校准和PULSOUT、PAUSE和循环的使用;PABSIC变量的使用和循环次数的控制;电机测试和子系统测试;两个电机的同时运动以及运动时间的控制等。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com