0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于传感器的精确微型操纵杆的设计

电子设计 来源:郭婷 作者:电子设计 2019-03-15 08:42 次阅读

便携式设备通常需要使用线性双轴位置传感器操纵杆,随着便携式设备的激增,对这种传感能力的需求也在增加。设计人员的任务是满足关键性能要求,如灵敏度,准确度,低功耗和更平稳的操作,同时还降低成本,减小尺寸,并添加触觉反馈等功能。

本文将介绍在介绍为移动设备设计低成本,灵敏的操纵杆所需的部件和代码之前,操纵杆的功能如何。

操纵杆的功能

视频游戏中常用的操纵杆由以下部分组成:两个正交电位器,用于通过旋转轴的机构进行X和Y运动(图1)。这些工作良好且价格低廉,但相当大并且在中心位置周围有明显的睫毛。此外,电位器触点易受环境因素的影响,这可能会引入噪声并降低可靠性。

图1:Parallax的27800是一个很好的例子。操纵杆使用两个彼此成直角安装的旋转电位器。 (图像来源:Parallax)

PC笔记本电脑键盘中嵌入的无处不在的“指点杆”使用了力敏感或应变计电阻作为传感元件(图2)。这些电阻器放置在杆的四个侧面上。移动棒压缩一个或多个电阻器改变它们的值。它们非常小,可靠,并提供与位移成比例的触觉力反馈。向下按压杆会改变所有四个电阻器的值,从而可以测量Z轴位移。问题是这些指点杆不再以高容量制造。目前可用的是非常昂贵的,可能花费数十甚至数百美元。

图2:嵌入在PC中的典型“nub”指点杆笔记本键盘。这被发现作为鼠标或触摸板的替代品的普及。 (图片来源:维基百科)

使用磁铁检测运动

另一种操纵杆解决方案是来自ams的AS5013霍尔效应IC,它使用微小的移动磁铁来确定X-Y位置。 AS5013是一个完整的解决方案,包含五个传感器和一个处理引擎,与主机处理器的集成非常容易。它具有体积小(3.7 mm 2 ),精确,低功耗,可靠且易于实施的优点。它需要2.7伏至3.6伏电源,在空闲模式下功耗不到3微安。它将检测磁体在标称±1 mm范围内的运动。

图3:AS5013和轴向磁铁的典型布置(图像来源:ams)

磁铁在磁铁上的移动霍尔元件产生几何分布的响应,如钟形曲线(图4)。最大磁铁行程是围绕AS5013中心的2 mm半径圆。霍尔元件C1至C4放置在以包装中间为中心的圆上。正好位于中间的霍尔元件C5用于更好的线性响应,磁体位移大于±1.0 mm。

基于传感器的精确微型操纵杆的设计

图4:霍尔元件的放置和磁场,磁铁位于每个霍尔元件的中心。 (图像来源:ams)

使用单个电源的简单应用只需要四根电线:两个用于电源,两个用于I 2 C通信。另外,可以添加第五个连接以便向主机CPU发送中断,并且可以添加第六个连接作为重置。

基于传感器的精确微型操纵杆的设计

图5:AS5013与主机微控制器的框图和电气连接。所有六条线都显示连接,但只需要VDD,GND和两个I 2 C信号SDA和SCL)。 ADDR引脚选择两个I 2 C地址之一。 (图片来源:ams)

为了简化AS5013的开发,ams提供了AS5013-QF_EK_AB评估套件(图6),可以轻松连接到ArduinoNXP Freedom板。

图6:AS5013-QF_EK_AB评估套件简化了AMS5013的开发,包含两个主要组件:AS5013霍尔传感器电路板和磁体组件(左下)。磁铁组件安装在电路板的背面。 (图像来源:ams)

IC安装在印刷电路板的正面,而磁铁组件安装在AMS5013 IC中心正下方的背面。该套件需要仔细焊接才能完成组装。非常重要的是磁体组件正确定位或读数会有偏移,这将在后面讨论。

