mblock控制SG90舵机模块

本文介绍了如何使用mblock控制SG90舵机,包括SG90舵机的工作原理,通过mblock标准模块产生控制脉冲的问题及自定义模块来实现微秒级精度的控制,以提高舵机旋转角度的准确性。通过自定义扩展模块,实现了使用delayMicroseconds()函数发送脉冲,从而避免了由于millis()函数精度不足导致的控制误差。
摘要由CSDN通过智能技术生成

【1.关于SG90舵机】

SG90舵机是Arduino中常用的一种舵机。这是一种模拟舵机,和数字舵机不同,模拟舵机需要持续发送控制脉冲,才能使舵机旋转到某个角度并保持。

Arduino中使用SG90舵机,常用方法是使用servo库。但是servo库使用了timer1定时器,和arduino产生pwm信号也使用了timer1定时器,因此使用servo库和使用pwm产生冲突。其中一个解决方法是把舵机的控制口接到一个非PWM口(如2号口),利用软件从2号口输出控制舵机的波形。

要控制SG90u舵机,需要持续不断给SG90发送周期为20ms的脉冲,单个脉冲周期中高电平的持续时间t决定了舵机的旋转角度。其中t为500微秒到2500微秒,对应着舵机旋转角度0到180度。并且高电平持续时间t和舵机旋转角度保持着线性对应关系。如2号口产生了高电平保持500微秒的脉冲,SG90舵机角度为0度,2号口产生了高电平保持2500微秒的脉冲,SG90舵机角度为180度,

【2.使用mblock产生舵机控制脉冲】

使用mblock自带的标准模块,产生控制SG90舵机的脉冲信号,如图1所示 

                                   图1
根据图1,产生了80个周期为20ms的脉冲,脉冲高电平的持续时间由angle决定。该模块产生的控制舵机旋转角度的精度不够。经过分析发现,这里使用的延时模块(等待x秒)由millis()函数产生,而millis函数的精度为ms级,因此不能产生精度为微秒级的延迟。所以导致产生的脉冲高电平持续时间不精确,进而造成控制舵机旋转角度不精确。

【3.自定义mblock模块,控制SG90舵机】

Arduino中有delayMicroseconds()函数,可以产生微秒级的延迟,但是mblock中并没有提供该函数相应的模块。决定自定义mblock扩展模块,使用delayMicroseconds()函数,产生精度为微秒级的舵机控制脉冲。

自定义的舵机控制模块一共使用了5个文件:Ext_yoyoba.s2e,demo.cpp,demo.h,myservo.c,myservo.h,内容分别如下:

ext_yoyoba.s2e文件内容:
 
  1. {     
  2.     "extensionName": "Ext_yoyoba",
  3.     "description": "Extention by YOYOBA",
  4.     "version": "1.1",
  5.     "author": "yoyoba(stuyou@126.com)",
  6.     "homepage": "youhaidong.cn",
  7.     "sort":0,
  8.     "javascriptURL":"",
  9.       "firmware":"1.0",
  10.       "extensionPort":0,
  11.     "tags" : "makeblock",
  12.     "blockSpecs": [
  13.         [
  14.             "w",
  15.             "servo_init( %n )"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值