自动控制升降旗技术报告_第1页
自动控制升降旗技术报告_第2页
自动控制升降旗技术报告_第3页
自动控制升降旗技术报告_第4页
自动控制升降旗技术报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、摘 要该简易国旗升降装置以STC89C52RC单片片机为核心,由42-BYG2100-48 步进电机作为动力驱动实现国旗的自动升降。该装置具备控制精度高,易于控制,使用方便等优点。该装置由CPU 模块、步进电机驱动模块、语音模块、液晶显示模块、数据保存模块和键盘控制模块组成。CPU 模块为主控模块,步进电机驱动模块主控芯片采用东芝公司的TB6560AHQ 芯片,实现对步进电机的驱动达到升降国旗的功能,语音模块用于在升国旗的同时播放国歌,液晶显示模块采用1602 液晶,用于及时显示国旗所在的高度和感性的显示电机转速,数据保存模块由E2PROM 器件AT24C02 构成,通过I2C 通信协议实现断

2、电国旗的高度保存功能,键盘模块用于用户对本装置的控制。设计要求设计并制作一个自动控制的升降旗装置,该系统能够自动控制升旗和降旗,升旗时,在旗杆的最高端自动停止;降旗时,在最低端自动停止。基本部分1按下上升按键后,旗帜匀速上升,同时流畅地播放歌曲,上升到最高端时自动停止上升,歌曲停奏;按下下降按键后,旗帜匀速下降,降旗的时间不放歌曲,下降到最低端时自动停止;2旗帜在最高端,上升按键不起作用;在最低端时,下降按键不起作用;3升降旗的时间均为43 秒,与国歌的演奏时间相等;4即时显示旗帜所在的高度,以cm 为单位,误差不大于2cm。扩展部分:1 重新合上电源后,所显示的旗帜高度数据不变;2 要求升降

3、旗的速度可调整,调整范围是5.375-21.5秒钟(除43 秒外,其他时间可与国歌不同步);3 在最高升降速度下(以自选的电机参数定),能在指定的位置上自动停止,定位误差2cm1 。1 方案论证与对比1.1 方案一主控芯片采用STC89C52 单片机,驱动马达采用直流电机。由于直流电机需采用PWM 脉宽调制实现对其调速,PWM 脉宽调制电机速度很难精确的计算,所以高度控制误差就大。因此需采用测速发电机进行测速,然后经过模数转换实现数据的采集再送CPU 通过相应的算法实现高度控制。此方案控制精度低,且PWM 脉宽调制时不能保证转矩的稳定。系统原理框图如图1 所示:1.2 方案二主控芯片采用STC

4、89C52 单片机,驱动马达采用步进电机驱动,步进电机控制较复杂,但控制精度高,误差小,步进电机又称脉冲电机,能把脉冲信号转换成输出轴的转角或转速,无需用测速发电机对其测速就能准确的控制其进给距离。此方案控制精度高、误差小。系统原理框图如图2 所示。1.3 方案对比与选择以上两个方案都是可行的,都能实现对国旗的自动升降控制。两者的最大区别就在于方案二采用步进电机控制,控制精度要远远大于方案一用直流电机控制的精度,且方案二无需测速就能直接进行控制距离且精度高。基于控制精度的考虑,在本设计中选用方案二作为本设计的整体方案。2 单元电路设计与计算2.1 数据保存模块根据发挥部分的设计要求,要求在断电

5、重新上电源后显示的旗帜高度不变(也即掉电保护功能),在设计时采用开发板上的E2PROM 芯片AT24C02 和CPU 之间通过I2C通信协议进行数据的传输并保存。2.1.1 E2PROM 芯片AT24C02AT24C02 是ATMEL 公司生产的E2PROM 芯片,具备256 字节的存储空间,和单片机之间的通信方式采用I2C 通信协议。AT24C02 内部有256 字节的E2PROM,每个字节有8 位。这种芯片广泛应用于各种小电压供电的工业产品及小电器中。加上2.7v 有效电压即可通过两线串行接口对各种八线的PDIP, JEDEC, SOIC, MAP, TSSOP 分组包进行存储。2.1.2

6、 I2C 总线工作原理I2C 通信协议是PHLIPS 公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。I2C 总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。I2C 总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。起始和终止信号 :SCL 线为高电平期间,SDA 线由高电平向低电平的变化表示起始信号;SCL 线为高电平期间,SDA 线由低电平向高电平的变化表示终止信号。时序图如下所示:I2C 总线数据传送格式:I2C 总线上传送的数据

