基于51单片机的称重系统设计_第1页
基于51单片机的称重系统设计_第2页
基于51单片机的称重系统设计_第3页
基于51单片机的称重系统设计_第4页
基于51单片机的称重系统设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-单片机作业 学 院 计算机与控制工程学院 专 业 自动化132 学 号 2021022030 王伟 . z-基于51单片机的称重系统一 动态称重所谓动态称重是指通过分析和测量车胎运动中的力,来计算该运动车辆的总重量、轴重、轮重和局部重量数据的过程。动态称重系统按经过车辆行驶的速度划分,可分为低速动态称重系统与高速动态称重系统。因为我国高速公路的限速最高是120,所以高速动态称重系统在理论上可对5到120之间时速通过称量装置的车辆进展动态称重。而低速动态称重系统则一定要限制通过车辆的行驶速度,要想有较高的测量精度,理论要求车辆在5km/h以下时速匀速通过。在我国,车辆动态称重一般都使用低速动态

2、称重来完成,在很多收费站和车辆检测站都有应用,国家也出台了相关的测量标准。与传统意义上的静态称重相比,动态称重可以在车辆缓慢运动情况下直接进展称重,这样动态称重的高效率、测量时间短、能流畅交通等主要特点就凸显出来了。动态称重的问世,不但使车辆的管理上有了很大的促进作用,而且还对我国的公路管理和维护起到了至关重要的作用。二 系统总体构造及其功能设计总体构造是以51单片机为处理器的系统,如图3.1所示。上位机键盘输入A/D转换器ADC0832放大器OP07桥式称重传感器WPL110AT89C51单片机RS232转换器蜂鸣器LED显示图 3.1本设计要求能判断出车辆是否超载,如果车辆超载,本系统能够

3、提供该车辆的超载信息并发出警报。本设计采用STC89C52单片机作为系统的处理核心,利用桥式称重传感器采集到车辆重量并转换成电压信号,然后通过放大电路将电压信号进展放大处理后,传送到A/D转换器中转换为数字信号,再经过单片机处理、传输到接口电路,最后送到上位机,该数据可以与上位机里用键盘事先输入设定的总重量作比较并判断出该车辆是否超载,如果超载,则可通过显示器、蜂鸣器作显示超载信息并报警,当然,键盘的作用除了输入设定值还可以解除和开启警报。三 动态称重系统的组成动态称重系统主要由车辆重量含超载、偏载检测检测子系统、货车长、宽、高三维尺寸超限检测子系统、自动触发摄像拍照子系统、车辆类型自动判别子

4、系统、系统配置及系统维护子系统、行驶车辆速度测量子系统、数据统计、报表处理子系统和单据输出打印子系统这几局部组成。该系统组成完善,部件考虑周全,能很好的完成称重任务。四 动态称重系统的主要功能1动态检测出通过车辆的轴数、轴重、轴距、轮数、车速等;2能自动检测出车辆的高、宽、长等外围尺寸是否超出最大标准,并能给出超出部位的具体位置和具体数据;3拍摄机器在车辆经过时能自行对要被检测的车辆进展拍照,该机器能对车牌、车辆种类进展识别,最终作为图像证据;4可以将不合格车辆的处理记录、超限情况进展打印,根据车辆超限的程度来计算罚款数额并打印收据或罚款单;5检测到的数据全部存入数据库中,并对被监测到的数据进

5、展分析、统计。便于汇总上报、日常管理和进展查询。五 单片机的选用本设计采用的是INTEL公司研究开发生产的STC89C52单片机,其部置有256字节的部数据存储器、8位中央处理单元、8K片程序存储器、3个16位定时/计数器、32个双向I/O口和一个片时钟振荡电路,全双工串行通信口, 5个两级中断构造。89C52的引脚图如图4.1所示。图 4.1 89C52引脚图本设计使用的是单片机的最小系统,其中电路包括下载口电路、复位电路和晶振电路。复位电路中,电阻在下接地,电容在上接高电平,中间为RST。复位电路工作原理是:通电时,由于电流很大,从而相当于电容被短路,这样RST引脚上处于高电平,这时的单片

