电子秤.docx
- 文档编号:5868852
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:26
- 大小:1.33MB
电子秤.docx
《电子秤.docx》由会员分享,可在线阅读,更多相关《电子秤.docx(26页珍藏版)》请在冰豆网上搜索。
电子秤
电子信息工程师实践
设计报告
开课学院:
计算机与信息学院
专业班级:
学生姓名及学号:
指导教师:
课题名称:
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 九、指导教师评语及成绩 评语(学生工作评价): 建议成绩: 指导教师(签字): 年月日 评语(学生工作评价): 答辩成绩: 答辩小组组长(签字): 年月日 学生持设计报告并参加集中答辩,答辩小组合议给出最终成绩。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子秤