下面是一个完整的基于51单片机的称重传感器设计,
电子秤的实物图
单片机电子秤的原理图
电子秤设计 本设计采用以stc89C52单片机为核心的低成本、高精度、微型化数字显示压力的硬件电路和软件设计方法。整个电路采用模块化设计,由主程序、初始化子程序、显示子程序等模块组成。压力传感器的信号经单片机综合分析处理,实现压力测量并显示。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。相关部分附有硬件电路图、程序流程图。 关键词:单片机;重力传感;显示 1 内容提要···················································· 2设计内容及总体方··················································· 3单元电路的具体设计·············································· 4总体工作电路原理图·············································· 5系统所需元件列表·············································· 电子秤具有称重精确度高,简单实用,携带方便成成本低,制作简单,测量准确,分辨率高,不易损坏和价格便宜等优点。是家庭购物使用的首选。其电路构成主要有测量电路,差动放大电路,A/D转换,数据处理,显示电路。其中测量电路中最主要的元器件就称重传感器。称重传感器是传感中应用最多的一种,广泛应用于电子秤以及各种新型结构的测量装置。而差动放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的要求。A/D转换的作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送单片机处理,再传输到显示电路中去,最后由显示电路显示出测量结果。
内容是设计一个电子秤 要求: - 电路由单片机最小系统,差动放大电路,A/D转换电路,串口程序下载电路,显示电路以及电源电路等部分组成
首先利用由称重传感器组成的测量电路测出物质的重量信号,以模拟信号的方式差动放大器电路。其次,由差动放大器电路把传感器输出的微弱信号进行一定倍数的放大,然后送A/D转换电路中。再由A/D转换电路把接收到的模拟信号转换成数字信号,传送到单片机中进行处理,再有单片机控制显示电路,最后由显示电路显示数据。 具体方案如下:
三、单元电路的具体设计 1.测量电路:重力传感器就是将被测物理量的变化电压的变化 , 再经相应的测量电路而最后显示或记录被测量值的变化。在这里,我们用重力传感器作为测量电路的核心。并应根据测量对象的要求,恰当地选择精度和范围度。 (1)称重传感器的组成以及原理: 通过重物使重力传感器称重端受力弯曲,视其受力情况的不同输出相应线性的电压。通过重力传感器上的那个孔,可以以各种方式及电路的不同联接构建整个系统,即可测得重力、变形、扭矩等机械参数 1.产品编号: hl-8 2.技术参数
引出线为四芯,为确保精度,一般不要调整线长。
4.受力方式
一般将传感器的接线端固定,另一端可悬挂重物也可托起重物。
5.传感器电路部分
(1)原理:本次设计中,要求用一个放大电路,即差动放大电路,主要的元件就是差动放大器。在许多需要用A/D转换和数字采集的单片机系统中,多数情况下,传感器输出的模拟信号都很微弱,必须通过一个模拟放大器对其进行一定倍数的放大,才能满足A/D转换器对输入信号电平的要求,在此情况下,就必须选择一种符合要求的放大器。仪表仪器放大器的选型很多,这里使用一种用途非常广泛的仪表放大器,就是典型的差动放大器。它只需高精度LM358和几只电阻器,即可构成性能优越的仪表用放大器。广泛应用于工业自动控制、仪器仪表、电气测量等数字采集的系统中。本设计中差动放大电路结构图如下:
推导过程:I=
Vo=(R8+R7+R8)I =(1+
)Vi, 则Avf=1+
(2)所用芯片: LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式。它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。 3.A/D转换:A/D转换的作用是进行模数转换,把接收到的模拟信号转换成数字信号输出,我们这里选用ADC0832, ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。A/D转换误的位数确定与整个测量控制系统所需测量控制的范围和精度有关,系统精度涉及的环节很多,包括传感器的变换精度,信号预处理电路精度A/D转换器以及输出电路等。 (1)ADC0832的特点 · 8位分辨率;
· 双通道A/D转换;
· 输入输出电平与TTL/CMOS相兼
· 5V电源供电时输入电压在0~5V之间;
· 工作频率为250KHZ,转换时间为32μS;
· 一般功耗仅为15mW;
· 8P、14P—DIP(双列直插)、PICC 多种封装;
· 商用级芯片温宽为0°C to +70°C,工业级芯片温宽为−40°C to +85 °C;
(2)ADC0832芯片接口说明
· CS_ 片选使能,低电平芯片使能。
· CH0 模拟输入通道0,或作为IN+/-使用。
· CH1 模拟输入通道1,或作为IN+/-使用。
· GND 芯片参考0 电位(地)。
· DI 数据信号输入,选择通道控制。
· DO 数据信号输出,转换数据输出。
· CLK 芯片时钟输入。
· Vcc/REF 电源输入及参考电压输入(复用)。 ADC0832
数据处理部分我们采用STC89C52单片机系统对ADC0832所采集回来的数据进行处理,然后将输出处理后的数据显示在数码管上。 (1)单片机对ADC0832 的控制原理 正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能,其功能项见官方资料。如资料 所示,当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
- #include//包含相应的头文件
- #include
- #include
- sbit CS=P1^6;//定义数模转换器硬件对应引脚
- sbit CLK=P1^3;
- sbit DO=P1^4;
- sbit DI=P1^5;
- bit ADFlag;
- unsigned char code DIS[]={0xf7,0xfb,0xfd}; //定义数码管位码
- unsigned char code Datatab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//7段数码管段码表
- data unsigned char Display[3];//定义临时存放数码管数值
-
- void Init_Timer1(void)
- {
- TMOD |= 0x10;
- TH1=0xff; /* Init value */
- TL1=0x00;
- //PT1=1; /* 优先级 */
- EA=1; /* interupt enable */
- ET1=1; /* enable timer1 interrupt */
- TR1=1;
- }
-
- unsigned char ReadADC(unsigned char channel)
- {
- unsigned char i,j;
- unsigned char Temp=0;
- channel <<=3;
- channel |=3;
- CS =0; //按照资料进行时序操作
- for(i=0;i<3;i++) //输入指令,包含通道选择
- {
- CLK=0;
- _nop_();
- DI=channel;
- channel>>=1;
- _nop_();
- CLK=1;
- }
- CLK=0;
- _nop_();
- CLK=1;
- for(j=0;j<8;j++) //处理读入8位数据
- {
- CLK=0;
- _nop_();
- Temp=(Temp<<1)|DO;
- _nop_();
- CLK=1;
- }
- CS=1;
- return(Temp); //返回转换值
- }
-
- void Timer1_isr(void) interrupt 3 using 1//定时器1执行数码管动态扫描
- {
- static unsigned char count,j;
- TH1=0xfb; /* Init value */
- TL1=0x00;
- j++;
- if(j==200) {j=0;ADFlag=1;}
- P0=Display[count];
- P2=DIS[count];
- count++;
- if(count==3)
- count=0;
- }
-
- main()
- {
- unsigned char ADtemp;//定义中间变量
- // unsigned char temp;
- Init_Timer1();
- while(1)
- {
- if(ADFlag) //定时采集输入模拟量
- {
- ADFlag=0;
- ADtemp=ReadADC(1);
- Display[0]=Datatab[((ADtemp)/50)];//处理电压显示
- Display[1]=Datatab[((ADtemp)%50)/10];
- Display[2]=Datatab[((ADtemp)%50)%10];
- }
- }
复制代码
5.显示以及电源部分: 关于显示部分,我们选用4位共阳数码管进行显示,电源部分我们采用一般的12V直流电源给重力传感器和LM358供电,另外单片机,ADC0832, 数码管供电我们采用LM7805将12V转成5V直流给它们提供电源。 以下为数码管显示部分电路: 以下为12V 以及5V电源部分: 下图为MAX232串口下载部分电路: 下图USB供电的下载部分电路:
数显电子秤具有准确度高,易于制作,成本低廉,体积小巧,实用等特点。本电路结构简单且易于调试。 五、系统所需元件列表:
五、 调试 调试分为硬件调试与软件调试两个方面。 1 硬件调试 首先,对PCB板进行打孔和过孔操作,当过完所有孔后用数字万用表来检测地线、电源线、信号线是否全部连通,避免虚焊的存在。 其次,在已经过孔的PCB板中焊接电阻、瓷片电容、母头和晶振等器件,然后插上所有芯片的IC管座和数码管,在这一过程中,应遵循“先小头,后大头”的原则。 最后,装上所有IC芯片,插上stc89C52,接通电源,连接传感器、跳线等,先下载一个数码管示列程序,如果看到数码管点亮,说明硬件没有问题,然后就可以开始调试软件部分了。 2 软件调试 为了检测显示部分的硬件连接情况,我先将数码管检测程序烧写stc89C52中,然后插进管座接通电源运行程序,如果看到数码管显示,证明系统显示部分的电路连接无误。 确认显示部分电路和下载部分电路连接无误后,接下来编写AD0832程序。在这一步的设计中,我首先大量查阅了关于AD0832的pdf资料,弄清它的引脚图和时序图,下一步就是编写它的检测子程序。这一步的困难较大,在做这一步的过程中,我向在编程方面有经验的同学和老师请教,经过他们的指点,最后取得了成功。 最后的一步就是检查运发电路,确认无误后,连上压力传感器。 通过以上几步调试,确认硬件连接没有错误后,就可以将单片机端的完整程序烧写进单片机中了。 当一切准备就绪后,接通系统的电源。此时我们用手按压力传感器,传感器的电压变化经运放单元放大的电压信号送给AD采集,转化为数字信号,送给单片机处理,最后在数码管上显示。 由于时间较紧,没做到高精度,这些看似简单的要求,实现起来也并不是容易的,这就增加挑战性和刺激性。
所有资料下载包含电子秤的pcb和原理图程序,以及课程设计论文等等:
基于51单片机的称重传感器设计.rar
(1.84 MB, 下载次数: 1262)
|