6、机为制止工作状态。如果要使单片机正常工作,就要使RST端电压慢慢下降并到一定程度,也就是RST端为低电平,这就需要通过电源对电容进展充电。复位电路复位的方式有手动复位、上电复位两种。所谓上电复位,就是通电瞬间,由于电流很大,从而相当于电容被短路,这样RST引脚上处于高电平,自动复位;相反,通过对改变电容电流,当电流很小的时候,我们就可以把电容当做开路状态,RST端就处于低电平,程序就能正常的运行。而手动复位要在上电复位的根底上,按下复位按键,使VCC直接与RST相连,电容处于放电状态,以高电平形成复位;松开复位按键,RST仍旧是高电平,这时充电电流作用于电阻上,VCC给电容进展充电,还是复位状

7、态,充电完毕后,RST为低电平,能够正常工作。 A/D转换器A/D转换器根据输出的信号格式有并行A/D和串行A/D两种。ADC0832 是一种具有双通道 A/D 转换芯片和8 位分辨率。它的优点有体积小,兼容性强,性价比高,从而深受个人的欢迎和企业的认可,目前在世界上也已经有了较高的使用率。ADC0832具有能够进展双通道A/D 转换,分辨率高达8位;当供电电源为5V时,输入电压能稳定的保持在05V 之间;TTL/CMOS与输出输入电平兼容;功耗很低,只有15mW;转换工作时间只有 32S,也就是频率仅有 250KHZ等特点。其引脚功能图如图4.6所示,芯片引脚接口说明如表4所示。CS1234

8、18765CH0GNDVcc/REFDODICH1CLKADC0832图4.6引脚排列表4 ADC0832引脚说明接口说明CS片选使能,输入低电平能使芯片工作CH1模拟的输入通道1,或作为 IN+/-使用CH0模拟的输入通道0,或作为 IN+/-使用GND接地DO转换数据输出,数据信号输出DI选择通道控制,数据信号输入CLK芯片时钟脉冲输入Vcc/REF5V参考电压输入和电源输入通常情况下的单片机和ADC0832的接口的数据线应为4条,分别是 CS、CLK、DO、DI。由于ADC0832的数据信号输入输出口与单片机具有双向接口通信,输入输出口也不同时使用,所以可以将数据信号输入输出口并联后当一

9、条数据线进展使用。它们的硬件接口电路与单片机连接的原理如图4.7所示。最后将以上的惠思登电桥、放大器、ADC0832转换器和STC89C52单片机连接起来,就组成了系统的采集模块。CSCH0CH1GNDVccCLKDIDOP1.1P1.2P1.3VccU0ADC0832AT89C51图4.7 ADC0832 与单片机的接口电路报警模块本系统要实现一旦检测到车辆超载超限,就会立刻鸣笛报警,通过操作人员的检查处理后,解除报警。本设计选用蜂鸣器作为发声装置,蜂鸣器可利用三极管来进展放大驱动。该接口电路如图4.15所示:R3R4P2.75VSpeakerVT1图4.15 报警接口电路. z-5. 系统

10、的软件设计5.1 主程序设计当系统上电复位后,系统开场初始化,包括端口等;初始化完毕后,调用串口输出提示语,开场准备串口输出电压;准备完毕后,调用串口输出电压值,开场从串口输出电压值;输出完毕后,调用串口输出换行值;最后开场延时200ms。根据系统方案,设计出本设计的主程序流程,可以用框图表示。串口初始化串口输出提示语串口输出电压值串口输出换行值延时200ms开场图5.1 主程序流程图5.3 ADC0832软件设计首先要将芯片开场使能,即CS使能端置于低电平,然后通过DI和DO的同一数据输入端口,可实现通道功能的选择,再调用通道初始化程序,初始化完毕后,在8个时钟边沿获得正序和反序8位数据,最

