舵机在人工智能领域使用相当广泛,尤其是涉及到各种精确运动转向的控制中几乎都有它的身影。在我们的雷达扫描案例中就必须使用到舵机(当然,伺服电机也是可以的,步进电机由于没有角度位置传感器一般不使用在这种精确角度控制的场合)。

不论是伺服电机还是舵机,都是有角度传感器的,舵机中比伺服电机中多了一个减速齿轮而已增加其扭矩,以便使用在负重运动的关节上,其余基本一样,也就是说使用上基本没有什么差别,他们都是靠脉冲宽度调制(PWM)来驱动的。

首先我们看看,我们能买到的最便宜的舵机是什么样子吧,这里我们用的是SG90(SG90有两种一种是SG90A一类是SG90D,分别是模拟和数字类型的,我这里使用模拟量的SG90A),转动角度为(090度或者0180)。如果要满足我们前面雷达扫描的360度的扫描可以购买360度的舵机(如MG945/946、995/996都可以,伺服电机也很好,就是贵了些)。
下图为SG90

下图为MG996/995/945/946

三根线:橙色为正极,棕色为负极,黄色为信号线

我们必须首先了解一下什么是PWM?

PWM是Pulse-width modulation的缩写,我们可以简单的翻译为脉冲宽度调制,或者脉冲宽度控制。那么这个东东是干什么用的呢,实际可以很简单的理解,就是通过将能量切片后得到的宽度占比来控制单位时间内输出能量的大小的方法。切片的宽度越小,输出的能量大小则越小,电机啊,灯泡等单位时间内得到的能量就越小,转速及亮度就越小,举个栗子,在电流不变的情况下,我们将输出的脉冲电压(如5V电压)切割为原来一半的宽度,并每间隔一个就拿掉它,那么就只剩下原来脉冲波的一半的宽度了,那么输出的总能量也就是以前的一半了,相当如2.5V。我们可以从下图来尝试理解:

了解了PWM后,我们就必须了解如何获得不同的脉冲宽度,尤其是在arduino中如何获得不同的脉冲宽度。

既然,我们已经知道,不同的脉冲宽度可以通过持续拉高或者拉低某个管脚的电平来实现,那么代码就很容易实现了。我们看看最简单的代码实现:

学会了如何使舵机工作起来后,接下来我们就要对它的精准度进行测试了。
我们知道,在arduino中或者是51单片机程序中使用舵机是需要先加载驱动类库的,如果没有这些类库,电机基本无法正常驱动的。当然,即使有驱动库,有很多时候舵机也可能不会按照我们设定的方式转动。
所以才有了我下面的这段自编写的舵机测试代码。

ardunio端代码如下:

int srvPin = 9; //数字接口9连接舵机信号线
int Angle;
int pWidth;
char val;void setup(){pinMode(srvPin,OUTPUT);Serial.begin(9600);Serial.println("--");
}
void loop()
{turnAround(90);
}//转动函数
void turnAround(int pin,float agl)
{for(int i = 0;i<=18;i++){        angleChange(pin,agl);delay(20);}
}//脉冲函数
void angleChange(int pin ,float angle)
{//500高电平毫秒为0度pWidth =500+map(angle,180,0,1800,0);// digitalWrite(pin,HIGH); //舵机电平升高delayMicroseconds(pWidth);//延时脉宽值的微妙数digitalWrite(pin,LOW); //拉低电平
}

经过测试电机要旋转18次才能旋转到指定的角度。

1、对于板载电压的测试
还有一点,arduino uno的板子,很多时候供电达不到,舵机也不会转动,会导致串口通讯中断,不能通过指令来转动。而且在脱机转动的时候,arduino板上的指示灯会随着转动变暗。

2、脉冲宽度的测试
经过测试为13.9ms转动1度,与官方给出的2.5秒转动180度基本吻合。一旦脉冲宽度达到2500后超过300都按照2500来计算,或者叫做这300叫做冗余部分,超过2800后就开始这算了,自动折算为2800-2500,那么转动角度就是300/2500

3、转动角度测试
我对10个SG90进行了测试,没有一个会按照脉冲2500来转动180度,都会存在接近30度的多于角度,也就是每转动30度就会有5度的余量差。对于转动180度来说最终我们调整脉冲宽度为2100时基本转动角度符合要求了,但对于转动90度来说确有不足90了。
所以最终,我们决定将脉冲宽度的映射做一个变化处理,,这也就是angleChange函数中第一行使用map的原因。

我们通过测试,发现在0到20度内的角度无法给出转动动作。所以感觉这种舵机基本不能用于小角度的控制。当然,从大角度回转到小角度20度以内也会产生很大的误差,舵机会转动到0度附近。

每个舵机实际都需要调试,脉冲宽度为0的时候,电机也是为转动到某个角度的,而且转动到某个极限角度,在这个极限下,直到某个脉冲宽度下,都被视为0度,所以我们在调试舵机的时候必须给定一个0度参考脉冲宽度,也就是说,这个脉冲款都就是0度,在这个的基础上增加脉冲宽度是有转动动作发生的。

也就是说,我们给出了列入200的脉冲宽度,虽然舵机转动到了某个角度,但我们试图给它增加200的脉冲令其转动是不能成功的,它可能还在原地。也就是说,500内的脉冲区域其实都是舵机的转动死角区域,或者说非响应区,跟没有发指令一样,最多电机响动但不转动,而且进入死区后舵机可能在接收正常脉冲后还会一时难以恢复正常转动。

理论上2500毫秒是可以达到180度的转动,但实际也需要根据不同的舵机的位置传感器来确定,有的脉冲宽度2300就到了180度。这是我们必须引起注意的。

