新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机典型案例开发(四)

单片机典型案例开发(四)

作者: 时间:2012-05-28 来源:网络 收藏

  (1) void ip_send(UCHAR xdata*outbuf,ULONG ipaddr, UCHAR proto_ id,DINT len)//发送IP 数据;该子程序用来创建一个发送数据报。

  (2) void ip_rcve(UCHAR xdata *inbuf) //接收IP 数据;该子程序检测一个外来数据包,并对数据包作相应的处理。

  3.3.3 TCP 协议的实现

  1.使用TCP 状态机:TCP 协议是整个TCP/IP 协议的核心,也是传输层中最复杂的协议。TCP 协议在两个端点之间建立了等效于物理连接的逻辑连接。数据沿着这个连接双向传输。连接的双方必须对发送和接收的数据保持跟踪,以便能够检测出数据流中的遗漏和重复。

  2.使用简单的确认机制:序列号和确认号这两个字段用于协同完成TCP 协议中的确认工作。对于每个接收到的数据包进行确认号的计算,需要从接收到的数据包中提取TCP 报文的数据部分长度,并进行计算,这增加了处理器的运算量。但如果每次只对单个TCP 报文进行确认的话,并没有太大的难度。TCP 协议主要包含的程序如下:

  (1) init_tcp(void) //初始化TCP 协议

  (1) Tcp_send(UINT flags, DINT hdr_len, UCHAR nr) //发送TCP

  (2) Tcp_retransmit(void) //重发TCP 数据

  (3) Tcp_inactivity(void) //停止TCP

  (4) Tcp_rcve(UCHAR xdata * inbuf, UINT len) //接收TCP 数据

  3.3.4 HTTP 协议简介

  HTTP 协议是TCP 协议的高层协议,HTTP 的请求和应答都是一行或多行文本,它的结束标志是一个换行符[5]。如果请求成功,数据就沿着该连接发送,直到发送完为止。HTTP的端口号为80.HTTP 中的命令称呼为方法(method),其中GET 语句用来获取文档,POST语句用来粘贴文档。通过判断GET 和POST 语句后面的文件名来判断所需要传递的文件的位置。

  请求:

  GET / HTTP/1.1

  响应:

  HTTP/1.1 200 OK

  Content-type: text/html

  ……

  《html》

  《body》

  ……

  《/body》

  《/html》

  4.应用部分

  本 WEB 服务器系统几乎可以应用于所有对实时性要求不是很高的场合,只要对本系统的相关部分做些修改或改进,例如:客户端的访问权限、IP 地址的过滤等,就可应用于诸如远程抄表、信息家电的远程控制等场合。下面图7 为ping 命令测试网络不通到通的连接状态,图8 实现了局域网内任意主机通过ip 地址形式访问内部存诸的网页,从而实现对系统的远程监控。

图7 网络连接测试

  图7 网络连接测试

图8 远程监控温度

  图8 远程监控温度

  5.结束语

  实现了基于的 TCP/IP 协议栈,使单片机控制的系统具有了WebServer 的功能,这样可以使用PC 机通过因特网远程访问单片机系统,也可以使用单片机系统将有用的信息通过因特网发送到远端的PC 或其它终端上。为嵌入式设备实现远程数据采集、远程监控、远程诊断、远程帮助、远程升级、远程重构等功能提供了可能,这是嵌入式系统发展的趋势。

  三、基于89C52单片机的微电压信号源设计

  1 设计原理

  被测设备要求提供0.5~50mV的可调直流模拟电压,分辨率达10微伏,精度达±0.01mV,温度跟随性要好,即要求提供高精度的微电压信号。

  如果采用单片机通过D/A转换器输出所需电压,输出范围0~5V,LSB=0.01mV,则D/A转换器的位数:

  X=lg2(5000/0.01)≈19(Bit)

  考虑D/A转换器的量化误差、温漂、噪声和其他各种误差的影响,至少选择21Bit以上的D/A转换器,但目前尚无适合本系统设计的D/A转换器。因此,在考虑系统分辨率和输出电压范围的前提下,采用如下方案:先将小于50 mV的电压数值扩大100倍,再用 16Bit D/A转换器输出,然后通过200倍的高精密分压器和超低漂移的运算放大器缓冲输出。与此同时,采用高位A/D转换器组成电压反馈回路,对输出进行差值补偿,进一步提高信号精度和稳定性。 其原理结构如图1所示。