11、后返回数据。根据此方案,设计出本设计中A/D转换程序流程,如图5.2所示。当两位数据都为0时,CH1作为负输入端 IN-,而CH0就作为正输入端IN+来进展相关输入。当此两位数据都为1时,CH1进展单通道转换而CHO不转换。当两位数据分别为0和1时,CH1作为正输入端IN+,CH0作为负输入端IN-来进展相关输入。当两位数据为分别为1和0时,CH0进展单通道转换而CH1不转换。ADC0832的功能项如表7所示。芯片使能通道选择通道初始化在8个时钟边沿获得正序8位数据返回数据开场在8个时钟边沿获得反序8位数据图5.2 ADC0832转换流程图表7 AD0832功能项MU* AddressChan

12、ne*SGL/DIFODD/SIGN0110+11+00+_01_+ADC0832没有工作时,DO/DI和CLK的电平可高可低,但CS的输入端口应必须显示高电平,此时芯片处于禁用状态。当A/D转换进展时,CS端口必须处于低电平并且一直将低电平保持到转换全部完毕。当芯片转换工作开场,芯片的CLK端口会接收到处理器传送来的一时钟脉冲,DO/DI并联端口将使用数据输入信号的DI端口。第一个时钟脉冲的下沉出现之前,DI端口一定要是高电平,表示启始信号的发出,在第二、三个脉冲的下沉出现之前,DI端口要输入两位数据来选择通道。第三个脉冲出现下沉之后,DI端口就不再起任何作用,此后 DO/DI并联端口则是被

13、DO端口占领进展读取转换数据。第四个下沉脉冲出现开场,DO端口输出最高位的转换数据DATA7,接下来每个脉冲下沉之后DO端口都会输出下一位的转换数据。直到发出最低位数据DATA0,也就是由第十一个脉冲发出的数据之后,这样一个字节的数据输出就完成了。再从第十一个脉冲下沉开场从DATD0开场输出下一个相反数据字节。然后一直到第十九个脉冲完成数据的输出,这样一次A/D 转换才完毕。最后,要想将转换后的数据进展相关处理就必须将芯片禁用,也就是将CS端口输入高电平。5.4 LCD显示程序设计首先设置显示模式,设置第*,y个字符的DDRAM的地址,为15×2显示,因为液晶显示为15列,所以*位置

14、的围是0到15,同理,因为显示2行,所以y位置的围是0到1。显示程序如下:void Lcd_Pos(uchar yPos,uchar *Pos)uchar tmp;*Pos &= 0*0f; /*位置围是015,因为显示15列yPos &= 0*01; /y位置围是01,因为显示2行if(yPos=0) /显示第一行tmp = *Pos;elsetmp = *Pos + 0*40; /显示第二行tmp |= 0*80;Write_(tmp);5.5 主函数软件主要分成四个局部:串口配置,ADC0832的初始化,等待承受数据和输出数据。程序如下:void main(void)In

15、itUART(); /串口初始化Lcd_init();Write_String("Weight: ", 0, 0);Write_String("H=", 1, 0);Write_String("L=", 1, 6);Beep = 1;while(1) Process10ms(); DispVal(Wh, 1, 2);DispVal(Wl, 1, 8); CheckProcess();if (flagget10s = 1)flagget10s = 0;Get_temp(sum*100); ET0 = 1;TR0 = 1;Disp_Vol

16、tage(); /采集电压并发送. z-参考文献1 周杏鹏,传感器与检测技术,清华大学,20212 燕,传感器原理及应用,大学,20213 王幸之、钟爱琴、王雷、王闪,AT89系列单片机原理与接口技术,航天大学,20044 高玉芹,单片机原理与应用及C51编程技术,机械工业,20215 毅刚、喜元、宇,单片机原理与应用,高等教育,20216 小成、吴清、夏春明,单片机原理及C51应用,华东理工大学,20217 国务院全国治理车辆超限超载领导工作小组,全国治理车辆超限超载工作简报Z,200418 勇、吴文兵、竹生、雨,汽车轮重动态检测中的单片机,汽车科技,200439 积东,单片机51/98开发

17、与应用,电子工业,199410 周航慈,单片机程序设计根底,航空航天大学,1997单片机系统局部硬件原理图单片机程序*include "reg52.h"*include "My_type.h" /数据类型头文件*include <intrins.h>*define nop() _nop_()*define uchar unsigned char*define uint unsigned intsbit Lcd_rs=P20;sbit Lcd_rw=P21;sbit Lcd_en=P22;sbit key1 = P35;sbit key2 =

18、P36;sbit key3 = P37;sbit Beep = P27;sbit Led = P26;sbit CS=P13; /使能sbit CLK=P11; /时钟sbit Do=P12; / 数据输出sbit Di=P12; /数据输入*define first_channel 0*02 /通道1*define second_channel 0*03 /通道2uchar CH = first_channel; *define Fclk 11059200UL /*使用11.0592M晶体*/*define BitRate 9600UL /*波特率定义为9600*/uint8 Sending