7、信号是广义的,既包括地址信号,又包括真正的数据信号。每一个字节必须保证是8 位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9 位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。2.2 液晶显示模块液晶显示模块选用长沙太阳人公司的1602 液晶模块,2 行*16 列字符显示,并行8数据通信,可以满足本系统中显示的要求。我在平时的练习中利用开发板已经调过液晶显示的模块,利用C 语言模块的可移植性,直接将模块移植过来,根据实际情况更改数组内容,即可实现对本设计中需要显示的参数进行显示。 2.3 键盘检测模块键盘输入有独立键

8、盘和矩阵键盘两种选择。对于本设计使用的单片机开发板自带的4 个独立按键而言完全可以实现本系统的要求。4 个独立按键分别与单片机的P3.0-P3.3 口相连,低电平有效。一个按键用于控制上升启动用,一个按键用于下降启动用,另外两个按键一个是调速用的,一个是自定义高度用的。为了节约按键和减少电路的复杂程度,调速和自定义高度功能采用循环调整的方式。键盘检测原理图如图6显示2.4 语音模块根据本设计的要求,在升国旗的同时要能同时播放国歌,在设计时我们起初的方案是在一块单片机上通过编程驱动有源蜂鸣器播放,但是在实际设计时发现因为中断的问题(单片机不能同时响应两个中断)不能在一块单片机芯片上实现流畅的播放

9、国歌和控制国旗匀速升降的功能,所以我们将语音模块单独分离了出来,单独设计语音模块时考虑到了用语言芯片,但是时间有限,来不及购买语言芯片了,因此我们采用了一块单独的单片机作为语音播放用,但控制还是由主CPU 的控制的。语音模块如图7 图7 语音模块2.5 电机驱动模块步进电机驱动模块我们选用的是北京时代超群电子有限公司的ZD-6560-V2 系列驱动板,该驱动板主芯片采用的是东芝公司的TB6560AHQ 芯片(芯片资料见附录五)。该驱动板属高集成度高可靠性两相步进电机驱动器,输入电压范围8V24V,所有接口采用超高速光耦隔离,抗干扰能力强,最高驱动电流可达3.5A。具备过热自动保护、细分衰减可调

10、、支持脱机、使能、锁定等功能。该驱动板与单片机的连接方式有共阳极接法和共阴极接法,如图8、图9 所示,控制方式如表1、表2 所示。脉冲- 有脉冲时工作,高电平有效;无脉冲时锁定电机并自动半流方向- 高电平输入或悬空时正转;低电平输入时反转脱机- 高电平输入或者悬空时正常工作;低电平时脱机表1 共阳极接法控制方式表2 共阴极接法控制方式脉冲+有脉冲时工作,低电平有效;无脉冲时锁定电机方向+低电平输入或悬空时正转;高电平输入时反转脱机+低电平输入或者悬空时正常工作;高电平时脱机 在本设计中,我们选用的接法是共阳极接法,未使用脱机功能,所以驱动板的脱机接口未与主控板连接。9V 直流稳压电源供电。3

11、系统软件工作流程3.1 脉冲计数测量原理及误差分析本设计中使用的42BYG47-01 型步进电机,步距角0.9 度,步进电机每转一圈所需脉冲数为200 个脉冲。设计中使用的主滑轮周长大约为9.6cm(由于测量工具的局限性,所以是大约,下同),主滑轮装在步进电机的转轴上,由电机带动。设计的旗杆高度约是48cm,大约发2000 个脉冲旗帜从最低端上升到最高端,每来1 个脉冲,滑轮所转过的线距离约为0.024mm,在设计此装置的初始方案中,我们考虑的控制精度是1mm 的,但是在实际设计时,由于液晶显示太快,不易观察,为了减少算法误差,我们将精度设置为1cm,每发42个脉冲距离变化一次,加或者减1cm

