基于USB接口的温度控制器(1)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 基于USB接口的温度控制器(1)

 

USB(Universal Serial Bus)是一种新型的通用串行总线,它是快速的、双向的、同步的、可以热插拨的、动态连接且价格低廉的串行接口。正是基于这一特点,现在很多的计算机外设都有USB接口。本文正是利用这一新型USB接口来设计上位机与下位机系统之间的通信。利用新型的一线式数字温度传感器测量温度,并通过USB接口和计算机端应用软件进行通信。

本文首先介绍了本系统相关的背景知识以及USB的通信协议,进而介绍温度控制的基本意义,提出利用USB设备芯片CH372、一线式数字温度传感器DS18B20和单片机AT89C51来开发基于USB温度控制系统。采集的温度数据通过USB接口上传到上位PC机上,并利用应用软件对其进行处理。上位机应用软件用C ++ builder 编写,其运用CH372接口芯片的动态链接库建立起上位机和下位机之间的通信机制。上位机将采集到的温度数据在PC机上显示出来,并且显示实时温度采集图像。

此外,应用软件可以对下位机进行温度极限设置等简单控制功能,当采集到的温度超过某一设定极限温度,则对系统进行报警。另外下位机还为今后的扩展保留一定的资源。

1  背景知识

在USB产生之前,外设与PC机的通信主要是通过PC机主板上所提供的各种接口来

实现,如ISA接口、PCI接口、串行接口等,这些老式的接口存在着很多缺点:非共享式接口、体积大、接口规格不统一、采用传统的I/O模式等等。为了克服老式接口这些缺点,PC机制造商和用户迫切需要一种新型的外设连接方式。这时USB应运而生,它是一种快速、快速、双向、同步、廉价、并支持热插拨功能的串行接口。

早在1995年,就已经有PC机带有USB接口了,但由于缺乏软件及硬件设备的支持,这些PC机的USB接口都闲置未用。1998年后,随着微软在Windows 98中内置了对USB接口的支持模块,加上USB设备的日渐增多,USB接口才逐步走进了实用阶段。

这几年,随着大量支持USB的个人电脑的普及,USB逐步成为PC机的标准接口已经是大势所趋。在主机(host)端,最新推出的PC机几乎100%支持USB;而在外设(device)端,使用USB接口的设备也与日俱增,例如数码相机、扫描仪、游戏杆、磁带和软驱、图像设备、打印机、键盘、鼠标等等。正是USB具有热插拔、共享式接口、携带方便标准统一可以连接多个设备等这样的优点,才使USB得于快速的发展。

本文将利用这一新型计算机接口来设计温度控制系统。


2  系统概述

本章将对基于USB接口的温度控制系统在工业上的应用进行分析,并介绍系统的特点、功能以及使用到的开发工具。

2.1 系统的特性

由于该系统利用USB接口,所以具有USB的实时传送数据,与上位机进行信息交流,而上位机又可以连接在互联网上,所以远程的PC机也可以利用互联网对温度检测系统进行查看等各种操作。该系统利用先进的温度传感器,可以对温度快速的进行反应,把温度数据传到下位机进行初步处理数据,进而与上位机通信。总的来说,该系统有以下几点特点:

·工作人员可以远离生产环境通过计算机对其进行查看处理;

·多点温度测量;

·全天候检测温度,并可以在没有工作人员的参与下对生产环境进行简单处理;

·对生产环境的温度进行设计极限温度,一旦超过极限温度,系统将对起进行报警,并停止生产环境的工作;

·测量温度误差比较精确,在0.5℃内;

2.2 系统的功能

   该系统主要有以下功能:

(1)对温度进行检测。利用该系统可以远离恶劣生产环境的情况下,对其进行温度测量;

(2)对现场温度进行实时采集;并在PC机上显示出来;

(3)在PC机上实时做出温度图像;工作人员在电脑上便可以直观的得到系统温度图像;

(4)简单的系统控制;通过计算机上的应用软件可以对温度设置,一旦超过极限温度,发出报警,进而通知工作人员快速的对生产现场进行各种相应操作,这样可以防止温度超出极限温度;

(5)在上位机端的应用软件上提供系统使用帮助。用户可以利用该功能帮助对系统进行操作。

2.3 系统开发平台

  本次系统需要用到的开发工具为:keil C、 C++ builder、Protel、计算机、烧写器。

Keil C是目前世界上最好的MC-51单片机的汇编和C语言的开发工具支持汇编c语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真。C++ builder 是计算机高级语言C++比较好用的编程工具,它是属于一种可视化的计算机语言。 Protel是世界上最好的硬件电路图制作的工具。


3  系统总体设计

3.1 系统整体方框图

根据前面的分析,知道系统要实现以上功能,必须由以下几部分组成:温度采集单元、下位机温度初步处理单元、USB设备接口、上位机应用程序。

系统的结构原理图如图3.1:

图3.1系统整体实现的结构原理图

