电子秤.docx

上传人:b****6 文档编号:5868852 上传时间:2023-01-01 格式:DOCX 页数:26 大小:1.33MB
下载 相关 举报
电子秤.docx_第1页
第1页 / 共26页
电子秤.docx_第2页
第2页 / 共26页
电子秤.docx_第3页
第3页 / 共26页
电子秤.docx_第4页
第4页 / 共26页
电子秤.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

电子秤.docx

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

电子秤.docx

电子秤

电子信息工程师实践

设计报告

开课学院:

计算机与信息学院

专业班级:

学生姓名及学号:

指导教师:

课题名称:

3kg电子秤

 

2017年1月6日

1、课题概述

作为一名电子信息工程专业的学生,掌握基本的电路知识,并运用到项目实践中非常重要,能够提高自身的科学文化素养,对知识更加全面的掌握。

本课程设计为制作一个电子秤,比较具有实用价值,同时通过制作PCB电路板和AD采样芯片的使用提高自己的能力,掌握基本的专业技能。

2、课题任务

本课程设计主要任务是设计一个电子秤,电子秤称重范围是:

0-3kg,精度是:

5g。

具有超过称重上限报警功能和复位功能。

3、技术方案及关键问题

本课程设计从硬件和软件两个方面开始。

硬件方面主要分为两个部分,第一部分是基本主电路板的设计,利用51单片机为主电路板。

第二部分是AD采样电路板的设计。

AD芯片用的是HX711芯片。

软件部分主要是驱动HX711芯片以及实现电子秤的功能。

关键问题:

1、AD采样芯片的使用。

在制作电子秤的过程中要将传感器输出的模拟量转换为数字量,因此要用到AD采样芯片。

采样芯片的位数直接影响了最终的测量结果,也就是所谓的分辨率。

本课程设计使用的是24位的HX711采样芯片,采样精度较高,测量结果较为准确。

2、由于普通电脑USB输出电流为500mA会出现电子秤因电流过小而不工作问题并且利用电脑USB作为单片机供电电源携带不方便,因此利用利用了一个电源220V转9V的电源适配器,再利用LM7805稳压芯片将9v电源稳压到5v为单片机供电。

3、由于未使用电脑USB作为电源,因此没有USB下载电路,本单片机程序下载器使用的是USB转TTL转RS232下载器。

4、称重传感器用的是桥式传感器。

4、设计实现及测试

课程设计的第一步便是电路板的制作,本课程设计使用51单片机作为基本电路。

电路原理图附后。

1、AD转换电路

本次课程设计AD转换电路使用的是24位的HX711芯片。

HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。

与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。

降低了电子秤的整机成本,提高了整机的性能和可靠性。

该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。

输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。

通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。

通道B则为固定的32增益,用于系统参数检测。

芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。

芯片内的时钟振荡器不需要任何外接器件。

上电自动复位功能简化了开机的初始化过程。

(1)、HX711芯片特点如下:

两路可选择差分输入。

片内低噪声可编程放大器,可选增益为64和128。

片内稳压电路可直接向外部传感器和芯片内A/D转换器提供电源。

片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟。

上电自动复位电路。

简单的数字控制和串口通讯:

所有控制由管脚输入,芯片内寄存器无需编程。

可选择10Hz或80Hz的输出数据速率。

同步抑制50Hz和60Hz的电源干扰。

耗电量(含稳压电源电路):

典型工作电流:

<1.7mA,断电电流:

<1μA。

工作电压范围:

2.6~5.5V。

工作温度范围:

-20~+85℃。

16管脚的SOP-16封装。

(2)、管脚说明

SOP-16L封装

表一管脚描述

(3)、模拟输入

通道A模拟差分输入可直接与桥式传感器的差分输出相接。

由于桥式传感器输出的信号较小,为了充分利用A/D转换器的输入动态范围,该通道的可编程增益较大,为128或64。

这些增益所对应的满量程差分输入电压分别±20mV或±40mV。

通道B为固定的32增益,所对应的满量程差分输入电压为±80mV。

通道B应用于包括电池在内的系统参数检测。

因此本课程设计使用通道A作为模拟差分输入,选择增益是128。

(4)、串口通信

串口通信线由管脚PD_SCK和DOUT组成,用来输出数据,选择输入通道和增益。

