基于AVR USB接口温度测量系统设计.docVIP

  • 1
  • 0
  • 约2.82千字
  • 约 6页
  • 2018-10-30 发布于福建
  • 举报
基于AVR USB接口温度测量系统设计

基于AVR USB接口温度测量系统设计   摘要:以AVR单片机Atmega8为核心,利用中断机制和串行传输通信方式来模拟USB通信方式,使用GCC编译avr程序。利用模拟出的USB通信模式实现主从设备之间的数据输。   关键词:Atmega8;USB通信;GCC;数据传输   中图分类号:TP274 文献标识码:A   1、引言   ATmega8是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间, ATmega8 的数据吞吐率高达1 MIPS/MHz。USB接口以其数据传输快、连接简单、易于扩展、支持热插拔等特点已成为外设与PC通信的主要方式之一。灵活轻便的Atmega8可以利用中断和串行通信技术实现模拟USB通信。   2、系统硬件设计   2.1硬件总体设计   设计所用的传感器是DALLAS公司生产的一线式数字温度传感器DS18B20,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。 核心模块是AVR高速单片机Atmega8。AVR单片机是新一代基于哈佛结构的高速RISC微控制器,具有速度快、价格低、可靠性高,I/O口线驱动能力强和片内集成外设资源丰富等特点,其内部集成有可进行ISP下载编程的Flash,EEPROM、熔丝位和锁定位。AVR单片机的ISP下载电缆制作简单、成本低廉,还有免费的下载软件(例如PonyProg)支持。Atmega8内部集成了8路10位的ADC,外部中断通过引脚INT0和INT1触发。电路板的硬件资源中附加一个USB接口,便于主从之间进行数据交换。   2.2软USB的实现方法   在不是使用USB控制器的情况下,实现AVR单片机进行类似USB形式的数据传输,需要在硬件上加以添加器件。如图一,在Data-上接一个阻值为1.5K的上拉电阻。该上拉电阻实现的是低速USB数据传输。AVR单片机由于实现的是软USB,由于本身处理能力所限,只能实现低速数据传输,故该上拉电阻不可缺省。此外,系统要使用12 MH2晶振,这样,经过8分频后才能使用USB低速1.5 MB/s的数据传输速率。   由于USB接口的电压数值为3.6 V。而电脑USB端口的输出电压为5 V,因此,为了电平匹配,本电路特使用3.6 V稳压二极管D1、D2来分别与D一、D+相连,其中两端口分别通过68Ω的电阻与PD4以及PD2相连;   因为涉及到外设,所以需要安装驱动。本文所选择的驱动程序为LibUSB-Win32。该驱动程序可应用于Win2000、WinXp等Windows操作系统上。并允许用户通过直接调用函数的方式对Windows系统上的任意一个USB设备进行访问。该驱动程序具有以下特点:能够任意与已安装的USB设备进行通信;可用作自己开发USB设备的驱动程序;支持批量和中断传输;支持USB规范的所有标准设备请求;支持USB设备制造商的自定义请求。   2.3原理图设计   针对本设计所要完成的任务,以Atmega8为核心,设计电路图并制作开发板。原理图的绘制分成两层来设计:显示部分(DISPLAY)和微处理器部分(MCU)。DISPLAY层主要有LED和LCD显示器;MCU层主要有Atmega8核心器件、USB接口电路、AD转换部分、相应的串口以及必要的周边电路。   3、软件部分设计   使用GCC可以方便的编译avr程序   3.1系统流程   软件设计及其实现是基于WINAVR编程环境,代码则利用C语言实现。AVR单片机主要完成两个功能:温度测量和数据传送。温度测量主要是对电压信号进行采样,以确定温度的离散数值。传送数据则是将测量的数据通过AVR所模拟的USB端口传至PC端,以便PC端进行数据的显示。   3.2温度数据的采集   ATmega8内含一个10位逐次逼近型ADC。该ADC可与一个8通道的模拟多路复用器连接,以对来自端口C的8路单端输入电压进行采样。单端电压输入以0 V(GND)为基准。对于连续AD数据采集,采用的是中断法与微处理器进行通信,即一次AD转换结束后便产生中断。设计时可利用如下函数对电压数值进行采集:首先定义全局变量Value,储存所测量到的温度数值,并将该值作为USB端口的发送数值。   3.3USB数据传输   为了利用ATMEGA8模拟软USB,在搭建好了开发环境的前提下,在WINAVR将AVRUSB的文件配置文件夹USBDRV放置在源文件目录下。USB接口的函数的实现:   (1)初始化函数:使用AVRUSB前,通常都要通过调用初始化函数usbInit ()来对USB端口进行初始化,调用该函数之前,

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档