舵机的转速测试
舵机的转速慢,给定脉冲后它会朝着目标角度转去,位置传感器会告知电机是否到达了目标位置,如果没有到达那就继续转,一直到到达则不再转动。

Arduino中舵机精准度与状态测试实验相关推荐

  1. razer鼠标测试软件,比HERO更强么,雷蛇FOCUS+引擎蝰蛇V2精准度测试

    在鼠标引擎上,罗技HERO曾经一枝独秀,虽然赛睿有TrueMove.冰豹有Owl-Eye夜枭,但都不具备低功耗的特性,只能归类为传统游戏类引擎.作为体量接近罗技的一线品牌,雷蛇成为了一些人期待与之抗衡 ...

  2. 安卓3d游戏开发引擎_鲁大师安卓3D引擎更新,跑分测试精准度再升级

    去年十月份的时候,鲁大师曾发布了针对安卓性能跑分的重大升级版本v9.0.与国内知名游戏工作室"西山居"合作,更换了全新的Unity 3D渲染引擎,又将原有的测试项目进行了部分精简, ...

  3. 两组数据的偏差率_GWT测试报告 篇七十五:隐患难忽视,RIVAL 3 WIRELESS精准度LOD测试...

    GWT测试报告 篇七十五:隐患难忽视,RIVAL 3 WIRELESS精准度LOD测试 2020-12-07 18:35:00 4点赞 2收藏 5评论 你是AMD Yes党?还是intel和NVIDI ...

  4. sensei鼠标测试软件,「硬核测试:游戏鼠标精准度」赛睿SENSEI 310

    原标题:「硬核测试:游戏鼠标精准度」赛睿SENSEI 310 作为赛睿最热销游戏鼠标之一,310有SENSEI(对称)和RIVAL(右手)两个版本,均采用今天要测的TrueMove3引擎,是基于PMW ...

  5. l5630鲁大师跑分_鲁大师安卓3D引擎更新,跑分测试精准度再升级

    今年十月份的时候,鲁大师曾发布了针对安卓性能跑分的重大升级版本v9.0.与国内知名游戏工作室"西山居"合作,更换了全新的Unity 3D渲染引擎,又将原有的测试项目进行了部分精简, ...

  6. 显示器色彩精度测试软件,色彩还原精准度测试与△E介绍_SANC N3000_液晶显示器评测-中关村在线...

    人们对液晶的显示需求能够尽可能展现更丰富的颜色之外,另一关键痛点就是拥有精确的色彩还原能力,即需要显示器能够把每一种颜色真实的反映在显示屏幕上.下面我们就来看看三款显示器的色彩还原能力.色彩还原准确性 ...

  7. arduino调试BNO080高精准度九轴传感器模块

    arduino调试BNO080高精准度九轴传感器模块 原文链接:https://www.yourcee.com/newsinfo/2925867.html 1.简介 2.原理图 3.使用前准备 4.接 ...

  8. 软件测试中的测试结果block是什么?软件测试的用例状态/测试结果分为pass , fail , Block...

    今天测试组长问我有没有block的情况,我:???block是什么?? 作为一位测试小白,接下来给大家介绍一下软件测试的用例状态. 具体这些状态都是什么意思呢??? 1. 排队(In Queue):测 ...

  9. 机器学习中精准度、召回率、准确率、F1 Score、G分数计算学习笔记

    目录 1.基本符号表示 2.类别下的精准度计算(precision) 3.类别下的召回率计算(recall) 4.准确率的计算(accuracy) 5.F1 Score 6.G分数 1.基本符号表示 ...

最新文章

  1. 配置伪静态(URL重写)
  2. Linux命令(基础)
  3. mysql 5.6.34.rpm_离线安装mysql5.6及依赖_centos7离线安装mysql5.6.34
  4. Valentine's Day Round hdu 5176 The Experience of Love [好题 带权并查集 unsigned long long]
  5. 直播预告 | 基于多智能体交流游戏的零资源机器翻译
  6. c++ 顺序容器list的一个例子
  7. 关于二维码分块上色(彩色二维码)的算法研究
  8. python lock_python多线程Lock和RLock的区别
  9. [靠谱原创!] SSH免密登录设置----原理详解+具体操作(全国人民看完都懂了!)
  10. C语言编程一个人活了多少天,来用代码算一算在这个世界上活了多少天吧
  11. Aliyun Linux2安装Docker
  12. matlab xls转csv,使用python或Matlab将csv文件中的数据转换为csv文件
  13. JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。
  14. 浏览器兼容性问题解决方案 · 总结
  15. 前后端分离的跨域问题
  16. python股票成交明细_AkShare-股票数据-龙虎榜-机构席位成交明细
  17. 大学英语综合教程三 Unit 4 课文内容英译中 中英翻译
  18. 中顶访客登记管理系统
  19. CLSR 11.2散列表
  20. 苹果开发者 安卓开发者 谷歌广告Admob 跨境电商 海外收款和收取美金方法

热门文章

  1. 坐标系转换与高斯投影
  2. 过来人(江苏)专转本考试后的感悟和经验,真的很受用
  3. 谷歌插件webscraper使用问疑难杂症(插件页面跑到右边+爬取内容乱序+自定义选择多个列表+滚动抓取社交发帖+select鼠标无法选中元素+无法识别表格+插件支持范围+爬取数据与原始顺序不一致+)
  4. 探索Linux之 终端模拟器和伪终端交互原理
  5. 【微机接口】中断控制器8259A
  6. 回想当年自己刚接触电脑时的情景
  7. java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter【解决办法】
  8. 利用.htacess来防止恶意登录和SQL注入攻击!
  9. laui框架表单大小修改两个属性改变表格提示框(layui-form-label)的大小
  10. 高承实:区块链的工业革命带来了什么?