当数据输出管脚DOUT为高电平时,表明A/D转换器还未准备好输出数据,此时串口时钟输入信号PD_SCK应为低电平。

当DOUT从高电平变低电平后,PD_SCK应输入25至27个不等的时钟脉冲(图一)。

其中第一个时钟脉冲的上升沿将读出输出24位数据的最高位(MSB),直至第24个时钟脉冲完成,24位输出数据从最高位至最低位逐位输出完成。

第25至27个时钟脉冲用来选择下一次A/D转换的输入通道和增益,参见表二。

表二输入通道和增益选择

PD_SCK的输入时钟脉冲数不应少于25或多于27,否则会造成串口通讯错误。

当A/D转换器的输入通道或增益改变时,A/D转换器需要4个数据输出周期才能稳定。

DOUT在4个数据输出周期后才会从高电平变低电平,输出有效数据。

图一数据输出,输入通道和增益选择时序图

(5)、AD采样电路原理图如下

(6)AD采样电路获取输出数据代码如下:

//读取HX711

unsignedlongHX711_Read(void)//增益128

{

unsignedlongcount;

unsignedchari;

HX711_DOUT=1;//DOUT为高电平时,表明A/D转换器没有准备好数据

Delay__hx711_us();

HX711_SCK=0;

count=0;

while(HX711_DOUT);//直到DOUt为低电平,表明已经准备好数据

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

{

HX711_SCK=1;

count=count<<1;

HX711_SCK=0;

if(HX711_DOUT)

count++;

}

HX711_SCK=1;//第25个脉冲下降沿来时,转换数据,选择的是A通道增益为128

count=count^0x800000;//异或操作

Delay__hx711_us();

HX711_SCK=0;

return(count);

}

2、LCD1602显示

本课程设计使用的1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,只有并行接口无串行接口。

(1)、信号接口说明

编号

符号

引脚说明

编号

符号

引脚说明

1

Vss

电源地

9

D2

数据口

2

VDD

电院正极

10

D3

数据口

3

VO

液晶显示对比度调节端

11

D4

数据口

4

RS

数据/命令选择端(H/L)

12

D5

数据口

5

R/W

读写选择端(H/L)

13

D6

数据口

6

E

使能信号

14

D7

数据口

7

D0

数据口

15

BLA

背光电源正极

8

D1

数据口

16

BLK

背光电源负极

(2)、主要技术参数

显示容量

16*2字符

芯片工作电压

4.5~5.5V

工作电流

2.0mA

模块最佳工作电压

5.0V

字符尺寸

2.95*4.35(W*H)mm

(3)、基本操作时序

读状态输入:

RS=L,R/W=H,E=H输出:

D0~D7=状态字

读数据输入:

RS=H,R/W=H,E=H输出:

写指令输入:

RS=L,R/W=L,D0~D7=指令码,E=高脉冲输出:

D0~D7=数据

写数据输入:

RS=H,R/W=L,D0~D7=数据,E=高脉冲输出:

(4)电路原理图如下

(5)液晶显示代码详见附后代码。

3、9V转5V稳压电路

由于电子秤要携带方便,便于使用,因此本课程设计用电压为220v转9v,交流电转直流电的电源适配器。

然后需要一个9V转5V的稳压电路为电子秤供电。

稳压电路使用的是三端稳压集成电路芯片LM7805。

LM7805芯片引脚①为最高电位,③脚为最低电位,②脚居中为接地端。

芯片引脚图片如下:

从左到右依次为1,2,3脚

稳压电路原理图如下:

 

4、桥式称重传感器

(1)、HL-8型称重传感器主要技术参数

HL-8型称重传感器主要技术参数表

(2)、HL-8型传感器受力方式图

 

开始

5、程序流程图

 

 

 

 

5、电路原理图和PCB

六、结果分析

课设电子秤所称书的重量为:

617g

在书本的基础上加上50g砝码之后实际测得的总质量:

667g

在实际使用的电子秤上重量:

615g

课设电秤所称得书的重量:

723g

在书本的基础上加上50g砝码基础之上测得的重量:

773g

在实际使用的电子秤上重量:

720g

由上图的比较可知,第一本书在实际使用的电子秤上的重量为615g,在课设的电子秤上称得的重量为617g,误差为2g。

