基于DSP在电子技术上的应用.docx

上传人:b****4 文档编号:5547585 上传时间:2023-05-08 格式:DOCX 页数:23 大小:204.45KB
下载 相关 举报
基于DSP在电子技术上的应用.docx_第1页
第1页 / 共23页
基于DSP在电子技术上的应用.docx_第2页
第2页 / 共23页
基于DSP在电子技术上的应用.docx_第3页
第3页 / 共23页
基于DSP在电子技术上的应用.docx_第4页
第4页 / 共23页
基于DSP在电子技术上的应用.docx_第5页
第5页 / 共23页
基于DSP在电子技术上的应用.docx_第6页
第6页 / 共23页
基于DSP在电子技术上的应用.docx_第7页
第7页 / 共23页
基于DSP在电子技术上的应用.docx_第8页
第8页 / 共23页
基于DSP在电子技术上的应用.docx_第9页
第9页 / 共23页
基于DSP在电子技术上的应用.docx_第10页
第10页 / 共23页
基于DSP在电子技术上的应用.docx_第11页
第11页 / 共23页
基于DSP在电子技术上的应用.docx_第12页
第12页 / 共23页
基于DSP在电子技术上的应用.docx_第13页
第13页 / 共23页
基于DSP在电子技术上的应用.docx_第14页
第14页 / 共23页
基于DSP在电子技术上的应用.docx_第15页
第15页 / 共23页
基于DSP在电子技术上的应用.docx_第16页
第16页 / 共23页
基于DSP在电子技术上的应用.docx_第17页
第17页 / 共23页
基于DSP在电子技术上的应用.docx_第18页
第18页 / 共23页
基于DSP在电子技术上的应用.docx_第19页
第19页 / 共23页
基于DSP在电子技术上的应用.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于DSP在电子技术上的应用.docx

《基于DSP在电子技术上的应用.docx》由会员分享,可在线阅读,更多相关《基于DSP在电子技术上的应用.docx(23页珍藏版)》请在冰点文库上搜索。

基于DSP在电子技术上的应用.docx

基于DSP在电子技术上的应用

基于DSP在电子技术上的应用

 

第一章绪论

1.1系统背景

1.1.1DSP技术的特点以及在电子技术中的应用

  DSP一方面是DigitalSignalProcessing的缩写,意思是数字信号处理,就是指数字信号理论研究。

DSP另一方面是DigitalSignalProcessor,意思是数字信号处理器,就是用来完成数字信号处理的器件。

最初的DSP器件只是被设计成用以完成复杂数字信号处理的算法。

DSP器件紧随着数字信号理论的发展而不断发展。

在20世纪60年代,数字信号处理技术才刚刚起步。

60年代中期以后,快速傅里叶算法的出现及大规模集成电路的发展大大促进了DSP技术与器件的飞速发展。

(一)DSP器件的特点

1.高速、高精度运算能力

(1)硬件乘法累加操作,在一个指令周期内可完成一次乘法和一次加法。

(2)哈弗结构和流水线结构。

哈佛结构的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。

与两个存储器相对应的是系统中设置了程序总线和数据总线,从而使数据的吞吐率提高了一倍。

由于程序和存储器在两个分开的空间中,因此取指和执行能完全重叠。

流水线与哈佛结构相关,DSP芯片广泛采用流水线以减少指令执行的时间,从而增强了处理器的处理能力。

使取指、译码和执行等操作可以重叠执行,处理器可以并行处理二到四条指令,每条指令处于流水线的不同阶段。

(3)硬件循环控制。

大多数的DSP都有专门的硬件,用于零开销循环。

所谓零开销循环是指处理器在执行循环时,不用花时间去检查循环计数器的值、条件转移到循环的顶部、将循环计数器减1。

(4)特殊的寻址模式。

DSP处理器往往都支持专门的寻址模式,它们对通常的信号处理操作和算法是很有用的。

例如,模块(循环)寻址(对实现数字滤波器延时线很有用)、位倒序寻址(对FFT很有用)。

(5)具有丰富的外设。

DSP具有DMA(有一组或多组独立的DMA总线,与CPU的程序、数据总线并行工作,在不影响CPU工作的条件下,DMA速度已达800Mbyte/s以上)、串口、定时器等外设。

2.强大的数据通信能力。

3.灵活的可编程性。

DSP骗内设置RAM和ROM,可以方便地拓展程序、数据及I/O空间,同时允许ROM和RAM直接数据传送。