套件中使用的安装方法只是一个建议。磁铁组件模块也可以用合适的安装硬件安装在IC的顶部。对于需要仅安装在一侧的组件的电路板,这可能更为可取。

磁性组件模块还有一个内部圆顶开关。按下杆,常开(N.O.)开关被激活,作为按钮点击。开关的焊盘位于背面,需要焊接到印刷电路板上。

在评估套件的原理图中,注意内部圆顶开关的按钮信号(标记为BUTn)(图7) )。按下操纵杆时,这将短接到地面。

基于传感器的精确微型操纵杆的设计

图7:在AS5013评估板原理图上,请注意按钮信号(BUTn)按下操纵杆时,内部圆顶开关会短路接地。 (图像来源:ams)

评估设置

为了评估ams操纵杆,它可以连接到NXP的FRDM-KL05Z板,它使用非常小且成本低32位ARM ® Cortex ® M0 +。只需要4根导线:3.3伏,接地,I 2 C SLK和I 2 C SDA。

图8:FRDM-KL05Z和AS5013评估套件仅使用4根电线进行连接。 (图片来源:Digi-Key

嵌入式代码是使用mbed开发系统(mbed.org)编写的。它是一个免费的基于Web的集成开发环境(IDE)。编程语言类似于Arduino草图,但实际上是带有库类的C ++。代码是开源的,整个项目可以在这里获得。

嵌入式代码非常简单,充当套件和主机PC之间的桥梁。 FRDM-KL05Z与AS5013之间的通信通过2线I 2 C进行。代码的主要部分在连续的while循环中运行(清单1)。每隔100 ms,读取AS5013的数据,然后通过虚拟USB UART COM设备以115200波特8N1打印。

#include“mbed.h”

#if defined(TARGET_KL05Z)

#else

#error TARGET NOT DEFINED

#endif

PinName const SDA = PTB4;

PinName const SCL = PTB3;

I2C i2c(SDA,SCL);//构造I2c对象

const int addr = 0x40 << 1;//AS5013的i2c地址

串行电脑(USBTX,USBRX);//可选,但需要设置更快的波特

char data [7];

int main(){

int8_t x,y;//x y要打印到终端的值

uint8_t statusF;//状态标志

pc.baud(115200);

init_AS5013();//重置并初始化AS5013

while(1){//无限循环

wait(0.1);//等待100毫秒

statusF = 0;

data [0] = 0x0f;

i2c.write(addr,data,1);//设置为读取地址0x0f

i2c.read(addr,data,3);//在寄存器0x0f,0x10,0x11读取数据

statusF = data [0];//获取状态字节

if(statusF&amp; 0x01){

x = data [1];//get x

y = data [2];//得到

printf(“%d%d”,x,y);//输出结果

printf(“ n”);

}

< p> else {

pc.printf(“error 0x%x n”,statusF);//不应该到这里

}

}

}//结束

清单1:使用“mbed”IDE的main()源代码。这是在FRDM-KL05Z板上运行的代码。它由一个无限循环组成,它从I 2 C接口读取X和Y值。 (代码来源:mbed)

在主机PC端,您有许多选择。最简单的方法是使用终端程序,如Tera Term for Windows或MiniCom for Linux。终端输出列出了X和Y的值(图9)。 AS5013为X和Y提供8位有符号值,相对于Y = X = 0(校准后)的中心位置,从+128到-127。

基于传感器的精确微型操纵杆的设计

图9:连续显示AS5013 X和Y 8位值的Tera Term输出。 (图像来源:Digi-Key)

PC图形显示

Python 3.6编写的程序提供了很好的数据可视化。代码可以在GitHub上获得。

这个程序是用Windows 7编写和测试的,但相同的代码将在Linux或Mac上运行。 Python可以从python.org下载

图10显示了“示波器”显示中X和Y数据的输出。 X显示在蓝色迹线中,Y显示为红色。

基于传感器的精确微型操纵杆的设计

图10:显示X(蓝色)和Y(红色)操纵杆移动。操纵杆左右上下移动。 (图像来源:Digi-Key)

第二个选项与棒的移动同步地在屏幕周围移动一个小圆圈(图11)。屏幕中心的红色圆圈对应于默认的杆位置,其中X和Y均为零。未触摸时,操纵杆返回此位置。

基于传感器的精确微型操纵杆的设计

图11:红色圆圈(代表操纵杆)在中间位置或中心位置的位置。 (图像来源:Digi-Key)

基于传感器的精确微型操纵杆的设计

图12:当棒被推到鞋面时红圈在左上象限中的位置剩下。 (图片来源:Digi-Key)

偏移效应和校准

如前所述,磁性组件模块的正确定位非常重要,因为它直接位于AS5013的上方(或下方)。不这样做会产生偏移。在这种情况下,中心位置X和Y值将不为零。为了克服这个问题,计算每个轴的偏移并将其添加到最终结果中。图13和图14显示了校准前偏移的影响。

基于传感器的精确微型操纵杆的设计

图13:带偏移的X-Y值。请注意,零位置低于中心线。 (图像来源:Digi-Key)

基于传感器的精确微型操纵杆的设计

图14:由于偏移而偏离中心的操纵杆位置。 (图片来源:Digi-Key)

校准非常简单。当程序首次启动时,取几个读数的X和Y值,并将棒放在中心位置,取平均值并加上或减去一个偏移量,使结果为零。

缩放

磁铁与AS5013之间的距离因设计而异,影响了获得+/- 127满量程读数的能力。例如,电路板厚度会影响灵敏度。幸运的是,这可以通过AS5013的寄存器0x2D中设置的“缩放因子”来控制。如果磁铁距离太近,则应将其从默认值100%降低。相反,如果磁铁太远,应该增加。通过改变比例因子也可以调节运动灵敏度。

低功耗模式

AS5013可以进入超低功耗模式,可以被唤醒通过将杆移动到用户可配置的阈值。唤醒后,它可以向主机MCU产生中断,然后继续正常操作。

高级传感器数据

总共有五个霍尔传感器。可以从每个传感器读取原始数据并将其用于自定义配置。一个有趣的应用是感应磁铁在Z方向上移动,模仿按钮。随着磁铁靠近AS5013,中心霍尔元件值增加。这可以与固定阈值进行比较以确定推动状态。其余四个霍尔传感器也会受到较小的影响。然而,在外部寄生磁场的情况下,这四个传感器可用于改善检测。在ams的应用笔记AN5013-20中有一个很好的例子。

然而,当使用磁性组件模块时,圆顶开关是一种更简单,更强大的按钮按压解决方案。

结论

AS5013和磁性装配模块是小而精确的操纵杆界面的理想选择。它非常敏感,可以对很小的动作做出反应。在许多情况下,它是大型电位计或昂贵的应变计操纵杆的理想替代品。评估套件提供了一个简单的开发平台。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2546

    文章

    50521

    浏览量

    751335
  • 电阻器
    +关注

    关注

    20

    文章

    3753

    浏览量

    61995
  • 电位器
    +关注

    关注

    14

    文章

    1005

    浏览量

    66691
收藏 人收藏

    评论

    相关推荐

    labview操纵杆

    用labview自带的初始化操纵杆,输入设备信息,获取操纵杆的坐标轴,会占很大的内存!!!!还有其他方法吗!!
    发表于 04-13 01:06

    编码操纵杆问题

    我设计了一个带有拖曳马达的皮艇,并通过操纵杆驱动(我是一个四肢瘫痪的人,仍然想要皮划艇)。目前我的代码被设置为获得操纵杆位置的x/y值,然后相对于x值转动马达(只有90到90度),并调整螺旋桨的动力
    发表于 12-21 15:47

    如何消除操纵杆尖峰

    大家好,我用PIC18F45 50做了操纵杆,现在当我移动罐子时,我收到一些尖刺……我怎么去除尖刺?谢谢
    发表于 04-16 10:56

    复古操纵杆的资料分享

    描述复古操纵杆的自动开火部分:1 - 4011 与非门集成电路1 - 1M 欧姆1 - 1K 欧姆1 - 6.8K 欧姆1 - 470 欧姆1 - 50-100K 锅。1 - 1uF 电容2 - 1N4148 二极管1 - 领导PCB
    发表于 07-14 07:34

    MAME旋转操纵杆转USB的资料分享

    描述MAME 旋转操纵杆转 USB要使用像 SNK 的 LS30 这样的街机旋转操纵杆或像 MAME 中的 Happ Controls 旋转这样的克隆,需要将 12 个旋转位置开关转换为顺时针或
    发表于 07-22 06:12

    同时使用1个操纵杆玩2台使用Atari DB-9风格操纵杆端口的电脑

    描述Perifractic 和 Lorin Millsap 的 DoubleJoy - 使用 2 台计算机和 1 个操纵杆这个疯狂的科学实验让您可以玩 2 台使用 Atari DB-9 风格操纵杆端口的电脑,同时使用 1 个操纵杆
    发表于 08-12 07:11

    操纵杆工作原理

    操纵杆工作原理 引言 操纵杆为我们表演了一个非常巧妙的戏法,它将纯粹的物理动作(手部的运动)完完全全地
    发表于 07-28 09:22 1.3w次阅读

    基于C++的游戏操纵杆模拟鼠标的程序

      要编写一个支持游戏操纵杆的应用程序,首先必须要捕获游戏操纵杆,接着要处理Windows发送给程序窗口的操纵杆消息,最后使用完操纵杆后,还应将捕获的
    发表于 09-01 11:54 1990次阅读

    设计精确微型操纵杆

    便携式设备通常需要使用一个线性的两轴位置传感器操纵杆,随着便携式设备的激增,这种传感能力的需求也在增加。设计人员的任务是满足关键性能要求,如灵敏度、精确度、低功耗和更平滑的操作,同时
    发表于 09-15 09:17 11次下载

    基于Arduino Pro Mini的操纵杆手柄和DIY相机滑块

    方案介绍操纵杆手柄控制可以使用两轴值(操纵杆旋钮的移动方向)来控制项目。此外,在这个项目中,我制作了一个 DIY 相机滑块,并使用 Arduino 操纵杆手控制
    发表于 12-27 16:35 0次下载

    DIY按钮操纵杆模块

    我非常喜欢在项目中使用操纵杆模块,并且通常使用模拟操纵杆。但是最近我买了一个数字操纵杆,花了我3美元左右。经过分析,我发现一个看起来像操纵杆的组件实际上以某种方式由5个按钮组成。因此,
    发表于 01-04 16:30 0次下载

    PHPoC基于网络的操纵杆

    电子发烧友网站提供《PHPoC基于网络的操纵杆.zip》资料免费下载
    发表于 02-01 10:05 0次下载
    PHPoC基于网络的<b class='flag-5'>操纵杆</b>

    Arduino基于网络的操纵杆

    电子发烧友网站提供《Arduino基于网络的操纵杆.zip》资料免费下载
    发表于 02-01 10:06 0次下载
    Arduino基于网络的<b class='flag-5'>操纵杆</b>

    使用Blynk手机应用程序提供的超声波传感器操纵杆

    电子发烧友网站提供《使用Blynk手机应用程序提供的超声波传感器操纵杆.zip》资料免费下载
    发表于 06-28 14:41 0次下载
    使用Blynk手机应用程序提供的超声波<b class='flag-5'>传感器</b>和<b class='flag-5'>操纵杆</b>

    如何使用操纵杆和Arduino控制伺服电机

    在这篇文章中,我们将学习如何使用操纵杆和Arduino控制伺服电机。我们将看到有关操纵杆,其销,其结构和工作的概述。我们将从操纵杆中提取有用的数据,这些数据将成为控制伺服电机的基础。
    的头像 发表于 07-27 11:47 1717次阅读
    如何使用<b class='flag-5'>操纵杆</b>和Arduino控制伺服电机