上节课,我们学习了舵机控制的基础知识,探究180度舵机的图形化编程控制。今天这节课,我们将来学习占空比的计算,探究占空比与角度的函数关系,为实现180度舵机的Python代码控制打下基础。
一、关于占空比的计算
在我们Python代码控制舵机旋转中,需要用到占空比。还记得上节课我们学习过的占空比吗?接下来,我们先来复习一下占空比的计算。
1、计算占空比
使用50Hz的频率,那么它的周期为0.2s,也就是20ms。
我们以0.5ms的高电平时间为例,那么它的占空比为:
0.5ms/20ms=0.025=2.5%
2、常用高电平时间的占空比
其他高电平时间占空比的算法类似,这里不妨把上节课中我们的测试数据一起来计算一下。上节课中,我们曾经使用过0.5ms、1ms、1.5ms、2ms 、2.5ms的高电平时间,那么它们的占空比分别为多少呢?
0.5ms高电平时间所对应的占空比为2.5%
1ms高电平时间所对应的占空比为5%
1.5ms高电平时间所对应的占空比为7.5%
2ms高电平时间所对应的占空比为10%
2.5ms高电平时间所对应的占空比为12.5%
3、占空比的调节范围
上节课的学习,我们已经知道,让一个180度舵机实现180度的指针转的高电平时间范围为0.5ms--2.5ms,那么它们所对应的占空比范围就是2.5到12.5。也就是说,给定一个占空比,当然要是2.5--12.5之间的一个数字,就可以实现180度范围内的一个对应角度。
二、180度舵机占空比与角度的关系探究
1、图形化编程中控制180度舵机的原理
让180度舵机旋转180度,只需要在0.5ms--2.5ms之间指定高电平时间,我们在古德微图形化编程中可以直接指定高电平时间(将其转化为微秒),即可实现对舵机的控制。
2、Python代码编程中控制180度舵机的原理
让180度舵机旋转180度,只需要在0.5ms--2.5ms之间指定高电平时间,它们所对应的占空比范围就是2.5到12.5。在Python代码编程中,可以指定占空比(使用百分数),即可实现对舵机的控制。
3、常用高电平时间所对应的角度
如果,我们把0.5ms的高电平时间,2.5%的占空比所应的舵机位置指定为0度位置,那么2.5ms的高电平时间,12.5%的占空比所应的舵机位置就是180度位置。其他的高电平时间、占空比与旋转角度(映射后的角度)很容易确定,如下图所示:占空比与角度对应关系图。
4、任意占空比与任意角度的对应关系
以上结论在实现过程中很容易观察到,但是任意一个高电平时间(占空比),它所对应的角度应为多少度呢?或者说,任意一个角度它所对应的占空比为多少呢?我们把2.5的占空比与0度作为一组数据,把12.5的占空比与180度作为第二组数据,就可以构造两个一次函数的表达式:
取2.5的占空比数据,可列出方程:
2.5 = 0*k + b
取12.5的占空比数据,可列出方程:
12.5 = 180*k + b
解二元一次方程组得:
b = 2.5
k =1/18
最后我们得到的任意占空比的计算公式为
上面公式中的angle 是角度,dc是这个角度所对应的占空比。
5、任意角度的占空比计算
思考一下:如果你想让180度舵机转动30度,你需要的占空比应该是多少呢?
在上面的占空比计算公式中,只要代入angle(角度)即可求出它所对应的dc(占空比)。这个问题不难,下面我们不妨用代码来实现一组数据的计算。
程序运行结果:
上面的输出结果验证了我们已经得到的特殊值的占空比,也计算出了30度,60度所对应的占空比。
7、为什么要进行任意角度的占空比计算
在实际的案例中,我们需要调节的往往是具体的角度,而在舵机的控制中,我们需要的参数是占空比,所以我们才进行了上面的详细探究。
8、函数封装
上面的计算过程,我们也可以直接封装为一个函数,在使用时直接传入角度参数,即可获取占空比,我们将在后续的课程中详细介绍。