19、; /发送标志code uint16 AD_Tab41 = 512, 2048, 2970, 3840, 4659, 5581, 6349, 7117, 7782, 8397, 9165, 9830, 10291, 11162, 11520, 11981, 12749, 13210, 13926, 14490, 15206, 15821, 16538, 17357, 17971, 18842, 19814, 20838, 21760, 22477, 23091, 23603, 23962, 24371, 24678, 24883, 25037, 25190, 25293, 25395, 256

20、00;uint8 temp_zheng;float temp_*iao;uint8 flag10ms = 0;uint8 flag50ms = 0;uint8 get10s = 0;uint8 flagget10s = 0;uint8 Alarmflag = 1;uint16 sum = 0;uint8 count5ms = 0;uint8 Wh = 40;uint8 Wl = 20;void Delay_lcd1602(uint dly) uint i; for(; dly>0; dly-) for(i=0; i<100; i+);bit Lcd_busy()bit result

21、;Lcd_rw = 1;Lcd_rs = 0;Lcd_en = 1;nop();nop();nop();nop();result = (bit)(P0&0*80);Lcd_en = 0;return(result);void Write_(uchar ) while(Lcd_busy(); /LCD忙等待Lcd_rs = 0;Lcd_rw = 0;P0 = ;Delay_lcd1602(5);Lcd_en = 1;Delay_lcd1602(5);Lcd_en = 0;void Write_data(uchar date) while(Lcd_busy(); /LCD忙等待Lcd_rs

22、 = 1;Lcd_rw = 0;P0 = date;Delay_lcd1602(5);Lcd_en = 1;Delay_lcd1602(5);Lcd_en = 0;void Lcd_init()Lcd_en = 0;Write_(0*38);Delay_lcd1602(5);Write_(0*0c);Delay_lcd1602(5);Write_(0*04);Delay_lcd1602(5);Write_(0*01);Delay_lcd1602(5); void Lcd_Pos(uchar yPos,uchar *Pos)/设置第*Pos,yPos个字符的DDRAM地址 uchar tmp;*

23、Pos &= 0*0f; /*位置围是015,因为显示15列yPos &= 0*01; /y位置围是01,因为显示2行if(yPos=0) /显示第一行tmp = *Pos;elsetmp = *Pos + 0*40; /显示第二行tmp |= 0*80;Write_(tmp);void Write_char(uchar c,uchar *Pos,uchar yPos) /定义Write_Char函数Lcd_Pos(*Pos,yPos);Write_data(c); void Write_String(uchar *s,uchar *Pos,uchar yPos) /定义Wri

24、te_String函数uchar i = 0;Lcd_Pos(*Pos,yPos);while(*s)Write_data(*(s+);if(+i>16) break;void InitUART(void)EA=0;TMOD|=0*21; /定时器1工作在模式2SCON=0*50; /串口工作在模式1TCON=0*05;TH1=256-Fclk/(BitRate*12*16);TL1=256-Fclk/(BitRate*12*16); TH0 = (65535 - 1000)/256;TL0 = (65535 - 1000)%256;ET0 = 1;TR0 = 1;PCON=0*80;

25、/串口波特率加倍ES=1; /串行中断允许TR1=1; /启动定时器1REN=1; /允许接收 EA=1; /允许中断void UartISR(void) interrupt 4if(RI) /收到数据RI=0; /清中断请求else /发送完一字节数据TI=0;Sending=0; /清正在发送标志void PutChar_to_Uart(uint8 d)Sending=1;SBUF=d;while(Sending);void Prints(uint8 *pd)while(*pd)!='0')PutChar_to_Uart(*pd);pd+;unsigned char ADc

26、onv(void)unsigned char i;unsigned int data_f=0,data_c=0;ET0 = 0;TR0 = 0;Di=1;CS=1;_nop_(); CS=0;Di=1; ;/芯片使能之前的初始化。第一个下降沿CLK=1;_nop_();_nop_();CLK=0; / 确定通道模式、第2个下降沿_nop_();_nop_();CLK=1;Di=(bit)(0*02&CH); /设定通道初始化_nop_();CLK=0;_nop_();_nop_(); CLK=1; Di=(bit)(0*01&CH); /设定通道初始化 .第3个下降沿_nop_

27、();_nop_(); CLK=0; /AD转化的初始化完成。Di=1; CLK=1;_nop_();_nop_(); CLK=0;_nop_(); CLK=1;for(i=8;i>0;i-)/得到一个正常排序的8位数据 data_f|=Do;data_f<<=1; CLK=1;_nop_();_nop_(); CLK=0;_nop_(); for(i=8;i>0;i-)/得到一个反序排列的8位数据data_c<<=1;data_c|=Do;_nop_();CLK=1;_nop_();_nop_();CLK=0;_nop_();CLK=0;_nop_();_

28、nop_();CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();CLK=1;_nop_();CS=1;_nop_();_nop_();ET0 = 1;TR0 = 1;return data_f;/*void delay_ms(unsigned int *) unsigned int i,j; i=0; for(i=0;i<*;i+) j=108; while(j-); */void DispVal(uint8 pdat, uint8 *, uint8 y)/*PutChar_to_Uart(pdat/100 + 0*30);PutChar_to_Ua

29、rt(pdat%100/10 + 0*30);PutChar_to_Uart(pdat%100%10 + 0*30);*/Write_char(pdat/100 + 0*30, *, y);Write_char(pdat%100/10 + 0*30, *, y+1);Write_char(pdat%100%10 + 0*30, *, y+2);void Process10ms(void)if (flag10ms = 1)flag10ms = 0;count5ms +;if (count5ms = 5)count5ms = 0;flag50ms = 1; get10s+;sum = sum +

30、ADconv();if (get10s = 10)get10s = 0;ET0 = 0;TR0 = 0;flagget10s = 1;sum = sum / 10;if (key1=0) while (!key1);Wh+;if (Wh >=51)Wh = 40;if (key2=0) while (!key2);Wl+;if (Wl >=Wh)Wl = 20;if (key3=0)while (!key3)Alarmflag = Alarmflag;/*void Process50ms(void)if (flag50ms = 1)flag50ms = 0; Led = Led;*

31、/void CheckProcess()uint16 Wig, SetH, SetL;Wig = (uint16)temp_zheng*100 + (uint16)(temp_*iao*100);SetH = (uint16)Wh*100;SetL = (uint16)Wl*100;if (Wig>SetH) && (Alarmflag=1)Beep = 0;else if (Wig<SetL) && (Alarmflag=1)Beep = 0;else if (Alarmflag = 0) Beep = 1;elseBeep = 1;/*uchar

32、 Get10sAD(void)uchar i;uint sum = 0;for (i=0; i<10; i+)sum = sum + ADconv();delay_ms(10); sum = sum/10;return sum;*/void Get_temp(uint ad_temp) uint8 n = 0;while(1)if (ad_temp >= AD_Tabn) && (ad_temp <= AD_Tabn+1) temp_zheng = n + 10;temp_*iao =(1.0*(ad_temp - AD_Tabn)/(AD_Tabn+1 - AD_Tabn); break; n+; if (n>40) break; void Disp_Voltage(void)uchar temp;temp = (uchar)(temp_*iao * 100);Print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论