可编程DSP芯片可使设计人员在开发过程中灵活方便地对软件进行修改和升级

4.低功耗设计。

DSP可以工作在省电状态,节省了能源。

(二)DSP器件的应用

自从DSP芯片诞生以来,DSP芯片得到了飞速的发展。

DSP芯片高速发展,一方面得益于集成电路的发展,另一方面也得益于巨大的市场。

在短短的十多年时间,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。

目前,DSP芯片的价格也越来越低,性能价格比日益提高,具有巨大的应用潜力。

DSP芯片的应用主要有:

(1)信号处理--如,数字滤波、自适应滤波、快速傅里叶变换、相关运算、频谱分析、卷积等。

(2)通信--如,调制解调器、自适应均衡、数据加密、数据压缩、回坡抵消、多路复用、传真、扩频通信、纠错编码、波形产生等。

(3)语音--如语音编码、语音合成、语音识别、语音增强、说话人辨认、说话人确认、语音邮件、语音储存等。

(4)图像/图形--如二维和三维图形处理、图像压缩与传输、图像增强、动画、机器人视觉等。

(5)军事--如保密通信、雷达处理、声纳处理、导航等。

(6)仪器仪表--如频谱分析、函数发生、锁相环、地震处理等。

(7)自动控制--如引擎控制、深空、自动驾驶、机器人控制、磁盘控制。

(8)医疗--如助听、超声设备、诊断工具、病人监护等。

(9)家用电器--如高保真音响、音乐合成、音调控制、玩具与游戏、数字电话/电视等

1.1.2本课程设计任务及要求

一、任务:

编程实现在现有实验箱上整合步进电机、直流电机、交通灯等实验项目。

1、三个实验可以通过键盘进行模式选择来切换(1步进电机控制,2直流电机控制,3交通灯控制,4三个实验同时进行),并在LED左数第一位上显示模式。

2、步进电机和直流电机的正反转、加减速在键盘上进行控制,并在LED上显示步进电机和直流电机的运行状态。

3、交通灯控制时应在LED上显示时间的变化。

交通灯东西、南北的时间可通过键盘设定。

4、三个实验同时进行时只显示模式,各实验的参数都可通过键盘设置。

二、要求:

1、上交不少于3000字的设计报告。

报告内容包括:

设计任务、设计要求、设计思路、采取的算法、设计过程、中间结果(调试时编译的结果截图)、设计结果(实现了哪些功能)、设计总结达到了哪些目标、存在哪些问题、对存在的问题进行分析、提出改进设想、参考文献等内容。

2、报告最后附录源代码。

第二章系统电路

2.1直流电机

2.1.1直流电机与DSP的接线用到了16位的地址线(0b007)和16位的数据线,通过向该地址写数据来控制直流电机,如图2.1.1

图2.1.1DSP控制直流电机的接线图

2.1.2直流电机是通过送PWM脉冲来调速的,如图2.1.2所示PWM脉冲的周期不变,高电平的时间长则直流电机加速,低电平的时间长则直流电机减速(动摩擦力)。

图2.1.2直流电机的调速原理

2.1.3直流电机的正反转控制是通过如下电路实现的:

其中T1,T3三极管由B控制,T2,T4三极管由A控制。

控制方式如下:

控制原理如下:

图2.1.3直流电机正反转控制原理

 

2.2交通灯

2.2.1交通灯在每个方向上都有红绿灯。

其中相对方向上的相同颜色的灯通过同一条线控制。

A0~A15控制译码器使能端,D0~D15输出控制的数据,如图2.2.1所示

图2,2,1交通灯电路原理图

第三章 系统软件设计

3.1软件设计流程图

3.1.1主程序流程图

上面主要是主程序的流程图,程序初始化后,通过键盘上1,2,3,4键的外部中断选择哪一种进入模式,主要有五种模式:

模式一,步进电机控制

模式二,直流电机控制

模式三,交通灯控制

模式四,综合模式(三种同时进行)

模式五,交通灯东西南北红灯时间控制

进入某种模式的同时,还通过LED显示函数(本设计中是voidLED_display_6函数和voidLED_display_1函数),其中模式一到模式四是通过第一个数码管显示,进入调时状态和交通灯时间是通过第三,四,五,六个数码管显示。

3.1.2中断服务程序框图

由上图我们可以看出,本设计主要采用两个中断,INT2外部中断和INT0定时器中断。

