未加星标

MicroPython开发板:TPYBoard控制舵机

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

0引言

大家应该都看到过机器人的手臂啊腿脚啊什么的一抽一抽的在动弹吧,,是不是和机械舞一样的有节奏,现在很多机器人模型里面的动力器件都是舵机。

但是大家一般见到的动力器件都是像步进电机啊,直流电机啊这一类的动力器件了,应该对舵机比较陌生,下面就为大家介绍一下舵机的原理和使用方法吧。要想使用一个器件呢,必须要了解它的特性和原理。那下面就先来介绍一下原理吧。

先说一下舵机有什么优点:一是体积紧凑,便于安装;二是输出力矩大,稳定性好;三是控制简单,便于和数字系统接口。本文中使用的是sg90的舵机,个人感觉性能一般,但是比较稳定和耐造,个人做实验用还是比较不错的。

先一起看一下我自己录制的成品视频演示吧(主要实验材料为TPYBoardv102开发板1块和舵机1个):

舵机基本介绍:

1.1舵机的组成与参数

先抄一段说明:舵机,又称伺服马达,是一种具有闭环控制系统的机电结构。舵机主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由控制器发出PWM(脉冲宽度调制)信号给舵机,经电路板上的IC处理后计算出转动方向,再驱动无核心马达转动,透过减速齿轮将动力传至摆臂,同时由位置检测器(电位器)返回位置信号,判断是否已经到达设定位置,一般舵机只能旋转180度。有的可以转到185度。


MicroPython开发板:TPYBoard控制舵机

舵机结构图

1.2舵机的接线

舵机有3根线,棕色为地,红色为电源正,橙色为信号线,但不同牌子的舵机,线的颜色可能不同。

1.3舵机的控制原理

舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比(1. 占空比是指高电平在一个周期之内所占的时间比率。2. 正脉冲的持续时间与脉冲总周期的比值。例如:正脉冲宽度1μs,信号周期10μs的脉冲序列占空比为0.1。即:脉冲的宽度除以脉冲的周期称为占空比。)来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms之间,但是,事实上脉宽可由0.5ms到2.5ms之间,脉宽和舵机的转角0°~180°相对应。

2.python语言控制舵机的方法

其实说了以上这些呢,都是为了给大家介绍利用Python语言来控制舵机的转动角度,和普通单片机一样的,都是需要用不同宽度的脉冲来控制器转动的角度。说白了,我们需要做的就是使用Python语言来输出不同宽度的脉冲信号,来给到信号线里面去。现在一般的舵机脉宽呢都是在0.5ms到2.5ms之间,这就可以计算了,0.5MS-2.5MS这两毫秒里面呢可以控制转动到180度,这样算下来,转一度的脉冲时间大约就是2毫秒/180度=0.011毫秒/度,这样依次计算就可以了。剩下的就是写一个脉冲信号了,相信写脉冲信号的程序大家都很熟悉啦。

但是,在舵机里面有一些几点几的毫秒的延时脉冲,这个在Python语言里如果想要利用delay()函数来做延时的话,很难做到每个角度都可以转到,甚至说是很难做到转动到大多数的角度。所以,你需要找到一个比毫秒延时还要精确的延时函数来作为脉冲的计时延时函数。我现在用的是time.sleep(i)这个函数,这个函数里面的i,建议设置在0.0000-0.0035之间。不能说精确的转动到每个角度吧,但是百分之九十的角度都是可以转到。如果想让舵机进行循环摆动,一定要记得加上适当的延时,因为程序可以飞快的跑,但是舵机转动也是需要一点时间的。舵机转动时间肯定要比程序跑一遍的时间要长的多啦。

3、TPYBoard v102控制舵机实验

3.1实验目的

通过加速度传感器的X方向控制舵机的转动,让舵机随TPYBoard 的转动而转动

3.2实验材料

1、TPYBoard v102 开发板 1 块

2、sg90舵机 1个

3、杜邦线 若干

3.3实验线路图

这里电路图很简单,只需要给舵机接上VCC和GNG(这是最基本的,这个开发板上好多电源和地可以用)。然后把舵机的信号线接到任意一个GPIO口(后面程序里面要在这个GPIO往外输出脉冲的,我用了X1,还有很多其他的GPIO口可以用。)就可以了。先上一张原理图,只是一张模拟的结构图哈。


MicroPython开发板:TPYBoard控制舵机

是不是很抽象?下面上一张图,大家可以秒懂啦。


MicroPython开发板:TPYBoard控制舵机

3.4实验代码

注意:实验中用0做了x的分界点,有的开发板,x的范围可能在11-31不等,所以这个分界点,可以在实验中自己取值。

import pyb
import time
from pyb import Pin
xlights = (pyb.LED(2), pyb.LED(3))
ylights = (pyb.LED(1), pyb.LED(4))
M0 = Pin('X1', Pin.OUT_PP)
accel = pyb.Accel()
i=0.0001
j=0.0000
while True:
x = accel.x()
print("x=")
print(x)
Y=x+20
M0.high()
time.sleep(i*Y)
M0.low()
time.sleep(i*Y)
pyb.delay(12)
if x > 0:
xlights[0].on()
xlights[1].off()
elif x < 0:
xlights[1].on()
xlights[0].off()
else:
xlights[0].off()
xlights[1].off()

虽然舵机只是能实现转动指定的角度,看起来功能很单一,但是单一的功能结合起来,就能完成很复杂的任务。

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

分页:12
转载请注明
本文标题:MicroPython开发板:TPYBoard控制舵机
本站链接:http://www.codesec.net/view/480508.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(29)