电子称设计.docx

上传人:b****5 文档编号:12597121 上传时间:2023-04-20 格式:DOCX 页数:24 大小:196.26KB
下载 相关 举报
电子称设计.docx_第1页
第1页 / 共24页
电子称设计.docx_第2页
第2页 / 共24页
电子称设计.docx_第3页
第3页 / 共24页
电子称设计.docx_第4页
第4页 / 共24页
电子称设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

电子称设计.docx

《电子称设计.docx》由会员分享,可在线阅读,更多相关《电子称设计.docx(24页珍藏版)》请在冰豆网上搜索。

电子称设计.docx

电子称设计

总体方案:

系统总体方案如下图所示:

1:

传感器

 

传感器结构原理图

称重传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,输出信号电压可由下式给出:

 

2:

放大电路

INA126构成的放大器及滤波电路:

放大器增益 ,通过改变RG的大小来改变放大器的增益,微弱信号Vi1和Vi2被分别放大后从INA126的V2脚输出。

INA126具有体积小、功耗低、精度高、噪声低和输入偏置电流低的特点。

其最大输入偏置电流为20nA,这一参数反映了它的高输入阻抗。

INA126在外接电阻Rg时,可实现1~1000范围内的任意增益,滤波电路主要针对工频及其低次谐波引入的干扰。

因为压力信号变化十分缓慢,所以滤波电路可以把频率做得很低。

3:

AD转换电路

双积分型A/D转换器:

如:

ICL7135、ICL7109等。

双积分型A/D转换器精度高,但速度较慢(如:

ICL7135),具有精确的差分输入,输入阻抗高(大于),可自动调零,超量程信号,全部输出于TTL电平兼容。

双积分型A/D转换器具有很强的抗干扰能力。

对正负对称的工频干扰信号积分为零,所以对50HZ的工频干扰抑制能力较强,对高于工频干扰(例如噪声电压)已有良好的滤波作用。

只要干扰电压的平均值为零,对输出就不产生影响。

尤其对本系统,缓慢变化的压力信号,很容易受到工频信号的影响。

故而采用双积分型A/D转换器可大大降低对滤波电路的要求。

作为电子秤,系统对AD的转换速度要求并不高,精度上14位的AD足以满足要求。

另外双积分型A/D转换器较强的抗干扰能力,和精确的差分输入,低廉的价格。

综合的分析其优点和缺点,我们最终选择了ICL7135。

基于ICL7135的A/D转换器实现电路:

 

 

基准源选用芯片MC14032.5V分压得到:

由于ICL7135内部没有振荡器,所以需要外接。

但A/D转换器精度与时钟频率的漂移无关。

正向积分时间T1和反向积分时间T2按相同比例增加并不影响测量的结果。

ICL7135的时钟频率典型值为200kHz最高允许为1200kHz,时钟频率越高,转换速度越快。

每输出一位BCD码的时间为200个时钟周期,选通脉冲位于数据脉冲的中部,如果时钟频率太高,则数据的接受程序还没有接受完毕,数据就已经消失了。

考虑到此系统频率要求不是太高,且单片机的工作频率也不是很高,因此我们取时钟频率的典型值:

200kHz。

由于频率比较低,对时钟漂移要求不高,我们采用阻容方式实现了基本的振荡电路。

如下:

振荡频率约为160kHz。

此外ICL7135外部还需要外接积分电阻、积分电容,但A/D转换器精度与外接的积分电阻、积分电容的精度无关,故可以降低对元件质量的要求。

不过积分电容和积分电容的介质损耗会影响到A/D转换器的精度,所以应采用介质损耗较小的聚丙乙烯电容.

ICL7135还需要外接基准电源,这是因为芯片内部的基准源一般容易受到温度的影响,而基准电源的变化会直接影响转换精度。

所以当精度要求较高时,应采用外接基准源。

一般接其典型值1V。

4:

键盘接口图:

键盘控制芯片ZLG7289控制键盘的扫描,当监测到有键按下后ZLG7289的9脚便产生一个低电平通知单片机,单片机可以采用查询或者中断方式将数据通过P1.5以串行方式读入。

因为查询方式会浪费大量的时间,所以本系统采用的是中断方式。

 

