C51 C52单片机实现减法秤.docx
- 文档编号:13774798
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:16
- 大小:959.30KB
C51 C52单片机实现减法秤.docx
《C51 C52单片机实现减法秤.docx》由会员分享,可在线阅读,更多相关《C51 C52单片机实现减法秤.docx(16页珍藏版)》请在冰点文库上搜索。
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分辨率的选择以及放大电路和滤波器的设计。 六: 开发板的外围电路对测量的精确度的影响。 (十一)效果图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 C52单片机实现减法秤 C52 单片机 实现 减法