TLC549的AD转换要点.pdf

上传人:tbuqq 文档编号:5198289 上传时间:2020-02-19 格式:PDF 页数:18 大小:453.51KB
返回 下载 相关 举报
TLC549的AD转换要点.pdf_第1页
第1页 / 共18页
TLC549的AD转换要点.pdf_第2页
第2页 / 共18页
TLC549的AD转换要点.pdf_第3页
第3页 / 共18页
TLC549的AD转换要点.pdf_第4页
第4页 / 共18页
TLC549的AD转换要点.pdf_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《TLC549的AD转换要点.pdf》由会员分享,可在线阅读,更多相关《TLC549的AD转换要点.pdf(18页珍藏版)》请在三一文库上搜索。

1、1 哈 尔 滨 理 工 大 学 荣 成 学 院 单片机 课程设计 题目:基于TLC549 的 A/D 转换 班级:电信 121 姓名: 学号: 2 1.简介 . 3 2.实现方案 3 2.1 主控模块设计. 3 2.2 LCD 显示模块设计 4 2.3 A/D 转换模块设计. 4 2.4 TLC549 介绍 . 4 2.4.1 TLC549 工作原理 . 4 2.4.2 TLC549 特点 . 4 2.5 AT89C52 工作原理 . 5 2.6 1602 液晶显示屏工作原理. 6 3.系统软件设计 6 3.1 算法设计. 7 3.3 程序设计. 7 (2) 定时器 T0 中断服务函数设计 9

2、 (5) LCD 显示函数设计 10 4. 源程序代码 10 4.1 Main 函数模块 10 4.1.1 定时器 T0 初始化函数模块 . 11 4.1.2 定时器工作模块 12 4.1.3 TLC549 读取模块 12 4.1.3 延时模块 . 13 4.2 LCD1602 函数模块 13 4.2.1 延时模块 . 13 4.2.2 LCD1602 命令模块 . 14 4.2.3 数据写入模块. 14 4.2.4 清屏指令 14 4.2.4 初始化 . 16 4.3 LCD1602 端口和命令定义模块 16 5.实验总结 17 6.参考文献 18 3 1.简介 电压表作为电子应用领域必不可

3、少的工具, 其性能越来越受到人们的广泛关注。传统的模 拟电压表由于设计较复杂, 精度较低 , 不适合一般应用。 数字电压表是诸多数字化仪表的核心 与基础 , 电压表的数字化是将连续的模拟量如直流电压转换成不连续的离散的数字形式并加 以显示 , 这有别于传统的以指针加刻度盘进行读数的方法, 避免了读数的视差和视觉疲劳。 采用单片机设计的数字电压表, 以其精度高、抗干扰能力强、可扩展性强、集成方便、价格 低廉等优点得到了普遍应用。其内部核心部件是A/D 转换器 , 转换器的精度很大程度上影响 着数字万用表的准确度。 本课程设计采用A/D转换器 TLC549对电压测量电路测出的输入模拟信号电压值进行

4、转换, 控制核心AT89C52RC 再对转换的结果进行运算和处理, 最后驱动输出显示装置LCD1602显示 数字电压信号。 2.实现方案 系统的硬件采用模块化设计, 以单片机主控器为核心, 与 LCD显示电路、 A/D 转换电路等组 成数字电压表控制系统。主要包括单片机主控模块、LCD显示模块、 A/D 模块等。其中单片 机主控模块主要完成外围硬件的控制以及运算功能;LCD 显示模块完成字符、数字的显示功 能;A/D 模块由 A/D 芯片实现A/D 转换 ,输出电压的数字量通过液晶LCD显示。系统硬件组成 方框图如图1 所示。 2.1 主控模块设计 在大部分的工控或测控设备中,8 位的 MCS

5、-51系列单片机能够满足大部分的控制要求, 加 之 MCS-51系列单片机的价格优势, 使 MCS-51系列单片机成为单片机应用主流。AT89C52是 目前应用比较广泛的MCS-51系列兼容单片机中的代表产品。鉴于此, 本系统选用AT89C52 单片机作为主控制器。 4 2.2 LCD 显示模块设计 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用的有 16 1、162、202 和 402 行等模块。本系统选用1602 字符型 LCD模块 , 其控制器为日 立公司生产的HD44780,可以用来显示数字、字符等。 2.3 A/D 转换模块设计 A/D模块由 A/D 芯

6、片和电压测量电路组成, 通过电压测量电路测得输入电压, 并转换为 0 5V的标准信号。本系统选用TI 公司生产的一种低价位、高性能的8 位 A/D 芯片 TLC549。 2.4 TLC549 介绍 2.4.1 TLC549 工作原理 当 /CS 变为低电平后,TLC549 芯片被选中,同时前次转换结果的最高有效位MSB (A7) 自 DATA OUT 端输出,接着要求自I/O CLOCK端输入 8 个外部时钟信号,前7 个 I/O CLOCK 信号的作用, 是配合TLC549 输出前次转换结果的A6-A0 位,并为本次转换做准 备:在第 4 个 I/O CLOCK 信号由高至低的跳变之后,片内