12、,实际上每42 个脉冲距离的变化约是1.008cm,算法控制时省略了毫米后面的小数点位。根据上面的数据,理论上的算法误差约是0.008cm 。3.2 系统工作流程系统在开机上电后,系统处于等待状态,除了1602 液晶显示有数据显示外(1602液晶显示上一次断电前的旗帜高度),再没有任何动作了,等待按下速度调整键、高度自定义键和上升启动键,一旦有相应的按键按下,系统就会执行相应的动作。步进电机的脉冲在程序中由CPU 内部定时器0 中断服务程序发出,这样既保了脉冲的发送频率又保证了脉冲的流畅,从而保证电机的匀速运转。电机的调速控制通过改变定时器的初值来实现,由一个按键实现循环切换调速(模拟摩托车的

13、循环档)。3.3 定时器0 中断服务程序程序通过定时器0 中断服务程序给驱动板发脉冲,驱动步进电机转动,定时器0每溢出一次,就进入中断服务程序执行一次中断,定时器初值重装,发一个脉冲,每进入42 次中断,国旗高度就加或者减1 厘米,送液晶显示并送E2PROM 保存。通过改变定时器0 的重装初值实现调速功能。4 系统功能测试与整体指标4.1 基本功能测试测试记录:开机按下上升启动键,开始播放国歌,国旗开始匀速上升,1602 液晶始有高度数据显示,并在不断增加,同时用一个秒表计时,当秒表计时到43 秒时,国歌播放完毕,同时国旗也上升到最高端(48厘米高度),液晶显示显示高度为48cm,并停止增加。

14、到最高端再按下上升键,系统无任何动作。然后按下下降启动键,国旗开始下降,液晶显示的高度数据开始减小,当下降到最低端时,停止下降,液晶显示高度为0,再按下下降键,系统无任何动作。单位:cm状态序号初始高度停止高度显示值实测值上升104848.2204848.1304848.3下降14800.724800.134800.2从上表数据测试看出,最大误差是8mm,最小误差是2mm,误差范围在设计要求范围内,基本功能测试成功。4.2 发挥部分功能测试4.2.1 掉电旗帜高度保存功能测试测试记录:打开系统电源,按下上升启动键,国旗开始上升并播放国歌,当国旗上升到一定高度时,记下此时的高度显示值然后突然断开

15、电源,然后再合上电源开关,观察得此时液晶上显示的高度值和断开电源前是相同的。当其上升到最顶端后,再按下下降键,国旗开始下降,下降到一定高度时,记下此时的液晶显示高度值并突然断开电源,然后再合上电源开关,观察得此时液晶上显示的高度值和断开电源前是相同的。然后按照上面的方法进行了多次测试,重新合上电源后,液晶显示的高度值与开机前的都是相同的。掉电旗帜高度数据保存功能测试成功。4.2.2 速度调整功能测试测试记录:打开系统电源,先不按下上升启动键,先按下速度调整键,看液晶上的感性速度显示值是否循环变化,实际观察得感性速度显示值会随键的按下循环变化。设置好某一速度值,按下启动键,观察国旗上升的速度是否

16、跟没进行速度调整时有不同,并在国旗上升的同时按下速度调整键看速度是否也会变化,实际测试观察得速度是变化了。然后循环多测几次,速度能按照按键的设置变化。速度调整功能测试成功。4.2.3 自定义高度功能测试测试记录:打开系统电源开关,先不按下上升启动键,先按下自定义高度键,设置要停止的高度,再按启动键,测量国旗在指定高度停止时的实际高度与设置的高度是否相同若不同,误差是多大。设置的高度应有大有小,从下往上和从上往下进行多次测试,测试数据记录如表4 所示:单位cm状态序号起始高度自定义高度实测高度上升101212.2202424.2303636.3下降1483636.22482424.1348121

17、2.1从上表数据可以看出,高度定位能在指定的高度停下来,且最大误差是8mm,最小误差为2mm,达到设计要求,自定义高度功能测试成功。5 详细仪器清单6 附录一:国旗自动升降装置电路原理图1. 主控板原理图:2. 音乐模块原理图7 附录二:总程序流程图8 附录三:总程序(C 源代码)/*lcd1602.h 头文件*/sbit rs=P24;/1602读控制位sbit rw=P25;/1602写控制位sbit en=P26;/1602使能端控制位uchar code table1=nationalflag R&L;/开始上电后液晶第一行显示国旗升降英文字母uchar code table2= H:

18、00cmV:1.1cm/s;/开始上电后液晶第二行显示初始高度和初始速度void delay1(uint z) /毫秒级延时uint x,y;for(x=z;x0;x-)for(y=100;y0;y-);uchar nSwap(uchar *com) /调整1602与P0高低位对应的函数uchar i,nNum8;for(i=0;i8;i+)nNumi=(*com)%2;*com/=2;*com=0;for(i=0;i8;i+)*com=2*(*com)+nNumi;void write_com(uchar com) /1602 写命令rs=0;/选择指令寄存器 rw=0;/选择写nSwap(

19、&com);P0=com; /把命令字送入P0delay1(2);/延时一小会儿,让1602准备接收数据 en=1;/使能线电平变化,命令送入1602的8位数据口 delay1(2);en=0;void write_data(uchar date) /1602 写数据rs=1;/选择数据寄存器 rw=0;/选择写 nSwap(&date);P0=date;/把要显示的数据送入P0口delay1(2);/延时一小会儿,让1602准备接收数据 en=1;/使能线电平变化,数据送入1602的8位数据口 delay1(2);en=0;void init_lcd() /1602 初始化uchar num

