分享

Arduino CP2102版本完美DIY

 zmc419 2017-04-08

      昨晚参加了北京科协“蝌蚪之夜”跨界科学沙龙之“DIY终极聚会”,在会上介绍了下一个月前做出来的Arduino CP2102版本的情况。

      五月底开始休了次长假,于是把自己以前的一个想法付诸实施,DIY一个CP2102版本的Arduino。因为之前从网上查了下,Global范围内,几乎还没有DIY成功过的,国外有几个贴子说成功了,但下面跟贴的也基本上一致反映不能成功。经过大半天的查资料、研究、试验,终于做好了。过了几天又做了一个,同样成功。

因现场是做的PPT演示,下面贴一下之前陆续写的一些总结:

      目前流行的Arduino版本,如UNO、Mega2560、Duemilanove等,其USB口基本都采用了ATMEGA8U2、ATMEGA16U2、FT232RL等芯片。这几种芯片在淘宝上的零售价基本都在15-20元左右。ATMEGA8U2、ATMEGA16U2等芯片由于是ATMEL较新的型号,也很难在本地买到。ATMEGA8U2、ATMEGA16U2芯片在Arduino板子上,主要的作用只是用作USB转UART,用在Arduino上确实是大材小用了。新版的Leonardo已经省略了USB IC,直接用一片ATMEGA32U4实现了所有功能。

      CP2102是俺之前一直用着的一个USB转UART芯片,Silicon出品。不论是实际使用还是网上的评论,这个片子的性能都非常让人满意。另外,这个芯片的价格与前面几种芯片相比,显得更加平易近人,淘宝上的价格普遍在5元左右。

      CP2102另外的优势在于,在实际使用时,外围不用接任何其它元件即可稳定地工作,而且还有3.3V100mA的电源输出,用在Arduino上时,完全不用再加5V-->3.3V的DC-DC元件。

      Arduino官方却从没出过CP2102版本的方案。最近趁着比较空闲,想到做个CP2102版本的Arduino UNO板子玩玩。Arduino UNO的板子是从淘宝上买的,买回来对比了下官方的PDF,发现这个版本是UNO最早的一版。由于是自己在家里用,并且几乎也没有使用大功率外围模块的可能,所以UNO的USB、外围电源切换方面的电路可以不用。简化掉这部分电路之后,可以发现Arduino的主板,就是一块最小系统的AVR学习板:)。

      事先,先用USBASP给ATMEGA328写好Bootloader,然后,将CP2102的TXD、RXD与ATMEGA328的RXD、TXD连接。在Win7 32位系统下安装CP2102的最新驱动。打开Arduino的IDE程序,选好型号、虚拟端口后,往Arduino UNO上写例程时却发现总是编程出错。错误代码是avrdude: stk500_getsync(): not in sync resp=0x00

      这样的代码很抽象,从网上搜索,也给出一堆不同的提示。参考性不高。

      Google搜索后,发现网上都在反映CP2102用在Arduino上出现的问题。主要是Arduino在编程时,需要有一个自动复位的过程,如果编程时不能复位,就会编程失败。

      目前网上的方案主要有3个:

      1、编程过程中,在IDE提示上载文件时,手动按板子上的RESET按钮复位。

      2、将CP2102的DTR脚引出来接到328的RESET脚上。

      3、将CP2102的DTR脚及RTS脚引出来接接到328的RESET脚上。

      其中,第一种方法需要连续试几次找准复位的时机,也就是需要有经验后,才可以方便地操作。虽然可以编程成功,但每一次写程序时都要手动复位,比较麻烦。

      第二种方法,是根据Arduino UNO的官方电路图来的。DTR要通过一个0.1UF的电容接到ATMEGA328的RESET脚。

      第三种方法,是根据Arduino Duemilanove的官方电路图给出的。DTR要通过一个0.1UF的电容接到ATMEGA328的RESET脚;RTS脚直接接到ATMEGA328 RESET脚上。

      第二种及第三种方法,在网上这些给出方案的网友都说可以正常编程了,但读者的回复基本都说还是存在问题,不能正常编程。

      从Arduino UNO电路图中,可以看到ATMEGA8U2有一条DTR线要连接到ATMEGA328的RESET脚。在进行编程时,ATMEGA8U2需要给ATMEGA328一个信号让其自动复位。按网上的第二种方法,将CP2102的DTR脚引出,通过C5 0.1UF电容接到ATMEGA328的RESET脚,编程时依然出错。

      在Arduino Duemilanove版本中,FT232RL芯片除了DTR外,RTS脚也引到了ATMEGA328 RESET上。按其电路接法,编程时同样会出错。

      也就是说后两种方法在实际使用时,依然不能实现预定的要求。经过俺不懈滴努力研究,终于将CP2102版的Arduino完美方案研究出来。根据UNO的电路图,ATMEGA8U2的13脚其实也有个功能是CTS,将CP2102的CTS脚引出接至ATMEGA32的RESET脚即可。经这样的改造,使用CP2102编程成功。经过测试,这样的设置,使得RESET信号时间达到了Arduino主MCU的要求,对C5电容的容量偏差不敏感。即使在使用飞线时,也能稳定地编程。电路见下图。有滴同学可能很喜欢RXD、TXD编程时LED闪烁的效果,这个电路图里没有给出。我个人感觉没什么用处。如果实在想要的话,可以在RXD、TXD对地接LED+102或152左右的电阻。阻值根据LED的电流调整,数值尽量大一些。

      上图为用漆包线引出CP2102相应脚并与PCB相应接点焊好后,加了热融胶的效果。

      有滴同学可能说了,这么简单,还喷了这么多。其实就如那划条线1000美元的故事类似,知道在哪里画线更重要,哗哗。

      写在最后,Arduino项目组推出使用ATMEGA8U2、ATMEGA16U2版本的产品是有自己的想法的,在绝大多数的应用中,这些USB接口的芯片只是作为串口“刷机”及通信用。有少数的应用,如有USB键盘鼠标或MIDI控制等应用时,可以通过给ATMEGA8U2或16U2刷firmware的形式,实现相应的功能。用CP2102来做Arduino的USB编程及通信,实现了UNO及mega2560等版本的绝大部分功能,功能与Arduino Duemilanove官方版本一样,但成本降低很多,也算是达到了本次DIY的目的~~~

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多