7、采样/保持电路对输入模拟量采 样开始,第8 个 I/O CLOCK 信号的下降沿使片内采样/保持电路进入保持状态并启动A/D 开始转换。转换时间为36 个系统时钟周期,最大为17us 。直到A/D 转换完成前的这段 时间内, TLC549 的控制逻辑要求:或者/CS 保持高电平,或者I/O CLOCK 时钟端保持 36 个系统时钟周期的低电平。由此可见,在自TLC549 的 I/O CLOCK 端输入 8 个外部时 钟信号期间需要完成以下工作:读入前次A/D 转换结果;对本次转换的输入模拟信号采样 并保持;启动本次A/D 转换开始。 2.4.2 TLC549 特点 TLC549 是采用 Iin

8、CMOSTM技术并以开关电容逐次逼近原理工作的8 位串行 AD7 芯 片,可与通用微处理器、控制器通过I O CLOCK 、CS、DA TA OUT 三条口线进行串行接 口。 TLC549 具有 4MHz 的片内系统时钟和软、硬件控制电路,转换时间最长为17s,允 许的最高转换速率为40000 次/s。 总失调误差最大为0 5LSB , 典型功耗值为6 mW。 TLC549 采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围,由于其VREF- 接地时, (VREF+)-(VREF-) 1 V,故可用于较小信号的采样,此外,该芯片还单电源3 6v 的供电 范围。总之,TLC549 具有控

9、制口线少, 时序简单,转换速度快, 功耗低,价格便宜等特TLC549 的极限参数如下: 电源电压: 65 V: 输入电压范围:0.3V VCC :+o.3V : 5 输出电压范围:0.3V VCC :+03 V; 峰值输入电流(任一输人端):10 mA; 峰值输人电流 (所有输入端 ): 30mA 工作温度: TLC549C : 0 70C TLC549I :-40 85 TLC549M -55“C 125 其芯片及原理图如图所示 2.5 AT89C52 工作原理 AT89C52为 8 位通用微处理器,采用工业标准的C51 内核,在内部功能及管脚排布上 与通用的8xc52 相同,其主要用于会聚

10、调整时的功能控制。功能包括对会聚主IC 内部寄 存器、数据RAM 及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外 遥控信号IR 的接收解码及与主板CPU 通信等。主要管脚有:XTAL1 (19 脚)和 XTAL2 (18 脚)为振荡器输入输出端口,外接 12MHz 晶振。 RST/Vpd (9 脚)为复位输入端口, 外接电阻电容组成的复位电路。VCC (40 脚)和 VSS(20 脚)为供电端口,分别接+5V 电源的正负端。 P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中, P0 端 口( 3239 脚)被定义为N1 功能控制端口,分别与N1 的相应功能管

11、脚相连接,13 脚定 义为 IR 输入端, 10 脚和 11 脚定义为I2C 总线控制端口,分别连接N1 的 SDAS (18 脚) 和 SCLS( 19 脚)端口,12 脚、27 脚及 28 脚定义为握手信号功能端口,连接主板CPU 的 相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。 6 系统硬件电路原理图如图3 所示。 2.6 1602 液晶显示屏工作原理 1602 液晶模块内部的字符发生存储器(CGROM) 已经存储了160 个不同的点阵字符图 形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字 符都有一个固定的代码,比如大写的英文字母“A”的

12、代码是01000001B ( 41H ),显示时模 块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”。 因为 1602 识别的是ASCII 码,试验可以用ASCII 码直接赋值, 在单片机编程中还可以 用字符型常量或变量赋值,如A 。 读的时候,先读上面那列,再读左边那行,如:感叹号! 的 ASCII 为 0x21 ,字母 B 的 ASCII 为 0x42 (前面加0x 表示十六进制)。以下是1602 的 16 进制 ASCII 码表: 3.系统软件设计 系统的软件设计使用C51编程 , 采用模块化设计方法, 主要由主函数、定时器T0 中断服务函 数、 A/D 转换函数、计算A

13、/D 转换值函数、LCD显示函数、 LCD显示 A/D 转换值函数等模块 组成 , 系统软件结构框图如图4 所示。 7 3.1 算法设计 根据 A/D 转换芯片TLC549的工作时序 ,200ms 进行一次A/D 采样转换 , 可以利用定时器T0 定 时, 基本定时时间为50ms,控制软计数器的累计次数为4 次,200ms(4 5ms)定时到时 , 产生定 时器 T0中断 , 在定时器T0中断服务函数中调用A/D 转换函数进行A/D采样转换 , 然后调用计 算 A/D 转换值函数把A/D 转换值转换为相应的ASCII 码, 最后通过LCD显示 A/D 转换值函数 把输出电压 (0 5V)的转换