20、;write_com(0x38);/8位数据,双列,5*7字形 write_com(0x0c);/开启显示屏,关光标,光标不闪烁 write_com(0x06);/显示地址递增,即写一个数据后,显示位置右移一位 write_com(0x01);/清屏 write_com(0x80);/第一行显示命令for(num=0;num16;num+)write_data(table1num);/第一行显示的数据delay1(2);write_com(0x80+0x40);/第二行显示命令for(num=0;num16;num+)write_data(table2num);/第二行显示的数据delay1(

21、2);/*i2c bus.h 头文件*/#includesbit wp=P10;sbit scl=P11;sbit sda=P12;void delay2() /微妙级延时uint i;for(i=0;i6;i+)_nop_();void init_i2c()wp=0;sda=1;delay2();scl=1;delay2();void start() /开始信号sda=1;delay2();scl=1;delay2();sda=0;delay2();void response() /应答信号sda=1;delay2();scl=1;delay2();scl=0;delay2();void s

22、top() /停止信号sda=0;delay2();scl=1;delay2();sda=1;delay2();void write_byte(uchar date) /写字节uchar i,temp;temp=date;wp=0;scl=0;delay2();for(i=0;i8;i+)if(temp&0x80)sda=1;elsesda=0;delay2();scl=1;delay2();scl=0;delay2();temp=temp1;scl=0;delay2();sda=1;delay2();uchar read_byte() /读字节uchar i,k;sda=1;for(i=0;

23、i8;i+)scl=1;delay2();k=k1;if(sda)k=k|0x01;elsek=k&0xfe;scl=0;delay2();return k;void write_add(uchar address,uchar date) /写数据wp=0;start();write_byte(0xae);response();write_byte(address);response();write_byte(date);response();stop();uchar read_add(uchar address) /读数据uchar date;start();write_byte(0xae)

24、;response();write_byte(address);response();start();write_byte(0xaf);response();date=read_byte();stop();return date; /* 国旗升降仪.C 文件 nationalflag R&L H:00cmV:1.1cm/s */#include#define uint unsigned int#define uchar unsigned char#include#include /1602头文件sbit k1=P30; / 上升控制位sbit k2=P31; /下降控制位sbit k3=P32

25、; / 调速位sbit k4=P33; / 自定义高度位sbit mot=P14;/ 电机脉冲控制位sbit dir=P15; /电机方向控制位sbit beep=P27;/ 蜂鸣器控制位uchar flagk1,flagk2,flag;/ 国旗各个状态标志位uchar cm,high1,high2,v; /定义变量,脉冲个数cm,上升下降高度hingh1,自定义高度high2,速度vuchar speed; void delay(uint x)/延时函数uint i,j;for(i=x;i0;i-)for(j=120;j0;j-); void display2(uchar com,uchar

26、 date) /1602 液晶第二行显示函数1,显示上升标志+,下降标志 write_com(0x80+0x40+com); write_data(date); void display3(uchar com,uchar date) /1602 液晶第二行显示函数2 ,显示国旗高度 write_com(0x80+0x40+com); write_data(0x30+date); void G_init() / 全局变量初始化mot=1;speed=0;/初始速度为1.1cm/sflag=0; /TMOD=0x01; /定时器T0方式1TH0=(65536-10750)/256;TL0=(655

27、36-10750)%256;EA=1;ET0=1;high1=read_add(8);/上电读取EEROM存储的值_nop_(); _nop_();_nop_();_nop_(); void keyscan() /键盘扫描函数uchar raise;if(high1!=0)flagk2=1;if(flagk1=0)if(k1=0)/上升按键有效delay(10);if(k1=0)flag=0;beep=0; /上升时开启国歌TR0=1; /上升时电机启动flagk1=1;/上升时关闭上升标志flagk2=1; /上升时打开下降标志dir=1;raise=0x2b;display2(0,rais

28、e);/上升时液晶显示+while(!k1);if(flagk2=1) if(k2=0)/下降按键有效delay(10);if(k2=0)flag=0;flagk1=0; /下降时打开上升标志flagk2=0; /下降时关闭下降标志beep=1; /下降时关闭国歌TR0=1;/下降时电机启动dir=0;raise=0x2d;display2(0,raise) ;/下降时液晶显示while(!k2);if(k3=0) /调速按键有效delay(10);if(k3=0)speed+;switch(speed)case 0:v=11;display3(9,v/10);display3(11,v%10

29、);break;case 1:v=22;display3(9,v/10);display3(11,v%10);break;case 2:v=44;display3(9,v/10);display3(11,v%10);break;case 3:v=88;display3(9,v/10);display3(11,v%10);break;case 4:speed=0;v=11;display3(9,v/10);display3(11,v%10);break;while(!k3); if(k4=0)/自定义高度按键有效 delay(10);if(k4=0)flag=1;high2=high2+12;