第一本书上加上50g砝码之后在课设的电子秤上称得的总重量为667g(理论值为:

615+50=665g)。

第二本书在实际使用的电子秤上称得的重量为720g,在课设的电子秤上称得的重量为723g,误差为3g。

第二本书上加上50g砝码之后在课设的电子秤上称得的重量为773g

(理论应为:

720+50=770g)。

在多次比较下,课设的电子秤误差在正负5g左右,较为准确度。

七、课程设计总结

本次课程设计是做一个最大量程为三千克的电子秤,功能是超重报警,复位等。

电子秤的准确度还是不错的,误差也就几克。

制作电子秤主要分为两方面,一个是硬件电路板的设计和程序的编写。

在制作过程中,关键点是AD采样芯片的选择,AD采样的位数,以及AD采样电路的设计。

通过多次查找资料,最终决定用24位的HX711芯片。

HX711芯片采样位数高,具有集成度高、响应速度快、抗干扰性强等优点。

降低了电子秤的整机成本,提高了整机的性能和可靠性。

是一款为实现高精度称重而设计的芯片,并且其编程较简单,方便。

制作电路板用的是AltiumDesigner软件。

在这期间,我学习了AltiumDesigner软件的使用。

同时学习了HE711芯片的使用方法,查找了关于HX711芯片的AD采样外围电路的设计,由于以前没有做过创新项目,没有做过电路板,在制作电路板的过程中出现了较多问题,比如封装的设计,原理图到PCB的转化,PCB的布线最后的铺铜等,尤其是原理图的电器规则检查,出了好多问题。

请教了班级同学,在他们的指导下完成了电路板的制作。

在软件编程方面由于以前学习过51单片机的使用,再加上HX711芯片的编程使用,最后完成了软件的设计。

本次课程设计中锻炼了自己的编程能力,真正完成了一次电路板的制作,熟练了PCB电路板的制作流程,积累了元器件的封装,还是有点成就感的,同时学会了如何学习一款新的芯片。

在这次课程设计中,收获了很多,提高了自己作为一面电子信息工程专业学生的科学文化素养,将平时的知识运用到项目开发中。

八、程序

主函数main.c

#include"main.h"

#include"LCD1602.h"

#include"HX711.h"

//定义变量

unsignedlongWeight_Maopi=0;//用来存放毛皮数

longWeight_Shiwu=0;//用来存放实物重量

longMax_Value=0;//用来存放设置最大值

charmaxValueTable[4]={3,0,0,0};

unsignedcharstate=0;//用来存放设置状态

//校准参数

//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。

#defineGapValue820

//称重函数

voidGet_Weight()

{

Weight_Shiwu=HX711_Read();

Weight_Shiwu=Weight_Shiwu-Weight_Maopi;//获取净重

if(Weight_Shiwu>=0)

{

Weight_Shiwu=(unsignedlong)((float)Weight_Shiwu/GapValue);//计算实物的实际重量

}

else

{

Weight_Shiwu=0;

}

}

//MS延时函数(12M晶振下测试)

voidDelay_ms(unsignedintn)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<123;j++);

}

//蜂鸣器程序

voidBuzzer_Di()

{

Buzzer=0;

Delay_ms(10);

Buzzer=1;

Delay_ms(10);

}

voidGet_Maopi()

{

Weight_Maopi=HX711_Read();

}

 

//主函数

voidmain()

