看AVR软USB接口如何解决传统RS232接口数据采集的诸多问题

接口/总线/驱动

1139人已加入

描述

1.引言

在电力生产和电气测试工作中经常需要用便携式PC机通过接口采集和处理数据。

常用的带RS232串口的数据采集器,不允许带电(热)拔插,使用很不方便。而且现在大部分的PC机不带RS232接口,尤其是便携式机。取而代之的是USB接口。目前AVR单片机USB软接口技术应用的很普遍,最旱是ATMEL公司在《AVR309 Software UniversalSerial Bus》一文中,详细介绍了使用AVR单片机的普通IO口来实现USB接口功能;同时介绍了ATmega8程序(固件)的编程方法,并提供全部汇编程序源代码。在源码的基础上,笔者通过参阅和分析不同作者各种版本的USB软接口固件(原程序)进行优化组合,更改和删除一部份程序后,性能有很大的提高。CPU占用率比源码程序低得多。AVR单片机ATmega8具备AVR高档单片机性能和特点,而价格仅与低档单片机相当。其内置多路A/D转换器满足模拟数据采集需要。

2.ATmega8单片机

ATmega8是ATMEL公司AVR系列单片机,采用低功耗CMOS工艺生产的基于AVR RISC结构的8位单片机,大多数指令执行时间为单个周期。内有10位精度的逐次逼近型ADC.

ADC与一个8通道的模拟多路复用器连接,能对来自端口C的8路单端输入电压进行采样。

单端电压输入以0V(GND)为基准。ADC包括一个采样保持电路,以确保在转换过程中输入到ADC的电压保持恒定。ADC由AVCC引脚单独提供电源。AVCC与VCC之间的偏差不能超过±0.3V.器件之内有标称值为2.56V和AVCC基准电压。基准电压可以通过在AREF引脚上加一个电容进行解耦,以更好地抑制噪声。

AVR单片机的系统内可编程特性,无需购买昂贵的仿真器和编程器也可进行单片机嵌入式系统的设计和开发;同时也为单片机的初学者提供了非常方便和简捷的学习开发环境。而且在省电性能、稳定性、抗干扰性以及灵活性方面考虑得更加周全和完善。

ATmega8单片机与其它单片机比较而言,简便易用、费用低,相对进入AVR系列单片机开发的门槛也低,软件资源丰富,程序容易开发。由于Atmega8单片机是常用芯片,本文对其特性、内部结构、引脚说明等不做介绍。

3.硬件电路

基于ATmega8的USB软接口数据采集硬件电路非常简单。以ATmega8单片机为核心,加上少量的外部元件构成(如图1所示)。

接口

图1中USB数据线D-上的上拉电阻R3用于主机识别低速USB设备(USB规范中定义)。

12MHz晶体和两个20p的电容组成单片机运行所必须的时钟(USB一个数据位有8个时钟周期)。

D+连接到PD2,同时也是INT0引脚。D-连接到PD3.电阻R1、R2起到限流和保护作用,防止在意外情况下损坏计算机的USB端口或单片机的端口。单片机所需的电源Vcc由USB口输出5V电源直接供电。因为在USB规范中规定数据线D+和D-上的电平范围是3.0V至3.6V,D1和D2是3.6V稳压二极管,用于限制数据线上的电平。图中LED1和R4为电源指示电路。LEDa1-LEDa6、Ra1-Ra6为A/D转换通道指示电路。L1、C3、C4按ATmega8产品说明手册A/D转换精度要求设置。Ri1-Ri6、Ci1-Ci6为模拟信号采样输入设置,其电路和参数根据不同输入要求而改变。图中J2是模拟信号采样输入端,可接入单端0-2.56V、0-5V输入模拟信号。测量交流电参数需要对交流电信号处理后输入;如要测量差动模拟信号需要改变输入采样电路。并将单片机ATmega8改用ATmega16,ATmega16的A/D转换可单端输入也可差分输入;还有2路可选增益为10倍与200倍的差分输入通道;就是多了几个引脚,电路图有所变化;单片机软件可兼容和移植,并增加几条有关A/D转换差动输入和数据处理的指令。如需要请参阅ATmega16产品说明手册(ATMEL公司网站可下载)。

4.ATmega8单片机程序(固件)

本程序基于单片机ATmega8以纯软件完成USB协议接收、发送和解码,以实现USB接口数据通信功能;通过指令操作单片机内置A/D转换实现模拟量数据采集功能。USB协议定义低速USB设备通信速率是1.5M位/秒。

如单片机使用1 2 M H z的时钟频率,主频是1.5MHz的8倍。也就是说,单片机每8个周期就要精确完成一个(对普通IO端口)数据位的采集或发送。

这种情况对单片机的时序要求严格,为此单片机的软件核心部分代码必须由汇编语言编写。ATmega8芯片是ATMEL(爱特梅尔)公司的AVR系列单片机。ATMEL公司网站提供AVRStudio集成环境(IDE)开发软件免费下载。

安装后直接支持汇编语言。本固件程序以此开发软件汇编编译并烧写(烧写用USB-isp下载线)。

程序以模块化结构编写,为了各模块相互运行协调和高效,USB接口做如下设置约定。

状态代码=1:表示收到控制端口SETUP令牌包(中断内收到令牌包后设置)

状态代码=2:表示收到控制端口IN包(中断内收到令牌包后设置)

状态代码=3:表示收到控制端口OUT包(中断内收到令牌包后设置)

状态代码=5:表示收到数据端口OUT包(中断内收到令牌包后设置)

状态代码=6:表示收更改地址(主循环内设置)

操作标志=2:表示收到控制端口SETUP包数据(中断内收到数据包后设置)

操作标志=3:表示发送完控制端口IN数据包(中断内发送完IN数据包后设置)

操作标志=4:表示准备好控制端口IN数据包(主循环内设置)

端口号=0:控制端口

端口号=1:数据IN端口

端口号=2:数据OUT端口

端口号=3:串口状态IN端口(USB虚拟RS232接口,CDC类规范要求)

5.结论

程序从系统复位开始初始化系统(设置堆栈地址、存储器及寄存器初始化、A/D转换器初始化)和设置软USB接口初始值后,进入主程序不断检测USB复位信号(两条数据线保持10-20ms低电平)。如果出现复位 时当多个物品共用一个总发射器,一旦总发射器不能立刻找到,想找回所需物品也将变得困难,因此可以在一个或几个物品上也安装上小发射器,在总发射器上附加报警器,这样就可以利用物品上的发射器感应并找回总发射器,然后再利用总发射器找回所需物品。此外,它的应用范围较广,如博物馆、银行等,市场需求量会比较大,是现代社会的必备品之一, 因此具有较高的推广价值和较好的应用前景。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分