电子设计任务书.docx
《电子设计任务书.docx》由会员分享,可在线阅读,更多相关《电子设计任务书.docx(14页珍藏版)》请在冰豆网上搜索。
电子设计任务书
电子设计任务书
项目名称:
基于单片机的数字旋转时钟
组员任务分配:
李金伟(09060182):
负责程序设计原理图制作
陆芳诚(09060184):
负责收集资料及撰写论文
许雪(09060197):
负责软件仿真及硬件设计
(一)项目设计要求
1.LED排列一排,以一端为圆心进行旋转。
2.根据视觉暂留原理在平面显示时针、分针、秒针与刻度。
3.扩展:
显示数字时钟。
(二)项目设计内容
1.硬件部分
本系统的硬件主要由89S51单片机、硬盘电机转动模块、5v稳压电源电压模块、并口程序下载模块,LED显示模块,遥控及遥控接收模块。
2.软件部分
本系统的软件设计主要可分为主程序模块、定时计数中断程序、延时子程序服务程序三大模块。
3.技术指标
能准确显示即时的时间,旋转盘面平稳,显示的数字稳定,时钟误差小。
(三)项目技术支持
人眼具有视觉暂留的错觉,无法区分间隔小于0.1s的图像。
因此,我们所要设计的旋转时钟大体有两部分构成:
单片机控制系统部分和电机转动部分。
单片机控制部分由一系列的二极管及单片机最小系统组成。
主要用来控制各二极管的亮与灭、计时等,以正确显示相应时间所对应的数字。
电机转动部分是一个转速约为5400rpm的硬盘电机,带上负载后,转速有所下降,电机带动单片机系统板和外围LED板转动。
这样,旋转时钟的基本框架就已构成:
通过单片机控制二极管的亮灭,利用电机的转动,使人眼产生视觉暂留的错觉,呈现出数字时钟的走动的图像。
因此我们需要单片机开发技术、protel制板技术、EWB电路仿真技术及编程等技术能力支持。
(四)方案比较与论证
单片机、LED等电路必须安装在高速旋转的电动机上面,无法采用电线进行供电,使系统供电变得极为麻烦,常见的方法有3种。
方案一:
用无线输电的方法,无触点,长寿命;
方案二:
用电动机电刷的方法,简单有效;但这样寿命很短,必要时请自行在电路板上加焊一层耐磨导电层,如果电刷触点不够光洁以及接触压力大,几小时就可以将线路板上的铜皮磨穿。
方案三:
直接用电池给主板供电,电池装在主板上随主板转动,成本高,寿命短,影响转速。
综合以上3种方案的优缺点,我们选择了用无线输电的方法,通过电磁感应原理将电能以无线的方式传输给高速旋转面板上的单片机,而DS1302芯片则用普通纽扣电池供电即可。
根据电磁感应原理,变化的电场产生磁场,变化的磁场产生电场。
运用磁性材料就可以将交变磁场转为电能输送到负载,但是用电磁耦合的方式有很大的缺点,没有高磁导率的磁芯作为介质,磁力线会严重发散到空气中,导致转递效率下降,特别在两个线圈远离的时候,下降的非常厉害。
所以只能近距离供电,不适合大功率远距离的无线供电。
(五)系统模块设计
1.系统模块示意图
图1系统模块示意图
2.旋转指针板的设计
指针板是旋转时钟的关键部分,负责显示功能,指针板上有一排超高亮的LED灯。
它们就是显示部件了,亮点所在。
为了制作方便,我们把单片机、时钟芯片、发光二极管、一体化红外接收头等器件焊接在一块指针型的电路板上,这样可以使旋转的电路成为一个独立的系统,只需要外部送电进来就可以正常运作。
电路板中心钻一个电机轴插孔,插孔为半圆并且半径与电机轴相等,电机轴插入其中带动指针板旋转。
该电路板越轻越好,LED灯可用贴片式。
LED灯数目根据不同用处可选多选少,我们设计的时钟需要能显示“12、3、6、9”这四个整点数字和秒针、分针、时针,这样我们用6支LED灯显示数字,18支用来显示秒、分、时三针,另外再加一支内框一支外框灯,总共25支LED灯,也足够用来显示汉字和英文。
在这个项目中,一共采用了25支LED。
也就是说每一列上可以分辨的显示点有25个点。
当然,这只是视觉上的显示效果。
但为了节省单片机I/O管脚,并不是每支LED灯都由一个I/O管脚控制的。
通过分析,发现靠近内圈的那十几支LED,除了用做显示时钟指针外,并不适合用来显示字符。
而在显示指针时,这部分LED的亮灭是同时发生的,这样就可以用一个I/O口来控制这组LED,让它们是同时亮或者同时灭。
除了以上几点外,需要考虑的还有显示稳定问题:
比如指针板旋转扫描一圈完成了数字“12”的显示,如果电机速度因为各种原因而不稳定,转下一圈所用的时间多于(或少于)上一圈的,那么数字“12”将会移到上一次显示位置的左侧(或右侧)。
为了解决这个问题,在指针板上加装一个红外接收管,如图二所示。
当接收到与之配对的红外发光二极管(红外发光二极管安装在电机外壳上,并与接收管对齐)发出的红外线后,就会反向导通,接到单片机外部中断,将会触发外部中断。
指针板每旋转一周,就会产生这样一个中断信号,这个信号被称为“过零信号”。
有了这个信号,单片机就可以在指针板旋转过程中实时检测计算指针板的角度位置,并根据指针板所处的不同位置,点亮相应的LED,这样每转一圈就能消除一圈的误差,使得显示内容保持稳定。
3.时钟芯片DS1302
大多数的单片机没有实时时钟部件,一旦系统掉电时钟就不能运行,下次再运行,时间就不准确了。
即便使用备用电池,但要维持单片机系统的较大功耗也是坚持不了多久的。
而我所做的旋转时钟用到的单片机主要是来准确显示时间的,因此实时时钟部件必不可少,这里我用了MAXIM公司的DS1302时钟芯片作为实时时钟部件,保证时间的长久准确性。
DS1302有着很强的功能。
包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信仅通过一条串行输入输出口。
实时时钟/日历提供包括秒、分、时、日期、月份和年份信息。
闰年可自行调整,可选择AM/PM的12小时制或24小时制。
只通过三根线进行数据的控制和传递:
CE(输入信号,在读、写数据期间,必须为高。
该引脚有两个功能:
第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。
);I/O(三线接口时的双向数据线);SCLK(串行时钟输入)。
通过备用电源可以让芯片在小于1MW的功率下运作。
对时钟寄存器初始化可以设定当前时间,控制芯片的运行,时间是用BCD码保存的,RAM可以用来存取用户数据,在用了备用电池后RAM内的数据在系统掉电时能够保持不丢失。
芯片采用了简单的I2C三线通信方式,便于节省芯片资源和与之接口的MCU的引脚。
芯片有着2.0~5.5V的宽供电电压范围,在5V供电时其接口与TTL电平兼容。
并且有着很低的功耗,在2.0V供电时仅耗300nA的电流。
引脚X1和X2连接32.768kHz晶体,与内部振荡器组成时钟。
晶体的精度直接影响着芯片时间的准确与否。
DS1302有两个电源引脚VCC1和VCC2,分别连接备用电池和电源VCC。
VCC2与主电源连接,VCC1接备用电池。
当VCC2低于VCC1时,芯片由VCC1供电;当VCC2-VCC1≥0.2V时,备用电池为芯片供电。
在VCC2供电时芯片能够对接在VCC1的备用电池充电,并且是否充电和充电电流都可以由芯片内地址为08H的时钟寄存器进行控制。
在进行任何数据传输时,CE必须被制高电平(虽然CE被置为高电平,但内部时钟还是在晶振作用下不停地计时的),在每个SCLK上升沿时读入数据,下降沿时写出数据。
每个字节的传输都是由控制字节(如表1所示)指定的,控制字节的最高位Bit7必须是“1”,否则读写将会被禁止。
bit6为“0”则指定对时钟/日历寄存器进行读写操作,为“1”则对RAM区的数据进行读写操作,bit1-bit5指定相关寄存器进行输入输出操作,最低位bit0指定是输入还是输出,为“0”则为写,相反则为读,输入输出根据脉冲的上升沿和下降沿串行进行。
控制字总是从最低位开始输出。
在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。
同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。
通过8个脉冲便可读取一个字节,从而实现串行输入与输出。
最初通过8个时钟周期载入控制字节到移位寄存器。
如果控制指令选择的是单字节模式,连续的8个时钟脉冲可以进行8位数据的读写操作。
8个脉冲便可读写一个字节。
载入控制字节后就可以对时钟/日历寄存器进行相应操作,时钟/日历寄存器如下表所示。
表1时钟/日历寄存器
读寄存器
写寄存器
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2-BIT0
范围
81h
80h
CH
16-59秒
0-15秒
00-59
83h
82h
16-59分
0-15分
00-59
85h
84h
12
0
20-23
15-19时
0-15时
1-12/
0-23
/PM
87h
86h
0
0
0
16-31日
0-15日
1-31
89h
88h
0
0
0
10月
月
1-12
8Bh
8Ah
0
0
0
0
0
1-7周
1-7
8Dh
8Ch
0
15-99年
0-15年
00-99
8Fh
8Eh
WP
0
—
秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。
当该位置1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。
小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。
当为高时,选择12小时模式。
在12小时模式下,位5为1时,表示PM。
在24小时模式时,位5是第二个10小时位(20-23时)。
控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。
在任何的对时钟和RAM的写操作之前,WP位必须为0。
当WP位为1时,写保护位防止对任一寄存器的写操作。
4.电路原理图设计
(1)直流线性稳压电源
通过9V电池加市售的三端集成稳压芯片7805来实现给单片机供电,由于单片机要随电机高速旋转,所以选用9V电池,电池固定在单片机上方,与转轴在同一位置,有效地减小离心力,防止电池被甩出。
图2TO-220结构图
(2)单片机主控模块
通过P1口下载程序,P0,P2口控制下层板上的16个贴片LED,低电平有效。
图3单片机电路原理图
(3)LED显示模块
图4LED显示模块原理图
(六)单片机程序
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodenum[10][5]={
{0x83,0x75,0x6d,0x5d,0x83},
{0xff,0xbd,0x01,0xfd,0xff},
{0xbd,0x79,0x75,0x6d,0x9d},
{0x7b,0x7d,0x5d,0x2d,0x73},
{0xe7,0xd7,0xb7,0x01,0xf7},
{0x1b,0x5d,0x5d,0x5d,0x63},
{0xc3,0xad,0x6d,0x6d,0x03},
{0x30,0x70,0x71,0x60,0x10},
{0x93,0x6d,0x6d,0x6d,0x93},
{0x90,0x6d,0x6d,0x6b,0x87}};
//0~9字表
ucharcodemaohao[]=
{0xff,0x93,0x93,0xff,0xff};//":
"字表
ucharcodeduanxian[]=
{0xef,0xef,0xef,0xef,0xef};//"-"字表
ucharn,second,minute,hour;//定义时分秒
voiddelay(uintt)
{
registeruintbt;
for(;t;t--)
for(bt=0;bt<25;bt++);
}//延时函数
voidinit()
{
hour=11;
minute=12;
second=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}//初始化函数,开启定时器
voiddisplay()
{
charm;
if(n==20)//延时1s
{
n=0;
second++;
if(second==60)//秒到60
{
second=0;
minute++;
if(minute==60)//分到60
{
minute=0;
hour++;
if(hour==24)
hour=0;//时到24
}
}
}//进位操作
for(m=4;m>=0;m--)
{P0=num[second%10][m];delay
(2);}
P0=0xff;
delay(4);
//显示秒个位
for(m=4;m>=0;m--)
{P0=num[second/10][m];delay
(2);}
//显示秒十位
for(m=4;m>=0;m--)
{P0=maohao[m];delay
(2);}
//显示":
"
for(m=4;m>=0;m--)
{P0=num[minute%10][m];delay
(2);}
P0=0xff;
delay(4);
//显示分个位
for(m=4;m>=0;m--)
{P0=num[minute/10][m];delay
(2);}
//显示分十位
for(m=4;m>=0;m--)
{P0=maohao[m];delay
(2);}
//显示":
"
for(m=4;m>=0;m--)
{P0=num[hour%10][m];delay
(2);}
P0=0xff;
delay(4);
//显示时个位
for(m=4;m>=0;m--)
{P0=num[hour/10][m];delay
(2);}
//显示时十位
P0=0xff;
delay(149);
//延时,保证一个周期
}//显示函数
voidmain()
{
init();
while
(1)
display();
}//一直显示,等待中断
voidT_0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
}//定时器0中断
(七)调试
1.硬件调试
发光二极管的调试。
焊接好25支LED灯及电阻后,给板上电,分别使每个LED的阴极接地。
发现25支LED灯都能正常点亮和熄灭。
红外对管的调试。
给发射管接限流电阻并上电后,去对准焊在板子上的红外接收管,用电压表测试其阴极,为低电平;移开发射管后为高电平。
红外对管工作正常。
红外遥控器的调试。
调试时使用USB-ISP线一步步监控单片机接收到的红外信号是否符合设计要求。
电源驱动调试。
电刷制作完成后,将LED灯都接地,并给电机和单片机都上电。
指针板开始旋转,并且LED灯都能点亮,供电成功。
电机转速调试。
调试时可试着从低到高给电机供电,使其速度慢慢提高,同时观察整个系统是不是稳定地旋转,如果速度很低就晃动得厉害就需要考虑平衡问题,哪边轻可以在哪边加配重。
2.软件调试
基本上排除了应用系统的硬件故障后,就可以进入软件的综合调试阶段,这个阶段的主要任务是排除软件错误,也解决硬件遗留的问题。
本系统程序是用汇编语言编写的,主要分为三大块:
LED扫描显示程序、单片机读写DS1302程序、单片机对红外遥控代码的译码程序。
软件调试可以一个模块一个模块地进行。
在进行软件调试时要充分利用调试软件中单步、断点、设置观察项等调试手段,主要针对程序跳转错误、程序错误、动态错误、输入输出错误和加电复位电路错误等方面着重调试。