舵机速度控制原理细解
虽然理论上是那么回事,不过要通过程序表达还是要经过一些变换,在这里假设舵机初始位置的值是x,舵机要运行到目标位置y,在设置个变量a让他初始时0,x+(y-x)*a/100就是我们要送入的舵机位置信息,开始的时候a是0所以送入的数据是x,舵机还在初始位置,这时候我们每隔固定的时间就对a+1,随着a的变化舵机位置逐步从初始位置向目标位置靠近,到a=100的时候完全到达目标位置停止a的自加。但是由于x+(y-x)*a/100的公式中大量的引入了x,你会发现写程序还是不是那么好控制,我的最终的速度控制程序又对这个公式进行了变换y-(y-x)*(100-a)/100这个公式也是随着a的自加会使得送入的信息逐步到达目标位置。两个公式都可以实现,但是相比较第二个程序到时候会相对简单。
在写程序的时候有时候我们不光要考虑程序语句的正确性,有时候还要考虑单片机的处理能力,比方说a=(0x01<16)>>16这个语句没有错误,理论上a应该最后还是等于1但是把他下载到51单片机当中就不是那么回事了,因为在向右移动16位的过程中,51没有16位的高位来储存数据,所需信息会有打失,最后的结果会是a=0,我也是在写程序的时候发现了这个问题,只是想说明在涉及运算的时候要考虑单片机处理能力。x+(y-x)*a/100就是对舵机在初始位置到目标位置的转化过程进行了100微分,本来还想进行1000微分的了,但是发现100微分就已经完全足够了,而且100的时候程序计算过程设计的不合理就会出现超出运算能力而出错的情况。
有朋友问我我的舵机控制速度程序是什么原理,所以写篇小文章介绍下,大家互相交流学习 呵呵
下面是舵机的单片机程序:
http://www.51hei.com/mcu/2542.html
http://www.51hei.com/mcu/2543.html
http://www.51hei.com/mcu/2544.html
http://www.51hei.com/mcu/2545.html
http://www.51hei.com/mcu/2546.html
http://www.51hei.com/mcu/2547.html
http://www.51hei.com/mcu/2554.html
舵机速度控制原理细 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)