C51 C52单片机实现减法秤.docx

上传人:b****6 文档编号:13774798 上传时间:2023-06-17 格式:DOCX 页数:16 大小:959.30KB
下载 相关 举报
C51 C52单片机实现减法秤.docx_第1页
第1页 / 共16页
C51 C52单片机实现减法秤.docx_第2页
第2页 / 共16页
C51 C52单片机实现减法秤.docx_第3页
第3页 / 共16页
C51 C52单片机实现减法秤.docx_第4页
第4页 / 共16页
C51 C52单片机实现减法秤.docx_第5页
第5页 / 共16页
C51 C52单片机实现减法秤.docx_第6页
第6页 / 共16页
C51 C52单片机实现减法秤.docx_第7页
第7页 / 共16页
C51 C52单片机实现减法秤.docx_第8页
第8页 / 共16页
C51 C52单片机实现减法秤.docx_第9页
第9页 / 共16页
C51 C52单片机实现减法秤.docx_第10页
第10页 / 共16页
C51 C52单片机实现减法秤.docx_第11页
第11页 / 共16页
C51 C52单片机实现减法秤.docx_第12页
第12页 / 共16页
C51 C52单片机实现减法秤.docx_第13页
第13页 / 共16页
C51 C52单片机实现减法秤.docx_第14页
第14页 / 共16页
C51 C52单片机实现减法秤.docx_第15页
第15页 / 共16页
C51 C52单片机实现减法秤.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C51 C52单片机实现减法秤.docx

《C51 C52单片机实现减法秤.docx》由会员分享,可在线阅读,更多相关《C51 C52单片机实现减法秤.docx(16页珍藏版)》请在冰点文库上搜索。

C51 C52单片机实现减法秤.docx

C51C52单片机实现减法秤

课程设计论文

课程名称 单片机减法秤报告

学    院      电子与电气     

专    业        自动化       

班    级       11自动C1  

学    号     

学生姓名               

 

单片机减法秤设计报告

一、方案设计

1、采用高精度电阻应变式压力传感器,测量量程0-5kg,测量精度达5g。

2、采用电子秤专用模拟/数字(A/D)转换器芯片hx711对传感器信号进行调理转换,HX711采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24位A/D转换器芯片。

3、采用STC89C52单片机作为主控芯,实现称重、计算价格等主控功能。

4、采用128*64汉字液晶屏显示称重重量、单价、总价等信息。

5、采用4*4矩阵键盘进行人机交互,键盘容量大,操作便捷。

6、具有超量程报警功能,可以通过蜂鸣器和LED灯报警。

7、系统通过USB电源供电,单片机程序也可通过USB线串行下载。

8.黑金刚配套的28BYJ485V驱动的4相5线的步进电机

二、硬件设计

1、硬件方案

(一):

称重传感器感

称重传感器感应被测重力,输出微弱的毫伏级电压信号。

该电压信号经过电子秤专用模拟/数字(A/D)转换器芯片hx711对传感器信号进行调理转换。

HX711采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24位A/D转换器芯片,内置增益控制,精度高,性能稳定。

HX711芯片通过2线串行方式与单片机通信。

单片机读取被测数据,进行计算转换,再液晶屏上显示出来。

电阻应变式传感器测量原理如图2所示。

图3测量电桥原理

(二)、电子秤专用24位AD转换芯片HX711及其电路

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

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

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

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

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

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

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

HX711内部方框图如图4所示。

其外部管脚如图5所示。

图4HX711内部方框图

本课题设计的HX711电路如图7所示:

(三)步进电机选择

步进电机的主要特性:

1、步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。

转动的速度和脉冲的频率成正比。

2、步进电机具有瞬间启动和急速停止的优越特性

3、改变脉冲的顺序,可以方便的改变转动的方向。

因此,目前打印机,绘图仪,机器人,等等设备都以步进电机为动力核心。

1、如果不考虑数据锁存功能,步进电机的扩展板电路可以简化为下图:

程序设计

(四)、单片机STC89C52及其电路

(1)STC89C52单片机概述

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

本课题设计的电子秤的单片机应用电路如图9所示:

图9STC89C52单片机电路

(五)、液晶屏电路

图10LCD显示电路

液晶屏电路如图10所示。

LCD_CS、LCD_RES、LCD_RS、LCD_SDA、LCD_SCK为液晶模块与单片机接口的控制线。

