基于51单片机的蓝牙电子秤设计

1.设计方案

本设计以STC89C52单片机为主控芯片制作了一款数字电子秤,以电阻应变式压力传感器来进行称重,将感应到的被测物体的重力转化为微弱的毫伏级电压信号,在HX711芯片内部进行128的增益放大,将此放大的模拟电压信号经过AD转换电路转化为数字信号通过引脚DT和SCK送入到单片机普通数字IO口进行处理,即将二进制信号转换成十进制,同时将测量物体的重量显示在LCD显示屏上,同时通过蓝牙模块将数据传输到手机上。系统框图如图1所示:

基于51单片机的蓝牙电子秤设计_第1张图片

  1. 系统硬件电路设计
    1) 芯片选型

方案一:
MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令,大量的寄存器以及片内数据存储器都可参加多种运算,还有高效的查表处理指令,运算速度快,能实现数字信号处理的某些算法(如 FFT 等),超低功耗,但是该芯片昂贵不适合一般的设计开发。

方案二:
采用STC89C52单片机具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构,全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
主要特性:8K字节程序存储空间,512字节数据存储空间,内带4K字节EEPROM存储空间,可直接使用串口下载。
与方案一的430单片机相比,52单片机更加可靠与低价,所以选择52系列的单片机作为主控芯片。
STC89C52单片机的电路图见图2所示。
基于51单片机的蓝牙电子秤设计_第2张图片

     图 2  STC89C52单片机电路图  

2) 称重传感器选择

称重传感器感应被测物体重力,输出微弱的毫伏级电压信号。该传感器稳定性较好,精度和灵敏度较高(见右下图),满足设计精度要求。电阻应变式压力传感器主要由弹性体、电阻应变片电缆线等组成。内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,电阻应变片受到拉伸或压缩应变片变形后,它的阻值将发生变化,从而使电桥失去平衡,产生相应的差动信号,供后续电路测量和处理。如左下图:
基于51单片机的蓝牙电子秤设计_第3张图片
基于51单片机的蓝牙电子秤设计_第4张图片

图 3 电阻应变式压力传感器测量原理图及参数表

当垂直正压力P作用于梁上时,梁产生形变,电阻应变片R1、R3受压弯拉伸,阻值增加; R2、R4受压缩,阻值减小。电桥失去平衡,产生不平衡电压,不平衡电压与作用在传感器上的载菏P成正比,从而将非电量转化成电量输出。
称重传感器的量程选择是根据秤台的最大称重值来选择的,称重传感器台面的使用传感器个数,称体的自重,可能会产生的偏载等因素综合评价最终确定称重传感器的使用量程。称重传感器量程越接近,对于秤体自重准确度就越高。因此,选用称重传感器量程的时候要考虑称体自重。本次设计可测最大物体重量位10kg,因此选用量程为10kg的称重传感器。
称重传感器的原理图如图3所示。

基于51单片机的蓝牙电子秤设计_第5张图片

称重传感器原理图

3) A/D模数转换器模块选择
方案一:
HX711转换芯片:一款专为称重传感器而设计的24位A/D转换芯片。与同类型其它芯片相比,该芯片是专门为称重传感器设计的,即该HX711芯片可将称重传感器输入的电压信号进行放大及AD转换,转为单片机可处理的数字信号。内部结构如图5所示。
称重传感器与该芯片连接时输入选择开关可任意选择通道A或者通道B,通道B的放大增益为64,通道A的放大增益可编程选择为128,所以我们选择通道A与其内部的低噪声可编程放大器相连,进行电压信号放大。
串口通讯线由管脚PD_SDK和DOUT组成,用来向单片机输出数据,选择输入通道和增益。PD_SDK是HX711的时序控制引脚,DOUT是HX711的数据输出引脚,这两个引脚都与单片机的IO口相连进行数据传输,因为该芯片是24位的,在进行数据传输时,第一个时钟脉冲的上升沿将输出24位数据的最高位,直至第24个时钟脉冲完成,即将24位数据输出,同时需要进行输入通道和增益选择,由下图可知,脉冲数为25时即为输入通道A和128增益,所以我们选择该模式。

基于51单片机的蓝牙电子秤设计_第6张图片
hx711引脚图

方案二:
AD7710是美国模拟器件(ADI)公司最新推出的串行24位双通道ADC芯片,AD7710是应用于低频测量完全的模拟前端芯片。它直接接受来自前端变换/传感器传送过来的微弱电压信号并把它换成数字信号输出。AD7710的转换技术实现了21位不丢失码的特性。AD7710输入的传感信号首先通过AD7710内部的可编程增益放大器进行放大,放大后的信号经模拟调制器处理后输出到可编程调节截止点和响应时间的数字滤波器。
最后选择了HX711这款模块,因为AD7710的价格太高了,而且本次实验要求的精度在0-5g,HX711模块可以完成目标。

4) 显示模块的选择
方案一:
采用LCD1602液晶显示屏:1602液晶,是一种专门用来显示字母,数字,符号等的点阵型液晶模块,它由若干个点阵符位组成,每一个点阵字符位都可以显示一个字符,可以用软件达到很好的控制,硬件不复杂,液晶字符显示器可以显示很丰富的内容,而且使用液晶显示不需要复杂的外围电路。
LCD1602主要技术参数:
显示容量:16×2个字符;芯片工作电压:4.5—5.5V;工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V;字符尺寸:2.95×4.35(W×H)mm
基于51单片机的蓝牙电子秤设计_第7张图片
基于51单片机的蓝牙电子秤设计_第8张图片
方案二:
12864系列产品特性如下:提供8位,4位并行接口及串行接口可选,并行接口适配M6800时序,自动电源启动复位功能,内部自建振荡源,64x16位字符显示RAM(DDRAM最多16字符×4行,LCD显示范围16x2行),2M位中文字型ROM(CGROM),总共提供8192个中文字型(16x 16点阵),16K位半宽字型ROM(HCGROM),总共提供126个西文字型(16x8点阵),64x16位字符产生RAM(CGRAM)。
最后我们选择了1602,因为LCD12864液晶显示信息量大,相当来说程序和电路都比较复杂,价格还比较高,但是二者在编程使用方面,两者难度差不多,原理差不多,都是写指令、写地址、写数据等等。