{

Init_LCD1602();//初始化LCD1602

LCD1602_write_com(0x80);//设置LCD1602指针

LCD1602_write_word("Welcometouse!

");

Get_Maopi();

Delay_ms(1000);//延时2s

LCD1602_write_com(0x01);//清屏

Max_Value=maxValueTable[0]*1000+maxValueTable[1]*100+maxValueTable[2]*10+maxValueTable[3];//计算超限报警界限值

while

(1)

{

Get_Weight();

//显示当前重量

LCD1602_write_com(0x80);

LCD1602_write_word("Weight=");

LCD1602_write_data(Weight_Shiwu%10000/1000+0x30);

LCD1602_write_data('.');

LCD1602_write_data(Weight_Shiwu%1000/100+0x30);

LCD1602_write_data(Weight_Shiwu%100/10+0x30);

LCD1602_write_data(Weight_Shiwu%10+0x30);

Ui

LCD1602_write_com(0x80+0x40);

LCD1602_write_word("MAX=");

Uiiii

LCD1602_write_data('.');

LCD1602_write_data(maxValueTable[1]+0x30);

LCD1602_write_data(maxValueTable[2]+0x30);

LCD1602_write_data(maxValueTable[3]+0x30);

LCD1602_write_word("Kg");

//超限报警

if(Weight_Shiwu>=Max_Value)//超过设置最大值或者传感器本身量程最大值报警

{

Buzzer=0;

}

else

{

Buzzer=1;

}

}

}

 

HX711.c

#include"HX711.h"

//延时函数

voidDelay__hx711_us(void)

{

_nop_();

_nop_();

}

//读取HX711

unsignedlongHX711_Read(void)//增益128

{

unsignedlongcount;

unsignedchari;

HX711_DOUT=1;//DOUT为高电平时,表明A/D转换器没有准备好数据

Delay__hx711_us();

HX711_SCK=0;

count=0;

while(HX711_DOUT);//直到DOUt为低电平,表明已经准备好数据

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

{

HX711_SCK=1;

count=count<<1;

HX711_SCK=0;

if(HX711_DOUT)

count++;

}

HX711_SCK=1;//第25个脉冲下降沿来时,转换数据,选择的是A通道增益为128

count=count^0x800000;//异或操作

Delay__hx711_us();

HX711_SCK=0;

return(count);

}

LCD1602.c

#include"LCD1602.h"

//MS延时函数(12M晶振下测试)

voidLCD1602_delay_ms(unsignedintn)

{

unsignedinti,j;

for(i=0;i

for(j=0;j<123;j++);

}

//写指令

voidLCD1602_write_com(unsignedcharcom)

{

LCD1602_RS=0;

LCD1602_delay_ms

(1);

LCD1602_EN=1;

LCD1602_PORT=com;

LCD1602_delay_ms

(1);

LCD1602_EN=0;

}

//写数据

voidLCD1602_write_data(unsignedchardat)

{

LCD1602_RS=1;

LCD1602_delay_ms

(1);

LCD1602_PORT=dat;

LCD1602_EN=1;

LCD1602_delay_ms

(1);

LCD1602_EN=0;

}

//修改指针

voidLCD1602_write_word(unsignedchar*s)

{

while(*s>0)

{

LCD1602_write_data(*s);

s++;

}

}

VoidInit_LCD1602()

{

LCD1602_EN=0;

LCD1602_RW=0;//设置为写状态

LCD1602_write_com(0x38);//显示模式设定

LCD1602_write_com(0x0c);//开关显示、光标有无设置、光标闪烁设置

LCD1602_write_com(0x06);//写一个字符后指针加一

LCD1602_write_com(0x01);//清屏指令

}

LCD1602.h

#ifndef__LCD1602_H__

#define__LCD1602_H__

#include

//LCD1602IO设置

#defineLCD1602_PORTP0

sbitLCD1602_RS=P2^5;

sbitLCD1602_RW=P2^6;

sbitLCD1602_EN=P2^7;

//函数或者变量声明

externvoidLCD1602_delay_ms(unsignedintn);

externvoidLCD1602_write_com(unsignedcharcom);

externvoidLCD1602_write_data(unsignedchardat);

externvoidLCD1602_write_word(unsignedchar*s);

externvoidInit_LCD1602();

#endif

HX711.h

#ifndef__HX711_H__

#define__HX711_H__

#include

#include

//IO设置

sbitHX711_DOUT=P3^3;

sbitHX711_SCK=P3^2;

//函数或者变量声明

externvoidDelay__hx711_us(void);

externunsignedlongHX711_Read(void);

#endif

main.h

#ifndef__MAIN_H__

#define__MAIN_H__

#include

sbitBuzzer=P2^4;

//函数或者变量声明

externvoidDelay_ms(unsignedintn);

externvoidBuzzer_Di();

externvoidGet_Maopi();

externvoidGet_Weight();

#endif

九、指导教师评语及成绩

评语(学生工作评价):

 

建议成绩:

指导教师(签字):

年月日

评语(学生工作评价):

 

答辩成绩:

答辩小组组长(签字):

年月日

学生持设计报告并参加集中答辩,答辩小组合议给出最终成绩。

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

当前位置:首页 > 自然科学

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

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