博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Micropython教程之TPYBoard开发板驱动舵机教程(萝卜学科编程教育)
阅读量:7107 次
发布时间:2019-06-28

本文共 2177 字,大约阅读时间需要 7 分钟。

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

但是大家一般见到的动力器件都是像步进电机,直流电机这一类的动力器件,应该对舵机比较陌生。(萝卜教育学科编程tpyboard。com)

舵机主要有以下3个优点:

一是体积紧凑,便于安装; 二是输出力矩大,稳定性好; 三是控制简单,便于和数字系统接口。

本次教程中使用的是SG90的舵机,个人感觉性能一般,但是比较稳定和耐用,做DIY实验器材用还是比较不错的。

舵机的基本介绍

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

 

舵机的接线

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

舵机的控制原理

舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的。

占空比

1.指高电平在一个周期之内所占的时间比率。

2.正脉冲的持续时间与脉冲总周期的比值。例如:正脉冲宽度1μs,信号周期10μs的脉冲序列占空比为0.1。即:脉冲的宽度除以脉冲的周期称为占空比。标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms之间,但是,事实上脉宽可由0.5ms到2.5ms之间,脉宽和舵机的转角0°~180°相对应。(萝卜教育学科编程tpyboard。com)

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之间。不能说精确的转动到每个角度吧,但是百分之九十的角度都是可以转到。如果想让舵机进行循环摆动,一定要记得加上适当的延时,因为程序可以飞快的跑,但是舵机转动也是需要一点时间的。舵机转动时间肯定要比程序跑一遍的时间要长的多啦。(萝卜教育学科编程tpyboard。com)

实验目的

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

实验材料

TPYBoard v10x 开发板 1块

SG90舵机 1个
杜邦线 若干

实验线路图

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

import pybimport timefrom pyb import Pinxlights = (pyb.LED(2), pyb.LED(3))ylights = (pyb.LED(1), pyb.LED(4))M0 = Pin('X1', Pin.OUT_PP)accel = pyb.Accel()i=0.0001j=0.0000while 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()

 

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

转载于:https://www.cnblogs.com/xxosu/p/10086633.html

你可能感兴趣的文章
chrome jsonView插件安装
查看>>
【管用】 使用VMtools实现主机Windows与虚拟机Linux文件共享
查看>>
printk %pF %pS含义【转】
查看>>
C#使用ActiveMQ实例
查看>>
Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)
查看>>
上海2017QCon个人分享总结
查看>>
自定义异常类。
查看>>
java 多线程并发 synchronized 同步机制及方式
查看>>
Python3.5爬取cbooo.cn数据并且同步到mysql中
查看>>
SQLServer性能优化专题
查看>>
tensorflow 线性回归解决 iris 2分类
查看>>
Maven的安装与配置
查看>>
腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经...
查看>>
[RK3288][Android6.0] USB OTG模式及切换【转】
查看>>
嘿!不用太过于担心的单点故障
查看>>
修改Ubuntu的aptget源为阿里源的方法
查看>>
Android Camera2 拍照入门学习
查看>>
Maven镜像更换为阿里云中央仓库
查看>>
找工作面试会遇到哪些坑(社招篇)
查看>>
几种交换两个数函数(swap函数)的写法和解析
查看>>