温度传感器单元对生产温度环境进行测量,将测量温度传给下位机(单片机),单片机对采集到的温度进行初步处理后,将处理了的数据通过USB接口上传给PC机上位机,而上位机将实时的显示采集到的温度,如果要对现场环境进行处理,则上位机可以发送命令,经过USB接口传送到下位机,下位机根据接受到的数据并对其进行分析,进而做出处理,如报警等各种操作。

3.2 系统方案比较

对于本系统,方案的选择是根据温度传感器来选择。

目前市场上有两种传感器:模拟传感器和数字集成传感器,对于选择不同的传感器将会有不同的方案。下面给出两种不同的方案,并对其进行分析,最终选择其中一种方案。

3.2.1系统两种可行方案

方案1:选择模拟传感器

所谓模拟传感器,简单的说就是传感器对被测量的物质感应,并随着检测的不同做出不同的反应,但这一反应是有规律的,而且有规律的输出模拟信号。由于单片机是数字信号系统,只能识别数字信号,所以这种方案要想利用单片机对温度信号进行处理,必须将对模拟输出量数字化,也就是说要对其输出的模拟电压或电流转换成数字信号,这么一来就系统要加入模拟信号转换成数字信号的处理单元,通常,实现这一功能的是A/D转换器,市场对于这一A/D转换器有不少类型。所以选择这一方案也是可以有效而快速的设计出本系统。

图3.2给出使用模拟传感器这一方案的设计原理图。

正面.png

图3.2  方案1的结构原理图


方案2:选择数字传感器

   今天随着计算机的飞速发展以及单片机的日益普及,世界进入了数字时代,人们在处理被测信号时首先想到的是信息处理器(单片机或计算机)具有输出数字信号便于电脑处理的传感器就是所谓的数字传感器

   数字传感器是近几年才出现的并得到广泛的应在在实践当中,所谓数字传感器,进一步的讲,就是将模拟传感器产生的信号经过放大、A/D转换、线性化及量纲处理后变成纯粹的数字信号是在模拟传感器上加入数字处理单元,并将数字单元集成在一块芯片上,所以输出的是数字信号,便于数字处理机对其直接进行处理。

  图3.3给出利用数字传感器设计的方案图:

图3.3 方案2的结构原理图