5:

LCD显示接口电路

LCD复位信号通过反相器接到单片机的RESET上,上电或手动复位时将随单片机同时复位。

由于复位后并行口输出高电平,LCD处于选中状态,此时LCD将输出内部状态字,将会影响数据总线上的数据传输。

所以外接一个反相器。

第四部分:

软件部分

 

6:

基于AT89S52的主控电路图

主控电路以89C52为核心扩展32KRAM;单片机使用6M晶振,P0口外接上拉电阻,增大了带负载能力;A12~A15接74LS138译码器,输出作外部片选信号。

扩展了几个接口用于其它部分于单片机的通信

 

(一)、流程图

主程序流程如图所示:

 

软件说明:

电子秤的信号采集、处理、显示的程序.

#include

#include//ad控制线

#definead_244XBYTE[0xbfff];

sbitad_stb=P3^3;

sbitad_start=P1^1;

//lcd控制线

sbitlcd_di=P1^7;

sbitlcd_rw=P1^2;

sbitlcd_e=P1^0;

//7289控制线

sbitcs7289=P1^3;

sbitclk7289=P1^4;

sbitdio7289=P1^5;

//sbitkey7289=P1^6;//7289查询方式

sbitkey7289=P3^2;//7289中断方式

sbitbaoj=P3^5;

//7289子程序

voidini_7289(void);

voidsend7289(short);

shortreceive(void);

voidkeyin(void);

//lcd子程序

voidini_lcd(void);

voidlcdd_send(short);

voidlcdi_send(short);

voidchk_busy(void);

//ad子程序

voidad(void);

voidbaojing(void);

voidd_change(long);

//初始化,编号,日期

voidini();

voiderror1(void);

voidnop1()

{}

voidchange(s)

intdealy;//全局变量

shortsh=0;//商品号

shortdot=0;//小数点标志

bitlist=0;

shortqb=0;

charxdatashuju[7]="";

shortxdatabcd[5];

charxdatas1[16]="单价:

元";

charxdatas2[16]="重量:

Kg";

charxdatas3[16]="金额:

元";

charxdatas4[16]="累计:

元";

charcodemessage0[]="信息学院山东大学";

charcodemessage1[]="输入收银员代号:

";

charcodemessage2[]="输入日期:

";

charcodemessage3[16]="--山东大学--";

charcodemessage5[16]="xx公司欢迎您!

!

";

charxdatabianhao[16]="收银员:

";

charxdatariqi[16]="--";

longintxdatazongjia=0,jine=0,jine1=0;

intxdatashizhong=0,pizhong=0,zhongliang=0;

longintxdataqingdan[20][4];

