请选择 进入手机版 | 继续访问电脑版

大海作坊

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 520|回复: 0

通用HID - DIY USB HID /操纵杆/ CNC主轴制作

[复制链接]

51

主题

138

帖子

789

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
789
发表于 2019-3-1 13:53:00 | 显示全部楼层 |阅读模式
介绍
通用HID是一种允许任何人创建自己的USB HID设备的工具。HID是Human Interface Device的首字母缩写。这是一个非常通用的规范,它指定了如何配置输入和输出控件,以便任何计算机都可以读取它们。HID设备可以是操纵杆,游戏手柄,键盘,鼠标,CNC挂件,条形码阅读器,力反馈装置; 与用户交互的任何事物。
通用HID包括两部分:硬件和配置软件。硬件可以是任何Atmel at90usb1287或at90usb1286基板。其中最便宜的是 teensy ++ 2.0开发板或at90usbkey演示板,你可以获得不到30美元。该软件是开源的,可以在下面下载。它可以在Linux和Windows上运行通过拖放组件,然后用虚拟线连接引脚,可以使用配置对硬件进行编程。然后只是物理连接组件和中提琴!USB HID设备!
下图显示了我的第一个测试CNC挂件和用于定义它的软件配置。单击它们以获取大图像。

那么Generic HID支持哪些组件?
项目最大
数量
描述
AT90USB12871这是完成所有工作的微控制器。它有48个多用途I / O引脚。目前这是唯一支持的类型。
电位器8 1电位计是一个可变输入组件,通常位于操纵杆轴上,但这里的术语表示任何模拟输入。
数字编码器8 1编码器像电位计一样旋转,提供相对运动信息,而不是绝对位置。目前仅支持数字型编码器。需要上拉电阻和去抖动的机械设备无法可靠地工作。
按钮48 1个别按钮。
键矩阵按钮5761如果它们以矩阵形式连接,则可以添加更多个别键。一个4行4列矩阵,使用4 + 4 = 8个I / O引脚,提供4x4 = 16个按钮。
旋转选择开关24 1旋转选择器开关的作用类似于多状态按钮。每个输出状态占用1个I / O引脚。
编码旋转开关48 1像上面的旋转选择器开关一样,但输出是二进制编码的。例如,编码开关不需要4个I / O引脚用于4个输入,而是可以将该值编码为2个二进制位,仅使用2个I / O引脚。
液晶显示42 1基于简单字符的LCD显示设备。它们有各种配置,如8x1,16x2,20x4,40x2。支持40x4显示作为2个显示。
LCD SPI1 1支持通过SPI总线连接的自定义图形LCD显示器。这是一个320x240分辨率,16位色的自定义显示器。细节在 这里
LED48 1LED可用于状态指示灯。每个LED占用1个I / O引脚。注意最大电流消耗。
双色LED24 1这些是在一个封装中具有相反方向安装的两个LED的设备。它们可以显示3种状态 - 关闭,LED1,LED2。
三色LED24 1这些设备在一个封装中安装了两个独立的LED。它们可以显示4种状态 - 关闭,LED1,LED2,LED1 + LED2。
RGB LED16 1这些设备在一个封装中安装了三个独立的LED,红色,绿色和蓝色LED。他们可以显示8个州。
定向开关24 1也称为帽式开关,这些是通过开关指示方向的垫或操纵杆。它们可以有2个,4个或8个按钮。
计数器1 1支持一毫秒精确计数器。它的使用示例是为更新时间戳,或充当看门狗。
PWM7 1at90usb1287微控制器支持8个PWM输出。这些可用于驱动不同强度的LED,例如RGB LED以提供真实颜色,或调制由晶体管(例如LCD背光)切换的较大负载。
1.最大值取决于微控制器上可用的空闲引脚数。如果还连接了其他组件,则最大值将降低。最大值也会根据微控制器上的电气负载而降低。最大值可以通过配置数据的4kB内存限制来限制。总输入和总输出的64字节数据包大小可以限制最大值。可以通过无法释放的引脚来限制最大值。应该通过常识减少最大值。
背景
为了能够远程控制我的CNC铣床,我开始玩简单的USB游戏手柄。为Mach3和EMC编写自己的驱动程序允许我配置游戏手柄以使用操纵杆移动每个轴,并将按钮映射到CNC功能。我制作了驱动程序支持加速配置文件,这使得操纵杆更加实用。
我玩了Contour Design的Shuttle Pro,这是一款USB设备,有几个按钮,一个转轮和一个转盘。我觉得这很酷,想要我的吊坠中的那些功能。和LED显示状态信息。我想要一台LCD用于输出。也许是一个蜂鸣器。由于没有可以做到这一点的吊坠(至少我能买得起的任何东西),我决定建立自己的吊坠。
起初我看着拆卸操纵杆和梭子,并将所有东西都放在一个盒子里。这不会给我输出,我必须运行两根usb电缆(或在吊坠中粘贴一个集线器)所以我决定从头开始构建。
我选择的微控制器是Atmel 8位芯片。它们具有USB功能范围,AT90USBxxx系列,可提供8,16,64和128k闪存,以及支持USB主机或仅支持设备的版本。我最初的计划是制作自己的电路板,但我希望这个项目能够回馈给互联网社区,所以我选择使用AT90USBKEY作为我的基础。
AT90USBKEY是Atmel制造的演示板。它是一块带有8MHz AT90USB1287的小型主板,还有一些闪存,一个简单的开关操纵杆,一些按钮,LED,一个温度传感器和电压调节器。微控制器的所有I / O端口均可通过电路板上的通孔进行访问(尽管间距为0.1“x 0.05”)。董事会的价值不低于30.00美元(上次我看过的是Digikey,或者是Mouser的售价更低,为29.99美元),而AT90USB1287芯片只有15.05美元。
最近为teensy ++ 2.0 开发板添加了支持 。这是一个比USBKey更好的选择,因为它更便宜(最后检查24美元),只有必要的芯片和支持电路。大多数IO引脚都可用(其中46个)。
通过将数据上载到EEPROM来配置电路板的固件。配置数据控制一些硬件属性,但主要是它只定义哪个组件连接到哪个I / O引脚。配置数据使用GUI应用程序进行,然后可以将更改上载到固件。只要引导加载程序固件保持不变,就不需要编程硬件。
积分
通用HID是使用许多第三方库和应用程序源代码和演示构建的......
MyUSB / LUFA核心USB框架由Dean Camera和他的 LUFA库完成的伟大工作提供 。它在这里列为MyUSB,因为当我开始使用它时它就是它的名字。从版本1.2开始,通用HID现在使用LUFA。
DFU程序员dfu程序员是一个开源的DFU程序员。我原计划使用Atmel翻转应用程序来编程固件。它作为Windows下的库工作得很好,但在Linux下设置和使用是一场噩梦。dfu程序员源被黑客入侵并被集成到C ++库中以供Generic HID使用。
libusb v0.1.12低级USB访问使用libusb v0.1.12完成。注意 - 这是较旧的“旧版本”。使用此版本是因为它具有与win32版本相同的接口。使用libusb意味着GenericHID可以在Windows和Linux上运行。
的libusb-1.0新版本1.0重写了libusb0.1。Linux版本。
libusb-win32 v0.1.12这是libusb库的Win32版本。
Qt的Qt是一个跨平台的应用程序和UI框架,用于提供图形界面。因为我在Qt上标准化,所以我也使用集合类,线程类和XML DOM类。
QtPropertyBrowser这是QtSoftware提供的附加库,它实现了属性浏览器类。
下载并安装
所有版本都可以从sourceforge下载 。
视窗
请注意,上次发布的Windows版本1.2使用的是libusb 0.1,它只能用于Windows XP版本。对于较新的操作系统版本,我建议您下载免费的 VMWare Player或同等产品,并安装最新的免费Ubuntu, 然后按照下面的linux安装说明进行操作。
下载最新的Win32二进制文件 generichid_win32_x.x.zip
  • 要安装应用程序,请创建一个空目录并将该文件的内容解压缩到新目录中。
  • 下载并安装libusb win32库 libusb-win32-filter-bin-0.1.12.2.exe
  • 下载并安装最新版本的 Atmel Flip应用程序。这是获取微控制器的引导加载程序模式的驱动程序所必需的。
  • 如果使用AT90USBKey,将电路板插入USB端口,进入bootloader模式(按RST按钮,按HWB按钮,释放RST按钮,释放HWB按钮)并安装DFU驱动程序。这些应该在C:\ Program Files \ Atmel \ Flip3 \ usb \ usb_dfu.inf或者你安装了翻转的地方。
  • 如果使用自定义通用HID板,请插入板,然后安装步骤3中描述的DFU驱动程序。
  • 运行GenericHID.exe应用程序。