3.2.2方案最终选择

  以上已经提出了两种方案,下面对这两重方案进行分析,并做最后方案选择:

  分析近几年来传感器的发展,我们知道传感器在未来的发展中将会向以下的方向发展:(1向高精度发展随着自动化生产程度的不断提高,对传感器的要求也在不断提高,必须研制出具有灵敏度高、精确度高、响应速度快、互换性好的新型传感器以确保生产自动化的可靠性。目前能生产精度在万分之一以上的传感器的厂家为数很少,其产量也远远不能满足要求。(2)向高可靠性、宽温度范围发展传感器的可靠性直接影响到电子设备的抗干扰等性能,研制高可靠性、宽温度范围的传感器将是永久性的方向。提高温度范围历来是大课题,大部分传感器其工作范围都在-2070,在军用系统中要求工作温度在-4085范围,而汽车锅炉等场合要求传感器工作在-20120,在冶炼、焦化等方面对传感器的温度要求更高,因此发展新兴材料(如陶瓷)的传感器将很有前途。(3)向微型化发展各种控制仪器设备的功能越来越大,要求各个部件体积能占位置越小越好,因而传感器本身体积也是越小越好,这就要求发展新的材料及加工技术,目前利用硅材料制作的传感器体积已经很小。如传统的加速度传感器是由重力块和弹簧等制成的,体积较大、稳定性差、寿命也短,而利用激光等各种微细加工技术制成的硅加速度传感器体积非常小、互换性可靠性都较好。(4)向微功耗及无源化发展传感器一般都是非电量向电量的转化,工作时离不开电源,在野外现场或远离电网的地方,往往是用电池供电或用太阳能等供电,开发微功耗的传感器及无源传感器是必然的发展方向,这样既可以节省能源又可以提高系统寿命。目前,低功耗损的芯片发展很快,如TI2702运算放大器,静态功耗只有1.5mA,而工作电压只需2~5V。(5)向智能化数字化发展。传感器一般都是非电量向电量的转化,工作时离不开电源,在野外现场或远离电网的地方,往往是用电池供电或用太阳能等供电,开发微功耗的传感器及无源传感器是必然的发展方向,这样既可以节省能源又可以提高系统寿命。目前,低功耗损的芯片发展很快,如TI2702运算放大器,静态功耗只有1.5mA,而工作电压只需2~5V。

由于模拟传感器,没有把模拟转化为数字处理单元集成在一块芯片上,这样必带来传感检测单元的体积大等各个方面的影响,再者,模拟转化成数字单元也需要单片机对其进行处理,这样会浪费时间、资源。所以这样一来我们知道数字传感器在未来必将取代模拟传感器。而且随着数字传感器的发展,现在市场上数字传感也不是那么贵,本次系统对温度精度的要求不是很高,所以选择方案二。

 

4  系统硬件设计

4.1 中央处理器----AT89C51

AT89C51由美国Atmel 公司生产的,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位单片机,该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。下文将对AT89C51单片机做简单介绍。

(1) AT89C51的特点

AT89C51具有以下几个特点:

①中央处理器CPU;

②AT89C51与MCS-51系列的单片机在指令系统和引脚上完全兼容;

③片内有4k字节在线可重复编程快擦写程序存储器;

④全静态工作,工作范围:0Hz~24MHz;

⑤三级程序存储器加密;

⑥128×8位内部RAM;

⑦32位双向输入输出线;

⑧两个十六位定时器/计数器

⑨五个中断源,两级中断优先级;

⑩一个全双工的异步串行口;

(2)AT89C51的结构图如图4.1

                   

图4.1  89C51的结构图


由上图,知:AT89C51主要由CPU、存储器、I/O端口等几部分组成。

(3)AT89C51的功能描述

AT89C51是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。它与MCA-51系列单片机在指令系统和引脚上完全兼容,不仅可完全代替MCS-51系列单片机,而且能使系统具有许多MCS-51系列产品没有的功能。

AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。只要程序长度小于4K,四个I/O口全部提供给用户。可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。工作电压范围宽(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快也能慢。

AT89C51芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。

(4)AT89C51引脚功能及说明

正面.png

             图4.2是AT89C51的引脚

①口线:P0、P1、P2、P3口。

P0口是三态双向口,通称数据总线口,为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。因为只有该口能直接用于对外部存储器的读/写操作。P0口也用以输出外部存储器的低8位地址。由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存信号用ALE。

P1口是专门供用户使用的I/O口,是准双向口。P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P2口是从系统扩展时作高8位地址线用。不扩展外部存储器时,P2口也可以作为用户I/O口线使用,P2口也是准双向口。

P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二功能。作为第一功能使用时操作同P1口。P3口的第二功能如表4.1所示。

②控制口线:PSEN(片外选取控制)、ALE(地址锁存控制)、EA(片外存储器选择)、RESET(复位控制);

③电源及时钟:VCC、VSS、XTAL1、XTAL2 操作方法。

表4.1  P3口的第二功能

④操作方法

程序存储器加密。AT89C51芯片程序存储器有三级硬件加密,能够有效地保证系统不被仿制和软件不被复制,加密等级设置见附录2。

工作模式。AT89C51有间歇和掉电两种工作模式。间歇模式是由软件来设置的,当外围器件仍然处于工作状态时,CPU可根据工作情况适时地进入睡眠状态,内部RAM和所有特殊的寄存器值将保持不变。这种状态可被任何一个中断所终止或通过硬件复位。

掉电模式是VCC电压低于电源下限,振荡器停止振动,CPU停止执行指令。该芯片内RAM和特殊功能寄存器值保持不变,直到掉电模式被终止。只有VCC电压恢复到正常工作范围而且在振荡器稳定振荡后,通过硬件复位掉电模式可被终止。


4.2  温度传感器DS18B20

温度传感器是该系统的测量器件,温度传感器的好坏直接影响到测量结果,所以本文将对温度传感器的选择详细介绍。根据本次设计论文的要求,包括精度要求等,经过分析,本文决定选择数字温度传感器DSB8B20。下面将给予介绍。

(1) DS18B20的概述

DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55~+125,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625,被测环境的温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。

(2)DS18B20的内部结构

图4.3是DS18B20的内部结构图

 正面.png

4.3 DS18B20的内部结构

由图可知,DS18B20主要由4部分组成:64位ROM、温度传感器、非挥发的温

警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图4.4所示,

640.png
4.4 DS18B20的管脚排列

DS18B20的3个管脚说明如下:

DQ为数字信号输入/输出端。是漏极开路一线接口。也在寄生电源接线方式时,给设备提供电源。

GND为电源地

VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

DS18B20的64位ROM保存了设备的唯一序列码,是DS18B20的地址序列码,每一个DS18B20的地址序列码是不同的,这样就可以实现一根总线上挂接多个DS18B20。高速闪存(scratchpad)包括2个字节的温度寄存器。保存了温度传感器的数字输出。该闪存还提供了对上限(TH)和下限(TL)的超标报警寄存器、配置寄存器(一个字节)的访问。TH、TL和配置寄存器是EEPROM,所以系统掉电时可以保存数据。

DS18B20利用DALLAS的单总线控制协议,实现了利用单线控制信号在总线上进行通信。由于所有的设备通过漏极开路端(DQ脚)连在总线上,控制线需要一个大约5K上拉电阻。在这一总线控制系统中,微控制器通过唯一的64位地址序列码识别和访问总线上的器件。由于地址序列码不同,所以连接在总线上的DS18B20可以说是无限的 。

(3)DS18B20的寄存器

DS18B20存储器组织结构如表4.2所示:

正面.png

字节0和字节1分别包含温度寄存器的LSB和MSB,这些字节是只读的,字节2和字节3提供对TH(上限报警触发寄存器)和TL(下限报警触发寄存器)的访问,字节4包配置寄存数据,字节5、6和7保留做器件内部使用,不能被改写,当读时,这些字节返回全1值,字节8是只读的,含有字节0到字节的CRC校验。

高速闪存的第四个字节包含配置寄存器,其组织结构如下表4.3所示:

640.png

(4)DS18B20的读写时序

   访问DS18B20的顺序如下:

    ----初始化;

    ----ROM命令(接着是任何需要的数据交换);

    ----DS18B20的函数命令(接着是任何需要的数据交换);

每一次访问DS18B20时必须要按照这一顺序,如果其中的任何一个步骤缺少或打乱,DS18B20将不会响应。

初始化时序

初始化时序如图4.5:

正面.png

图4.5 DS18B20初始化时序

所有与DS18B20的通信都要首先初始化,从而才能进行下一部的工作:控制器发出复位脉冲,DS18B20以存在脉冲响应。图4.5给出了描述。当DS18B20发出存在脉冲对复位响应时,它指示控制器该DS18B20已经在总线上并准备好操作。

②读/写时序

控制器在写时序到数据到DS18B20,在读时序从DS18B20中读数据,每一个总线时序传送一个数据位。

读/写时序见下图4.6

640.png

③写时序

有两种类型的写时序:写1时序和写0时序。控制器用写“1”时序写逻辑“1” 到DS18B20,用写“0”时序写逻辑“0”到DS18B20。所有写时序必须持续60μs,每一个写时序之间必须要至少有1μs的恢复时间。两种类型的写时序都从控制器把总线拉低开始。

为产生写“1”的时序,在将总线拉低之后,总线控制器必须在15μs内释放总线。总线释放后,5K的上拉电阻将总线电平抬高。为产生写“0”时序,在总线拉低后,控制器在整个时序内必须持续控制总线为低电平(至少60μs)。

DS18B20在控制器发出写时序后的15-60μs的时间内采样总线。如果在采样窗口期间总线为高,“1”就被写到DS18B20;如果在采样窗口期间为低电平,则“0”就被写入DS18B20。

④读时序

当总线发出读时序时,DS18B20可以发送数据到控制器。所有读时序必须持续最少60μs,每一个读时序之间必须有至少1μs的恢复时间。读时序从控制设备将总线拉低至少1μs后释放总线开始。控制器启动读时序后,DS18B20开始在总线上传送“1”或者“ 0”。DS18B20通过保持总线为高发送“1”,将总线拉低发送“0”。发送“0”时,DS18B20在60μs时释放总线;发送“1” 时,总线被上拉电阻高电平空闲状态。从DS18B20输出的数据在启动时序的下降沿后15μs有效。因此,控制器必须在时序开始的15μs内释放总线,然后采样总线状态。

通过读/写时序,控制器可以发出控制命令,对DS18B20进行读写操作。

(5)DS18B20的常用命令

①SKIP ROM [CCH]

控制器可以用这一命令同时访问总线上的所有设备而不需要发送ROM序列码信息。控制器可以使总线上的所有DS18B20同时进行温度转换。

②SEARCH ROM [F0]

当系统开始上电时,控制器必须识别总线上所有从机的ROM序列码,以确定从机的数目和它们的类型。控制器需要执行 search ROM循环足够多次才能识别所有的从设备。如果只有一个从属设备在总线上,可使用简单的Read ROM命令期待Search ROM。每一个Search ROM命令之后必须返回到事务序列的步骤(初始化)。

③READ  ROM[33]

这一命令只有在总线上只有一个设备的时候使用,它使得控制器可以不用Search ROM命令就可以读出从机的64位ROM序列码。当多于一个从机设备在总线上时,如果还使用该命令,由于所有的设备企图响应该设备,这样将产生数据冲突。

④CONVRTT  [44]

这一命令开始一次温度转换。变换之后,数据保存在暂存器的2个字节温度寄存器中,DS18B20回到低功耗空闲状态。如果设备工作在寄存电压模式,则这一命令发送后10μs之内,整个变换期间控制器必须在总线上能够有较强的上拉。如果DS18B20由外部电源供电,那么Convert T命令后控制器可以发出读时序。如果温度变换正在进行,那么返回“0”;如果已经完毕,则返回“1”。

⑤WRITE SCTATCHPAD [4EH]

这一命令使得控制器可以写3个字节数据到DS18B20的寄存器中。第一字节数据

到TH寄存器中,第二字节写到TL中,第3字节写到配置寄存器中。数据以最低有效位先发送。所有3字节必须在控制器发出复位或者数据丢失之前写完。

⑥READ SCRTCHPAD[BEH]

这一命令使得控制器可以读寄存器的内容。数据传送开始于字节0的最低位,直到寄存器的第9字节被读出,任何时候,如果只需部分寄存器数据,控制器可以结束读操作。

上面已经介绍了数字温度传感器的原理,下面将利用DS18B20设计温度采集模块电路。

4.3 温度采集模块电路设计

以上已经介绍了AT89C51和数字温度传感器DS18B20基本知识,下面将利用它们来设计本系统的温度采集电路。DS18B20连接到单片机的方法很简单,它有两种方法连接到电路上,外接电源方式寄生电源方式里使用的是系统提供的外接电源方式,而不采用寄生电源,只要VCC、DQ、GND连接到单片机的电源正极、一个I/O端口、电源地就可以了。但是要注意的是在DQ数据线中要加一个4.7K的上拉电阻,这一个是必须要加的,无论它是接在P1口还是P0口,这点特别注意,特别提醒。之外在电源两端之间加个0.01U的电容,这样的作用主要是滤波。

正面.png

 

图4.7 单片机和DS18B20接口图

由图4.7,知DS18B20工作在外部电源供电方式。单片机采用采用P1.1口与DS18B20通信。下面根据单片机的初始化时序和读写时序,写出DS18B20和单片机之间的读写操作,这里只给了温度的读取,下位机部分程序在附录中给出。

这里特别提醒的是DS18B20对时序要求很高,精度要求很高,所以程序的延时对是否能读起数据起到非常关键的作用。


DS18B20读写数据程序如下:

void delaym(int time)  //延时为(time*2+2)us
      {  int s;
         for(s=0;s<time; s++)<="" span="">
   }
void  write_bite(unit8  bite)  //写一位数据位
    {  DQ=0;
       if(bite==1)
       DQ=1;   //如果写"1",DQ=1;
       delaym(29);//延时60us提供DS18B20采样
       DQ=1;    //释放DQ
   }
unit8 read_bite(void)  //读一位数据位
     { DQ=0;     //将总线DQ拉低开始读时序
      delaym(0); //延时2us
      DQ=1;    //释放DQ;
     delaym(1); //延时4us后再读数据
   return(DQ);
   }
  void  write_byte(unit8 dat)  //写一字节数据
      {  unit8 i;
         unit8  temp;
         for(i=0;i<8;i++)
          {   temp=dat>>1; //右移一位
               temp&=0x01;
               write_bite(temp);
          }
       }
unit8 read_byte(void)   
      { unit8 i,value=0;
         for(i=0;i<8;i++)
           { if(read_bite())
             value|=0x01<<i; 读一字节数据,一个读时序读一位,并做移位<="" span="">
             delaym(29) ;  //延时60us有以完成读一位,之后再读下一位
             }
        return(value); 
     } 
unit8 DS18B20_RESET(void)
    {  unit8 data;
          DQ=0;
          delaym(239); //保持DQ低480us
          DQ=1;
           delaym(35);
           da=DQ;
           delaym(211);
            return (data);//有芯片应答data=0,无则data=1
        }

4.4  系统接口模块电路设计

本系统的采集模块采集到数据后,必须要经过CH372传到上位机应用软件才能实现控制下位机的各种操作。而CH372是USB接口芯片,下位机和上位机通信的要通过CH372接口芯片来完成,其和计算机的连接很简单,所以这一部分主要的硬件实现是CH372和单片机AT89C51的连接问题。

4.4.1 USB简介

USB(Universal Serial Bus)是外围设备与计算机进行连接的新型接口,既一种新型的通用串型总线接口,USB具有即插即用、热插拨、接口体积小、节省系统资源、传输可靠、提供电源、良好的兼容性、共享试通信等优点。

在USB产生之前,外部设备和计算机的通信主要是通过计算机主板所提供的各种接口,比如ISA接口、PCI接口、PS/2接口、串行接口,并行接口等,这些接口,存在这样那样的缺陷,比如接口规格不统一、不共享等为了克服上述外围设备的缺陷,P制造商和用户迫切需要一种新型的外设接口,USB正是在这样的环境下产生的,它是一种快速、双向、同步、廉价、并支持热插拨功能的串行接口。

USB是一种新型的接口,那么它必定有它的通信标准,也就是我们所说的协议,下面简单介绍USB的通信协议。

一般的,对终端用户来看,USB系统是USB设备连接到主机的简单连接,但对开放人员来说,这中连接可分为三个层次:功能层、USB设备层、USB总线接口层,且每一层都由主机和USB设备的不同功能模块组成。可以用下面的图型来形容。下图4.8是这种分层通信机制的简化。

正面.png

 图4.8 USB通信层次模型

由图,一个USB设备由三个功能模块组成:USB总线接口、USB逻辑设备、功能单元。USB总线接口是USB设备中的串行引擎(SIE);USB逻辑单元被看作是一个端点的集合;功能单元客户软件被看作接口的集合。

USB传输类型包括批量传输、同步传输、中断传输和控制传输,每种传输类型的传输速度、可靠性以及应用范围都不同。控制传输可靠性是最高的,但速度最慢;同步传输速度快,满足实时性,但可靠性低。在具体应用中,端点传输类型可根据传输速度和可靠性选择。

USB通信协议中,主机取得绝对主动权利,设备只能是“听命令行事”,通过一定的命令格式(设备请求)完成通信。USB设备请求包括标准请求、厂商请求和设备类请求。设备的枚举是标准请求命令完成的;厂商请求是用户定义的请求;设备类请求是特定的USB设备类发出的请求,例如海量储存类、打印机类和HID(人机接口)类。固件编程中设备请求必须遵循一定的格式,包括请求类型、设备请求、值、索引和长度。

4.4.2 USB芯片选择

USB的传输速度可分为低速(1.5Mbps全速(12Mbps)和高速(480Mb/s),按传输速度来分,供选择的USB芯片类型主要有:低速(1.5Mbps)和全速(12Mbps),可选择Philips公司的PDIUSBD12Cypress公司的EZ-USB2100系列以及国产的CH372芯片   高速(480Mbps)可选Philips公司的ISP1581Cypress公司的USB接口芯片CY7C68013

 

本次系统要传输的速率比较少,可以所以选择全速的USB接口芯片,由于国产的芯片已经有所好转,再加上资料比较齐全,这次系统设计所选择的USB接口芯片是国产芯片CH372。

芯片介绍:

CH372是南京沁恒电子有限公司生产的新型USB接口芯片,具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU等控制器的系统总线上;它屏蔽了USB通信协议,用户如果没有涉及到底层开放,那么只要了解芯片的普通用法就可以快速的设计USB设备。利用CH372进行USB设备的通信设计可以如下的方框图4.9

 640.png

图4.9 CH372和单片机框架连接

下面给出CH372的引脚图(图4.10)及部分命令:

     正面.png 

          图4.10 CH372的管脚


CH372芯片占用两个地址位,当A0 引脚为高电平时选择命令端口,可以写入命令;当A0引脚为低电平时选择数据端口,可以读写数据。单片机通过8 位并行口对CH372 芯片进行读写,所有操作都是由一个命令码、若干个输入数据和若干个输出数据组成,部分命令不需要输入数据,部分命令没有输出数据。命令操作步骤如下:

①在A0=1 时向命令端口写入命令代码;

②如果该命令具有输入数据,则在A0=0 时依次写入输入数据,每次一个字节;

③如果该命令具有输出数据,则在A0=0 时依次读取输出数据,每次一个字节;

④命令完成,可以暂停或者转到①继续执行下一个命令。 

CH372的命令如表4.5:

                    表 4.5  CH372命令  

代码

命令名称

数据

输出数据

命令

05H

RESET_ALL


(等40mS

06H

CHECK_EXIST

数据

取反

测试工状态

12H


SET_USB_ID


VID 字节

PID 字节


设置USB厂商VIDPID

15H


SET_USB_MODE

模式代码

(等20uS

操作状态

设置USB模式

22H

GET_STATUS


中断状态

获取中断状态请求

28H


RD_USB_DATA




USB中断的端点缓冲区数据块并释放缓冲区

2AH


WR_USB_DATA5




USB1的上传缓冲区数据

2BH


WR_USB_DATA7




USB2的上传缓冲区数据

4.4.3 USB设备端的接口设计

CH372芯片在本地端提供了通用的接口,8双向数据总线D7D0、读选通输引脚RD#、写选通输引脚WR#、片选输引脚CS#、中断输出引脚INT#以及地引脚A0。通接口,CH372 芯片可以方便地挂接到各种8位单片机、DSPMCU 的系统总线上,可以与外围器件CH372芯片的RD#WR#可以分别连接到单片机的读选通输出引脚和写选通输出引脚CS#驱动,用于当单片机具有外围器件时进设备选INT#输出的中断请求,可以接到单片机的中断输引脚或者I/O 引脚,单片机可以使用中断方或者中断请求WR#为高CS#RD#A0 为低平时CH372 中的数据通D7D0输出;RD#为高CS#WR#A0 为低平时D7D0上的数据CH372 芯片中;RD#为高CS#WR#为低A1 为高平时D7D0 上的数据为命令码CH372芯片中。CH372 芯片的VD+VD-引脚接到USB 总线上。如了芯片全而阻或者那么效串5Ω内。

USB定义了四种传输类型:控制传输、快传输、中断传输和同步传输。南京沁恒公司的USB接口芯片CH372支持控制输、批量传输、中断输。CH372主要有两种数据流传输方式:单数据式和请求应答方式。其中请求应答方式步骤如下:

   计算机用层先约数据请求发送CH372芯片;

 CH372 芯片以中断方单片机;

 单片机中断务程序获取CH372的中断状态

 是上释放USB 缓冲区后退出中断程序

 下传数据下传缓冲区中读数据

 到的数据数据,可以退出中断程序处理

 单片机数据写入批量的上传缓冲区中,后退出中断程序

 CH372 芯片数据返回计算机;

 计算机用层接数据。

这种传输方式是必需要有计算机断发出响应才可以进行的。在本次系统设计中,可以通过向计算机发出命令,下位机根据命令来进行各种操作,包括设计报警温度,采集温度等。

由于系统不需要那么多I/O口,所以本次系统设计的单片机端不需要扩展,直接用端片机的I/O端口,值得注意的是MCU不扩展,那么P0只能口只能作为I/O口使用,而不能作为数据/地址端口复用。这一点必须注意,而P0口做普通I/O使用必需要加上拉电阻1K到10K左右。否则系统将无法运行,这点特别提醒要注意的地方。

最终CH372与单片机AT89C51之间的连接图,如下图4.11

正面.png

4.11  CH372和89C51的连接图

 

图中P2作为CH372芯片8位双向数据总线通信端口来使用。P1和P0端口作为普通的I/O口,USB 总线包括一对5V 电源线和一对(D+、D-)数据信号线。通常,+5V 电源线是红色,接地线是黑色,D+信号线是绿色,D-信号线是白色。USB 总线提供的电源电流最大可以达到500mA,一般情况下,低功耗的USB 产品可以直接使用USB 总线提供的5V 电源。如果USB 产品通过其它供电方式提供常备电源,那么CH372 应该与单片机一起使用该常备电源并且断开USB总线的电源;如果需要同时使用USB 总线的电源,那么可以通过阻值约为1Ω的电阻R1 连接USB 总线的5V 电源线与USB 产品的5V 常备电源,并且两者的接地线直接相连接。

CH372 CS#固定为低电平,一直处于片选状态,在单片机程序中,可以控制各个I/O引脚模拟并口时序与CH372 进行数据交换。比如控制P05、P06、P07来读、写命令。

图4.11中,可选电阻R2 用于在电源断电后将电解电容C5 中的电能及时释放掉,使VCC 及时下降到0V,确保在下次通电时CH372 能够可靠地上电复位。电容C3 用于CH372 内部电源节点退耦,C3 是容量为0.01μF 的独石或高频瓷片电容,如果对EMI 没有要求那么可以省掉C3。电容C4C5用于外部电源退耦,C4 是容量为0.1μF的独石或高频瓷片电容。晶体X1、电容C1 C2 用于CH372的时钟振荡电路。X1的频率是12MHzC1C2是容量为15pF-30pF 的独石或高频瓷片电容。

本次系统设计的USB接口硬件设计已经完成。而且应用部分的硬件设计也已经完成,下节将给出整体硬件设计的电路图。

4.5 系统硬件整体实现

  下位机的应用部分是DS18B20,DS18B20采集到温度信号,并转换成数字信号然后输出到单片机AT89C51,单片机对数字信号进行处理,然后将处理的数据通过USB接口芯片传到上位机的USB设备驱动程序,上位机的主USB控制驱动程序接受来自USB设备驱动程序的数据,在计算机端的应用软件进行各种操作。反之,计算机的控制命令通过USB总线接口,把控制命令通过USB芯片传到单片机,由于本系统已经对计算机程序的命令编码过,所以单片机接受来自上位机命令,对其进行判断,从而做出不同的响应。

  硬件电路整体实现电路图在附件中给出。


5  系统软件设计

本系统进行软件设计包括下位机软件设计和上位机软件设计,下位机软件设计可以使用汇编语言和单片机C语言,上位机设计可以采用的很多计算机高级语言,比如VC++、Delphi、C++ builder等,在这里选择C++ builder来编写上位机程序。至于下位机程序,主要有汇编语言、PL/M语言和C语言。汇编语言有执行效率高、速度快、与硬件结合紧密等特点,尤其在I/O端口管理时,使用汇编语言有快捷、直观的优点。但是使用汇编语言相对于高级语言,比如单片机C语言来讲,难度要大很多,而且汇编语言的呈现可读性低、开放性差。所以下位机的程序设计选择单片机C语言。下面简单介绍本次软件设计的编程工具。


5.1 软件设计开发工具

Keil C51是单片机的编写软件,是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势

C++ builder是Inprise公司1998 年推出的,面向对象的32位Windows程序设计开放工具,C++ builder不仅继承了Delphi使用简便、功能强大、效率高等特点,而且它还结合了C++语言的所有优点。  C++ builder可以说是至今为止功能最强、最简单易学的Windows开发工具之一。C++ builder 6具有非常友好的集成开发环境,提供一百多个VCL组件,使开发人员不需要太多的时间编码,就能实现很多复杂的功能。它的编译器 能够自动列出VCL组件的属性和方法供程序员选择,而不必手工输入复杂的代码。正式因为这些优点,所以本次系统设计选择 C++ builder作为上位机软件设计的开发工具。

5.2 系统软件设计    

  系统要对温度进行采集,首先必须利用上位机对下位机(单片机)发出命令,单片机根据接收到的命令,根据预先的规则对不同的命令做出不同的处理。然后把处理结果发回上位机,上位机接收到温度数据后,根据温度数据画出数据采集图像。这就是系统要实现功能,根据这一要求,设计出系统的软件。

  系统整体模块流程图如图5.1

                    正面.png 

图5.1 系统整体模块图

下面分别设计下位机和上位机的程序流程图。

5.2.1下位机的软件设计

单片机端的应用程序主要实现的功能就是对DS18B20进行采集温度,把采集到的温度通过USB接口芯片上传到计算机端的应用程序。

下位机的程序设计流程图5.2

640.png

下位机的程序流程图中包括单片机和DS18B20和单片机的通信流程图,以及单片机和USB设备接口芯片的通信流程图。

其中DS18B20和单片机的通信流程图如下图5.3

这里是单片机如何根据DS18B20的特性来控制它,进行温度转换,并读取温度。把温度数据保存在单片机端。

正面.png

 图5.3 DS18B20的程序流程图

单片机先初始化DS18B20温度传感器,对其复位,然后按DS18B20的时序来读写命令,DS18B20根据命令进行操作,单片机和DS18B20的通信过程主要为:单片机对DS18B20复位,跳过读写系列号操作(送0xCC命令到DS18B20),启动温度转换,再次复位,送读温度命令0xBE,读出温度。这就是单片机和DS18B20的通信过程,将得到的温度单片机在进行处理,把温度数据传到上位机。上位机实时显示温度值。为了便于说明DS18B20和单片机间的通信过程,下面给出读出DS18B20温度的程序:

unsigned int  readtemperature(void)    //读温度
{  unit8  a=0,b=0;
        unit8 c,d;
          unsigned int t=0;
          float tt=0;
          c=DS18B20_RESET();
       write_byte(0xCC); // 跳过读序号列号的操作
       write_byte(0x44); // 启动温度转换
       d=DS18B20_RESET();
       write_byte(0xCC); //跳过读序号列号的操作
       write_byte(0xBE); //读取温度寄存器等前两个就是温度
       a=read_byte();
       b=read_byte();
        t=b;
         t<<=8;
         t=t|a;
        return(t); }
相关文章
|
传感器 编解码 前端开发
基于USB接口的温度控制器(2)
基于USB接口的温度控制器(2)
111 0
|
Android开发
你要了解的USB接口知识总结
最近项目中有设计到USB接口,把一些常用的USB名词、常识以及关系总结一下。
520 0
|
Web App开发 芯片
USB2S可编程USB转串口适配器的开发原理
USB2S可编程USB转串口适配器的开发原理主要涉及USB接口协议、USB控制器芯片以及串口通信协议等方面。
USB2S可编程USB转串口适配器的开发原理
|
传感器 编解码 数据可视化
基于单片机USB接口的温度控制器
基于单片机USB接口的温度控制器
276 0
基于单片机USB接口的温度控制器
|
C语言 Android开发 芯片
可编程 USB 转串口适配器开发板的接口
可编程 USB 转 UART/I2C/SMBus/SPI/CAN/1-Wire 适配器 USB2S(USB To Serial ports)是多种数字接口物理层协议转发器,自带强大灵活的 S2S 协议固件程序,支持嵌入C 语言程序开发,可实现 Windows/Android/Wince 操作系统USB 接口与串行接口以及串行接口之间的双向通讯,还可用作脉冲计数、数字示波器、电压比较器。广泛应用于电子设备开发、芯片测试、工业数字接口转换、数字接口学习验证等领域。
可编程 USB 转串口适配器开发板的接口
|
C语言 Android开发 芯片
可编程 USB 转串口适配器开发板的详细接口与功能
可编程 USB 转 UART/I2C/SMBus/SPI/CAN/1-Wire 适配器 USB2S(USB To Serial ports)是多种数字接口物理层协议转发器,自带强大灵活的 S2S 协议固件程序,支持嵌入C 语言程序开发,可实现 Windows/Android/Wince 操作系统USB 接口与串行接口以及串行接口之间的双向通讯,还可用作脉冲计数、数字示波器、电压比较器。广泛应用于电子设备开发、芯片测试、工业数字接口转换、数字接口学习验证等领域。
可编程 USB 转串口适配器开发板的详细接口与功能
|
内存技术 固态存储 计算机视觉
关于PCI-E接口你要知道这些点
  PCI-E接口作为主板上可能是最大尺寸的接口,其应用范围非常广泛,不仅仅局限于我们经常用到的独立显卡,其他诸如网卡、声卡、图像采集卡等设备也是通过PCI-E标准来使用的。 PCI-E接口是主板上比较通用的一种接口标准,目前主要提供给需要直接与CPU进行通讯的设备使用,通常是为了扩展主板上没有支持的功能,比如扩展独立显卡等设备,目的是为平台输出更加强力的图形能力,弥补核显的不足。
2144 0
|
C#
C# 获得设备usb信息
原文:C# 获得设备usb信息 本文告诉大家如何获得设备的usb来进行判断是否有哪些usb和找不到usb可能是什么。 需要在项目右击引用,点击程序集,搜索 System.
1695 0