5) 蓝牙模块的选择
​采用CSR主流蓝牙芯片,蓝牙V2.0协议标准;输入电压:3.6V–6V,禁止超过7V:波特率为1200,2400,4800,9600,19200,38400,57600,115200用户可设置;带连接状态指示灯,LED快闪表示没有蓝牙连接;LED慢闪表示进入AT命令模式;板载3.3V稳压芯片,输入电压直流3.6V-6V;未配对时,电流约30mA(因LED灯闪烁,电流处于变化状态);配对成功后,电流大约10mA。用于GPS导航系统,水电煤气抄表系统,工业现场采控系统;可以与蓝牙笔记本电脑、电脑加蓝牙适配器等设备进行无缝连接。
HC-05嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。
当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有AT命令,用户可向模块发送各种AT指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚(PI011)输入电平,可以实现模块工作状态的动态转换。

基于51单片机的蓝牙电子秤设计_第9张图片
3.软件设计

  1. 软件设计要用KEIL进行程序的编写、用PROTEUS软件进行仿真、用CAD进行原理图的绘制。主程序流程图如图11所示,单片机上电后先进行初始化,清除一些参数的初值,对串口进行初始化,1602进行初始化设置,再对采集到的数据进行处理,得到所测物体的重量,通过蓝牙将重量显示在手机上,并显示在LCD1602。主要流程图如图10所示。
    基于51单片机的蓝牙电子秤设计_第10张图片

整体原理图
基于51单片机的蓝牙电子秤设计_第11张图片

仿真设计

基于51单片机的蓝牙电子秤设计_第12张图片
实物图

基于51单片机的蓝牙电子秤设计_第13张图片

图 15 实物图

硬件构成:单片机+最小系统+LCD1602液晶显示模块+HX711模块+HC05蓝牙模块。
LCD1602液晶显示当前重量(单位:g)

感受:
通过本次实验我学会了使用keil和proteus软件如何使用,体会到了仿真和实物的区别,学好英语的重要性,阅读手册的重要性,当我们找不到我们需要器件的时候如何替换器件保证仿真成功。应变片是很灵敏的,我尝试用滑动变阻器代替他,发现使用直流电源电桥两端不能产生压差变化所以最终显示屏不能显示明显你变化的数据,于是放置了一个交变电源,才模拟成功显示数据。在画仿真图之前要阅读数据手册,熟知每个引脚的作用,此次实验中,我在第一次连接仿真图的时候忽略了给P0口接上上拉电阻, P0口做数据总线用是不需要加上拉电阻,这个书上面有写的,就是8个IO口同时控制输出,比如P0口接1602液晶、12864液晶、数码管的8段段选等等都不需要加上拉电阻,如果做单个的IO口用就要加上拉电阻,仿真里P0口必需要加上拉电阻,这个是仿真和实际的差别。有了这次的经验下次画仿真图的时候就不会再犯错了。当我们连接好仿真图以后我们要把程序烧到51单片机里边,这就需要keil生成的hex文件。因为我们是第一次接触到proteus这个软件,我们找元器件的时候要上网去找每个元器件的名称,这个时候我就意识到英语的重要性,因为很多都是英文的缩写。总之在本次设计收获了很多,老师的高标准严要求让我们对知识点如数家珍,其实本次设计我们收获的不仅是专业知识上的进步,还意识到团队合作的重要性,组员之间沟通的重要性,本次虽然很累但是很值得。​本次设计明白了单片机设计不仅是学习书本的内容,也需要从实验中掌握知识。这次实训让我受到了很多的启发,并学到了很多的知识,明白了自身的不足。要完成实训就要掌握C语言各种语句的意义和程序设计的基本知识和方法,掌握单片机与其他设备相连接的输入输出的技术。比如在利用串口进行数据的传输时,是先将数据存储在SBUF缓存器中,然后再通过单片机的TXD引脚一位一位往外传。在此要感谢老师的指导,让我对此有了更加深入的了解,同时对单片机的内部有了一定的了解。在实训的过程中我也明白了编写代码要从基础部分开始学习,在设计程序时,要首先看芯片的数据手册,根据芯片的时序图进行编写。在编写程序的时候,我学会了模块化的程序设计方法,模块化程序设计具有很多的优点,一个模块可以被多个程序所共享,模块程序的设计和调试比较方便,容易完成,在写主程序时可以直接利用已经编好的成熟模块,这个减少了我们写代码的时间。完成了程序设计后,我又对要实现具体功能的模块程序进行独立调试,在独立调试成功后,又将这些模块程序装配成整体程序进行联合调试,最后在我的努力下,完成了实训题目的设计。但是这个过程同样也不是一帆风顺的,在这个过程中遇到了数据传输错误的问题,没有设置好波特率。在查阅资料后明白了,在数据传输的时候,接收和发送的波特率要保持一致。在编写程序时,我还了解到了采用循环结构和子程序结构可以使程序的容量大大减少,提高程序的效率,节省内存。
哈哈哈这次设计真的是好上头,双眼皮都肿成单眼皮啦,希望下次不要这么没出息啦。

你可能感兴趣的:(笔记)