Linux的
下载最新的Linux Debian软件包 generichid_x.x_i386.deb
使用您最喜欢的包管理器安装GenericHID。或者从命令行安装它......
sudo dpkg -i generichid_1.0_i386.deb
可以使用...卸载 GenericHID
sudo dpkg -r generichid
在命令行键入generichid以运行它。如果在终端窗口中看到权限或访问被拒绝错误,请查看有关linux权限的部分。
资源
最新版本的GenericHID(版本1.3及更高版本)仅作为源代码版本提供。在终端中,下载tar文件,然后解压缩...
&#12316;> wget <url to tar file>
&#12316;> tar xf generichid_1.3_src.tgz
切换到源根目录...
&#12316;> cd generichid
检查BUILD文本文档中的构建要求。
&#12316;/ generichid> cat BUILD
安装BUILD文档中列出的构建要求。在版本1.3中,他们是......
&#12316;/ generichid> sudo apt-get install build-essential qt4-qmake libqt4-dev libusb-1.0-0-dev gcc-avr binutils-avr gdb-avr avr-libc avrdude
然后运行“qmake”来构建makefile,“make”来构建项目,然后运行“make install”来安装应用程序......
&#12316;/ generichid> qmake
~ / generichid> make
~ / generichid> sudo make install
然后可以在命令行运行GenericHID ...
&#12316;/ generichid> generichid
如果在终端窗口中看到权限或访问被拒绝错误,请查看有关linux权限的部分。
改变历史
日期描述
1.52013年12月2日
  • 在请求初始IN报告后,修复固件错误,使USB端点处于未知状态。这导致后续请求失败,直到USB端点清除。
  • 在设计和测试选项卡之间进行整洁切换。
  • 添加一些示例配置。
