首页 工作计划 工作总结 事迹材料 心得体会 述职报告 疫情防控 思想汇报 自查报告 党建材料 策划方案 教案设计 范文大全
  • 主题教育
  • 党课下载
  • 党史学习
  • 振兴乡镇
  • 工作汇报
  • 不忘初心
  • 规章制度
  • 谈话记录
  • 扫黑除恶
  • 共同富裕
  • 脱贫攻坚
  • 整改报告
  • 工作要点
  • 对照材料
  • 调查报告
  • 教育整顿
  • 观后感
  • 申请书
  • 讲话稿
  • 致辞稿
  • 评语
  • 口号
  • 发言稿
  • 读后感
  • 治国理政
  • 学习强国
  • 公文范文
  • AVR软USB接口在数据采集系统中应用

    时间:2022-11-11 20:15:07 来源:正远范文网 本文已影响 正远范文网手机站

    【摘要】利用AVR单片机ATmega8软USB虚拟RS232接口技术,通过单片机内置A/D转换器对模拟量数据采集,取代以RS232标准接口模拟量数据采集器。利用现有软件资源,实现USB软接口多点模拟量数据采集功能。硬件电路简单、性能稳定可靠。解决了传统的RS232接口数据采集器诸多问题。在设计AVR软USB接口固件(ATmega8单片机程序)时,USB接口参数配置按USB-isp(同样是AVR软USB虚拟RS232接口)下载线设置;并在PC机系统中安装其虚拟串口驱动程序。能支持PC机WIN7和XP等操作系统。

    【关键词】USB;接口;A/D转换;数据采集

    1.引言

    在电力生产和电气测试工作中经常需要用便携式PC机通过接口采集和处理数据。常用的带RS232串口的数据采集器,不允许带电(热)拔插,使用很不方便。而且现在大部分的PC机不带RS232接口,尤其是便携式机。取而代之的是USB接口。目前AVR单片机USB软接口技术应用的很普遍,最旱是ATMEL公司在《AVR309 Software Universal Serial 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软接口数据采集电路图

    图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位/秒。如单片机使用12MHz的时钟频率,主频是1.5MHz的8倍。也就是说,单片机每8个周期就要精确完成一个(对普通IO端口)数据位的采集或发送。

    这种情况对单片机的时序要求严格,为此单片机的软件核心部分代码必须由汇编语言编写。ATmega8芯片是ATMEL(爱特梅尔)公司的AVR系列单片机。ATMEL公司网站提供AVR Studio集成环境(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类规范要求)

    4.1 主程序

    程序从系统复位开始初始化系统(设置堆栈地址、存储器及寄存器初始化、A/D转换器初始化)和设置软USB接口初始值后,进入主程序不断检测USB复位信号(两条数据线保持10-20ms低电平)。如果出现复位信号就重新进行软USB接口初始化设置;无USB复位信号就不断检查USB接口状态代码和操作标志,并调用相应的程序处理。之后是对A/D转换器操作和数据加工及数据传送处理。主程序是闭合循环体,主程序流程如图2所示。

    图2 主程序流程图

    主程序在循环运行中主要操作如下:

    当出现USB接口操作标志=2,表示收到USB接口SETUP数据包,是USB设备描述符请求。

    程序检查请求类型:如是USB标准请求,准备USB设备请求参数配置枚举数据回答(有关回答参数配置数据组成和结构按USB协议规范要求,请参阅USB2.0规范)。如是设备商请求,准备有关CDC类参数配置请求内容回答(USB虚拟RS232接口,请参阅USB通信设备类规范)。然后设置操作标志=4,表示准备好控制端口IN回应包。再返回主程序循环体。

    当出现USB操作标志=3,表示要继续准备上次未准备完的控制端口IN数据回应包。然后设置操作标志=4,表示准备好控制端口IN回应包。再返回主程序循环体。

    主程序通过读取USB接口数据端口的缓冲区数据(在中断程序中接收的数据端口包OUT数据)进行分析,按主机A/D数据采集软件接口通信协议(命令格式)规定,执行相应的A/D操作指令。如选择A/D通道和选择基准电压等操作。相对应的启动A/D转换、检查A/D转换是否完成、读取A/D转换数据等操作指令配合执行。

    主程序完成A/D数据采集处理后按主机软件数据通信协议格式组成数据包后,再按USB规范(有效载荷)数据包最前一个字节是数据包标识码,接着是1到8字节数据(目前软USB最多只能8字节数据),最后增加两字节的CRC校验码(CRC校验码用查表法获取,减少占用CPU时间)。此数据包不含NRZI编码和填充位的内容(NRZI编码和填充位在中断程序发送数据位时同步完成),是4到11整字节的数据包。装入USB数据端点IN数据包缓冲区,由中断程序发送到主机。

    4.2 中断(INT0)程序

    本程序(固件)设置1个(INT0)中断源,中断程序是固件的主要部分。程序功能是USB接口数据接收和发送。程序处理流程如图3所示。

    图3 中断程序处理流程图

    程序首先由USB总线从空闲态转到K态时,USB主机开始发送同步字节,INT0引脚电平上升沿触发外部中断0(INT0),CPU进入中断程序,检查并等待同步字节(NRZI码)结束信号,开始接收数据位。在接收过程中对NRZI编码进行还原和移去填充位(在8个周期内完成NRZI数据流位解码和查找填充位并移去)后送缓冲区保存;同时检测包EOP结束信号单端零(SEO)。接收完成一个数据包(不含同步字节),程序对数据包长度少于3字节,丢弃,退出中断;长度大于3字节的以收到(有效载荷)数据包处理。长度等于3字节的可能是令牌包(第1字节令牌包类型、第2字节低7位是USB地址、第2字节最高1位和第3字节低3位是端口号、第3字节高5位是令牌包CRC校验码);检查地址确认是本设备后,分析令牌包类型。

    1)令牌包处理:

    第1字节=0x2D,是SETUP令牌包,设状态代码=1(表示接下收到数据包按SETUP数据包处理),退出中断。

    第1字节=0xE1,是OUT令牌包,检查端口号。

    端口号=0是控制端口OUT令牌包,设置状态代码=3(表示接下收到数据包按控制端口OUT数据包处理),退出中断。

    端口号不等0,是数据端口OUT令牌包。设置状态代码=5(表示接下收到数据包按数据端口数据包处理,也就是前介绍的主机A/D数据采集命令数据),退出中断。

    第1字节=0x69,是IN令牌包,检查端口号。

    端口号=0,是控制端口IN令牌包,检查操作标志。

    如操作标志不等4,表示未准备好控制端口IN数据包,发送NAK,退出中断。

    如操作标志=4,表示已准备好控制端口IN数据包,发送控制端口IN数据包。检查状态代码是否等于地址变动代码,是转改变USB地址处理后,中断返回。USB地址没有改变,设置状态代码=2,设置操作标志=3(表示主程序需要再准备控制端口IN数据包),退出中断。

    端口号不等0,是数据端口IN令牌包,按数据端口号,发送相应端口准备好的IN数据包。如没有准备好,发送NAK。退出中断。

    2)(有效载荷)数据包处理:

    对于数据长度大于等于3字节的数据包,检查包标识符(数据包第1字节)。

    第1字节不等0x4B与不等0xC3,设置状态代码=0,丢弃,退出中断。

    第1字节=0x4B或=0xC3,是数据DATA0或DATA1包,检查状态代码。

    如状态代码=1,表示是SETUP数据包数据,发送ACK,复制数据到控制端口缓冲区,设置操作标志=2,表示由主程序对数据分析处理并准备控制端口IN数据包,退出中断。

    如状态代码=5,是数据端口数据,复制数据到数据端口缓冲区(是前介绍的主机A/D数据采集命令数据),发送ACK;缓冲区满发送NAK,退出中断。

    如状态代码=3,表示是控制端口OUT数据包数据,检查操作标志。

    如操作标志=2,表示SETUP数据包还未处理,不知数据何用,丢弃,发送NAK,退出中断。

    如操作标志不等2,发送ACK,检查波特率设置标志。

    波特率设置标志为0,设置操作标志=0,退出中断。

    波特率设置标志不为0,取数据设置波特率(虚拟),清除波特率设置标志,准备双0答案,设置操作标志=4,表示准备好控制端口IN回应包。退出中断。

    5.驱动程序

    由于本软USB接口是按虚拟串口设计,与目前常用的AVR-isp下载线参数配置相同,可在互联网找到很多的AVR-isp下载线驱动程序。笔者选择德国AVR爱好者AVR-isp下载线作品的驱动程序,直接安装使用。能支持PC机WIN7和XP等操作系统。安装后在PC机系统中生成虚拟串口。

    6.结束语

    AVR单片机软USB虚拟RS232接口电路简单、成本低、软件资源丰富、使用灵活。本文由一片AVR单片机ATmega8实现软USB虚拟RS232接口和单端输入模拟量(A/D转换)数据采集功能。如要测量差动模拟信号,将单片机ATmega8改用ATmega16可满足差分输入和可选增益差分输入要求。ATmega8单片机的A/D转换操作指令简单,相对比其它的AVR软USB接口技术应用而言,占用的CPU时间少得多。性能更稳定可靠。

    另外,受到单片机的处理能力限制,AVR单片机软USB接口技术不适合通信数据量大和处理能力要求高的应用场合。

    参考文献

    [1]阿克塞尔森.USB开发大全(第4版)[M].北京:人民邮电出版社,2011.

    [2]于正林等.AVR单片机原理及应用[M].北京:国防工业出版社,2009.

    [3]Atmel.8-bit Microcontroller with of ATmega8[M].San Jose:Atmel Corporation,2008.

    [4]Atmel.8-bit Microcontroller with of Atmega16[M].San Jose:Atmel Corporation,2008.

    [5]Atmel.AVR309 Software Universal Serial Bus[M].San Jose:Atmel Corporation,2006.

    推荐访问:采集系统 接口 数据 AVR USB