其中INT2主要是用于按键控制模式的选择,电机的加减速转向,交通灯时间的设置,采用定时器中断是便于时间的控制,DSP定时中断的周期T=(PRD+1)X(TDDR+1)XCLKOUT,由本设计中TDDR=1001,PRD=6ffff,晶振为16M可以算出周期大约为18ms,因此55个周期大约为1秒,由于本课题对于时间的精确度没有太大的要求,因此采取50个周期为一个时间单位。

3.1.3交通灯程序框图

3.1.4步进电机程序框图

3.1.5直流电机程序图

3.2系统程序设计

3.2.1主程序

/*******main_func.c****/

#include"reg_define.h"

#include"system_init.h"/*通过system_init();调用*/

#include"IOport_init.h"/*包含后可直接使用所定义的IO端口*/

#include"Timer0_init.h"/*通过Timer0_init(unsignedintTmer0_VAL);调用*/

#include"Timer1_init.h"/*通过Timer1_init(unsignedintTmer0_VAL);调用*/

#include"Interrupt_server.h"/*包含后可直接到所对应的中断服务程序中编中断服务程序*/

#include"LED_display_6.h"/*通过LED_display_6(unsignedint显示数据);调用*/

#include"LED_display_1.h"

#include"traffic.h"

#include

intdx_red=30,nb_red=30;

unsignedintBJ_code[]={0x07,0x0b,0x0d,0x0e};

unsignedintbjcode,dj_code;

unsignedcharSTATE=1;

unsignedcharINT2_Flag=0;

#definedtime1000;

voiddelay(unsignedintd_t);

voidKeyprocess(void);

voidBj_keyprocess(void);

voidDj_keyprocess(void);

voidJT_keyprocess(void);

voidTS_keyprocess(void);

voidSet_time(void);

voidtraffic_LED_display(void);

main()

{

system_init();

Timer0_init(0x6fff);/*Tmer0_VAL为TINT0的定时时间常数16.4ms*/

//Timer1_init(0x0ffff);/*Tmer0_VAL为TINT1的定时时间常数*/

while

(1)

{

if(INT2_Flag==1)

{

Keyprocess();

INT2_Flag=0;

}

switch(STATE)

{

case1:

BJ_ADDR=BJ_code[bjcode];delay(100);break;/*不加会不转delay(100);*/

case2:

DJ_ADDR=dj_code;break;

case3:

traffic();traffic_LED_display();break;

case4:

DJ_ADDR=dj_code;BJ_ADDR=BJ_code[bjcode];delay(100);traffic();break;

default:

break;

}

if(STATE==5)

{

LED_display_6(set_time_ew_red/50*100+set_time_sn_red/50);

}

LED_display_1(STATE);

delay(10);

}

}

voidKeyprocess()

{

switch(STATE)

{

case1:

Bj_keyprocess();break;

case2:

Dj_keyprocess();break;

case3:

JT_keyprocess();break;

case4:

ZH_keyprocess();break;

case5:

Set_time();break;

default:

break;

}

}

voidBj_keyprocess()

{

switch(key_code)

{

case1:

STATE=1;break;

case2:

STATE=2;break;

case3:

STATE=3;break;

case4:

STATE=4;break;

case5:

bj_derect=0;break;/*正转0*/

case6:

bj_derect=1;break;/*反转1*/

case7:

if(bj_speed>=3)bj_speed--;break;/*加速2*/

case8:

if(bj_speed<=50)bj_speed++;break;/*减速3*/

default:

break;

}

}

voidDj_keyprocess()

