资源描述
题 目: 基于DSP的时钟系统设计
引言
DSP 芯片既具有高速数字信号处理功能,又具有实时性强、功耗低、集成度高等嵌入式微计算机的特点,所以随着科技的发展,DSP 技术在机电控制领域的应用愈加广泛。LED 可显示字符,且显示清晰美观、功耗低,在电子产品中也广泛应用。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个DSP应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了DSP芯片系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用DSP芯片内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。
本文主要介绍用DSP芯片内部的定时/计数器来实现电子时钟的方
法,本设计由TMS320LF2407芯片和LED数码管为核心,辅以必要的电路,构成了一个DSP电子时钟。
1方案论证与比较
1.1数字时钟方案
数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。
方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。而且,由于是软件实现,当DSP芯片不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
1.2数码管显示方案
方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗出发,本设计采用方案二。
2.硬件设计
2.1总体设计
利用TMS320LF2407芯片制作简易电子时钟,由六个LED数码管、五个按键、数码管驱动74HC273及数码管位选74HC138,如下图2.1所示:
图2.1 系统框图
2.2模块设计
2.2.1 位选芯片74HC138
74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。
74HC138可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。74HC138与74HC238逻辑功能一致,只不过74HC138为反相输出。74HC138译码器可接受3位二进制加权地址输入(A, B和C),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC138特有3个使能输入端:两个低有效(-S2和-S3)和一个高有效(S1)。除非S2和S3置低且S1置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需1片74HC138芯片即可轻松实现6个数码管的选择导通。如图2.2所示:
图2.2 74HC138译码器
2.2.2 驱动芯片74HC273
74HC273是一款高速CMOS器件,74HC273引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC273具有八路边沿触发,D 型触发器,带独立的D输入和Q输出。74HC273的公共时钟(CLK)和主复位(-CLR)端可同时读取和复位(清零)所有触发器。每个D输入的状态将在时钟脉冲上升沿之前的一段就绪时间内被传输到触发器对应的输出(Qn)上。一旦CLR输入电平为低,则所有输出将被强制置为低,而不依赖于时钟或者数据输入。74HC273适用于要求原码输出或者所有存储元件共用时钟和主复位的应用,如下图2.3所示:
图2.3 74HC273
2.2.3数码管显示
下图为共阴极数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由DSP控制器控制组合0-9十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,此时数码管显示1。由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的,如下图2.4所示:
图2.4 LED 数码管
2.2.4控制部分
TMS320LF2407A是TI公司推出的一款定点DSP控制器,它采用了高性能静态CMOS技术,使得供电电压降为3.3V,减小了控制器的功耗;40MIPS的执行速度使得指令周期缩短到25ns(40MHz),从而提高了控制器的实时控制能力;集成了32K字的闪存(可加密)、2.5K的RAM、500ns转换时间的A/D转换器,片上事件管理器提供了可以满足各种电机的PWM接口和I/O功能,此外还提供了适用于工业控制领域的一些特殊功能,如看门狗电路、SPI、SCI和CAN控制器等,从而使它可广泛应用于工业控制领域。
图2.5 DSP2407最小系统图
如上图2.5所示,DSP2407最小系统包括6部分:DSP2407(TMS320LF2407A) 、电源、晶体振荡器接口电路、JTAG接口电路、XF引脚LED指示灯和I/O口LED指示灯。
本最小系统选择了TI公司的TPS767D301作为DC/DC转换芯片。它是一个双路低压降的电压调节器,输入为+5V电压,可输出一路+3.3V固定电压及一路1.5~5V可调电压,每路电流最大输出为1A。电源电路原理图如下图所示。+3.3V输出电压供LF2407A使用,另一路可输出+1.8V,本最小系统暂不用,如下图2.6所示:
图2.6 DSP2407最小系统电源电路原理图
PLL滤波电路。在DSP内部,有一个锁相环时钟模块PLL(Phase-Lock loops),它是被作为一个片内未设看待的,接在片内外设总线上,为DSP提供所需的各种时钟信号。DSP2407的锁相环时钟电路需要片外滤波器电路的配合,PLL局部电路图如下图2.7所示。
DSP2407A最小系统时钟硬件设计有两种工作方法。一种是利用锁相环时钟模块PLL中提供的内部振荡电路,在DSP芯片的引脚XTAL1/CLKIN与XTAL2之间连接一晶振,启动内部振荡器。另一种方法是不使用片内的振荡电路,完全由外部有源晶体振荡器产生时钟信号,直接接入XTAL1/CLKIN引脚,此时,XTAL2脚悬空。这种方法称为晶振方式。但着一方式仍是用片内的PLL倍频电路来对这一来自片外的时钟进行倍频,以产生所需的时钟。
图2.7 锁相环电路PLL片外滤波电路
JTAG标准接口。JTAG(Joint Test Action Group)是1985年指定的检测PCB和IC芯片的一个标准。仿真器一般提供DSP的JATG时钟信号,只参与数据的传输,即将目标代码通过JATG接口从PC机下载到目标系统的存储器中。仿真器JTAG的仿真头如下图2.8及JTAG仿真信号表2.1所示:
图2.8 仿真器JTAG的仿真头
表2.1 JTAG仿真信号
JTAG信号
信号说明
仿真器输入/输出状态
DSP输入/输出状态
EMU0
仿真引脚0
输入
输入/输出
EMU1
仿真引脚1
输入
输入/输出
PD(Vcc)
目标板存在检测信号。该引脚用于指示仿真器是否与目标板接上,以及目标板是否已经上电。DSP的PD引脚必须与目标板的电源Vcc相连。
输入
输出
TCK
测试时钟。由仿真器提供的10.368MHz的时钟信号。
输出
输入
TCK_RET
测试时钟返回。对仿真器而言,是输入信号
输入
输出
TDI
测试数据输入(针对DSP)
输出
输入
TDO
测试数据输出(针对DSP)
输入
输出
TMS
测试方式选择
输出
输入
-TRST
测试复位
输出
输入
2.3系统总原理图
图2.9 总体硬件电路图
3.软件设计
3.1程序流程图
图3.1 电子时钟程序流程图
3.2程序清单
程序编写如下:
#include "F2407REGS_c.h"
unsigned int sec,min,hour,i;
unsigned char table[]={0xFF3F,0xFF06,0xFF5B,0xFF4F,0xFF66, 0xFF6D,0xFF7D,
0xFF07,0xFF7F, 0xFF6F}; //程序初始化
unsigned char tablewe[]={0xFF00,0xFF01,0xFF02,0xFF03,0xFF04,0xFF05,0xFF06};void delay(unsigned int j);
void main() //主程序
{
DSP2407_Initialing();
Ioport_Initialing();
asm("CLRC INTM");
EVAIMRA= EVAIMRA|0x0080; //仅允许定时器1的周期中断
EVAIMRA=EVAIMRA&0x0080; //清除定时器1的周期中断
T1CON=0x170C; //timer1为连续增计数模式,预分频值为128,使用内部时钟
T1PER=0xF424; //timer1的周期寄存器值设为200ms
T1CNT=0x00; //timer1的计数器清0
sec=0;min=0;hour=0;i=0;
While(1)
{
PCDATDIR=0x00FF;
if(i==5) //i等于5为1秒
{
i=0;
sec++; //秒加1
PBDATDIR=tablewe[0]; //选通秒的个位
PFDATDIR=0xFF01; //选通74HC273
PADATDIR=tabale[sec%10]; //秒个位显示
PFDATDIE=0xFF00; //关断74HC273
PBDATDIR=table[1]; //选通秒的十位
PFDATDIR=0xFF01; //选通74HC273
PADATDIR=table[sec/10]; //秒十位显示
PFDATDIR=0xFF00; //关断74HC273
}
if(sec==60)
{
sec=0;
min++; //分钟的显示
PBDATDIR=table[2];
PFDATDIR=0xFF01;
PADATRDIR=table[min%10];
PFADATDIR=0xFF00;
PBDATDIR=tablewe[3];
PFDATDIR=0xff01;
PADATDIR=table[min/10];
PFDATAIR=0xFF00;
}
if(min==60)
{
min=0;
hour++; //小时的显示
PBDATDIR=tablewe[4];
PFDATDIR=0xFF01;
PADATDIR=table[hour%10];
PFDATDIR=0xFF00;
PBDATDIR=tablewe[5];
PFDATDIR=0xFF01;
PADATDIR=table[hour/10];
PFDATDIR=0xFF00;
}
if(hour==24)
hour=0;
if(PCDATDIR=0x00FE) //按键T1,时、分、秒复位为0
{
delay(100); //调用延时程序
PCDATDIR=0x00FE;
min=0;
sec=0;
hour=0;
}
if(PCDATDIR=0x00FD) //按键T2,时钟停止计时
{
delay(100);
PCDATDIR=0x00FD;
PFDATDIR=0xFF00;
}
if(PCDATDIR=0x00FB) //按键T3,时钟开始计时
{
delay(100);
PCDATDIR=0x00FB;
PFDATDIR=0xFF01;
}
if(PCDATDIR=0x00F7) //按键Tm,调分
{
delay(100);
PCDATDIR=0x00F7;
min++;
}
if(PCDATDIR=0x00EF) //按键Th,调时
{
delay(100);
PCDATDIR=0x00EF;
hour++;
}
}
void interrupt INT2() //定时器中断程序
{
swith(PIVR) //有外设中断向量寄存器PIVR判断
case 0x0027:
i++;
T1CNT=0x00;
EVAIFRA=EVAIFRA&0x0080;
break;
default;
break;
}
void delay(unsigned int j) //延时程序
{
unsigned k,m;
for(m=0;m<j;j++)
{
for(k=0;k<50;k++)
}
}
3.3 程序调试步骤
1. 实验准备
(1) 连接设备:关闭计算机和实验箱电源;关闭实验箱上的三个开关。
(2) 开启设备:打开计算机电源;打开实验箱电源开关,打开ICETEK-LF2407-A 板上电源开关。如使用USB 型仿真器用附带的USB 电缆连接计算机和仿真器相应接口,注意仿真器上两个指示灯均亮。设置Code Composer Studio 为Emulator 方式。
2. 启动Code Composer Studio:启动Code Composer Studio 3.3。
(1) 点击菜单项Debug\Connect确认CCS软件和仿真器连接在一起。
(2) 创建新工程。选择Project->New。
(3) 在Project Name框里输入工程名:LED。点击 Finish,CCS创建一个叫做LED.prj的工程文件。
(4) 选择Project->Add files to Project,把文件加到工程里。你也可以在左边的工程视图窗口里右击工程,选择 Add files to Project。
(5) 从你所创建的文件夹里添加 main.c, DoLoop.c, 和lnk.c(映射内存的连接命令文件)。
3. 编译工程:单击“Project”菜单,“Rebuild all”项,编译工程中的文件,生成Timer.out
文件。
4. 下载程序:单击“File”菜单,“Load program…”项,选择F:\2407A\Lab3-Timer
目录中的Timer.out 文件,通过仿真器将其下载到2407A DSP 上。
5. 运行程序观察结果:单击“Debug”菜单,“Run”项,运行程序,查看结果。单击“Debug”菜单,“Halt”项,停止程序运行。
结论
这次的创新设计是十分有意义的,而且是十分必要的。一方面经过了大学四年的专业知识的学习已经储备了比较充足的相关方面知识;另一方面,即将走向社会,创新设计给了我们一个机会来使我们将所学知识应用到实践。
虽然我们通过DSP课程对DSP有了基本的框架认识,但对如何在实践中运用DSP进行实际问题的解决还缺乏能力。本次创新设计,使我对DSP有更深的理解与认识。在做本次创新设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的。
22
展开阅读全文