CS_ZK、SCK_ZK、SO_ZK和SI_ZK为字库和单片机接口的控制线。

(六)、矩阵键盘电路

矩阵键盘电路如图11所示:

图11矩阵键盘电路

图中4*4矩阵键盘可以显示0-9数字、小数点和五个功能键。

键盘行扫描信号为ROW1—ROW4,列扫描信号为COL1—COL4。

(七).电源电路

本设计采用USB接口供电,电源电压5V。

同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。

其电路原理如图所示。

(八)软件设计

主程序软件流程如图21所示。

图21主程序流程图

3、主程序

下面介绍main.c主程序编写,其他程序略。

#include"main.h"

#include"HX711.h"

#include"LCD1602.h"

unsignedcharcodeCCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};/unsignedcharcodeCW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};

unsignedlongHX711_Buffer=0;

unsignedlongWeight_Maopi=0;

longWeight_Shiwu=0;

unsignedcharKEY_NUM=0;

charTarget_Count=0;

unsignedcharTarget_Buffer[2]={0x00,0x00};

chartarget=0;

unsignedcharwucha=1;

bitFlag_ERROR=0;

bitFlag_OK=0;

#defineGapValue378//378

voidmain()

{Init_LCD1602();

LCD1602_write_com(0x80);

LCD1602_write_word("Welcometouse!

");

while(K1);

Delay_ms(1000);

while(K1==0)

{motor_cw();}

LCD1602_write_com(0x80);

LCD1602_write_word("Weight:

");

LCD1602_write_com(0x80+0x40);

LCD1602_write_word("Target:

0000g");

Get_Maopi();while

(1)

{Get_Weight();

{LCD1602_write_com(0x80+0x0a);

LCD1602_write_word("ERROR");}

else

{LCD1602_write_com(0x80+0x0a);

LCD1602_write_data(Weight_Shiwu/1000+0X30);

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

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

LCD1602_write_data(Weight_Shiwu%10+0X30);

LCD1602_write_word("g");}

if(Flag_OK==1&&(target>Weight_Shiwu+wucha))

{motor_ccw();//电机逆转}

if(target<=Weight_Shiwu+wucha)Flag_OK=0;

if(Flag_OK==0){

KEY_NUM=Scan_Key();

if(KEY_NUM!

=0x55)

{if(KEY_NUM==16)

{Get_Maopi();}

if(KEY_NUM==15){while(K1);

Delay_ms(1000);

while(K1==0)

{motor_cw();}}

if(KEY_NUM==12)

{

Target_Count--;

if(Target_Count<0)

{Target_Count=0;}

Target_Buffer[Target_Count]=0;switch(Target_Count)

{case0:

LCD1602_write_com(0x80+0x40+0x0a);

LCD1602_write_data('');

break;

case1:

LCD1602_write_com(0x80+0x40+0x0b);

LCD1602_write_data('0');

break;default:

break;}}

if(KEY_NUM==13){

target=Target_Buffer[0]*10+Target_Buffer[1];

Flag_OK=1;}

f(KEY_NUM>=0&&KEY_NUM<=9){

Target_Buffer[Target_Count]=KEY_NUM;

switch(Target_Count){

case0:

LCD1602_write_com(0x80+0x40+0x0c);

LCD1602_write_data(Target_Buffer[0]+0x30);

break;

case1:

LCD1602_write_com(0x80+0x40+0x0d);

LCD1602_write_data(Target_Buffer[1]+0x30);

break;

default:

break;}

LCD1602_write_com(0x80+0x40+0x0d);

LCD1602_write_data('g');

Target_Count++;

if(Target_Count>=2)

{Target_Count=2;}}}}}}

unsignedcharScan_Key()

{unsignedchartemp=0;

unsignedcharcom=0x55,com1=0,com2=0;

P1=0xf0;

if(P1!

=0xf0)

{com1=P1;

P1=0x0f;

com2=P1;}

P1=0xf0;

while(P1!

=0xf0);

temp=com1|com2;

if(temp==0xee)com=1;//数字1

if(temp==0xed)com=4;//数字4

if(temp==0xeb)com=7;//数字7

if(temp==0xe7)com=11;

if(temp==0xd7)com=0;//数字0

if(temp==0xb7)com=14;//备用键*号键

if(temp==0xde)com=2;//数字2

if(temp==0xdd)com=5;//数字5

if(temp==0xdb)com=8;//数字8

if(temp==0xbe)com=3;//数字3

if(temp==0xbd)com=6;//数字6

if(temp==0xbb)com=9;//数字9

if(temp==0x7e)com=16;//数字A键,去皮功能

if(temp==0x7d)com=15;//数字B键清除键,二次测量

if(temp==0x7b)com=12;//数字C输入单价错误时返回上一步

if(temp==0x77)com=13;//数字D键,计算总价

return(com);}{

Weight_Shiwu=HX711_Read();

Weight_Shiwu=Weight_Shiwu-Weight_Maopi;

if(Weight_Shiwu>0)

{

Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/GapValue);if(Weight_Shiwu>5000)

{Flag_ERROR=1;}else

{Flag_ERROR=0;}}else

{Weight_Shiwu=0;

Flag_ERROR=1;}}

voidGet_Maopi()

{Weight_Maopi=HX711_Read();}

voidDelay_ms(unsignedintn)

{unsignedinti,j;for(i=0;i

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

voiddelay500us(void)

{intj;

for(j=0;j<57;j++){;}}

voiddi(void)/

{unsignedinty;

for(y=0;y<250;y++)

{beep=0;

Delay_ms

(1);

beep=1;

Delay_ms

(1);}}

voidmotor_ccw(void)//

{unsignedchari,j;

for(j=0;j<2;j++)//

{for(i=0;i<8;i++)//

F1=CCW[i]&0x01;

F2=CCW[i]&0x02;

F3=CCW[i]&0x04;

F4=CCW[i]&0x08;

Delay_ms(10);}}}

voidmotor_cw(void)

{unsignedchari,j;

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

{for(i=0;i<8;i++){

F1=CW[i]&0x01;

F2=CW[i]&0x02;

F3=CW[i]&0x04;

F4=CW[i]&0x08;

Delay_ms

(1);}}}

(九)操作与使用

1、上电运行

下载完成后程序自动运行,或重上电后程序正常运行,如图所示。

图23上电运行图

2、键盘操作说明

4*4矩阵键盘定义如下

789D(清0)

456C(电机反转)

123B(电机正转)

14(未定义)015(.)A(确定价格)

其中:

●键0—9为数字键,用于单价设定。

●键15为小数点,也用于单价设定。

●B键为电机正转,每次设定数值后,请先按清B键,以驱动电机转动。

C键为电机反转,当达到设定值时,按下该键电机开始向反方向转动3、常用使用步骤:

●打开电源,屏幕显示电子秤初始化成功,此时重量和单价为0,金额为空;

●通过数字键和小数点键键入摇确定的称重数值,完成后按下电机转动键。

●在支架上称出摇秤的数值,液晶屏显示重量(单位为g),当到达设定值时电机停止

●当到达设定值后按下C键,电机向相反方向转动。

(10)误差分析

一:

由于电路的不稳定以及传感器的工作原理造成的误差。

二:

硬件设计时,下面挡板不高造成物料容易掉下来,当数值在一霎啦间以达到设定值,所以电机停止,但数值显示不正确

三:

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

当发现测试出来的重量偏大时,增加该数值。

如果测试出来的重量偏小时,减小改数值。

该值可以为小数

#defineGapValue378.2

有可能378.2设定的不是不准,有可能造成些误差,估计误差在0.05%

四:

电机28BYJ48?

5V?

?

的4相5?

的步?

?

机,而且是?

速步?

?

机,?

速比?

1:

64,步?

角?

5.625/64度。

由于?

机本身的原因造成?

的角度不是非常精确,所以也是有?

差的

五:

称重传感器的电灵敏度为满负荷输出电压与激励电压的比值,典型值是2mV/V。

当使用2mV/V灵敏度和5V激励电压的传感器时,其满度输出电压为10mV。

通常,为了使用称重传感器线性度最好的一段称重范围,应当仅使用满度范围的三分之二。

因此满度输出电压应当大约为6mV。

当电子秤应用于工业环境时,在6mV满度范围内测量微小的信号变化并非易事。

总误差是指输出误差和额定误差的比值。

典型电子秤的总误差指标大约是0.02%,这一技术指标相当重要,它限制了使用理想信号调节电路所能达到的精确度,决定了ADC分辨率的选择以及放大电路和滤波器的设计。

六:

开发板的外围电路对测量的精确度的影响。

(十一)效果图

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2