分享

也来聊聊arduino模拟USB鼠标

 金刚光 2020-01-28

开始
此时正好手头没事,而且所需的硬件都有,所以果断摆上东西,按照帖子的说明一步步链接好电路,下好程序,插上USB线。
“无法识别的USB设备”
怀疑
首先,觉得是自己的接线方法有问题,所以把所有器件都拆下来从新连接上,结构依旧无法识别。看了下跟帖,也有些人说无法识别,但也没有提出解决方案。
其次,是不是帖子贴出来的代码有问题呢?遍在网上搜了好多发布的arduino的USB库和代码,有的编译不通,有的编译成功,但是下载下去之后依旧无法识别。

再次,怀疑是稳压管的型号不对,因为用的稳压管是在桌子上小垃圾堆里照出来的,不知道具体型号。用万用表量了一下USB信号线的电压,4+V,果然超了……原贴上建议的是3+V,这下完蛋了,看来这个鼠标我是做不成了。
休息干点别的吧,反正手头也没有适合的稳压二极管。突然灵光一现:这个稳压管是坐什么用的呢?可能一:作为USB信号线,对静电比较敏感,所以用稳压管来释放经静电,放置静电打坏器件。如果是这样,那就会有如下两个疑问:1、如果作保护器件的话,去掉这个器件也不会影响系统工作,2、如果是保护器件为什么一定要用3+V的稳压管呢,我的是4+V的应该也没有问题啊。显然不是起保护作用。 可能二:作为USB信号线的阻抗匹配即滤波。因为二极管的PN结宽度会随两端点啊的变化而变化,所以二极管是带有电容性的,如果这样也会有疑问,1、如上可能性疑问二,既然3+V二极管可以那么4+V的二极管也可以。2,滤波USB低速通信时影响不大。所以也不是其这个作用。最后的可能,因为使用5V的arduino,所以稳压管的作用就是限制USB数据线的电压,这个倒是说得通,3+V二极管可以,4+V的二极管也不可以。俗话说要动脑也要动手,所以我火速查了一下USB标准的文档

,证明,稳压管的作用就是把USB信号线的电压限制在2.8-3.6。这样既然知道了稳压管的作用就好办了,虽然手头没有没有稳压管,但是把信号线的电压先知道这个范围内,方法也很简单。我让arduino运行在3.3V这个问题就解决了。因为我用的是arduino pro mini,

他是电源可外接的,恰好手头的FTDI也有3。3V输出,

拿来借用一下,OK这个问题解决。USB在此插在电脑上试了一下,发现还是不行,哭了!
最后,发现所给的电路图中USB信号定义顺序有问题,记忆总USB数据线顺序是VUSB,D-,D+,GND。而原贴中的顺序VUSB,D+,D-,GND。神奇了!还是再看看USB标准吧

也就是说原帖子上拉电阻拉到D-是没错的,但是因为D-D+的顺序颠倒了,所以大多数人都会把上拉电阻拉到D+。当然我也接错了,之后调了一下上拉的位置,模拟的鼠标就被识别了。
总之,原帖USB接口线序有问题会误导大家接线,所以大家的会出现无法识别的问题。贴出来的程序没问题
另外,传统不带USB的AVR能够实现USB功能,虽然是很常见的事,但是在Arduino在国内还是比较少见的。对于比较专业的Arduino也比较建议使用pro mini这样的精简硬件版本,好处有三,第一引出端口超多,方便自己使用。第二体积小,便于潜入各种作品当中,第三价价格低。

第二季主要分析用普通arduino普通IO口模拟USB所需电路的硬件分析
先贴张图:

上图是5V系统的IO口仿真USB所需的硬件电路。
其实这个电路对大家来说并不陌生,大家手头的USBasp一般都是采用这个电路,应为这种下载器也是采用没哟USB接口的AVR来设计的。
先说下2.2k电阻的作用。第一季已经提到过了,USB标准中,低速设备的D-信号线要有1.5k电阻上拉到电源,这里就不在上图了。因为这个是5V系统,所以使用电阻要比标准电阻大一些。
只有是稳压二极管。也就是传说中的齐纳二极管,学过模电的同学肯定知道(二极管的方向击穿有两种,一种是雪崩击穿,一种是齐纳击穿。书里大概是这么说的。)稳压二极管的工作原理就是当反向电压达到一定值时,他便会被反向击穿,通过这种方式来稳定电压。这种击穿当电压降低之后二极管可以恢复到正常状态,几乎不会对二极管有损坏。不说废话了,这个二极管的作用就是将数据线电压有5V等级,稳定到3V左右等级。
最后呢,说下串联在信号线68欧姆的电阻。这个电阻的作用大家可以探讨一下,我这里只是说下自己理解的主要作用。首先呢,还是来看标准,

标准上的意思就是USB信号的单端等效阻抗是28-44欧,所以这个68的电阻其这个作用。第二,这作用个人觉得重要与第一个。当信号被arduino拉到高时,稳压二极管便会被击穿。假设没有这个电阻,因为arduino的IO引脚与稳压管之间没有压降(因为没有电阻)所以稳压二极管就要漏下很多电流,知道吧IO口电压拉低至稳压电压。在这种情况下可以认为是IO重负载,所以输出电流接近AVR的IO的最大驱动电流40mA,这样会极大损害IO结构,无辜功耗增加,再个就是需要选一个功率稍大的稳压二极管,这种情况下也会增加不稳定性,有了这两个电阻便会避免以上问题。这样看这个电阻可以看做是限流电阻了

在3.3V系统中
2.2K的电阻,当然可以按照标准改为1.5k
再个限流电阻可以去掉了
另外68欧姆的电阻,也有可以去掉的可能……没试过,稍后去掉看下上来汇报

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多