本任务要制作一个速 度和脉宽的关系曲线图。
如图3-14所示的调试终端 窗口能帮助你加快作图过
程。你可以通过该窗口的传送窗格(Transmit Windowpane)给BASIC Stamp微控制器发送信息。
通过发送信息告诉BASIC Stamp发给电机的脉宽是多少,然后测量不同脉宽下电机的运行速度。
使用DEBUGIN指令
到目前为止,你或许已经熟悉了DEBUG指令,并且知道了它如何从BASIC Stamp发送信息到 调试终端窗口。显示信息的地方叫接收窗口,因为它是显示从BASIC Stamp接收来的信息的地方。
调试终端还有一个传输窗口,它允许在程序运行时发送信息给BASIC Stamp。你可以使用DEBUGIN 指令使BASIC Stamp接收输入到传输窗口的值并将其存储到一个或几个变量中。
DEBUGIN指令将输入到传输窗口的值存入一个变量中。下一个例子中,字变量pulseWidth 将被用来存储DEBUGIN指令接收到的值。
pulseWidth VAR Word
现在用DEBUGIN指令来获取输入到传输窗口的十进制数值并将其存到变量pulseWidth DEBUGIN DEC pulseWidth
后面的程序就可以使用此值,在这里,该值用在PULSOUT指令的参数 Duration中:
PULSOUT 12, pulseWidth 例程: TestServoSpeed.bs2
该程序允许你通过调试终端的传输窗口赋值给PULSOUT指令的参数Duration。
z 搁起机器人使其轮子不能着地。
z 键入、保存并运行程序TestServoSpeed.bs2。
z 用鼠标指向调试终端的传输窗口,击活光标以便输入。
z 键入650然后按回车键。
z 验证电机是否以全速顺时针旋转6秒。
当电机完成旋转后,将提示你键入另一个值。
z 键入850然后按回车键。
z 验证电机是否以全速逆时针运转。
试着测试轮子在脉宽650和850之间的旋转速度,以RPM(每分钟转动的圈数)为单位。下面是 具体的测试过程:
z 贴一个标记在轮子上,这样你就可以知道它在6秒钟内旋转了几圈。
图3-14 调试终端窗口
基础机器人制作与编程 z 使用调试终端来测试轮子分别以下述脉宽转过的圈数:650, 660, 670, 680, 690, 700, 710,
720, 730, 740, 750, 760, 770,780, 790, 800, 810, 820, 830, 840, 850
z 对于每一个脉宽,转动的圈数乘10即得RPM。例如,如果轮子转了3.65圈,那么转速为 36.5RPM。
z 自己解释如何通过脉宽来控制电机的旋转速度。
' TestServoSpeed.bs2
' Enter pulse width, then count revolutions of the wheel.
' The wheel will run for 6 seconds
' Multiply by 10 to get revolutions per minute (RPM).
'{$STAMP BS2}
'{$PBASIC 2.5}
counter VAR Word pulseWidth VAR Word pulseWidthComp VAR Word
FREQOUT 4, 2000, 3000 ' Signal program start/reset.
DO
DEBUG "Enter pulse width: "
DEBUGIN DEC pulseWidth
pulseWidthComp = 1500 - pulseWidth
FOR counter = 1 TO 244 PULSOUT 12, pulseWidth PULSOUT 13, pulseWidthComp PAUSE 20
NEXT
LOOP
程序TestServoSpeed.bs2是如何工作的
首先声明了三个变量,FOR…NEXT循环的counter变量,DEBUGIN指令和PULSOUT指令的 pulseWidth变量,第二个PULSOUT指令的pulseWidthComp变量。
counter VAR Word pulseWidth VAR Word pulseWidthComp VAR Word
FREQOUT指令用来表示程序已经开始执行。
FREQOUT 4,2000,3000
程序的剩余代码都在DO…LOOP循环中,因此它会一遍又一遍地执行下去。每次调试终端操 作者(就是你)输入脉宽,DEBUGIN指令将此值存储在变量pulseWidth中。
基础机器人制作与编程 DEBUG "Enter pulse width: "
DEBUGIN DEC pulseWidth
要使测量更精确,必须使用两个PULSOUT指令。一个脉宽参数小于750,另一个脉宽参数大 于750,两个脉宽参数和是1500。这就确保在每次循环执行中两个PULSOUT指令所用的时间之和 是相同的。即无论PULSOUT指令的脉宽参数是多少,FOR…NEXT循环都要花去同样的时间去执 行。这就使后面的转速测量更准确。
下一个指令得到你所输入的脉宽值,并计算另一个脉宽值,使两个脉宽的和为1500。如果输入 的值是650,pulseWidthComp的值是850;如果输入的值是850,pulseWidthComp 的值是650;如 果输入的值是700,pulseWidthComp 的值是800。它们加起来都是1500。
pulseWidthComp = 1500 - pulseWidth
一 个 运 行6 秒 的 FOR…NEXT 循 环 首 先 发 送 脉 冲 给 右 边 的 伺 服 电 机 ( P12 ) , 然 后 发 送 pulseWidthComp值给左边的伺服电机(P13),使其向相反的方向旋转。
FOR counter = 1 TO 244 PULSOUT 12, pulseWidth PULSOUT 13, pulseWidthComp PAUSE 20
基础机器人制作与编程 1.330 1.430 1.530 1.630 1.340 1.440 1.540 1.640 1.350 1.450 1.550 1.650 1.360 1.460 1.560 1.660 1.370 1.470 1.570 1.670 1.380 1.480 1.580 1.680 1.390 1.490 1.590 1.690
1.700
记住PULSOUT指令的Duration参数是以2 µs为单位。PULSOUT 12, 650发送宽度为1.3毫秒的 脉冲给端口P12,PULSOUT 12, 655发送宽度为1.31毫秒的脉冲,PULSOUT 12, 660发送宽度为1.32
毫秒的脉冲,依此类推。
z 给右轮做标记使你有一个参考点。
z 运行程序TestServoSpeed.bs2。
z 单击调试终端的传输窗口。
z 输入650。
z 计数轮子转动的圈数。
因为电机转动6秒,你可以用圈数乘以10来得到RPM。
z 把圈数乘以10的值输入到表3-1的1.3 ms之后。
z 输入入655。
z 数轮子转动的圈数。
z 把圈数乘以10的值输入到表3-1的1.31ms之后。
z 增加durations的值直到850。
z 用电子表格、计算机或图表来描绘上述数字曲线。
z 对另一个电机重复上述过程。
你可以用左轮重复上述测量过程。你必须更改PULSOUT指令使pulseWidth的值发给P13,
pulseWidthComp的值发给P12。
工程素质和技能归纳
z 机器人的机械组装;
z 伺服电机的重新测试和子系统测试;
z 开始/复位指示电路和FREQOUT的编程使用;
z 运行时向微控制器发送数据与DEBUGIN的使用;
z 伺服电机控制脉宽和转速关系曲线的测试 z 关系曲线作图等。
基础机器人制作与编程