版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、09cb0234e2a3e77508cf514fcc955e11.pdf电子科技大学中山学院机电一体化控制器课程设计说明书 姓 名:谢伟军学 号:2010100203013院 别:机电工程学院 专 业:机械设计制造及其自动化 题 目:向“日”葵刘保军指导教师: 刘保军评阅教师: 2013年 6 月目 录1、课程设计目的42、本课程设计的背景知识43、课程设计内容44、工具/准备工作55、设计步骤及原理55.1 单片机控制系统原理.55.2 单片机主机系统电路.55.2.1时钟电路.65.2.2复位电路.65.2.3按键.75.3.1数据采集处理电路.75.3.2 红外传感器的物理摆放位置.75
2、.3.3 红外传感器的驱动组.85.4温度检测电路.85.5时钟模块.95.6液晶模块.95.7步进电机驱动.96 系统软件设计.106.1温度采集.106.2电机驱动. 136.3时钟读取. 156.4诺基亚5110驱动. 186.5主程序. 247、设计结果及分析278、总结及心得体会289、对本设计过程及方法、手段的改进建议2810、参考文献2811、评价(教师)29 1、 课程设计目的1) 通过正确地应用单片机或微型计算机等控制器,培养解决工业领域控制、工业检测等领域具体问题的初步能力。2) 通过所做课题,熟悉单片微机应用系统开发、研制的过程,软硬件设计的方法、工作内容、工作步骤,完成
3、机电一体化控制器设计。3) 加强进行基本技能训练,例如组成系统、编程、调试、查阅资料、绘图、编写说明书等;理论联系实际,提高动手能力和分析问题、解决问题的能力,训练基本的工程能力。2、 本课程设计的背景知识在现代,人们生活上的消费不仅仅是生活必需品上的消费,随着人们生活水平的提高,在精神娱乐、家居以及办公环境的消费比例也逐步提高。一个好的家居环境和办公环境自然能给人们带来好的心情。随着时代的进步,各种家居摆设层出不穷,一批批生活小玩意涌向市场。然而一批批的静态的摆设远远不能满足人们的需求,一些循环动作的玩意也人们也是司空见惯。本小组就想要一种智能的充满活力的居家办公装饰品,向“日”葵,人就是那
4、朵花心中的太阳。当然此作品不只是用于家居办公的摆设,也可以用于商店、酒店等用于欢迎顾客和欢送顾客的一个工具、甚至可以用于跟踪侦查及检测。3、 课程设计内容 本论文主要研究单片机控制的向人,分别对人方向的定位以及通过电机控制花朵面向人,附加一些时间以及温度的lcd显示(如果要更进一步可以给花增加一个脾气系统);面向控制技术及系统设备的软、硬件各个部分进行了研究。主要内容如下: 1.根据红外传感器的特点对人体所在方向进行定位。 2.通过定位所得的信息进行对步进电机的控制,使之面向人。3. Lcd显示当前温度以及时间。4、 工具/准备工作 万用表,单片机实验板,选购人体或外传感器,单片机,三极管,诺
5、基亚5110液晶,时钟芯片ds1302,温度芯片ds18b20杜邦线等等。5、 设计步骤及原理5.1 单片机控制系统原理5.2 单片机主机系统电路AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。 单片机系统图
6、5.2.1时钟电路 单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图3所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。 图中外接晶体以及电容C2和C1构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均
7、为30P左右,晶振频率选12M oRESET5.2.2复位电路 为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H, SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。复位操作有两种情况,即上电复位和手
8、动(开关)复位。本系统采用上电复位方式。图中R9和Cl组成上电复位电路,其值R取为1KQ, C取为22uF.5.2.3电机复位按键 电机复位按键用于电机复位初始化。 5.3.1数据采集处理电路 上图为人体红外传感器模块原理图,调节滑动电阻可以调节测量距离以及是否重复触发。5.3.2 红外传感器的物理摆放位置红外传感器的摆放为4摆成一个正方形。用于感应人所在的方位。如图,这种摆放方式能感应出摆个方位的不同,增加传感器的数量可以感应可多方位,如图所示,在非常接近传感器的4个角的方位上要有4个盲区。但盲区非常小一般人不会如此接近传感器,所以可以忽略。5.3.3 红外传感器的驱动组5.4温度检测电路
9、Ds18b20采用一线制通信,检测的最小变化值为0.5度,是一款性价比较高的传感器。5.5时钟模块 时钟芯片有两个电源端,一个是工作电源,一个是保存数据和掉点时工作的电源 。5.6液晶模块 诺基亚5110是一款性价比较高的液晶显示器,操作简单。内部电路如下:采用的是单片的SPI通信,占用端口少。5.7步进电机驱动减速电机28BYJ-48是一个5线4向电机,采用ULM2003A驱动,8拍信号可以很精确的控制其角度。6、 系统软件设计6.1温度采集sbit DQ=P14;/函数功能:将DS18B20传感器初始化,读取应答信号bit Init_DS18B20(void)bit flag; /储存DS
10、18B20是否存在的标志,flag=0,表示存在;flag=1,DQ = 1; /先将数据线拉高 for(time=0;time<2;time+); /略微延时约6微秒 DQ = 0; /再将数据线从高拉低,要求保持480960us for(time=0;time<200;time+); /略微延时约600微秒 DQ = 1; /释放数据线(将数据线拉高) for(time=0;time<10;time+) ; /延时约30us(释放总线后需等待1560us让 flag=DQ; /让单片机检测是否输出了存在脉冲(DQ=0表示存在) for(time=0;time<200
11、;time+); /延时足够长时间,等待存在脉冲输出完毕 return (flag); /返回检测成功标志/函数功能:从DS18B20读取一个字节数据unsigned char ReadOneChar(void) unsigned char i=0;unsigned char dat; /储存读出的一个字节数据for (i=0;i<8;i+) DQ =1; _nop_(); / 先将数据线拉高 /等待一个机 DQ = 0; _nop_(); /单片机从DS18B20读书据时,将数据线从 DQ = 1; /将数据线"人为"拉高,为单片机检测DS18B20的输出 for(
12、time=0;time<2;time+) ; /延时约6us,使主机在15us内采样 dat>>=1; if(DQ=1) dat|=0x80; /如果读到的数据是1,则将1存入datelsedat|=0x00;/如果读到的数据是0,则将0存入dat for(time=0;time<8;time+); /延时3us,两个读时序之间 return(dat); /返回读出的十六进制数据/函数功能:向DS18B20写入一个字节数据WriteOneChar(unsigned char dat)unsigned char i=0;for (i=0; i<8; i+) DQ =
13、1; _nop_(); / 先将数据线拉高 DQ=0; /将数据线从高拉低时即启动写时序 DQ=dat&0x01; /利用与运算取出要写的某位二进制数据, for(time=0;time<10;time+);/延时约30us, DQ=1; /释放数据线 for(time=0;time<1;time+) ;/延时3us,两个写时序间至少需要1us的恢 dat>>=1; /将dat中的各二进制位数据右移1位 for(time=0;time<4;time+); /稍作延时,给硬件一点反应时间/函数功能:做好读温度的准备void ReadyReadTemp(voi
14、d) Init_DS18B20(); /将DS18B20初始化WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换 ys(200); /转换一次需要延时一段时间 Init_DS18B20(); /将DS18B20初始化WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器,前两个分别是温度的低位和高char dwd()/读取温度,返回温度值char wd; unsigned char TL,TH,TN,TD; /储存暂存器的温度低位 flag=0;ReadyRea
15、dTemp(); /读温度准备TL=ReadOneChar(); /先读的是温度值低位TH=ReadOneChar(); /接着读的是温度值高位if(TH&0xf8)!=0x00)/判断高五位 得到温度正负标志flag=1;TL=TL; /取反TH=TH; /取反tltemp=TL+1; /低位加1TL=tltemp;if(tltemp>255) TH+; /如果低8位大于255,向高8位进1 TN=TH*16+TL/16; /实际温度值=(TH*256+TL)/16,即: TD=(TL%16)*10/16; /计算温度的小数部分,TN=TH*16+TL/16; /实际温度值=(
16、TH*256+TL)/16,即: TD=(TL%16)*10/16; /计算温度的小数部分,将余数乘以10再除以16wd=TN+TD/10.0;if(flag=1)wd=-wd;return wd; /(wd%1)*10为小数位6.2电机驱动unsigned char dj=0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09;void ys(unsigned int z)unsigned int x; unsigned int y;for(x=z;x>0;x-)for(y=114;y>0;y-);/ 电机程序void djzd(unsigned char
17、 k,bit c) /转过的角度=K*16*360/128,c代表正反转unsigned char i,j,temp; if(c=1)for(j=0;j<(k*16);j+)for(i=0;i<8;i+)P1=dji;ys(5);Elsefor(j=0;j<(k*16);j+)for(i=8;i>0;i-)temp=i-1;P1=djtemp;ys(5);6.3时钟读取sbit rst=P37;sbit clk=P33;sbit din=P34;/函数功能:延时若干微秒void delaynus(unsigned char n) unsigned char i; for
18、(i=0;i<n;i+);/函数功能:向1302写一个字节数据void Write1302(unsigned char dat) unsigned char i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i<8;i+) /连续写8个二进制位数据 DATA=dat&0x01;delaynus(2); /取出dat的第0位数据写入1302 SCLK=1; delaynus(2); /上升沿写入数据 SCLK=0; /重新拉低SCLK,形成脉冲 dat>>=1; /将dat的各
19、数据位右移1位,准备写入下一个数 /函数功能:根据命令字,向1302写一个字节数据void WriteSet1302(unsigned char Cmd,unsigned char dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前SCLK被拉低 RST=1; delaynus(2); /启动数据传输 Write1302(Cmd); /写入命令字 Write1302(dat); /写数据 SCLK=1; /将时钟电平置于高电平状态 RST=0; /禁止数据传递 /函数功能:从1302读一个字节数据 unsigned char Read1302(void) unsigned
20、char i,dat;delaynus(2); /稍微等待,使硬件做好准备for(i=0;i<8;i+) /连续读8个二进制位数据 dat>>=1; if(DATA=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 SCLK=1; delaynus(2); /将SCLK置于高电平,为下降沿读出 SCLK=0; delaynus(2); /拉低SCLK,形成脉冲下降沿 i=dat/16; i=i*10+dat%16; return i; /将读出的数据返回 /函数功能:根据命令字,从1302读取一个字节数据unsigned char ReadSe
21、t1302(unsigned char Cmd) unsigned char dat; RST=0; /拉低RST SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 dat=Read1302(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回/*函数功能: 1302进行初始化设置*/ void Init_DS1302(void) unsigned char flag; WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字
22、, WriteSet1302(0x80,0x30); /根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x82,0x17); /根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,0x08); /根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,0x01); /根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,0x07); /根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,0x13); /根据写年寄存器命令字,写入年的初始值WriteSet1302(0x8a,0x1); /根据写年寄存器
23、命令字,写入年的初始值WriteSet1302(0x90,0xa5); /打开充电功能 选择2K电阻充WriteSet1302(0x8E,0x80); /根据写状态寄存器命令字,写入保6.4诺基亚5110驱动sbit rst=P37;sbit clk=P33;sbit din=P34;sbit DQ=P14;sbit SCLK=P26; /位定义1302芯片的接口,时钟输出端口定义在P1.0引脚sbit DATA=P25; /位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit RST=P24; /位定义1302芯片的接口,复位端口定义在P1.2引脚void delay_1us(vo
24、id) unsigned int i; for(i=0;i<1000;i+); void xdc(unsigned char dcc,bit k) /K=0写命令,k=1写数据unsigned char i;ce=0; /片选选通if(k=0) /命令dc=0;else dc=1; /数据for(i=0;i<8;i+)if(dcc&0x80)din=1;elsedin=0;clk=0;dcc=dcc<<1;/放在这里的主要原因是等待一点时间clk=1;ce=1; /写入完成后禁止写入void LCD_clear(void) unsigned int i; xdc
25、(0x0c,0); xdc(0x80, 0); for (i=0; i<504; i+) xdc(0, 1); /函数功能:5110初始化void csh5110(void) rst=0; / 产生一个让LCD复位的低电平脉冲 delay_1us(); rst=1; ce=0; / 关闭LCD delay_1us(); ce=1; / 使能LCD delay_1us();xdc(0x21, 0);/ 使用扩展命令设置LCD模式 xdc(0xBF, 0);/ 设置液晶偏置电压 可调节屏幕的对比度 xdc(0x06, 0);/ 温度校正 xdc(0x13, 0);/ 1:48 xdc(0x2
26、0, 0);/ 使用基本命令,V=0,水平寻址 LCD_clear(); / 清屏 xdc(0x0c, 0);/ 设定显示模式,正常显示 ce=0; / 关闭LCD /函数功能:设置LCD坐标函数void LCD_set_XY(unsigned char X, unsigned char Y) xdc(0x40 | Y, 0); / column xdc(0x80 | X, 0); / row /函数功能:显示英文字符void LCD_write_char(unsigned char c,unsigned char h,unsigned char l) unsigned char line;c
27、=c-32;LCD_set_XY(h,l); for (line=0;line<6;line+) xdc(zfbcline,1);/显示小四汉字void hz(unsigned char *c,unsigned char h,unsigned char l)unsigned char line;LCD_set_XY(h,l); for (line=0;line<16;line+) xdc(cline,1);LCD_set_XY(h,l+1); for (line=16;line<32;line+) xdc(cline,1);/显示小五汉字void xshz(unsigned
28、char *c,unsigned char h,unsigned char l)unsigned char line;LCD_set_XY(h,l); for (line=0;line<12;line+) xdc(cline,1);LCD_set_XY(h,l+1); for (line=12;line<24;line+) xdc(cline,1);/整个屏幕显示void display(uchar n,uchar y,uchar r,uchar s,uchar f,uchar z,char wd) unsigned char ka; hz(zhou1,0,0); hz(xingq
29、i+(z-1)*32,16,0);ka=n/10;LCD_write_char(ka+48,32,0);ka=n%10;LCD_write_char(ka+48,38,0);LCD_write_char('/',44,0);ka=y/10;LCD_write_char(ka+48,50,0);ka=y%10;LCD_write_char(ka+48,56,0);LCD_write_char('/',62,0);ka=r/10;LCD_write_char(ka+48,68,0);ka=r%10;LCD_write_char(ka+48,74,0);ka=s/10
30、;LCD_write_char(ka+48,32,1);ka=s%10;LCD_write_char(ka+48,38,1);LCD_write_char(':',44,1);ka=f/10;LCD_write_char(ka+48,50,1);ka=f%10;LCD_write_char(ka+48,56,1); if(wd<0)LCD_write_char('-',48,5);wd=-wd;ka=wd/10;LCD_write_char(ka+48,60,5);ka=wd%10;LCD_write_char(ka+48,66,5); LCD_write
31、_char('C',78,5); LCD_write_char(124,72,5);xshz(hai,0,2); xshz(fu,12,2); xshz(wei,26,2); xshz(xiong,38,2); xshz(wei,52,2); xshz(jun,64,2); xshz(xiang,0,4); xshz(ri,12,4); xshz(kui,24,4);/6.5主程序 void main()csh5110(); /液晶初始化ReadyReadTemp(); /温度初始化Init_DS1302(); dusj();display(n,y,r,s,f,z,wd1);
32、IT0=1; EX0=1; EA=1;while(1)if(ks) dusj(); display(n,y,r,s,f,z,wd1);a1=P2&0x0f;P3=P2;for(i2=0;i2<14;i2+) /查表找出人的方位,0初始位置,1+ 45度 if(biaoi2=a1)break;a2=i2;if(a2<14) /则有人if(a2>=8&&a<=11) a2=(a2-8)*2;else if(a2>=12)a2=(a2-12)*6;elsea2=a2;a2=a2+8; switch(a2-a) case 1:djzd(1,0);a
33、2=a2-8;a=a2;break;case 2: djzd(2,0);a2=a2-8;a=a2; break;case 3: djzd(3,0);a2=a2-8;a=a2; break;case 4: djzd(4,0);a2=a2-8;a=a2; break;case 5: djzd(3,1); a2=a2-8;a=a2; break;case 6: djzd(2,1); a2=a2-8;a=a2;break;case 7: djzd(1,1); a2=a2-8;a=a2; break;case 8: break;case 9: djzd(1,0); a2=a2-8;a=a2; break
34、; case 10: djzd(2,0);a2=a2-8;a=a2; break;case 11: djzd(3,0);a2=a2-8;a=a2; break;case 12: djzd(4,0); a2=a2-8;a=a2; break;case 13: djzd(3,1); a2=a2-8;a=a2;break;case 14: djzd(2,1); a2=a2-8;a=a2; break;case 15: djzd(1,1);a2=a2-8;a=a2; break; default:break; void aaaa() interrupt 0 /电机位置初始化程序unsigned char i1;while(!p32)for(i1=0;i1<8;i1+)P1=dji1;ys(5);ks=1;EA=0;7、 设计结果及分析 设计结果,电机在初始化位置后能根据人体红外传感器检测出人的位置从而改变转向并面向人。由于传感器模块的电路决定了红外传感器在感应人体进入区域时有最低5S的输出时间,造成单片机判断上有一定的困难,在人体方位确定下来后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育场馆经营权买卖合同
- 批发销售合作协议书范本
- 建筑广告拆除施工合同
- 汽车零部件销售佣金政策
- 手机店外墙涂料施工协议
- 电力工程合同存档办法
- 港口物流区房产居间协议样本
- 艺术品销售采购及合同谈判策略
- 跨境电商服务器租赁服务协议
- 运输设备租赁保理合同
- 理论联系实际谈一谈你对“江山就是人民人民就是江山”的理解参考答案四
- 《6 怎么都快乐》公开课一等奖创新教学设计及反思
- 大学生创新创业基础 课件 第七章 商业模式构建
- 2024年度美国谷歌公司互联网广告代理合同
- 信息安全意识培训课件
- Python试题库(附参考答案)
- Unit7《Happy Birthday!》-2024-2025学年三年级上册英语单元测试卷(译林版三起 2024新教材)
- 《我的白鸽》课件
- 2024年浙江省中考英语试题卷(含答案解析)
- MOOC 国际私法-暨南大学 中国大学慕课答案
- 大学生职业规划大赛成长赛道参赛作品
评论
0/150
提交评论