




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上基于单片机的电阻测量设计修改专心-专注-专业 作者: 日期:1设计目的及其意义本设计基于单片机和AD转换器实现电阻的测量。采用ADC0809,实现由模拟电压转换到数字信号,通过单片机系统处理后,由LCD显示被测量电阻的阻值。测量范围为15K,精度大于98%。2方案设计2.1 总体设计思路本设计包括硬件和软件设计两个部分。模块划分为电压测量(数据采集)、模数转换、阻值显示等子模块。电路结构可划分为:电压测量,电压转换电阻,阻值显示及相关的控制管理软件组成。用户终端完成信息采集、处理、数据传送、显示等功能。从设计的要求来分析该设计须包含如下结构:电压测量电路,电压转换电路
2、,阻值显示电路、单片机及相关的控制软件组成;它们之间的构成框图如图1总体设计框图所示:AT89C51LCD显示电压转换电阻(ADC0809)电压测量测量精度选择图1 总体设计框图处理器采用51系列单片机AT89C51。整个系统是在系统软件控制下工作的。当测量一个电阻时,经过电压采集,电压转换为电阻,电阻显示三个部分可以在LCD上显示该被测电阻的阻值。当被测电阻为100范围以内时,通过开关选择测量量程,再次测量该电阻,以减小误差。2.2 具体电路模块设计2.2.1 电压测量的设计如图2所示为被测电阻电压测量。电压经过已知电阻R1和被测电阻Rx接到地。通过OUT输出被测电阻Rx上的电压。送到ADC
3、0809的IN0口。图2 被测电阻电压测量图2.2.2 模数ADC转换的设计由电压测量得到的电压经过ADC模数转换可得到8位的电压值,经过欧姆定律(即电压之比等于电阻之比)可得到被测电阻的阻值的大小。公式如下本设计用到的R1的阻值为600和300。由被测电阻得到的电压值经ADC0809的26脚IN0输入,经过内部的AD转换,在OUT17输出数字电压量,经过上述公式的转变,在P2口上的显示的数字量为被测电阻的阻值数字量。如图3所示为被测电阻电压量转换为阻值量。图3 被测电阻电压量转换为阻值量图2.2.3 液晶显示电路的设计经过ADC0809模数转换得到的电阻值数字量,在MCU的P2口输入,MCU
4、系统处理后在P0口由LCD1602显示出来该被测电阻的阻值。如图4所示为被测电阻阻值显示。图4 被测电阻阻值显示图2.2.4 时钟电路的设计XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us,故而一个机器周期为1us。如图5所示为时钟电路。图5 时钟电路图2.2.5 复位电路的设计复位方法一般有上电自动复位和外部按键手
5、动复位,单片机在时钟电路工作以后, 在RESET端持续给出2个机器周期的高电平时就可以完成复位操作6。例如使用晶振频率为12MHz时,则复位信号持续时间应不小于2us。本设计采用的是外部手动按键复位电路。如图6所示为复位电路。图6 复位电路图2.2.6 电源电路的设计本设计使用USB接口给电路提供+5V电压。电路中所有的高电平全部接在VCC端,地接在USB接口的4号脚上。通电时红灯LED-R亮。如图7所示为电源电路。图7 电源电路图2.2.7 下载电路的设计本设计使用串口RS232以及烧录芯片MAX232组成的下载电路。MAX232的11和12号脚(R1OUT、T1IN)与MCU的10和11号
6、脚(RXD、TXD)连接,即可向MCU烧录程序。图8所示为下载电路。图8 下载电路图2.3 系统硬件电路的选择及说明硬件电路的设计见附图示,从以上的分析可知本设计中要用到如下器件:STC89C52RC、ADC0809转换器、LCD1602、按键等一些单片机外围应用电路,以及单片机的手工复位,单片机电源电路等。其中R3,R6电阻为已知电阻,R4,R5为不同测量精度下的未知电阻,开始工作时可在LCD上观察到被测电阻的阻值。电路设有2个按键,S1键作为阻值测量精度的选择键,S2键作为电路复位键。2.4 软件的程序实现2.4.1主程序工作流程图按上述工作原理和硬件结构分析可知系统主程序流程图如下图9所
7、示。开始系统初始化选择测量精度开关S1,重测此电阻(重新)放置电阻初次显示<300无正常显示 正常显示最终显示结束图9 主程序工作流程图3软件仿真本设计通过利用Proteus仿真,将所编写的程序用Keil软件编译,所仿真原理图见附录二。本设计所要求达到的目标是测量一个电阻,在误差允许范围内,通过LCD1602显示出该电阻的阻值。测量的部分电阻的阻值如下表1所示。表1 仿真测量电阻阻值4结束语本设计研究了一种基于单片机技术的电阻测量。由电路知识可以容易测出一个电阻上的电压,通过欧姆定律又能得到该电阻的阻值。由于测量的电压是模拟量,故用ADC转换器转换为数字量,再由单片机系统处理即可完成电阻
8、的阻值测量。由于数字量在数值上是离散的,通过此种方法得到的阻值存在着误差,为了尽可能的减小此误差,在选择已知电阻上,试用了很多电阻。通过大量数据与实际电阻的阻值相比较,以及实验室能提供的电阻,选用了600和300的已知电阻,用不同的量程可以尽可能的减小误差。表1中给出了部分电阻的硬件电路测量结果,从中可以得知,同一电阻,用不同的量程测量得到不同的阻值,存在的误差也很明显。本设计只采用了两种已知电阻,也就是2个量程测量电阻,测量范围从15K,精度大于98%。若提高测量精度,只需增加更大的量程,即可完成大电阻的阻值测量。由于硬件电路的连接,元器件不理想等原因,实际测量电阻的阻值与仿真得到的阻值还是
9、有一定误差的。虽然硬件电路能正常工作,但程序以及元器件的选择不足,使得这次设计并没有达到很好的测量效果,对微欧姆级和K欧姆级电阻无法测量,还是感到不理想。通过此次设计,尤其硬件电路的焊接,对单片机系统有了更好的认识。在以后的学习中,会更加注重设计原理与硬件电路的相结合,做好每一个设计,达到理想的要求。参考文献:1 史翔,张岳涛.基于AT89C51单片机微电阻测量系统J. 甘肃科技,2007年8月2 周瑞景. Proteus在MCS-51&ARM7系统中的应用百例M. 北京:电子工业出版社,20063 李全利.单片机原理及接口技术M.2版. 北京:高等教育出版社,20104 王东峰,王会
10、良.单片机C语言应用100例M.北京:电子工业出版社,20105 彭伟. 单片机C语言程序设计实训100例基于8051+Proteus仿真.北京:电子工业出版社,2010附录一 设计编程程序/*头文件及宏定义* #include "includes.h"#define TIME0H 0x3C#define TIME0L 0xB0#define K1 P1_0#define CLK P1_1/*全局变量* unsigned char uc_Clock=0;/定时器0中断计数bit b_DATransform=0;/<<<<<<<<
11、;<<<<<<<<<<<<<把电阻值显示在LCD上/>>>>>>>>>>>>>>>>>>>>>void vShowRes(unsigned int uiNumber)unsigned char ucaNumber4,ucCount;ucaNumber0=uiNumber/1000;/把计算数字的每个位存入数组。ucaNumber1=(uiNumber-1000*(int)ucaNumber0)
12、/100;ucaNumber2=(uiNumber-1000*(int)ucaNumber0-100*(int)ucaNumber1)/10;ucaNumber3=uiNumber-1000*(int)ucaNumber0-100*(int)ucaNumber1-10*(int)ucaNumber2; for(ucCount=0;ucCount<4;ucCount+)vShowOneChar(ucaNumberucCount+48);/从首位到末位逐一输出。 /*主函数* void main()/<<<<<<<<<<<&l
13、t;<<<<<<<<<<<<<设置定时器0>>>>>>>>>>>>>>>>>>>>>>>>>>>>TMOD=0x21;/定时器0,模式1。定时器1,模式2TH0=TIME0H; /对定时器0赋初值TL0=TIME0L;TH1=0x14; /对定时器1赋初值TL1=0x00;TR0=1;/启动定时器0。ET0=1;/开定时器0中断。TR1=1; /启动定
14、时器1。ET1=1; /开定时器1中断。EA=1;/开总中断 P1=0xFF;vdInitialize();vWriteCMD(0x80); /写入显示起始地址(第一行第一个位置)vShowChar("Resistance:");vWriteCMD(0xCD);vShowChar("()"); /显示欧姆符号while(1)if(b_DATransform=1)b_DATransform=0;vWriteCMD(0xC4);vShowRes(uiADTransform();/<<<<<<<<<<
15、<<<<<<<<<<<<<<<<<<<<<<<定时器0中断函数>>>>>>>>>>>>>>>>>>>void Time0() interrupt 1if(uc_Clock=0)uc_Clock=5;b_DATransform=1;elseuc_Clock-;TH0=TIME0H; /恢复定时器0。TL0=TIME0L;void Time1() i
16、nterrupt 3CLK=!CLK;/*驱动程序*/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<头文件及宏定义>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#include "
17、;SMC1602.h"/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把1个命令写入LCD>>>>>>>>>>>>>>>>>>>>>>>>>>void vWriteCMD(unsigned char ucCommand) vDela
18、y();/先延时。LCDE=1;/然后把改为写入命令状态。LCDRS=0;LCDRW=0;LCDPORT=ucCommand;/再输出命令。LCDE=0;/最后执行命令。/<<<<<<<<<<<<<<<<<<<<<<<<<把1个数据写入LCD>>>>>>>>>>>>>>>>>>>>>>>>>>
19、>>>>>>>>>void vWriteData(unsigned char ucData) vDelay(); /先延时。LCDE=1; /然后把改为写入数据状态。LCDRS=1;LCDRW=0;LCDPORT=ucData; /再输出数据。LCDE=0; /最后显示数据。void vShowOneChar(unsigned char ucChar)switch(ucChar)case ' ': vWriteData(0x20);break;case ':': vWriteData(0x3A);break;
20、case '(': vWriteData(0x28);break;case ')': vWriteData(0x29);break;case '0': vWriteData(0x30);break;case '1': vWriteData(0x31);break;case '2': vWriteData(0x32);break;case '3': vWriteData(0x33);break;case '4': vWriteData(0x34);break;case '5
21、39;: vWriteData(0x35);break;case '6': vWriteData(0x36);break;case '7': vWriteData(0x37);break;case '8': vWriteData(0x38);break;case '9': vWriteData(0x39);break;case 'R': vWriteData(0x52);break;case 'a': vWriteData(0x61);break;case 'c': vWriteDa
22、ta(0x63);break;case 'e': vWriteData(0x65);break;case 'i': vWriteData(0x69);break; case 'n': vWriteData(0x6E);break;case 's': vWriteData(0x73);break;case 't': vWriteData(0x74);break;case '': vWriteData(0xF4);break; /显示default: break;void vShowChar(unsig
23、ned char ucaChar)unsigned char ucCount;for(ucCount=0;ucCount+)vShowOneChar(ucaCharucCount);if(ucaCharucCount+1='0')break;/<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<延时函数>>>>>>>>>>>>>>>>>>>>>>>>>void vDelay()unsigned int uiCount;for(uiCount=0;uiCount&l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 步行街个人店铺租赁合同书
- 区商贸城商铺租赁合同
- 健身场地租赁合同
- 农副产品购销合同
- 土地租赁建房合同
- 借款抵押担保合同
- 停车位代理销售合同
- 知识产权专项法律服务合同
- 焦作师范高等专科学校《高尔夫球具维护》2023-2024学年第二学期期末试卷
- 长沙航空职业技术学院《广播电视技术实务》2023-2024学年第二学期期末试卷
- 2025年2级注册计量师专业实务真题附答案
- 2025年春季学期教导处工作计划及安排表
- 果实品质评价体系建立与应用-深度研究
- 智能制造技术在工业设计中的应用
- 2025年湖南高速铁路职业技术学院高职单招高职单招英语2016-2024年参考题库含答案解析
- 吉林省吉林市普通中学2024-2025学年高三上学期二模试题 数学
- 北京市东城区2024-2025学年高一上学期期末统一检测历史试卷(含答案)
- 发展新质生产力如何“因地制宜”
- 人教版小学六年级下册音乐教案全册
- 12J201平屋面建筑构造图集(完整版)
- 2024年个人信用报告(个人简版)样本(带水印-可编辑)
评论
0/150
提交评论