14、数字量显示在液晶LCD1602 上, 数字量显示值范围为0 4.98v 。 3.2 数据结构设计 数据结构设计如表1 所示。 3.3 程序设计 (1) 主函数设计 主函数主要完成硬件初始化、数据初始化、函数调用等功能。 初始化。首先初始化定时软计数器值为 0.00 。调用 LCD初始化函数 , 调用写入显示数 据到 LCD1602函数设置 LCD的 DDRAM 地址为 00H,调用延时函数, 调用写入显示数据到LCD1602 函数在 LCD上显示字符数据第一行为“volt ”,第二行为”V”( 电压单位 ) 。 定时初值计算。定时器T0 的定时时间为50ms,系统所用的石英晶体振荡频率为 11

15、.0592 MHz,因此 ,1 个机器周期 1/ 石英频率 12, 即为 12/11.059 2 ms,定时器的工作方 8 式设置为方式 1 。 定时器设置。 设定定时器T0工作方式 : 定时器、 方式 1, 即 TMOD 01H。启动定时器T0, 即 TR0 1。开放定时器T0 中断以及总中断, 即设定 IE0x82H。 等待中断。 定时器 T0 启动计时后 ,CPU等待定时中断的到来。当定时器T0 定时 50ms后, 进入定时器 T0 中断服务函数。 主函数设计流程图如图所示。 开始 设置计数器初值为0.00 设置 T0 的初值:0XEE ; TL0 : 0x4c; 设置 T0 的工作方式

16、 :;TMOD=0x01 (工作方式1) 调用 LCD 初始化函数 调用写入指令数据到LCD 函数,在 LCD 上显示字符第一行为 “volt” , 第二行为“ V” 设置 LCD 的 DDRAM为 00H,调用写入指令到LCD 函数 调用主函数main 启动定时器T0:TR0=1;允许 T0 中断: IE=0X82 ; 等待 T0 计时器中断 9 (2) 定时器 T0 中断服务函数设计 当定时器T0 定时 50ms后, 进入定时器T0 中断服务函数。 首先重装定时器T0初值 , 即 TH0 0xee,TL0 0x00。每定时 5ms一次 , 软计数器值减1。然后 判断软计数器值是否为0: 若

17、值不为0, 表明 20ms(20ms采样一次 ) 计时未到 , 这时 T0中断函 数返回主函数 , 继续计时。若值为0, 表明 20ms(20ms 采样一次 ) 计时已到 , 重置软计数器初 值为 4, 为下次定时做准备, 接着调用A/D 转换函数进行A/D 采样转换 , 得到 A/D 采样转换值 adbl, 然后调用计算A/D 转换值 ASCII 码函数计算A/D 采样转换值 adbl相应的 ASCII 码, 再调用 LCD显示 A/D 转换值函数把模拟量输入电压(0 5 V) 的转换数字量显示在液晶 LCD1602上, 数字量显示值范围为04.5v 。最后 T0 中断函数返回主函数进行下一

18、次A/D 采 样转换。 (3) A/D 采样转换函数设计 根据 A/D 转换芯片TLC549的工作时序 , 当片选信号CS为高电平时 , 数据输出DATA OUT 端 处于高阻状态 , 此时时钟信号I/O CLOCK 不起作用 , 不能进行 A/D 转换。将片选信号CS置低 电平 , 内部电路在测得CS下降沿后 , 再等待两个内部时钟上升沿和一个下降沿后, 然后确认 这一变化。 首先定义变量i( 表示 A/D 采样转换位数 ), 并将芯片TLC549片选信号AD_CS 置低电平 , 选 中该芯片。初始化A/D 采样转换值adbl 为 0, 初始化变量i(A/D采样转换位数) 为 0。 判断 A

19、/D 转换位数i 是否小于8。 如果 i 小于 8, 则将芯片TLC549时钟信号AD_CK 置高电平 , 并把 A/D 采样转换值adbl 左移一位。然后判断A/D 采样转换串行数据输出信号AD_OUT 是否为 1: 若 AD_OUT 为 1, 则将 A/D 采样转换值adbladbl自加 1。若 AD_OUT 为 0, 则 A/D 采样转换值adbladbl不变。 再将芯片TLC549时钟信号AD_CK 置低电平。 最后将 A/D 转换位数i 自加 1, 并再次转向上面 的判断 A/D 转换位数i 是否小于8。 如果 i 不小于 8, 则把芯片TLC549片选信号AD_CS 置高电平 ,结

