为什么FPPA就可以很方便地将脉宽的精度精确地控制在2微秒甚至2微秒一下呢。主要还是 delay memory这样的具有创造性的指令发挥了功效。该指令的延时时间为数据单元中的立即数的值加1个指令周期(数据0出外,详情请参见delay指令使用注意事项)因为是8位的数据存储单元,所以memory中的数据为(0~255),记得前面有提过,舵机的角度级数一般为1024级,所以只用一个存储空间来存储延时参数好像还不够用的,所以我们可以采用2个内存单元来存放舵机的角度伺服参数了。所以这样一来,我们可以采用这样的软件结构了:
程序原理可以是这样的:
pushw pwm0 ; //注意这里的pwmn指第n路的pwm参数值,是个16位数
//据存放空间,相信8位机中一次操作个16位数据也是首见吧
popw pwmtemp; //将16位数据移动到一个临时空间
set1 s_motor0_drv
call pwm_delay
set0 s_motor0_drv
;
pushw pwm1
popw pwmtemp
set1 s_motor1_drv
call pwm_delay
set0 s_motor1_drv
按这样写下去,一路PC写7个这样的伺服也一点不紧张的,因为PWM的周期是20毫秒,而最大脉宽才2.5毫秒,7*2.5=17.5毫秒。写完了所有的脉冲后又做什么,跳回再等待下一个20毫秒有效的信号量。而20毫秒的信号量从哪里来,因为多核心,当然可以随便拿个工作频率低点的CPU来产生啦。这样一来,一颗14PIN的FPPA ,PDK80C02-SOP14就可以通过无线或者红外来精确控制7路舵机。
也许各位同行有比这更厉害的处理方法,希望可以拿出来一起分享下,谢谢!
/*非常感谢raker提供的原创文章*/
原文链接:http://www.roboticfan.com/robot/bbs/dispbbs.asp?boardid=19&ID=4765
转载声明:凡文章出处为www.RoboticFan.com的,系本站的原创文章。其它媒体在注明出处为RoboticFan.com并给出原始链接后可以自由转载,否则将视为侵权!
| 上一篇:舵机-机器人的肌肉 下一篇:机器人制作指南—驱动器(4) |





