频率监控报警器内部电路设计项目报告书.doc_第1页
频率监控报警器内部电路设计项目报告书.doc_第2页
频率监控报警器内部电路设计项目报告书.doc_第3页
频率监控报警器内部电路设计项目报告书.doc_第4页
频率监控报警器内部电路设计项目报告书.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

-频率报警器 -制作人陈译-项目报告书频率监控报警器内部电路设计制作人:陈译 制作时间:2010年5月 一:说明以及功能:说明:报警器电路时广泛使用的电路,在很多场合都有应用,本制作是基于51核心的单片机而来的频率报警器,在频率低于4000HZ的时候能够很好的测量出来,误差少,主要用于汽车发动机的频率检测以及报警工作,器件都是常见器件,成本低并且稳定,性能好。本频率监控报警器功能:1 能够准确测试到4000HZ以下的频率(由于成本问题,经过测试,当频率大于4000HZ的时候误差较大,特此说明)。2 当被测频率低于上线频率(上线频率可以自行设置,设置好后自动存储在eerom中)的时候,MCU处于监控阶段,2个继电器不工作(P1_0=0; P1_1=0;)。3 当被测频率在小于上线频率大于上线频率减去250这个区间当中,继电器0(P1_0=0)不工作,继电器1(P1_1=1)工作,并且工作10秒后停止30秒,注意这个动作仅仅在小于上线频率大于上线频率减去250这个区间内生效,其余区间按照内部无效。4 当被测频率大于上限频率时继电器1(P1_1=0)不工作,而继电器0在开始进入该区间(频率大于上限频率)的前5秒不工作,5秒后工作(P1_0=1),并且工作15秒后又停止工作20秒。而后又工作,按照此规则重复执行。注意:这些规定都是根据具体工作环境所设置的,因此比较繁琐。 二:设计思路分析:1. 在实际的基于单片机的频率测试中,通常采用定时器,计数器以及一些外围集成电路构成一个频率计。本制作考虑成本问题并没有增加外围的有关测试的器件,例如功放电路和滤波整形电路,只利用单片机的计数器和定时器功能测得频率。2. 频率的概念为信号在1秒钟的变化次数,因此我们就利用定时器定时1秒,然后读取计数器(该计数器设置为下降沿出发,既信号的下降沿来了就计数一次)的值,该值经过特殊处理即为频率值( 公式: hz=h_count*255+l_count+count*65535;其中变量hz为当前所测频率值,h_count为当前1秒钟计数值的高位,l_count为其地位,count为当前计数值)。3. 我们利用24c02这个器件来存储事先设置好的频率上限值,这个器件是根据的iic总线规定的接口实现读取操作的,在稍后会做介绍。4. 该仪器的显示电路部分,我们采用的是1602接到MCU的P0口,用该器件的好处有方便操作,节约成本,显示效果佳。5. 电源部分,因为我们的工作环境是在汽车内,又因为汽车的电源为24v所以我们设计了DC-DC模块,把24v电源转成5v的TTL电平以提供MCU和继电器以及液晶的电源需求。6. 输入部分,我们用了3个按钮,1个用于复位,复位后的频率为(3000HZ)工作环境需求,另外两个用于上线频率的设置。三:硬件电路设计以及器件介绍:1. 整体电路原理图MCU以及DC-DC部分:2. 主要器件:stc80c51 它能够满足要求价格也便宜,易于获取,P1_0用于控制继电器0,P1_1用于继电器2控制,P2_0以及P2_1用于按键输入,P0_0到P0_1用于液晶的数据端,P3_4用于液晶的Rs端,P3_6用于液晶的rw端,P3_7用于液晶的片选,P2_2用于24c02的scl端,P2_4用于24c02的sdl端。1602液晶 下面截图为其引脚功能跟标号 下面截图为1602的读写操作下面截图为本制作主要用到的该器件的指令24c02器件AT24C02芯片DIP封装,其中: SDA、SCL:I2C总线接口;A2A0:地址引脚;WP:写保护引脚,WP接VSS时,禁止写入高位地址,WP接VDD时,允许写入任何地址;VDD、VSS电源端、接地端。 AT24C02工作原理 由于80C51芯片内部无I2C总线接口,因此只能采用虚拟I2C总线方式,并且只能用于单主系统。即80C51作为I2C总线主器件,扩展器件作为从器件,从器件必须具有I2C总线接口。主器件80C51的虚拟I2C总线接口可用通用I/O口中任一口线充任。这里的主器件为AT89C2051,从器件为AT24C02。 AT24C02具有2568(2K)bit的存储容量,页写入字节数为8。通常EEPROM器件写入时总需要一定的时间(5ms10ms),因此在写入程序中无法连续写入多个数据字节。一次写入EEPROM的字节数不大于器件的页写入字节数时,可按通常RAM的写入速度将数据装入EEPROM的数据寄存器中,随后启动自动写入定时控制逻辑,经过5ms10mS的时间,自动将数据寄存器中的数据同步写入EEPROM的指定单元。这样只要一次写入的字节数不多于页写入容量,总线对EEPROM的操作可视为对静态RAM的操作,但要求下次数据写入操作在5ms10ms之后进行。 AT24C02器件地址格式如图(2)所示。其中DA3DA0位为器件固有地址编码,由工厂给定,为1010,不能更改。A2A0 3位引脚地址用于相同地址器件的识别。本电路为000。R/W为数据传送方向。R/W=1时,主机接(读);R/W=0时,主机发送(写)。 D7D6D5D4D3D2D1D0DA3DA2DA1DA0A2A1A0R/W器件固有地址编码器件引脚地址读/写 图(2)I2C总线器件SLA继电器,本制作中用到的继电器电源为5v由于51单片机的驱动能差了,所以我们在继电器前加入三极管,放大电流,提高单片机的驱动能力。 四:软件设计主程序框图说明:单片机内部环境初始化液晶初始化读取存储的上线频率在液晶上打印一系列固定字符进入while循环并且读取当前频率读取按键是否当前频率大于上线频率是继电器1不工作,而继电器0在开始进入该区间的前5秒不工作,5秒后工作,并且工作15秒后又停止工作20秒当前频率在小于上线频率大于上线频率减去250这个区间当中继电器0不工作,继电器1工作,并且工作10秒后停止30秒否否是继电器都不工作监控频率中断程序框图定时器0中断触发计时到1秒读取当前定时器1的计数一系列时间时间变量的增加外部中断0触发向液晶打印信息,向24c02写入3000(复位)定时器1触发计数+1下面是程序源码:#include#include intrins.h #define uint unsigned int #define uchar unsigned char#defineOP_READ0xa1/ 器件地址以及读取操作,0xa1即为1010 0001B#defineOP_WRITE 0xa0/ 器件地址以及写入操作,0xa1即为1010 0000Bsbit P1_0=P10;sbit P1_1=P11;sbit LcdRs=P34;sbit LcdRw=P36;sbit LcdEn=P37;sbit SCL=P22;sbit SDA=P24;/sbit P2_0=P25; uchar str8;uchar str15;unsigned long int count=0,h_count=0,l_count=0,hz=0;unsigned int limit=0;uchar temp;char limithigh,limitlow;uchar time;uchar del=0;uchar del1=0; char ge=0,shi=0,bai=0,qian=0; void delay(int z) int x,y; for(x=z;x0;x-) for(y=120;y0;y-) ; #define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0; delay(5);P0=input;LcdEn=1;delay(5);LcdEn=0;delay(5); /显示#define LCD_SHOW0x04 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标闪动#define LCD_NO_FLASH0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode); /设置#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00 / default#define LCD_MOVE0x01 / 画面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode); void LCD_Initial()/ en=1;LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动/液晶字符输入的位置*void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);/将字符输出到液晶显示void Printf(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;/24c02void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; void delaynms(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); void start()SDA = 1; /SDA初始化为高电平“1” SCL = 1; /开始数据传送时,要求SCL为高电平“1”SDA = 0; /SDA的下降沿被认为是开始信号SCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递) void stop()/ 停止位SDA = 0; /SDA初始化为低电平“0”_nSCL = 1; /结束数据传送时,要求SCL为高电平“1”SDA = 1; /SDA的上升沿被认为是结束信号SDA=0;SCL=0;unsigned char ReadData()unsigned char i;unsigned char x; for(i = 0; i 8; i+)SCL = 1; x=1; x|=(unsigned char)SDA; SCL = 0; /在SCL的下降沿读出数据return(x); /在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0 WriteCurrent(unsigned char y)unsigned char i;k: for(i = 0; i 8; i+) SDA = (bit)(y&0x80); /因为传送时高位在前,低位在后 SCL = 1; /在SCL的上升沿将数据写入AT24Cxx SCL = 0; /可以进行下一轮脉冲y =limit) P1_1=0; del1=0;if(del5&del=20) P1_0=0; hztostr(); GotoXY(9,0);Printf(str); limittostr();GotoXY(12,1);Printf(str1); else if(hzlimit-250&hzlimit)del=0;P1_0=0;if(del110) P1_1=0; hztostr(); GotoXY(9,0);Printf(str); limittostr();GotoXY(12,1);Printf(str1); else del=0;del1=0;P1_0=0;P1_1=0;hztostr();GotoXY(9,0);Printf(str); limittostr();GotoXY(12,1);Printf(str1); void ex1() interrupt 2EX1=0;LCD_Write(0,0x01);GotoXY(0,0); Printf(reset);delay(200); GotoXY(0,6); Printf(.); delay(200); GotoXY(0,7); Printf(.); delay(200); GotoXY(0,8); Printf(.); delay(200); GotoXY(0,9); Printf(.); delay(200); GotoXY(0,10); Printf(.); delay(200); GotoXY(0,11); Printf(.); delay(200);GotoXY(0,1); Printf(succeed!);delay(400); LCD_Write(0,0x01); GotoXY(1,0);Printf(HZ:);GotoXY(0,1);Printf(Limit HZ:);WriteSet(1,0);WriteSet(2,30);ge=ReadSet(1)%10;shi=ReadSet(1)/10;bai=ReadSet(2)%10;qian=ReadSet(2)/10; limit=ge+10*shi+bai*100+qian*1000;hztostr(); GotoXY(9,0);Printf(str); limittostr();GotoXY(12,1);Printf(str1); EX1=1; void t0() interrupt 1 time+;if(time=20) TR1=0; time=0; del+; del1+; if(del=41) del=0; if(del1=40) del1=0; count=0; h_count=TH1; l_count=TL1; TH1=0; TL1=0; TR1=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256;void t1() interrupt 3count+;五:附录上面为其PCB设计图注意:下列为元件参考清单Part TypeDesignatorFootprintDescription0.3UfC6RAD0.1Capacitor0.20.7UFC7RAD0.1Capacitor0.2元

温馨提示

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

评论

0/150

提交评论