30、if(high2=48) high2=0; while(!k4); if(dir=1)/ 电机正传,即上升时 if(high1=48)|(high2=high1)&high2!=0)/上升时当上升到48cm或者上升到自定义高度时停止上升raise=0x20;display2(0,raise);high2=0;TR0=0;beep=1;flagk1=1;flagk2=1; if(dir=0) /电机反转,即下降时if(high1=0)|(high2=high1)&high2!=0) /下降时当下降到0cm或者下降到自定义高度时停止下降TR0=0;raise=0x20;display2(0,rai

31、se);high2=0; dir=1;flagk1=0;flagk2=0; void main() /主函数init_lcd(); init_i2c; G_init();while(1)keyscan();if(flag=0)/当在上升或者下降时display3(3,high1/10); /高度送液晶显示display3(4,high1%10); /高度送液晶显示else/当在自定义高度时display3(3,high2/10); /高度送液晶显示display3(4,high2%10); /高度送液晶显示 void timer0() interrupt 1 switch(speed) /通过

32、改变定时器初值进行调速 case 0:TH0=(65536-10750)/256;TL0=(65536-10750)%256;break;case 1:TH0=(65536-5375)/256;TL0=(65536-5375)%256;break;case 2:TH0=(65536-2688)/256;TL0=(65536-2688)%256;break;case 3:TH0=(65536-1344)/256;TL0=(65536-1344)%256;break; mot=mot; cm+; if(cm=42) /进入42次中断,即发了42个脉冲,显示高度就加1厘米 cm=0; if(dir=

33、1) /上升时 high1=high1+1; write_add(8,high1); /送E2PROM 芯片保存 else/下降时 high1=high1-1; write_add(8,high1); /*义勇军进行曲C 源代码 */#include sbit beep=P11; /蜂鸣器发声unsigned char tl0,th0; /定时器赋值unsigned int code FreqTab= /简谱对应的简谱码65535,64260,64400,64524,64579,64685,64778,64860,64898,64968,65030,65057,65110,65157,6519

34、8,65217,65252,65283,65297,65323,65346,65367,;unsigned char code yyjjxq= /曲谱贮存格式:音高,音长,音高,音长8,0x08,0,0x04,5,0x04,8,0x0c,8,0x04,8,0x06,8,0x02,5,0x04,6,0x02,7,0x02,8,0x08,8,0x08,0,0x04,10,0x04,8,0x04,9,0x02,10,0x02,12,0x08,12,0x08,10,0x06,10,0x02,8,0x06,10,0x02,12,0x06,10,0x02,9,0x08,9,0x10,13,0x08,12,

35、0x08,9,0x08,10,0x08,12,0x04,10,0x04,0,0x04,12,0x04,10,0x04,9,0x02,10,0x02,8,0x08,10,0x08,0,0x08,5,0x06,6,0x04,8,0x04,8,0x04,10,0x06,10,0x02,12,0x04,12,0x04,9,0x04,9,0x02,9,0x02,6,0x08,9,0x0c,5,0x04,8,0x0c,8,0x04,10,0x0c,10,0x04,12,0x10,8,0x06,10,0x02,12,0x04,12,0x04,13,0x08,12,0x08,10,0x06,8,0x02,12,0x08,10,0x04,0,0x04,8,0x04,0,0x04,5,0x08,8,0x08,10,0x06,8,0x02,12,0x08,10,0x04,0,0x04,8,0x04,0,0x04,5,0x08,8,0x08,5,0x08,8,0x08,5,0x08,8,0x08,8,0x08,0,0x08,0x

温馨提示

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

评论

0/150

提交评论