单片机典型案例开发(四)
(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 网络连接测试
图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的液晶上显示。
手机电池相关文章:手机电池修复
单片机相关文章:单片机教程
单片机相关文章:单片机视频教程
单片机相关文章:单片机工作原理
晶振相关文章:晶振原理
评论