2 硬件设计

  2.1 电压输出电路

  在单片机(89C52)、D/A转换器、分压、运放组成的微电压输出电路中,设计的要点是如何用单片机控制D/A转换器的输出。本设计采用美国BB公司生产的16位高精度数/模转换器DAC714(单通道、串行通讯方式,工作电压±12V或±15V,能实现±10V、±5V和0~10V的模拟电压输出)。图 2是D/A转换器与单片机的连接电路。DAC714采用 ±15V工作电压,通过外部连接的增益(OFFS)和双极性偏移(GADJ)电位计调整,实现对输出电压的精度要求。在调节这两个参数时,为了避免零点对比例调节的影响,应注意先调整比例系数,后调零点。其中,A0为输入寄存器控制信号,A1为D/A锁存控制信号,SDI为串行数据输入。数据控制均为低电平有效,当A0=0时,当前数据进入移位寄存器;当A1=0时,数据进入D/A锁存。

  5V满刻度的16位DAC714转换器,1LSB对应76μV。如果输出端的负载电流为5mA,则60mΩ的线路和接触电阻,就会产生300μV的压降;此外,还有印刷电路板产生的压降。因此,将模拟地和数字地分开,采用单点连接,尽量减小接地回路。模拟插钉互相靠近,有利于模拟与数字信号的隔离,而模拟信号应该尽量远离数字信号。为了将D/A转换器与开关电流隔离,模拟地设在D/A周围或者在其下方的模拟信号和电源的附近,最好在DAC714转换器的下面将DCOM与ACOM直接接地。

  2.2 电压反馈电路

  DAC714转换器的输出电压经精密分压电路和OPA111BM运放组成的缓冲电路输出后,理论上完全可达22位分辨率。但是由于温漂和其他误差影响,实际输出时为19位分辨率,精度不能满足要求,为此,设计了反馈补偿电路。用22位A/D转换器测量实际输出电压,在单片机中将实际输出电压与理论输出值比较,其差值信号作为DAC714的补偿电压输出,确保了电压输出精度。

  图3是由ADS1212组成的电压反馈电路。 ADS1212是美国BB公司生产的高精度、宽动态特性的22位单通道Δ-Σ模拟/数字转换器。其差动输入端直接与微小的电压信号相连。由于采用了低噪声的输入放大器,在转换速度为10Hz时仍可获得20位的有效分辨率。它有一个灵活的同步串行接口,单一+5V供电,有内/外参考电压和内部自校准系统。与外部器件接口的形式有双线制、三线制、四线制和多线制,此处采用三线制来实现与单片机的接口,接口信号是数据准备就绪线(DRDY)、数据输入输出线 (SDIO)、时钟信号线(SCLK)。

  2.3 温控电路

  为了进一步降低温漂的影响,必须保证系统工作温度变化在一个较小的范围内,为此,设计了自动恒温控制电路。该电路由TMP01温度控制芯片(AD公司)和加温、降温电路等组成。

  TMP01通过外接电阻值来设定高、低温度控制点。当系统温度高于或低于设定值时,输出电压控制信号,启动加温或降温电路的工作。TMP01温度控制精度达±1℃,负载能力达20mA,可直接驱动继电器。

  3 软件流程

  本电压信号源采用液晶显示屏显示汉字和数字,可通过按键直接控制输出电压的大小。用汇编语言编程,实现电压的自动输出。软件流程如图4所示。

  4 结束语

  本文介绍的数字式微电压信号源,利用精密分压和反馈补偿原理,实现了用16位D/A数模转换器输出19位分辨率的直流电压的目标。部队实际使用表明,采用单片机控制的数字式微电压信号源不仅电压精度稳定,而且成本低,体积小,提高了测试自动化的程度。

 四、一款自制简易示波器设计

  这款简易示波器的性能如下:

  1.电压挡位:200mV、500mV、1V、2V、5V、12.5V、25V、50V。

  2.频率挡位:12MHz、6MHz、4MHz、3MHz、2MHz、1MHz、500kHz、250kHz、100 kHz、50kHz、25kHz、10kHz。

  3.能较好地测量300 kHz的波形。

  这次DIY的示波器性能虽然较弱,仅仅能用来测试音频等300kHz以下频率的周期波形。不过它还有一个实用的功能,可以用来测试+/-50V的电压(量程是自动切换的)。

简易示波器

  主要零件

  编号 零件名称 数量

  1    ATMEGA8单片机 1

  9   24MHz有源晶振 1

  8   128x64液晶屏

  [ST7565控制器] 1

  2    5532运放 2

  3   AD603压控放大器 1

  4    TLV5618[DA] 1

  5    ADS830E[AD] 1

  6    IDT7205 1

  7    ILC7660 2

  10    1117-5.0 2

  11    1117-3.3 1

  12    79L05 1

  13       继电器 2

  14 电容、电阻、二极管 若干

  15    三极管 2

  16    洞洞板 1

  17    按钮 2

  电路分析

  这个版本示波器的电路原理如图1所示。电路制作时,我用了1块16cm×10cm的万用板,电路中仅仅使用2个按钮来操作示波器,因为我只使用了一片M8单片机作为控制器,1个按钮用于循环改变采样频率,另一个按钮用来选择信号的耦合方式,直流或者交流耦合。

  大家要问了,如何用一片 M8 单片机产生12MHz的采样时钟呢?呵呵,其实我对M8单片机进行了超频,使用24MHz的有源晶振作为它的时钟频率。然后,通过定时器2的比较匹配翻转电平,以产生不同的时钟。当OCR2=0时,单片机的OC2引脚就能产生12MHz的方波了。当然,如果大家不想超频,那么最高的采样频率就是16MHz的一半,8MHz了。因为,M8的技术手册上建议最高为16MHz的时钟,而比较匹配的最高频率为系统时钟的2分频,即8MHz。本次制作的源代码使用WinAVR编译。如果使用16MHz的晶振,请自行修改源代码。

  电路中,被测量的信号,经过500kΩ、480 kΩ、20 kΩ电阻串联回路,通过继电器进入第1个运放,运放起到阻抗匹配的作用,因为AD603的输入电阻仅为100Ω。单片机通过继电器选择合适的衰减倍数,在默认情况下,为1/2倍的衰减。在测量较大的电压时,单片机会选择1/50 的衰减。选择衰减的目的是为了方便后期的2次放大。后期放大使用了一片AD603,它是压控放大器。通过改变GPOS(第1脚)与GNEG(第2脚)之间的电压差,即可控制它的放大倍数。AD603的GPOS(第1脚)的电压通过一片DA5618控制,它是12位串口DA,它的参考电压为1.25V,由2个电阻分压而得。整个电路的运放可以使用NE5532、AD8066、LM6172等,它们的引脚都是兼容的。由于采样的速度比较快,远大于M8单片机的读取及处理速度,所以通过IDT7205来缓冲高速采样的电平数据。最后,单片机读取采样的数据,并在128×64的液晶上显示。

手机电池相关文章:手机电池修复


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理


晶振相关文章:晶振原理

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