动态称重系统项目报告 计量.docx
《动态称重系统项目报告 计量.docx》由会员分享,可在线阅读,更多相关《动态称重系统项目报告 计量.docx(18页珍藏版)》请在冰豆网上搜索。
![动态称重系统项目报告 计量.docx](https://file1.bdocx.com/fileroot1/2023-4/3/3b756e8b-82e0-41ed-b537-edf76a4df09d/3b756e8b-82e0-41ed-b537-edf76a4df09d1.gif)
动态称重系统项目报告计量
《工程综合实践》
项目实验报告
项目名称:
动态称重系统
专业测控技术与仪器
班级
组号B类第1组
组员
成绩
加分
老师
中国计量学院
2013年5月27日
班级
10测控4班
组号
1
组长
指导老师
王栋
项目名称(含自选项目)
动态称重系统
组长评定成绩(百分制)与组长评语
名次
姓名/学号
学习态度
20%
专业技能
40%
沟通合作
20%
创新能力
20%
综合评定
小组成员在项目中起的主要作用
第1
18
38
19
19
94
组长协调工作,参与单片机模块,,参与整个调试制作ppt,报告
第2
18
38
20
18
94
参与单片机项目,制作报告,制作ppt,答辩
第3
18
39
17
18
92
PLC模块主力
第4
18
38
16
18
90
放大器模块主力,参与调试
第5
18
38
16
18
90
参与放大器模块工作
第6
16
36
15
19
86
参与PLC模块,参与制作PPT,,报告
第7
14
34
15
19
82
参与单片机模块
项目名称(含自选)
动态称重系统
班级
组号
1
组长签名
序号
实施计划时间
实施计划内容
1
基础构思
6
称重信号的采集与信号调理
2
6
通过单片机处理显示称重值
3
6
对不合格产品报警剔除,单片机模块
4
6
5
设计
7
用AD620芯片设计放大电路(放大器)
6
~
设计A/D转换模块,并通过单片机显示称重
7
8
PLC剔除
8
实施
9
完成单片机焊接,调试程序
9
~
完成放大器焊接,并用pcb制版做放大器
10
~
PLC程序调试完成
11
11
12
调试
12
全体组员共同合作进行调试,主要由
13
~
同学进行
14
13
15
答辩
14
写实验报告,做ppt,同学答辩
老师评语
审查老师签名
一、项目设计意义
动态称重系统广泛应用于生产线定量包装供送系统、在线质检系统中,以实现生产质量的在线控制。
本项目主要结合工程训练中心包装物流生产线智能传送系统,设计一个动态称重系统,实现对盒装产品的重量信号的动态检测与单片机数据处理、显示的功能,既通过显示器件实时显示称重结果,对于不符合重量要求的产品发出剔除信号。
二、项目设计内容
1、称重信号采集及信号调理
要求将称重传感器的全量程(0~1KG)重量信号放大为标准0~5VDC电压信号,分辨精度0.2克,绝对误差(实测与理想值之差)≤0.5%。
2、单片机(PLC)处理与称重值显示
要求将标准重量电压信号进行AD变换并显示(实现PLC重量超差报警)。
3、不合格产品的声光报警电路
单片机实现重量超差报警与剔除信号控制。
4、项目流程图
图2.1动态称重系统流程图
三、项目技术设计
1、电源模块电路
图3.1电源电路
2、A/D转换模块电路
图3.2A/D转换电路
3、信号采集放大模块
图3.3.1前置放大电路电路图
图3.3.2前置放大电路电路板
4、电路板
图3.4电路板制图
5、单片机软件设计
图3.5单片机软件流程图
6、PLC模块
图3.6.1PLC程序流程图
PLC的编程元件
PLC的I/O端子
元件作用
输入继电器
I0.0
剔除信号
输出继电器
Q0.0
脉冲输出
输出继电器
Q0.1
方向输出
输出继电器
Q0.3
Y轴电机输出信号
中间寄存器
M0.1
往返程子程序选择
表3.6.2变量分配表
四、项目实施记录与总结
1、工作记录
模块分组
信号采集放大电路模块
PLC模块
单片机模块
成员
工作记录
6-7周:
称重信号采集与调试;
8-9周:
完成放大器焊接,并用PCB制板,调试采集信号。
6-8周:
理论知识培训;
8-9周:
PLC程序设计;
10周:
PLC程序调试完成。
6-7周:
完成单片机焊接;
7-10周:
信号处理与显示程序、报警剔除程序编写。
10-12周:
模块合并,调试;
13-14周:
项目总结,项目报告,准备PPT答辩。
表4-1动态称重系统工作记录表
2、项目实施记录
(1)项目结果
实际重量(g)
82.4
100.0
120.0
140.0
160.0
180.0
200.0
230.1
显示重量(g)
84.8
102.5
124.6
140.4
166.1
174.2
198.4
239.7
检重结果
不合格
合格
合格
合格
合格
合格
合格
不合格
机械臂动作
剔除
无
无
无
无
无
无
剔除
表4-2实测记录表
(2)动态称重系统参数
检测范围(g)
100~200
检测分辨率(g)
1.0
检测误差(g)
2.84
误差拟合公式
AD=ad*0.9102+0.0106
表4-3动态称重系统参数
3、项目总结
经过近两个月的探索和努力,在老师的指导和组员的共同努力下,不仅充实了更多知识,而且在查找资料的过程中也了解了许多课外知识,开拓了视野,认识了工业流水线在线质检的发展趋势。
通过本项目的制作,结合制作中的经验,得出以下结论:
(1)本项目具有显着的生产实用价值,可节约更多人力资源,为企业创造更多利益;
(2)限于元件精度及软硬件设计技术未成熟,项目结果仍具有较大误差;
(3)调试过程具有较多问题,工业项目实施应更注重实际与理论的差别。
五、项目元件清单与造型说明
1、放大器焊接清单
元件类型/参数
数量
元件类型/参数
数量
电阻:
1k
1
瓷片电容:
10uF
5
电阻:
3k
3
AD620芯片
1
电阻:
0.5k
2
LM358芯片
2
可调电阻:
104
3
单排插针
若干
电解电容:
10uF
4
8脚芯片插座
3
2、单片机焊接清单
序号
元件类型/参数
数量
序号
元件类型/参数
数量
1
电阻:
10k
5
2
电阻:
1k
6
3
电阻:
8.2Ω
2
4
电阻:
680Ω
1
5
电阻:
4.7k
1
6
电阻:
3k
2
7
排阻:
103
1
8
可调电阻:
103
1
9
电解电容:
10uf
1
10
电解电容:
100uf
6
11
瓷片电容:
104
7
12
瓷片电容:
30
2
13
10脚牛角插座
1
14
12M晶振
1
15
按键
5
16
发光二极管
红5/绿1/白1
17
三极管:
8550
1
18
蜂鸣器
1
19
电压基准:
TL431
1
20
7*7自锁开关
1
21
稳压芯片:
7812
1
22
稳压芯片:
7912
1
23
稳压芯片:
7805
1
24
稳压芯片:
7905
1
25
40脚芯片插座
1
26
20脚芯片插座
1
27
单双排插针
若干
28
铜柱/螺丝
1套(4个)
29
AD芯片:
TCL1541
1
30
液晶屏
1
31
MCU:
89S52
1
32
杜邦线
若干
附录A单片机源程序
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlong
ucharad_result[16]={0};//AD转换结果
uchardisp1[]={"MASS/g"};
uchari,m,port,timer1;
uinta,b,AD_ad,c,d,mode;
bitflag;
sbitD1=P1^5;
sbitD2=P1^6;
sbitbeep=P2^2;
sbitkey1=P2^0;
sbitkey2=P3^0;
sbitPWM=P2^4;
sbitxiahe=P2^1;
sbittichu=P2^3;
sbitlcden=P2^7;
sbitlcdrs=P2^5;
sbitlcdrw=P2^6;
sbitAD_eoc=P1^0;
sbitAD_clk=P1^1;
sbitAD_add=P1^2;
sbitAD_dat=P1^3;
sbitAD_cs=P1^4;
voiddelay(uintz);//延时函数申明
uintADC(ucharchn1)
{
ucharaddr8;
uintADresult;
AD_eoc=1;
AD_cs=0;
_nop_();
addr8=chn1;
addr8<<=4;
for(i=0;i<4;i++)
{
AD_add=(bit)(addr8&0x80);
AD_clk=1;
AD_clk=0;
addr8<<=1;
}
for(i=0;i<6;i++)
{
AD_clk=1;
AD_clk=0;
}
AD_cs=1;
while(!
AD_eoc);
_nop_();
ADresult=0;
AD_cs=0;
for(i=0;i<10;i++)
{
AD_clk=1;
ADresult<<=1;
m=AD_dat;
ADresult+=m;
AD_clk=0;
}
AD_cs=1;
return(ADresult);
}
/****写指令*/
voidwrite_com(uintcom)
{
lcdrs=0;
lcden=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uintdate)
{
lcdrs=1;
lcden=0;
lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()//液晶初始化
{lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
voidkeyscan()
{
if(key1==0)
{
delay(5);
if(key1==0);
delay(5);
while(!
key1);
delay(5);
if(key1==1)
{
TR0=1;//启动定时器
}
}
}
voidkey2scan()
{
if(key2==0)
{
delay(5);
if(key2==0);
delay(5);
while(!
key2);
delay(5);
if(key2==1)
{
mode=mode+1;
}
}}
voidnihe()
{
if(AD_ad<750)
{
AD_ad=AD_ad*0.9102+0.0106;
}
if(AD_ad>750&&AD_ad<2200)
{
AD_ad=AD_ad*0.9303+6.0360;}
if(AD_ad>2200&&AD_ad<3000)
{
AD_ad=AD_ad*0.5267+95.210;
}
if(AD_ad>3000&&AD_ad<10000)
{
AD_ad=AD_ad*0.8746+0.1486;
}
}
voidmain()
{
beep=1;
xiahe=0;
D1=1;
D2=1;
tichu=0;
PWM=0;
flag=1;
c=0;
mode=0;
init();
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
write_com(0x80+4);
delay(5);
while(disp1[i]!
='\0')
{
write_date(disp1[i]);
i++;
}
ad_result[4]='0';
ad_result[3]='.';
ad_result[2]='0';
ad_result[1]='0';
ad_result[0]='0';
write_com(0xc0+6);
for(i=0;i<5;i++)
{
write_date(ad_result[i]);
delay(20);
}
c=(uint)(ADC(0)*4.883);
while
(1)
{
TMOD=0x01;//设置定时器0为工作方式1
TMOD=0x10;//设置定时器1为工作方式1
//TR0=1;//启动定时器
IT0=0;//低电平出发
ET0=1;//开定时器中断
ET1=1;//开定时器中断
IT1=0;//低电平出发
EA=1;
keyscan();
key2scan();
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==60)
{
if(flag)
{
flag=~flag;
//c=(uint)(ADC(0)*4.883);
a=0;
d=0;
AD_ad=0;
TR0=0;
xiahe=1;
delay(1500);
xiahe=0;
PWM=1;
delay(2500);//让盒子运动到中间位置
PWM=0;
delay(1000);
AD_ad=(uint)(ADC(0)*4.883);
delay(500);
PWM=1;
AD_ad=abs(AD_ad-c);
/*质量显示*/
AD_ad=AD_ad*2;
nihe();
ad_result[4]=(AD_ad%10)+'0';
ad_result[3]='.';
ad_result[2]=((AD_ad%100)/10)+'0';
ad_result[1]=((AD_ad%1000)/100)+'0';
ad_result[0]=(AD_ad/1000)+'0';
write_com(0xc0+6);
for(i=0;i<5;i++)
{
write_date(ad_result[i]);
delay(5);
}
if(AD_ad<2000&&AD_ad>1000)
{
D2=0;
D1=1;
beep=1;
tichu=0;
PWM=1;
delay(5000);
TR0=1;
//TR1=1;
}
else
{PWM=1;
D2=1;
D1=0;
tichu=1;
beep=0;
delay(400);
beep=1;
delay(2500);
PWM=0;
TR1=1;
tichu=1;
delay(100);
tichu=0;
}
if(~flag)
{
flag=~flag;
ad_result[4]='0';
ad_result[3]='.';
ad_result[2]='0';
ad_result[1]='0';
ad_result[0]='0';
write_com(0xc0+6);
for(i=0;i<5;i++)
{
write_date(ad_result[i]);
delay(5);
}
D1=1;
D2=1;
beep=1;
}
}
}
}
voidT1zd()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
b++;
if(b==40)
{
b=0;
TR1=0;
TR0=1;
}
}
附录BPLC源程序