找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2403|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机智能电子秤《光电检测技术及应用》课程案例项目报告书

[复制链接]
跳转到指定楼层
楼主
ID:422265 发表于 2018-12-12 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

基于51单片机的智能电子秤

  • 研究的目的

为了更好地对光电检测技术中非光物理量的检测的理解,通过对智能电子秤中的压力检测功能的设计,使得我们更好地对应变式压力传感器和A/D转换模块HX711的相关性能参数加深了理解与掌握,并且通过51单片机和1602液晶显示屏的编程控制与显示,使得我们对单片机的应用类型有了新的理解。

  • 研究的意义

本次智能电子秤设计总结了光电检测技术与单片机两个专业课程相关知识,使我们把理论知识和实践结合了起来,既锻炼了我们的动手能力,同时也锻炼我们焊接电路板的能力。

  • 研究内容
  •       相关器件:电阻应变式压力传感器,HX711模块,51开发板,1602液晶                            显示屏。
  •       器件原理

2.1电阻应变式压力传感器原理:

电阻应变式称重传感器包括两个主要部分,一个是弹性敏感元件:利用它将被测的重量转换为弹性体的应变值;另一个是电阻应变计:它作为传感元件将弹性体的应变,同步地转换为电阻值的变化。电阻应变片所感受的机械应变量一般为10 - 6~10 - 2,随之而产生的电阻变化率也大约在10 - 6~10 - 2数量级之间。这样小的电阻变化用一般测量电阻的仪表很难测出,必须采用一定形式的测量电路将微小的电阻变化率转变成电压或电流的变化,才能用二次仪表显示出来。在电阻应变式称重传感器中通过桥式电路将电阻的变化转换为电压变化。电阻应变式称重传感器工作原理框图如图2-1所示:

2.2 HX711模块:

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

HX711是一款专为高精度称重传感器而设计的24位A/D 转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A 或通道B,与其内部的低噪声可编程放大器相连。通道A 的可编程增益为128 或64,对应的满额度差分输入信号幅值分别为±20mV 或±40mV 。通道B 则为固定的64 增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D 转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。

2.3 51单片机开发板

(1) STC89C52 单片机概述

STC89C52系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。

(2) STC89C52 单片机管脚及封装

STC89C52单片机有多种封装形式,本设计中选用40DIP封装,其管脚定义如图1-8所示。

2.4 1602液晶显示屏。

3.链接实物图

  • 研究总结

本设计综合了电工技术,光电检测技术和单片机技术等相关知识,通过对电路板的焊接连线,既锻炼了我们的动手能力,还在实践中回顾我们之前学过的一些理论知识。总的来说在这次制作单片机课程设计的过程中,学习到如何完整地(包括软件和硬件)设计一个电子器件,并学习到了很多新的器件的使用方法,例如A/D转换模块HX711、电阻应变式传感器等。设计的过程中一直最难的部分就是程序设计,既要估计电路连接的简便,又要清楚地划分每一块程序实现的功能,在仿真时时常出现不明的错误,都需要一点一点地去修改程序,已达到完美地运行。在焊接实物的过程中,因为焊接技术的不熟练,偶尔会出现虚焊,此时就要细心地使用万用表去检测电路,发现问题所在,重新焊接。所以,在这次实践的过程中不仅是我们更好地掌握课堂上我们一些难以理解的知识,也锻炼了小组成员中的团结与交流能力,这次一次很好的机会。


单片机源程序如下:

  1. <font style="font-size: 10.5pt">#include "main.h"
  2. #include "HX711.h"
  3. #include "uart.h"
  4. #include "LCD1602.h"

  5. unsigned long HX711_Buffer = 0;
  6. unsigned long Weight_Maopi = 0;
  7. long Weight_Shiwu = 0;

  8. unsigned char flag = 0;
  9. bit Flag_ERROR = 0;
  10. sbit speak= P1^7;

  11. //校准参数
  12. //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
  13. //当发现测试出来的重量偏大时,增加该数值。
  14. //如果测试出来的重量偏小时,减小改数值。
  15. //该值可以为小数
  16. #define GapValue 20


  17. //****************************************************
  18. //主函数
  19. //****************************************************
  20. void main()
  21. {
  22.     Uart_Init();
  23.     Send_Word("Welcome to use!\n");
  24.     Send_Word("Made by Beetle Electronic Technology!\n");
  25.             
  26.               Init_LCD1602();
  27.               LCD1602_write_com(0x80);
  28.               LCD1602_write_word("Welcome to use!");
  29.               Delay_ms(1000);                            //延时,等待传感器稳定

  30.               Get_Maopi();                                                        //称毛皮重量
  31.             
  32.               while(1)
  33.               {
  34.                             EA = 0;
  35.                             Get_Weight();                                          //称重
  36.                             EA = 1;

  37.                             Scan_Key();

  38.                             //显示当前重量
  39.                             if( Flag_ERROR == 1)
  40.                             {
  41.             Send_Word("ERROR\n");
  42.                                          
  43.                                           LCD1602_write_com(0x80+0x40);
  44.                                           LCD1602_write_word("ERROR ");
  45.                                           speak=0;
  46.                             }                           
  47.                             else
  48.                             {        
  49.                                                 speak=1;
  50.             Send_ASCII(Weight_Shiwu/1000 + 0X30);
  51.             Send_ASCII(Weight_Shiwu%1000/100 + 0X30);
  52.             Send_ASCII(Weight_Shiwu%100/10 + 0X30);
  53.             Send_ASCII(Weight_Shiwu%10 + 0X30);
  54.             Send_Word(" g\n");
  55.                                          
  56.                                           LCD1602_write_com(0x80+0x40);
  57.                                           LCD1602_write_data(Weight_Shiwu/1000 + 0X30);
  58.             LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);
  59.             LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);
  60.             LCD1602_write_data(Weight_Shiwu%10 + 0X30);
  61.                                           LCD1602_write_word(" g");
  62.                             }
  63.                            
  64.               }
  65. }

  66. //扫描按键
  67. void Scan_Key()
  68. {
  69.               if(KEY1 == 0)
  70.               {
  71.                             Delay_ms(5);
  72.                             if(KEY1 == 0)
  73.                             {
  74.                                           while(KEY1 == 0);
  75.                                           Get_Maopi();                                          //去皮
  76.                             }            
  77.               }
  78. }

  79. //****************************************************
  80. //称重
  81. //****************************************************
  82. void Get_Weight()
  83. {
  84.               Weight_Shiwu = HX711_Read();
  85.               Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                            //获取净重
  86.               if(Weight_Shiwu > 0)                                         
  87.               {            
  88.                             Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue);               //计算实物的实际重量
  89.                                                                                                                                                                                                                                                            
  90.                                                                                                                                                                                                                                                            
  91.                             if(Weight_Shiwu > 5000)                            //超重报警
  92.                             {
  93.                                           Flag_ERROR = 1;            
  94.                             }
  95.                             else
  96.                             {
  97.                                           Flag_ERROR = 0;
  98.                             }
  99.               }
  100.               else
  101.               {
  102.                             Weight_Shiwu = 0;
  103.               //              Flag_ERROR = 1;                                                        //负重报警
  104.               }
  105.             
  106. }

  107. //****************************************************
  108. ……………………

  109. …………限于本文篇幅 余下代码请从51黑下载附件…………
  110. </font>
复制代码


全部资料51hei下载地址:

基于52单片机的智能电子秤.docx (345.36 KB, 下载次数: 35)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表