charcodeshangpin[11][4]={{"单价"},{"苹果"},{"梨

"},{"花生"},{"大米"},

{"桃子"},{"塑料"},{"瓜子"},{"桔子"},{"香蕉"},{"玉米

"}};

longintxdatadanjia[11]=

{0,2000,3635,5502,6660,3320,5502,660,3210,6600,5600};

charxdatajiage[6]={0x0,0x0,0x0,0xfe,0x0,0x0};//

0.00

shortxdataxiuzheng[]={0,2,5,6,7,8,9,12,13};

chars[16];

{s[6]=shuju[0];

s[7]=shuju[1];

s[8]=shuju[2];

s[9]=shuju[3];

s[10]=shuju[4];

s[11]=shuju[5];

s[12]=shuju[6];

}

//****************************************************************

voidmain()

{shorti,j;

longintx,z;

inty;

intxdataduilie[3]={0};

P1=0xff;

ini_lcd();//初始化LCD

lcdi_send(0x8a);

while(message0[i])lcdd_send(message0[i++]);

ini_7289();//初始化7289

pizhong=ad1();

lcdi_send(0x1);//总清屏

ini();//初始页面,收银员编号,日期

lcdi_send(0x1);//总清屏

EA=1;EX0=1;//中断

//EX1=1;

//ad_start=1;

while

(1)

{if(list){lcdi_send(0x80);//显示单位名称

for(i=0;i<16;i++)lcdd_send(message3[i]);

x=qingdan[0][0];//商品名单价

for(i=0;i<4;i++)s1[i]=shangpin[x][i];

x=qingdan[0][1];

d_change(x);change(s1);

lcdi_send(0x90);

for(i=0;i<16;i++)lcdd_send(s1[i]);

x=qingdan[0][2];//显示重量

d_change(x);change(s2);

s2[10]=s2[9];s2[9]='.';

if(s2[8]==32)s2[8]=0x30;

lcdi_send(0x88);

for(i=0;i<16;i++)lcdd_send(s2[i]);

x=qingdan[0][3];

d_change(x);change(s3);

lcdi_send(0x98);

for(i=0;i<16;i++)lcdd_send(s3[i]);//以上为第一页

EA=0;EX0=0;//关键盘中断

for(j=1;j

{while(key7289);

x=qingdan[j][2];

d_change(x);change(s2);//显示数据

s2[10]=s2[9];

s2[9]='.';if(s2[8]==32)s2[8]=0x30;

lcdi_send(0x90);

for(i=0;i<16;i++)lcdd_send(s2[i]);

x=qingdan[j][1];

d_change(x);change(s1);

x=qingdan[j][0];

for(i=0;i<4;i++)s1[i]=shangpin[x][i];

lcdi_send(0x80);

for(i=0;i<16;i++)lcdd_send(s1[i]);

x=qingdan[j][3];

d_change(x);change(s3);

lcdi_send(0x88);

for(i=0;i<16;i++)lcdd_send(s3[i]);

lcdi_send(0x98);

for(i=0;i<16;i++)lcdd_send(0x20);

lcdi_send(0x98);

while(key7289==0);

}

while(key7289);

d_change(zongjia);change(s4);

lcdi_send(0x80);

for(i=0;i<16;i++)lcdd_send(s4[i]);

lcdi_send(0x90);

for(i=0;i<16;i++)lcdd_send(bianhao[i]);

lcdi_send(0x88);

for(i=0;i<16;i++)lcdd_send(message5[i]);

lcdi_send(0x98);

for(i=0;i<16;i++)lcdd_send(riqi[i]);

list=0;

while(key7289==0);

while(key7289==1);

while(key7289==0);

EA=1;EX0=1;

}

else{y=0;

/*duilie[2]=duilie[1];//数字滤波

duilie[1]=duilie[0];

y=ad1();

duilie[0]=y>>1;

x=duilie[0];

x=x<<1;

x=x+duilie[1]+duilie[2];*/

zhongliang=ad1();

shizhong=zhongliang-pizhong;//数据转换

x=danjia[sh];

jine1=shizhong*x;

jine=jine1/1000;

d_change(shizhong);change(s2);//显示数据

s2[10]=s2[9];s2[9]='.';

if(s2[8]==32)s2[8]=0x30;

lcdi_send(0x90);

for(i=0;i<16;i++)lcdd_send(s2[i]);

d_change(danjia[sh]);change(s1);

for(i=0;i<4;i++)s1[i]=shangpin[sh][i];

lcdi_send(0x80);

for(i=0;i<16;i++)lcdd_send(s1[i]);

d_change(jine);change(s3);

lcdi_send(0x88);

for(i=0;i<16;i++)lcdd_send(s3[i]);

d_change(zongjia);change(s4);

lcdi_send(0x98);

for(i=0;i<16;i++)lcdd_send(s4[i]);

lcdi_send(0x98);

//while

(1);

}

}

}

voidkeyin(void)interrupt0using0//中断0服务程序

{charX,i;

longinty;

send7289(0x15);//接收数据

X=receive();

cs7289=1;

X=X&0x1f;

switch(X)

{case0xf:

{zongjia=zongjia+jine;

qingdan[qb][0]=sh;

qingdan[qb][1]=danjia[sh];

qingdan[qb][2]=shizhong;

qingdan[qb][3]=jine;

qb++;sh=0;dot=0;

danjia[0]=0;

for(i=0;i<6;i++)jiage[i]=0;

}

break;//累加

case0xe:

pizhong=zhongliang;break;//去皮

case0xd:

{danjia[sh]=0;dot=0;}break;//清单价

case0xc:

{zongjia=0;jine=0;dot=0;list=0;qb=0;pizhong=0;

if(sh==0)danjia[sh]=0;}break;//总清

case0xa:

dot=1;break;//点

case0xb:

list=1;break;//清单

case0x19:

sh=10;break;

case0x18:

sh=9;break;

case0x17:

sh=8;break;

case0x16:

sh=7;break;

case0x15:

sh=6;break;

case0x14:

sh=5;break;

case0x13:

sh=4;break;

case0x12:

sh=3;break;

case0x11:

sh=2;break;

case0x10:

sh=1;break;

case0x1f:

case0x1e:

case0x1d:

case0x1c:

case0x1a:

break;

case0x1b:

dot=1;break;

default:

{if(dot==0)

{jiage[0]=jiage[1];jiage[1]=jiage[2];jiage[2]=X;}

if(dot==1){jiage[4]=X;dot++;}

elseif(dot==2){jiage[5]=X;dot++;}

elseif(dot>2)break;

//lcdi_send(0x84);

y=jiage[0];

y=y*10+jiage[1];

y=y*10+jiage[2];

y=y*10+jiage[4];

danjia[sh]=y*10+jiage[5];

}

}

while(key7289==0);//等待键盘松开

}

/*

voidad(void)interrupt2using1

{shortx,y;

x=ad_244;

y=x;

if(x&0x80)baojing();

elsex=x>>4;

y=y&0xf;

bcd[x]=y;

}*/

//初始页面

voidini()//输入收银员编号,日期

{shorti,j;

charX;

lcdi_send(0x80);//提示输入收银员编号

i=0;

while(message1[i])lcdd_send(message1[i++]);

for(i=8;i<12;i++)

{

while(key7289);

send7289(0x15);//接收数据

X=receive();

cs7289=1;

bianhao[i]=X+0x30;

lcdi_send(0x93);

for(j=8;j<16;j++)lcdd_send(bianhao[j]);

while(key7289==0);

}

lcdi_send(0x88);//提示输入日期

i=0;

while(message2[i])lcdd_send(message2[i++]);

for(i=0;i<10;i++)//输入日期

{if(i==4||i==7)i++;

while(key7289==1);

send7289(0x15);//接收数据

X=receive();

cs7289=1;

riqi[i]=X+0x30;

j=0;

lcdi_send(0x9a);

for(j=0;j<10;j++)lcdd_send(riqi[j]);

while(key7289==0);

}

while(key7289);

nop1();

while(key7289==0);

nop1();

lcdi_send(0x1);

}

//LCD子程序

voidini_lcd()//LCD初始化子程序

{

lcdi_send(0x30);

lcdi_send(0x1);//总清

lcdi_send(0xc);

lcdi_send(0x2);//光标右移,AC+1

}

voidlcdd_send(shortX)//LCD发送数据子程序

{chk_busy();

nop1();

lcd_di=1;lcd_rw=0;lcd_e=0;

P0=X;

for(dealy=0;dealy<5;dealy++);//

lcd_e=1;X=X;

P0=0xff;

}

voidlcdi_send(shortX)//LCD发送指令子程序

{chk_busy();

nop1();

lcd_di=0;lcd_rw=0;lcd_e=0;

P0=X;

for(dealy=0;dealy<5;dealy++);//

lcd_e=1;X=X;

P0=0xff;

}

voidchk_busy()

{shorti=0xff;

while(i&0x80)

{lcd_di=0;

lcd_rw=1;

lcd_e=0;

i=P0;

lcd_e=1;

}

}

//7289子程序

voidini_7289()

{shorti;

cs7289=1;key7289=1;dio7289=1;//7289初始化子程序

for(i=0;i<50;i++)

for(dealy=0;dealy<5000;dealy++);//延时25ms

send7289(0xa4);cs7289=1;

}

voidsend7289(shortX)//7289发送数据子程序

{shorti,j=1;

cs7289=0;

for(dealy=0;dealy<6;dealy++);//延时50us

for(i=7;i>=0;i--)

{j=j<

dio7289=X&j;

j=1;j=1;clk7289=1;

for(dealy=0;dealy<1;dealy++);//延时10us

clk7289=0;

for(dealy=0;dealy<1;dealy++);//延时10us

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

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1