20、束 A/D 采样转换 , 并退 出 A/D 采样转换函数。 (4) 计算 A/D 转换值 ASCII 码函数模块设计 要把 AD转换值 adbl 显示在 LCD上, 需要把它转换为相应的ASCII 码。 首先计算 A/D 转换值百位数ASCII 码: 将 A/D 转换值 adbl 除以 100 得到的商与0x30( 因为字 符数字 09 与其相应的ASCII 码相差 30H)相与。然后计算A/D 转换值十位数ASCII 码: 将 A/D 转换值 adbl 除以 100 得到的余数再除以10, 得到的商与0x30( 因为字符数字09 与其 相应的 ASCII 码相差 30H)相与。再计算A/D

21、转换值个位数ASCII 码: 将 A/D 转换值 adbl 除 以 10 得到的余数与0x30( 因为字符数字09 与其相应的ASCII 码相差 30H)相与。最后函 数返回。 10 (5) LCD 显示函数设计 LCD显示函数模块包括LCD初始化函数、写入指令数据到LCD函数、写入显示数据到LCD 函数、 LCD显示 A/D 转换值函数、延时函数等模块。 4. 源程序代码 4.1 Main 函数模块 #include /包含头文件 #include /空操作函数 _nop_() 必须的头文件 #include #include “1602.h“ sbit TLC549_CS = P10; /

22、TLC549 片选,低电平有效 sbit TLC549_DO = P11; /TLC549 数字量输出 sbit TLC549_CLK = P12; /TLC549 片外独立时钟 sbit led = P07; / 工作状态灯,闪烁为正常 unsigned char DO, num; /读土壤湿度返回值、定时器计数变量 float DO_F, volt,hh; / / 读取返回值的20 次累加值、最终转换系数 bit flag = 1; /工作标志位 unsigned char str1 = “Volt:“; unsigned char str2 = “ 0V“; unsigned char

23、temp3; void InitTimer0(); / 声明定时器 T0 初始化函数 void delayus(unsigned int t); / 声明延时 t 个机器周期 unsigned char TLC549_read(); / 声明 TLC549 读数字量函数 void main() unsigned char i; /for循环变量 InitTimer0(); / 初始化定时器T0 11 LCD_init(); delayus(1000); LCD_clear(); LCD_write_string(1, 1, str1); LCD_write_string(2, 1, str2)

24、; while(1) if(flag) flag = 0; / 标志位清零 for( i = 0 ; i 4.5|volt0.5 / 定义 1602 各个控制位 sbit RW = P21; sbit EN = P20; 17 void LCD_check_busy(); / 判忙 void LCD_write_com(unsigned char com); /写命令 void LCD_write_Data(unsigned char Data); /写数据 void LCD_clear(); / 清屏 /void LCD_write_char(unsigned char x, unsigne

25、d char y, unsigned char c); / 在第 y 行第 x 位写字符 void LCD_write_string(unsigned char x, unsigned char y, unsigned char *s); / 在第 y 行第 x 位写字符串 void LCD_init(); / 初始化 /void LCD_user(unsigned char x, unsigned char *user); / 向 CGRAM 写入自定 义字符 #endif 5.实验总结 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的 让我长进了很多,单片机课程

26、设计重点就在于软件算法的设计,需要有很巧妙的程序算法, 虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,只有我们去试着做了, 才能真正的掌握,学习的理论有些东西是很难理解的,更谈不上掌握。 Tlc549的 AD 转换可以实现采集数据和控制,是单片机很重要的一个功能。成功的将电 压值变成数字信号并在LCD1602 上显示出来。用到了定时器的应用(包括工作方式寄存器 TOMD 所用工作方式为1, 十六位定时计数器; IE 中断允许控制; 控制寄存器TCON 中的 TFO ) 。 学会如何根据元件仿真图去定义端口( sbit ),学会如何计算N(t/Tcy)以及 X(216-N) 以及

27、 对 TH0和 TL0 的赋值( X/256 和 X%256 ). 实验过程中发现LCD1602显示的值与电压表测得的 实际值有偏差,并非线性,原因是计算值5v 是电位器无法达到的值,因此需要将电压值 volt=5.0/256*read_549*1000中的 5v 改小才能使误差尽可能减小并呈现线性关系,实验中 还遇到一些问题,如两位小数点不知道如何输出最后通过百度明白了是“%4.2f ”控制小数 18 点的位数。 通过这个实验加深了对单片机各个功能的理解,在实验的过程中发现了很多问题 和不足, 并试着自己去解决这些问题,之后又手画了proteus仿真图, 用仿真的方式把实验 结果实现,提高了自己的动手能力,学会了一门新的软件,受益颇多。 6.参考文献 1 刘瑞新单片机原理及应用教程机械工业出版社 2 吴国经单片机应用技术中国电力出版社 3 李全利迟荣强单片机原理及接口技术高等教育出版社 4 陈桂友单片微型计算机原理及接口技术

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1