舵机速度的操控其实都是让舵机从初始方位到方针的方位不是直接抵达,而是区分红许多纤细的小进程逐渐让他抵达。比如说让舵机的初始方位是0度让他跑到90度,直接送入90度的数据的话由于舵机的响应速度仍是比较快的,简直就一会儿跑到90度的方位。假如咱们在他抵达90度的进程中给他制作许多缓冲,便是让他从0度到1度到2度3度……..的逐渐过渡过到90度,那么呈现的作用便是舵机以比较慢的速度抵达方针方位,就抵达咱们控速的意图。而每个距离切换的时刻加以操控既可以得到咱们想要的详细旋转速度,由于区分的进程许多,所以舵机的旋转看上去是流通的一个速度的旋转。
尽管理论上是那么回事,不过要通进程序表达仍是要通过一些改换,在这里假定舵机初始方位的值是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