1.42013年12月1日
  • 修复teensy2 ++程序代码无法从程序对话框重启设备的错误。
  • 部署/etc/udev/rules/99-generichid.rules文件
1.32013年11月28日
  • 仅限Linux Source发行版。下载源代码并阅读BUILD中的说明
  • 转到libusb-1.0。这意味着目前只有1.3的linux版本。
  • 立即使用共享库。这简化了构建,但可能导致部署问题(因此源仅发布)。
  • 修复数字编码器在其实际为绝对时将其输出报告为相对的错误。
  • 将debounce属性从布尔开/关标志更改为以毫秒为单位的时间(最大250)。使用去抖动的所有现有控件将默认为10毫秒。
  • 将数字编码器重命名为增量编码器,因为它支持数字和机械设备。
  • 编码器现在具有上拉电阻属性,可部分支持机械增量编码器。这是未经测试的。编码器仍然连接到中断引脚,这对机械设备来说是禁忌。(去抖可能会导致大量中断)。
  • 新的编码器增量输出模式。绝对模式累加n位值然后换行。增量模式报告自上次报告以来的小变化。
  • 新的LCD报告打开光标和闪烁的光标
  • 修复定向开关只是普通无效的错误
  • 通过软件禁用JTAG。这是默认值。它可以实现更多引脚。
  • 修复通用板上的C3 / C2引脚交换
  • 添加16Mhz通用板。这适用于使用运行频率为16MHz的AT90USB1287 / 6的定制主板
1.22010年4月18日
  • 支持teensy ++ 2.0开发板
  • 增强的PWM通道从8到7
  • 编码器的可配置位(1-16)
  • 从MyUSB升级到最新的LUFA
1.12009年10月20日
  • 添加自定义SPI显示类型
1.02009年9月28日
  • 初始发行
已知的问题
即将编程的设备有时不响应Start Bootloader按钮。按下它几次有时会起作用。否则,使用硬件的方法启动引导加载程序。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|湘公网安备 43011102001614号|大海作坊 ( 湘ICP备17019901 )

湘公网安备 43011102001614号

GMT+8, 2019-6-18 22:15 , Processed in 0.220198 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表