手提数字显示电子秤设计课程设计论文.docx
- 文档编号:23598165
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:22
- 大小:106.68KB
手提数字显示电子秤设计课程设计论文.docx
《手提数字显示电子秤设计课程设计论文.docx》由会员分享,可在线阅读,更多相关《手提数字显示电子秤设计课程设计论文.docx(22页珍藏版)》请在冰豆网上搜索。
手提数字显示电子秤设计课程设计论文
课程设计任务书
题目:
手提数字显示电子秤设计
初始条件:
具备电子电路的设计知识和能力;具备单片机系统的设计方法;具备单片机软件编程技术;熟悉单片机常用软件的使用;
要求完成的主要任务:
其电路构成主要有测量电路,差动放大电路,A/D转换,显示电路。
其中测量电路中最主要的元器件就是电阻应变式传感器。
电阻应变式传感器是传感器中应用最多的一种,广泛应用于电子秤以及各种新型结构的测量装置。
而差动放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的要求。
A/D转换的作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,最后由显示电路显示出测量结果。
(1)用电阻应变式传感器
(2)重范围为5kg
(3)电路由测量电桥,差动放大电路,A/D转换电路,显示电路组成
时间安排:
设计时间2周,其中3天原理设计,3天仿真,3天电路调试,1天答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本文介绍了一种简单手提数字显示电子秤的设计,系统主要利用了电阻应变片传感器来将物体重量转化为相应的电信号,然后经过差分放大电路将微小的电信号进行线性放大,只有由A/D转换电路采集放大后的信号,再将采集的数字信息传送给单片机,由单片机将数字信号通过数码管显示出来,从而完成系统电子称的设计。
整个系统中关键的元件是电阻应变式传感器,由传感器感知外界信息并将其转化为便于处理的电信号。
此外系统包含了基本信号放大和处理电路,以及需要熟练掌握单片机程序调试的方法和技巧。
关键词:
电阻应变式传感器,A/D转换,单片机
1.手提数字显示电子秤总体设计方案
1.1数字显示电子称的组成
首先,数字显示电子称需要一个重量传感器,利用这个传感器将物体的质量信号转换为电信号,然后再利用一些测量电路,差动放大电路,A/D转换和显示电路,即可构成一个简易的数字电子称。
其具体实现框图1.1如下:
图1.1数字显示电子称基本结构图
1.2电阻应变片传感器工作原理
整个系统设计的核心元件是电阻应变式传感器,其基本组成是由弹性敏感元件、电阻应变计、补偿电阻和外壳组成。
弹性敏感元件受到所测量的力而产生变形,并使附着其上的电阻应变计一起变形,电阻应变计就会将变形值转换为电阻
值的变化,从而通过具体电路就会转换为电信号的变化。
电阻应变片应用在电桥中主要有三种接法,即单臂桥、半桥和全桥。
以下以图1.2单臂桥电路来说明电阻应变片传感器的应用原理。
R2
R4R3
图1.2单臂桥电路
应变片单臂桥如图1.2所示,桥臂AD为工作臂,接应变片;R1为应变片静态电阻,
为工作时应变片电阻的变化量。
此变化量可以是正值,称之为正应变,此时应变片承受拉应变,图中符号箭头向上表示为正应变;当变化量为负值时,称之为负应变,此时应变片承受压应变。
单桥臂只有一个桥臂接应变片,其它桥臂均接性能参数稳定的标准电阻,为便于进行简化分析,一般都是先取
,按照电路理论分析,可得电桥的输出表达式如下:
(式1-1),由式1-1得到单臂桥输出表达式为:
(式1-2)
单臂电桥的灵敏度为
(式1-3)
当
时,由式1-2和式1-3可得
,
,由该关系,输出与输入呈近似线
性关系,输出电压
与应变量
成正比,应变量越大,则输出电压越大,也即将物体的重量信息转化为电阻应变片上的应变量,进而转化为输出电压信号的变化,最终经过后续的信号差分放大电路,A/D测量电路,以及单片机控制电路和显示电路,即完成了数字显示电子称设计。
2.系统具体实现设计
2.1测量电路设计
测量电路中主要电路结构类似上图1.2所示,主要由电阻应变片传感器将物体重量信号转为电信号的变化。
系统为了提高灵敏度,采用全桥电路实现。
当系统输入电压
,输出电压
,则输出电压大小随应变量
的成线性变化,物体越重,应变量
越大,输出电压随之增大,则测量输出电压的大小,即可知物体重量。
2.2差分放大电路设计
由于通过电阻应变式传感器转换的得到的电信号比较小,为此设计差分放大电路将微小信号进行线性放大,便于后续中A/D转换进行采集和处理。
差放电路具体实现可通过运放来实现,由于考虑到微小信号的放大,设计中可以考虑用高精度仪表放大器或者精密型运放来实现。
为便于实现简单,此次系统实现选择用高精度的仪表放大器OPA128来实现,其电路结构简单
图2.2差分放大电路
2.3A/D芯片的选型和实现
本次要求设计数字显示电子称没有明确的精度要求,为此A/D芯片的选择可以考虑简单8位或者10位精度的A/D芯片,常用的有ADC0809,AD7810,TLC549等芯片。
系统实现以TLC549为例说明系统实现电路及其实现原理,其基本的电路图如下图2.3所示:
图2.3A/D转换电路
2.4显示电路实现
系统的数字显示可以用八段数码管或者液晶显示器来进行显示,为便于观察的方便和显眼,常用的数字显示电子称一般为便于显眼会选择用高亮度的数码管进行显示,其基本显示电路如下图所示
图2.4数码管显示电路
3.系统主要电路设计
整个系统的设计主要包含了如下图3.1所示的电路结构,主要由差分放大电路来放大电阻应变片传感器的微弱信号,再经过A/D转换电路,以及由单片机作为控制器处理电路和显示电路构成。
图3.1系统整体主要电路
4.系统程序设计
系统在程序上主要是单片机上的控制程序,程序部分比较简单,主要包括数码管显示电路和A/D转换中读取TLC549转换结果。
主体程序框图如下图4.1所示:
开始
初始化A/D芯片
启动A/D转换
读取A/D转换寄存器结果
配置数码管位选和段选位
将读取值按千百十个位分离
分别送予数码管各位显示
结束
图4.1系统主要程序结构框图
5.心得体会
为期一个星期的综合课程设计已经结束,在这一星期的学习了基本电路设计和单片机编程调试。
通过本次课题数字电子称的设计,掌握了基本电路调试和单片机的应用技巧和调试方法。
专业综合课设本来就是一个实践性很强的课程,只有在理论的指导下,在付诸于实践,才能真正掌握设计电路的窍门。
我们需要多动手,多实际连接一些电路,分析电路,才能在理论的基础上,学到实用的电路。
综合课程设计正是为了提高我们的实践能力,才要求大家去实际地设计电路,调试电路,学到更实用的知识。
只有在真正弄懂其原理,以及每个参数怎么得来的,理论计算与实际测量之间的差距的原因到底是什么原因造成的。
实际的波形与理论预测的不相符合时,该怎么去调试,只有把理论与实践相结合在一起时,才能真正的设计出实用的电路。
数字显示电子称本身是生活中常用的器件,通过学习联系实际制作,提高动手能力,有利于促进我们学习的兴趣。
本课题数字显示电子称本来就是一个实践性很强的课程,只有在理论的指导下,在付诸于实践,才能真正掌握设计电路的窍门。
学好电子技术,我们需要多动手,多实际连接一些电路,分析电路,才能在理论的基础上,学到实用的电路。
综合课程设计正是为了提高我们的实践能力,才要求大家去实际地设计电路,调试电路,学到更实用的知识。
由此看来,此次综合课程设计意义重大。
参考文献
[1]吴友宇主编.模拟电子技术基础.北京:
清华大学出版社,2009
[2]李群芳,肖看.单片机原理接口与应用.北京:
清华大学出版社,2005
[3]陈光东,赵性初.单片微型计算机原理与接口技术.武汉:
华中科技大学出版社,1999
[4]李万臣主编.模拟电子技术基础与课程设计.哈尔滨:
哈尔滨工程大学出版社,2001
[5]康华光主编.电子技术之模拟部分.武汉:
华中科技大学出版社,2005
[6]陈大钦,电子技术基础实验-电子电路实验、设计、仿真.高等教育出版社,2004
附录:
主程序:
#include
#include"cry1602.h"
#include"ADC_Func.h"
typedefunsignedintuint;
typedefunsignedcharuchar;
staticuintresult[33];//定义其元素的个数
ucharDC[]={"Quality="};
ucharptr[]={""};
uintsum;
voidmain()
{
/*下面六行程序关闭所有的IO口*/
P1DIR=0XFF;P1OUT=0XFF;
P2DIR=0XFF;P2OUT=0XFF;
P3DIR=0XFF;P3OUT=0XFF;
P4DIR=0XFF;P4OUT=0XFF;
P5DIR=0XFF;P5OUT=0XFF;
P6DIR=0XFF;P6OUT=0XFF;
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
LcdReset();//初始化液晶
P6SEL|=BIT0;//选择A0作为转换通道
ADC12CTL0|=ADC12ON+SHT0_1+MSC;//采样周期为四倍的ADC12CLK的周期
ADC12CTL1|=CONSEQ_2+SHP;//采样源来自定时器
ADC12MCTL2=SREF_2;//
ADC12MCTL0=INCH_0;
ADC12CTL0|=ENC;
ADC12IE|=BIT0;//enbleinterrupt
ADC12CTL0|=ADC12SC;//stratcovert
DispStr(0,0,DC);
while
(1)
{
Delay5ms();
Delay5ms();
Delay5ms();
Delay5ms();
sum=ADC12MEM0;
sum=(sum*3.3)-270;
if(sum/1000==0)
{
ptr[0]=sum/100+0x30;
ptr[1]=(sum%100)/10+0x30;
ptr[2]=sum%10+0x30;
ptr[3]='g';
ptr[4]='';
}
else
{
ptr[0]=sum/1000+0x30;
ptr[1]=(sum%1000)/100+0x30;
ptr[2]=(sum/10)%10+0x30;//shuzi表中第10位对应符号"."
ptr[3]=sum%10+0x30;
ptr[4]='g';
}
DispStr(8,0,ptr);
}
_EINT();
LPM0;
}
液晶显示程序:
#include
#include"cry1602.h"
typedefunsignedcharuchar;
typedefunsignedintuint;
/**************宏定义***************/
#defineDataDirP2DIR
#defineDataPortP2OUT
#defineBusy0x80
#defineCtrlDirP6DIR
#defineCLR_RSP6OUT&=~BIT3;//RS=P3.0
#defineSET_RSP6OUT|=BIT3;
#defineCLR_RWP6OUT&=~BIT4;//RW=P3.1
#defineSET_RWP6OUT|=BIT4;
#defineCLR_ENP6OUT&=~BIT5;//EN=P3.2
#defineSET_ENP6OUT|=BIT5;
/***********************************************
函数名称:
DispStr
功能:
让液晶从某个位置起连续显示一个字符串
参数:
x--位置的列坐标
y--位置的行坐标
ptr--指向字符串存放位置的指针
返回值:
无
***********************************************/
voidDispStr(ucharx,uchary,uchar*ptr)
{
uchar*temp;
uchari,n=0;
temp=ptr;
while(*ptr++!
='\0')n++;//计算字符串有效字符的个数
for(i=0;i { Disp1Char(x++,y,temp[i]); if(x==0x0f) { x=0; y^=1; } } } /******************************************* 函数名称: DispNchar 功能: 让液晶从某个位置起连续显示N个字符 参数: x--位置的列坐标 y--位置的行坐标 n--字符个数 ptr--指向字符存放位置的指针 返回值: 无 ********************************************/ voidDispNChar(ucharx,uchary,ucharn,uchar*ptr) { uchari; for(i=0;i { Disp1Char(x++,y,ptr[i]); if(x==0x0f) { x=0; y^=1; } } } /******************************************* 函数名称: LocateXY 功能: 向液晶输入显示字符位置的坐标信息 参数: x--位置的列坐标 y--位置的行坐标 返回值: 无 ********************************************/ voidLocateXY(ucharx,uchary) { uchartemp; temp=x&0x0f; y&=0x01; if(y)temp|=0x40;//如果在第2行 temp|=0x80; LcdWriteCommand(temp,1); } /******************************************* 函数名称: Disp1Char 功能: 在某个位置显示一个字符 参数: x--位置的列坐标 y--位置的行坐标 data--显示的字符数据 返回值: 无 ********************************************/ voidDisp1Char(ucharx,uchary,uchardata) { LocateXY(x,y); LcdWriteData(data); } /******************************************* 函数名称: LcdReset 功能: 对1602液晶模块进行复位操作 参数: 无 返回值: 无 ********************************************/ voidLcdReset(void) { CtrlDir|=0x38;//控制线端口设为输出状态 DataDir=0xFF;//数据端口设为输出状态 LcdWriteCommand(0x38,0);//规定的复位操作 Delay5ms(); LcdWriteCommand(0x38,0); Delay5ms(); LcdWriteCommand(0x38,0); Delay5ms(); LcdWriteCommand(0x38,1);//显示模式设置 LcdWriteCommand(0x08,1);//显示关闭 LcdWriteCommand(0x01,1);//显示清屏 LcdWriteCommand(0x06,1);//写字符时整体不移动 LcdWriteCommand(0x0c,1);//显示开,不开游标,不闪烁 } /******************************************* 函数名称: LcdWriteCommand 功能: 向液晶模块写入命令 参数: cmd--命令, chk--是否判忙的标志,1: 判忙,0: 不判 返回值: 无 ********************************************/ voidLcdWriteCommand(ucharcmd,ucharchk) { if(chk)WaitForEnable();//检测忙信号? CLR_RS; CLR_RW; _NOP(); DataPort=cmd;//将命令字写入数据端口 _NOP(); SET_EN;//产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } /******************************************* 函数名称: LcdWriteData 功能: 向液晶显示的当前地址写入显示数据 参数: data--显示字符数据 返回值: 无 ********************************************/ voidLcdWriteData(uchardata) { WaitForEnable();//等待液晶不忙 SET_RS; CLR_RW; _NOP(); DataPort=data;//将显示数据写入数据端口 _NOP(); SET_EN;//产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } /******************************************* 函数名称: WaitForEnable 功能: 等待1602液晶完成内部操作 参数: 无 返回值: 无 ********************************************/ voidWaitForEnable(void) { P2DIR&=0x00;//将P4口切换为输入状态 CLR_RS; SET_RW; _NOP(); SET_EN; _NOP(); _NOP(); while((P2IN&Busy)! =0);//检测忙标志 CLR_EN; P2DIR|=0xFF;//将P4口切换为输出状态 } /******************************************* 函数名称: Delay5ms 功能: 延时约5ms 参数: 无 返回值: 无 ********************************************/ voidDelay5ms(void) { uinti=40000; while(i! =0) { i--; } } A/D转换程序: #include typedefunsignedintuint; typedefunsignedcharuchar; /******************************************** 函数名称: Init_ADC 功能: 初始化ADC 参数: 无 返回值: 无 ********************************************/ voidInit_ADC(void) { P6SEL|=0x01;//使能ADC通道 ADC12CTL0=ADC12ON+SHT0_15+MSC;//打开ADC,设置采样时间 ADC12CTL1=SHP+CONSEQ_2;//使用采样定时器 ADC12IE=0x01;//使能ADC中断 ADC12CTL0|=ENC;//使能转换 ADC12CTL0|=ADC12SC;//开始转换 } /******************************************** 函数名称: Hex2Dec 功能: 将16进制ADC转换数据变换成十进制 表示形式 参数: Hex_Val--16进制数据 ptr--指向存放转换结果的指针 返回值: 无 ********************************************/ voidHex2Dec(uintHex_val,uchar*ptr) { ptr[0]=Hex_val/1000; ptr[1]=(Hex_val-ptr[0]*1000)/100; ptr[2]=(Hex_val-ptr[0]*1000-ptr[1]*100)/10; ptr[3]=(Hex_val-ptr[0]*1000-ptr[1]*100-ptr[2]*10); } /******************************************* 函数名称: Trans_val 功能: 将16进制ADC转换数据变换成三位10进制 真实的模拟电压数据,并在液晶上显示 参数: Hex_Val--16进制数据 返回值: 无 ********************************************/ voidTrans_val(uintHex_Val,uchar*ptr) { unsignedlongcaltmp; uintCurr_Volt; uchart1; caltmp=Hex_Val; caltmp=(caltmp<<5)+Hex_Val;//caltmp=Hex_Val*33 caltmp=(caltmp<<3)+(caltmp<<1);//caltmp=caltmp*10 Curr_Volt=caltmp>>12;//Curr_Volt=caltmp/2^n ptr[0]=Curr_Volt/100;//Hex->Dec变换 t1=Curr_Volt-(ptr[0]*100); ptr[1]=t1/10; ptr[2]=t1-(ptr[1]*10); } 本科生课程设计成绩评定表 姓名 刘潇 性别 男 专业、班级 电信1104 课程设计题目: 课程设计答辩或质疑记录: 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手提 数字 显示 电子秤 设计 课程设计 论文