{

switch(key_code)

{

case1:

STATE=1;break;

case2:

STATE=2;break;

case3:

STATE=3;break;

case4:

STATE=4;break;

case5:

dj_derect=0;break;/*正转0*/

case6:

dj_derect=1;break;/*反转1*/

case7:

if(dj_speed

case8:

if(dj_speed>=1)dj_speed--;break;/*减速3*/

default:

break;

}

}

voidJT_keyprocess()

{

switch(key_code)

{

case1:

STATE=1;break;

case2:

STATE=2;break;

case3:

STATE=3;break;

case4:

STATE=4;break;

case9:

STATE=5;break;

default:

break;

}

}

voidZH_keyprocess()

{

switch(key_code)

{

case1:

STATE=1;break;

case2:

STATE=2;break;

case3:

STATE=3;break;

case4:

STATE=4;break;

case5:

bj_derect=0;break;

case6:

bj_derect=1;break;

case7:

if(bj_speed>=3)bj_speed--;break;

case8:

if(bj_speed<=50)bj_speed++;break;

case9:

STATE=5;break;

case11:

dj_derect=0;break;

case12:

dj_derect=1;break;

case13:

if(dj_speed

case14:

if(dj_speed>=1)dj_speed--;break;

default:

break;

}

}

voidSet_time(void)

{

switch(key_code)

{

case5:

set_time_ew_red+=50;break;

case6:

set_time_ew_red-=50;break;

case7:

set_time_sn_red+=50;break;

case8:

set_time_sn_red-=50;break;

case10:

STATE=4;break;

default:

break;

}

if(set_time_ew_red>4950)

set_time_ew_red=4950;

if(set_time_ew_red<0)

set_time_ew_red=0;

if(set_time_sn_red>4950)

set_time_sn_red=4950;

if(set_time_sn_red<0)

set_time_sn_red=0;

}

voidtraffic_LED_display()

{

if(t_traffic

LED_display_6((set_time_ew_red-t_traffic)/50*100);

if(t_traffic>=set_time_ew_red&&t_traffic

LED_display_6((set_time_ew_red+500-t_traffic)/50*100);

if(t_traffic>=set_time_ew_red+500&&t_traffic

LED_display_6((set_time_ew_red+500+set_time_sn_red-t_traffic)/50);

if(t_traffic>=set_time_ew_red+500+set_time_sn_red&&t_traffic

LED_display_6((set_time_ew_red+500+set_time_sn_red+500-t_traffic)/50);

}

3.2.2中断子程序

1,定时器Timer0中断服务子程序

/***TINT0中断服务程序***/

interruptvoidTINT0_ISR()

{

asm("NOP");

asm("NOP");

t0_bj++;

t0_dj++;

t_traffic++;

/**BJ_Control**/

if(t0_bj>=bj_speed)

{

t0_bj=0;

t1_bj++;

bjcode=t1_bj%4;

if(bj_derect)bjcode=3-bjcode;

}

/**DJ_Control**/

if(t0_dj

{

dj_code=positive;

if(dj_derect)dj_code=negative;

}

if(t0_dj>=dj_speed&&t0_dj

if(t0_dj>=dj_period)t0_dj=0;

/**JT_Control**/

return;

}

2,INT2按键中断服务子程序

/***INT2中断服务程序***/

interruptvoidINT2_ISR()

{

asm("NOP");

asm("NOP");

key_code=KEY_ADDR;

key_code&=0x001f;

key_code=key_code-1;/*为了键盘上的数字与数码管显示的一一对应*/

INT2_Flag=1;

return;

}

3.2.3交通灯控制程序

交通灯控制函数:

/*******traffic.h*******/

unsignedintt_traffic;

externintset_time_ew_red,set_time_sn_red;

externvoiddelay(unsignedintd_t);

voidtraffic()

{if(t_traffic

{traffic_ADDR=0x5a00;/*东西红,南北绿*/

delay(50);

}

if(t_traffic>=set_time_ew_red&&t_traffic

{traffic_ADDR=0x5000;/*南北闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+50&&t_traffic

{traffic_ADDR=0x5a00;/*南北闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+100&&t_traffic

{traffic_ADDR=0x5000;/*南北闪烁*/

delay(50);

}

if(set_time_ew_red+150&&set_time_ew_red+200)

{traffic_ADDR=0x5a00;/*南北闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+200&&set_time_ew_red+250)

{traffic_ADDR=0x5000;/*南北闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+250&&t_traffic

{traffic_ADDR=0x0fa00;/*南北黄灯*/

delay(50);

}

if(t_traffic>=set_time_ew_red+500&&t_traffic

{traffic_ADDR=0xa500;/*东西绿,南北红*/

delay(50);

}

if(t_traffic>=set_time_ew_red+500+set_time_sn_red&&

t_traffic

{traffic_ADDR=0xa000;/*东西闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+500+set_time_sn_red+50&&

t_traffic

{traffic_ADDR=0xa500;/*东西闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+500+set_time_sn_red+100&&

t_traffic

{traffic_ADDR=0xa000;/*东西闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+500+set_time_sn_red+150&&

t_traffic

{traffic_ADDR=0xa500;/*东西闪烁*/

delay(50);

}

if(t_traffic>=set_time_ew_red+500+set_time_sn_red+200&&

t_traffic

{traffic_ADDR=0xa000;

delay(50);

}

if(t_traffic>=set_time_ew_red+50

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2