DSP课程设计报告讲解

合集下载

数字信号处理DSP 课程设计报告

数字信号处理DSP 课程设计报告

语音信号滤波去噪——使用脉冲响应不变法设计的巴特沃斯滤波摘要本课程设计主要运用麦克风采集一段语音信号,绘制波形并观察其频谱,给定相应技术指标,用脉冲响应不变法设计的一个满足指标的巴特沃斯IIR滤波器,对该语音信号进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析,根据结果和学过的理论得出合理的结论。

关键词课程设计;滤波去噪;巴特沃斯滤波器;脉冲响应不变法;MATLAB1.课程设计目的和要求1.1 课程设计目的《数字信号处理》课程设计是在学生完成数字信号处理和MATLAB的结合后的基本实验以后开设的。

本课程设计的目的是为了让学生综合数字信号处理和MATLAB并实现一个较为完整的小型滤波系统。

这一点与验证性的基本实验有本质性的区别。

开设课程设计环节的主要目的是通过系统设计、软件仿真、程序安排与调试、写实习报告等步骤,使学生初步掌握工程设计的具体步骤和方法,提高分析问题和解决问题的能力,提高实际应用水平。

1.2课程设计的要求(1)滤波器指标必须符合工程设计。

(2)设计完后应检查其频率响应曲线是否满足指标。

(3)处理结果和分析结论应该一致,而且应符合理论。

(4)独立完成课程设计并按要求编写课程设计报告。

2 .设计原理用麦克风采集一段语音信号,绘制波形并观察其频谱,给定相应技术指标,用脉冲响应不变法设计的一个满足指标的巴特沃斯IIR 滤波器,对该语音信号进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析。

2.1 IIR 滤波器从离散时间来看,若系统的单位抽样(冲激)响应延伸到无穷长,称之为“无限长单位冲激响应系统”,简称为IIR 系统。

无限长单位冲激响应(IIR )滤波器有以下几个特点:(1)系统的单位冲激响应h(n)是无限长; (2)系统函数H(z)在有限z 平面(0<z <∞); (3) 结构上存在着输出到输入的反馈,也就是结构上是递归型的。

IIR 滤波器采用递归型结构,即结构上带有反馈环路。

DSP课程设计(课题二fft的频谱分析仪)报告

DSP课程设计(课题二fft的频谱分析仪)报告

DSP课程设计报告课题:基于FFT的频谱分析仪设计班级:电子信息工程0901班小组成员:陈湛国200930410103谢海200930410124 指导老师:徐梅宣华南农业大学珠江学院信息工程系一、设计原理(1)实现输入数据的比特反转输入数据的比特反转实际上就是将输入数据进行位码倒置,以便在整个运算后的输出序列是一个自然序列。

在用汇编指令进行位码倒置时,使用位马导致寻址可以大大提高程序执行速度和使用存储器的效率。

在这种寻址方式下,AR0存放的整数N是FFT点的一半,一个辅助寄存器指向一个数据存放的单元。

当使用位码倒置寻址将AR0加到辅助寄存器时,地址将以位码倒置的方式产生。

(2)实现N点复数FFTN点复数FFT算法的实现可分为三个功能块,及第一级蝶形运算、第二级蝶形运算、第三级至log2N级蝶形运算。

在运算过程中,为了避免运算结果的溢出,可对每个蝶形的运算结果右移一位。

(3)功率谱的计算计算功率谱时只需将FFT变换好的数据,按照实部X R(k)和虚部X I(k)求它们的平方和,然后对平方和进行开平方运算。

(4)输出FFT结果二、操作步骤1、运行软件打开Setup CCStudio v3.3,在Family中选择C54XX,Platform中选择simulator,此时在My System中出现C54xx Rev.x CPU Cycle Accurate Simulator,点击,然后再点击“Save&Quit”,此时有窗口“Code Composer Studio Setup”出现,点击“Yes”,然后进入CCStudio:Parallel Debug Manager,在“Open”选项中选择“C54xx Rev.x CPU Cycle Accurate Simulator”,则进入设计的操作界面。

2、载入程序代码,编译并执行首先,点击“Project”,建立新文件;然后点击“File”,建立源文件,后缀名分别为“.C”、“.cmd”;其次,把编好的FFT程序放入“.C”文件中,命令文件也编入“.cmd”中;再次,加载文件“.C”及“.cmd”文件;接着点击“Project”中的“Rebuild Aall”,无错误出现,则继续操作;点击“File”中的“Load Program”,把后缀为“.out”的文件加载进来;然后点击“Run”,最后,点击“View”,“Graph”,进入“time/Frequency”,修改设置后,点击“ok”,则出现图像。

dsp综合设计课程设计报告

dsp综合设计课程设计报告

dsp综合设计课程设计报告一、教学目标本课程的教学目标是使学生掌握DSP(数字信号处理器)综合设计的基本理论和实践技能。

通过本课程的学习,学生应能够:1.知识目标:理解DSP的基本概念、原理和应用;熟悉DSP芯片的内部结构和编程方法;掌握DSP算法的设计和实现。

2.技能目标:能够使用DSP芯片进行数字信号处理的设计和实现;具备DSP程序的编写和调试能力;能够进行DSP系统的故障诊断和优化。

3.情感态度价值观目标:培养学生对DSP技术的兴趣和热情,提高学生的问题解决能力和创新意识,使学生认识到DSP技术在现代社会中的重要性和应用价值。

二、教学内容本课程的教学内容主要包括DSP的基本理论、DSP芯片的内部结构和工作原理、DSP程序的设计和调试方法、DSP应用系统的设计和实现等。

具体包括以下几个部分:1.DSP的基本概念和原理:数字信号处理的基本概念、算法和特点;DSP芯片的分类和特点。

2.DSP芯片的内部结构:了解DSP芯片的内部结构和工作原理,包括CPU、内存、接口、外设等部分。

3.DSP程序的设计和调试:学习DSP程序的设计方法,包括算法描述、程序编写和调试技巧。

4.DSP应用系统的设计和实现:掌握DSP应用系统的设计方法,包括系统架构、硬件选型、软件开发和系统测试等。

三、教学方法为了实现本课程的教学目标,我们将采用多种教学方法,包括讲授法、案例分析法、实验法等。

具体方法如下:1.讲授法:通过教师的讲解,使学生掌握DSP的基本理论和原理,引导学生理解DSP技术的核心概念。

2.案例分析法:通过分析具体的DSP应用案例,使学生了解DSP技术的实际应用,培养学生的实际操作能力。

3.实验法:通过实验操作,使学生熟悉DSP芯片的使用方法和编程技巧,提高学生的实践能力。

四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择一本合适的教材,作为学生学习的基础资料,提供系统的DSP知识。

DSP课程设计报告_5

DSP课程设计报告_5

DSP原理与应用课程设计报告书2012-2013 学年第II 学期学院:专业:学生姓名:学号:课程设计题目: TMS320LF2407A最小系统的设计起迄日期: 2 月28 日~ 3 月18 日课程设计地点: DSP实验室指导教师:系主任:一、设计目的随着科学技术的不断进步�整个国家自动化水平和信息化水平的长足发展,社会对电气信息类人才的需求日益迫切,要求也更加严格。

可编程DSP芯片是一种特别适合进行数字信号处理的微处理器,它的应用已越来越广泛。

本设计通过对TMS320F2407A芯片的学习,制作出了一个完整的最小系统实验板的原理图,加深对该芯片最小系统电路的了解,学习该芯片的基本外设及其功能。

使学生基本上掌握DSP的特点和开发应用技巧,通过具体的电路设计和调试,领会DSP系统的设计要领。

培养将DSP应用到工程实践的能力。

二、设计任务题目:设计出TMS320S2407A芯片的最小电路原理图,并设计出其PCB图,最后通过一个简单的软件程序进行对设计的最小电路图的验证。

具体包括:方案:1、硬件电路设计,包括TMS320LF2407A基本电路、电源电路、晶振、扩展RAM和指示灯,需要用Altium_Designer_10下载及安装破解软件完成原理图和PCB的设计。

2、软件设计,主要指编写该设计电路的验证程序,在实验箱上运行调试。

3、课程设计报告,包括总体设计方案、硬件电路设计和软件设计的具体说明。

三、硬件电路基本思想如图示1、时钟复位电路TMS320F2407A内部带有复位电路,因此可以直接在RS复位引脚外面连接上一个上拉电阻即可,这对于简化外围电路,减少电路板尺寸是很有用处的。

但是为了调试方便经常采用如图所示的专用芯片MAX811手动复位电路,当调试的时候可以很方便地进行手动复位。

MAX811主要用于处理器电源电压监视,在上电和电压超限时产生复位信号,并具有手动复位功能,且功耗低,适合应用在手持设备和电池供电的设备中。

dsp课程设计实验报告

dsp课程设计实验报告

DSP课程设计实验语音信号的频谱分析:要求首先画出语音信号的时域波形, 然后对语音信号进行频谱分析。

在MATLAB中, 可以利用函数fft对信号进行快速傅立叶变换, 得到信号的频谱特性, 从而加深对频谱特性的理解。

其程序为:>> [y,fs,bits]=wavread('I:\xp.wav',[1024 5120]);>> sound(y,fs,bits);>> Y=fft(y,4096);>> subplot(221);plot(y);title('原始信号波形');>> subplot(212);plot(abs(Y));title('原始信号频谱');程序运行结果为:设计数字滤波器和画出频率响应:根据语音信号的特点给出有关滤波器的性能指标:低通滤波器性能指标, =1000Hz, =1200Hz, =100dB, =1dB;高通滤波器性能指标, =4800Hz, =5000Hz, =100dB, =1dB;带通滤波器性能指标, =1200Hz, =3000Hz, =1000Hz, =3200Hz, =100dB, =1dB;要求学生首先用窗函数法设计上面要求的三种滤波器, 在MATLAB中, 可以利用函数firl 设计FIR滤波器;然后再用双线性变换法设计上面要求的三种滤波器, 在MA TLAB中, 可以利用函数butte、cheby1和ellip设计IIR滤波器;最后, 利用MATLAB中的函数freqz画出各种滤波器的频率响应, 这里以低通滤波器为例来说明设计过程。

低通:用窗函数法设计的低通滤波器的程序如下:>> fp=1000;fc=1200;As=100;Ap=1;fs=22050;>> wc=2*fc/fs;wp=2*fp/fs;>> N=ceil((As-7.95)/(14.36*(wc-wp)/2))+1;>> beta=0.1102*(As-8.7);>> Win=Kaiser(N+1,beta);>>b=firl(N,wc,Win);>>freqz(b,1,512,fs);程序运行结果:这里选用凯泽窗设计, 滤波器的幅度和相位响应满足设计指标, 但滤波器长度(N=708)太长, 实现起来很困难, 主要原因是滤波器指标太苛刻, 因此, 一般不用窗函数法设计这种类型的滤波器。

DSP课程设计报告之混响

DSP课程设计报告之混响

DSP课程设计报告之混响一、课程目标知识目标:1. 学生能理解混响的概念,掌握混响的物理原理和数学模型。

2. 学生能描述混响在数字信号处理(DSP)中的应用,如音乐制作、声音效果增强等。

3. 学生能解释混响参数对声音效果的影响,如混响时间、湿度、大小等。

技能目标:1. 学生能运用所学知识,使用DSP软件(如Audacity、MATLAB等)进行混响效果的实现和调整。

2. 学生能通过实验和案例分析,分析混响在音频处理中的实际应用,提高解决问题的能力。

情感态度价值观目标:1. 学生通过混响的学习,培养对声音美学的认识和鉴赏能力,提高对音乐和声音艺术的兴趣。

2. 学生在学习过程中,培养合作意识,学会倾听他人意见,提高团队协作能力。

3. 学生通过了解混响在生活中的应用,认识到科技与生活的紧密联系,增强学以致用的意识。

课程性质:本课程为高年级选修课程,以理论讲解和实践操作相结合的方式进行。

学生特点:学生具备一定的数字信号处理基础,对声音处理有一定了解,具有较强的学习能力和动手能力。

教学要求:注重理论与实践相结合,通过案例分析和实验操作,使学生掌握混响的相关知识,提高实际应用能力。

同时,关注学生的情感态度培养,激发学生的学习兴趣和团队合作意识。

在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 理论部分:- 混响的定义与分类:介绍混响的基本概念,包括自然混响和人工混响,以及混响的类别。

- 混响的物理原理:讲解声音在空间中的传播、反射、吸收等原理,分析影响混响效果的因素。

- 混响的数学模型:介绍混响的常见数学模型,如卷积模型、参数模型等,并分析其优缺点。

2. 实践部分:- 混响效果器的使用:结合教材,教授学生如何使用Audacity、MATLAB等软件中的混响效果器。

- 混响参数调整:指导学生通过调整混响时间、湿度、大小等参数,实现不同混响效果。

- 实践案例:分析实际案例,如音乐作品中的混响处理,使学生更好地理解混响在音频处理中的应用。

基于dsp课程设计报告

基于dsp课程设计报告

基于dsp课程设计报告一、教学目标本课程的教学目标分为三个维度:知识目标、技能目标和情感态度价值观目标。

1.知识目标:通过本课程的学习,学生需要掌握DSP(数字信号处理器)的基本概念、原理和应用。

具体包括:了解DSP的发展历程和分类;理解DSP的基本结构和主要性能指标;掌握DSP的编程方法和应用领域。

2.技能目标:培养学生具备使用DSP进行数字信号处理的能力。

具体包括:学会使用DSP开发环境和工具;掌握DSP编程语言和算法;能够独立完成DSP项目的开发和调试。

3.情感态度价值观目标:激发学生对DSP技术的兴趣和好奇心,培养学生的创新意识和团队合作精神。

使学生认识到DSP技术在现代社会中的重要性和广泛应用,树立正确的技术观和价值观。

二、教学内容本课程的教学内容分为五个部分:DSP基础知识、DSP原理与结构、DSP编程方法、DSP应用案例和DSP项目实践。

1.DSP基础知识:介绍DSP的发展历程、分类和主要性能指标。

2.DSP原理与结构:讲解DSP的基本原理、结构和主要组成部分,如运算器、存储器、输入输出接口等。

3.DSP编程方法:学习DSP编程语言、算法和开发环境,掌握基本的编程技巧。

4.DSP应用案例:分析典型的DSP应用场景,如音频处理、图像处理、通信系统等。

5.DSP项目实践:分组进行项目实践,培养学生独立完成DSP项目的能力。

三、教学方法本课程采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等,以激发学生的学习兴趣和主动性。

1.讲授法:用于传授基本知识和理论,引导学生掌握DSP的基本概念和原理。

2.讨论法:鼓励学生针对案例进行分析讨论,培养学生的思考能力和团队协作精神。

3.案例分析法:通过分析实际应用案例,使学生更好地理解DSP技术的应用和价值。

4.实验法:让学生动手进行实验,培养实际操作能力和创新思维。

四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。

1.教材:选用权威、实用的教材,如《数字信号处理器原理与应用》等。

dsp交通等课程设计报告

dsp交通等课程设计报告

dsp交通等课程设计报告一、课程目标知识目标:1. 让学生理解交通信号灯的基本原理,掌握数字信号处理(DSP)技术在交通控制中的应用。

2. 使学生掌握交通流量的基本概念,学会分析交通数据,并运用DSP技术进行优化处理。

3. 帮助学生了解我国交通法规及交通信号控制的相关知识。

技能目标:1. 培养学生运用DSP技术进行交通信号灯控制程序编写的能力。

2. 培养学生运用数据分析方法,对交通流量进行有效监控和优化调整的能力。

3. 提高学生的实践操作能力,学会使用相关软件和硬件进行交通信号控制系统的设计和调试。

情感态度价值观目标:1. 培养学生关注社会交通问题,树立解决实际问题的责任感和使命感。

2. 激发学生对数字信号处理技术的兴趣,提高学生主动学习的积极性。

3. 培养学生的团队协作意识,学会与他人共同探讨、解决问题。

本课程针对年级特点,结合实际交通问题,以数字信号处理技术为载体,旨在提高学生的理论知识水平、实践操作能力以及解决实际问题的能力。

课程目标具体、可衡量,为后续教学设计和评估提供明确方向。

二、教学内容本章节教学内容主要包括以下三个方面:1. 交通信号灯原理及DSP技术基础- 教材章节:第一章 交通信号灯原理;第二章 DSP技术概述- 内容安排:介绍交通信号灯的基本原理、功能及分类;讲解DSP技术的基本概念、发展历程及其在交通控制领域的应用。

2. 交通流量分析及DSP技术应用- 教材章节:第三章 交通流量分析;第四章 DSP技术在交通控制中的应用- 内容安排:分析交通流量的基本特性,讲解数据采集、处理和优化方法;探讨DSP技术在交通信号控制、拥堵缓解等方面的应用实例。

3. 交通信号控制系统设计与实践- 教材章节:第五章 交通信号控制系统设计;第六章 实践操作- 内容安排:介绍交通信号控制系统的设计原理、硬件和软件选型;指导学生进行交通信号控制程序编写,开展实践操作,培养实际动手能力。

教学内容安排和进度:本章节共计12课时,分配如下:- 第1-4课时:交通信号灯原理及DSP技术基础- 第5-8课时:交通流量分析及DSP技术应用- 第9-12课时:交通信号控制系统设计与实践教学内容具有科学性和系统性,结合教材章节和实际案例,旨在帮助学生掌握交通信号控制相关知识,提高实践操作能力。

dsp课程设计报告方波

dsp课程设计报告方波

dsp课程设计报告方波一、教学目标本课程的教学目标是使学生掌握方波信号的性质、产生方法和应用,能够运用数字信号处理理论分析和设计方波信号处理电路,培养学生的理论联系实际的能力和创新意识。

具体分解为以下三个目标:1.知识目标:(1)掌握方波信号的定义、特点和分类。

(2)了解方波信号产生的方法,能够运用相关算法生成方波信号。

(3)熟悉方波信号在数字信号处理中的应用领域,如通信、雷达、音频处理等。

2.技能目标:(1)能够运用数学方法分析方波信号的波形、频率、幅值等参数。

(2)掌握至少一种编程语言,能够实现方波信号的生成和处理算法。

(3)具备一定的实验操作能力,能够通过实验验证方波信号处理的理论。

3.情感态度价值观目标:(1)培养学生对数字信号处理的兴趣,增强学习的主动性。

(2)培养学生团队合作精神,提高沟通与协作能力。

(3)培养学生关注国家发展战略,认识数字信号处理在科技前沿和国家经济建设中的重要地位。

二、教学内容本课程的教学内容主要包括以下几个部分:1.方波信号的基本概念:介绍方波信号的定义、特点和分类,使学生了解方波信号在数字信号处理中的重要性。

2.方波信号的产生方法:讲解方波信号产生的原理,介绍常见的方波信号生成算法,如查表法、计数器法等。

3.方波信号的处理方法:分析方波信号的处理方法,如滤波、采样、量化等,使学生掌握方波信号处理的基本技巧。

4.方波信号处理的应用:介绍方波信号在通信、雷达、音频处理等领域的应用,提高学生的实践能力。

5.实验与实践:安排一定数量的实验,使学生在实践中掌握方波信号处理的理论,培养学生的动手能力。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解方波信号的基本概念、产生方法、处理方法和应用,引导学生掌握课程的核心知识。

2.讨论法:学生分组讨论方波信号处理的问题,培养学生的思考能力和团队合作精神。

3.案例分析法:分析实际案例,使学生了解方波信号处理在实际工程中的应用,提高学生的实践能力。

DSP课程设计报告

DSP课程设计报告

数据采集处理和控制系统设计一课程设计要求1.基本DSP硬件系统设计要求①基本DSP硬件系统以TMS320C54x系列为核心处理器,包括最小系统、存储器扩展、显示器、键盘、AD、DA等电路模块;②硬件设计画出主要芯片及电路模块之间的连接即可,重点考查电路模块方案设计与系统地址分配;③设计方案以电路示意图为主,辅以必要的文字说明。

2.基本软件设计要求①看懂所给例程,画出例程输出波形示意图;②修改例程程序,使之输出其它波形,如方波、三角波、锯齿波等均可;③设计方案以程序实现为主,辅以必要的文字说明。

3.课程设计报告要求①硬件系统设计:设计思路、设计系统功能、主要芯片选型及使用方法、设计方案说明、电路示意图②软件系统设计:示例程序功能解读及输出波形示意图、设计软件功能、设计思路、实现源码(带程序注释)③报告总结二系统分析利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号的叠加。

在DSP 中采集信号,并且对信号进行频谱分析,滤波等。

通过键盘或者串口命令选择算法的功能,将计算的信号频率或者滤波后信号的频率在LCD 上显示。

主要功能如下:(1)对外部输入的模拟信号采集到DSP 内存,会用CCS 软件显示采集的数据波形。

(2)对采集的数据进行如下算法分析:①频谱分析:使用fft 算法计算信号的频率。

②对信号进行IIR 滤波或FIR 滤波,并且计算滤波前后信号的频率。

③外部键盘或者从计算机来的串口命令选择算法功能,并且将结果在LCD 上显示。

绘制出DSP系统的功能框图、使用AD(Altium Designer)绘制出系统的原理图和PCB 版图。

在 DSP 中采集信号,用CCS 软件显示采集的数据波形,以及对采集的数据进行算法分析。

三硬件设计硬件总体结构CLKSTMS32054X11CONTROL1MX16BIT FLASH2016D[15..0]A[19..0]XDS510 JTAGRESETPower(73HD3XX)16WEOECE 复位电路DSP模块设计电源模块设计将5V电源电压转换为和电源时钟模块设计此处由外部晶振提供时钟信号存储器模块设计DSP上只有一个读写控制信号引脚,而FLASH有两个引脚,将读、写分开,故在OE上接一个非门电路,实现高时读,低时写。

dsp课程设计报告绪论

dsp课程设计报告绪论

dsp课程设计报告绪论一、教学目标本课程的教学目标是使学生掌握数字信号处理的基本理论、方法和应用,培养学生运用数字信号处理技术解决实际问题的能力。

具体分为以下三个层面:1.知识目标:学生需要掌握数字信号处理的基本概念、理论体系和常用算法,包括离散时间信号处理、离散傅里叶变换、快速傅里叶变换、数字滤波器设计等。

2.技能目标:学生能够运用数字信号处理理论分析和解决实际问题,具备使用相关软件工具进行数字信号处理的能力,如MATLAB、Python等。

3.情感态度价值观目标:培养学生对数字信号处理学科的兴趣和热情,激发学生创新意识和团队合作精神,使学生在面对复杂问题时,能够运用所学知识为社会发展做出贡献。

二、教学内容根据教学目标,本课程的教学内容主要包括以下几个部分:1.数字信号处理基本概念:离散时间信号、离散时间系统、Z域变换等。

2.离散傅里叶变换:DFT的基本性质、计算方法、频谱分析等。

3.快速傅里叶变换:FFT的原理、计算方法、应用实例等。

4.数字滤波器设计:滤波器的基本类型、设计方法、频率响应分析等。

5.数字信号处理应用:噪声抑制、信号恢复、图像处理等。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学:1.讲授法:教师通过讲解、演示和案例分析,引导学生掌握数字信号处理的基本理论和方法。

2.讨论法:学生针对实际问题进行讨论,培养学生的思考能力和团队协作精神。

3.案例分析法:通过分析具体案例,使学生更好地理解数字信号处理技术的应用。

4.实验法:安排实验课程,让学生动手实践,提高实际操作能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统、全面的学习资料。

2.参考书:推荐学生阅读相关参考书籍,丰富学生的知识体系。

3.多媒体资料:制作课件、教学视频等多媒体资料,提高课堂教学效果。

4.实验设备:配置相应的实验设备,确保学生能够进行实际操作。

DSP课程设计报告

DSP课程设计报告

第一章实验简介1.1 DSP简介数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。

20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。

数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。

在过去的二十多年时间里,信号处理已经在通信等领域得到极为广泛的应用。

数字信号处理是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效的传输与应用。

数字信号处理是以众多学科为理论基础,它所涉及的范围极其广泛。

如数学领域中的微积分、概率统计、随机过程、数字分析等都是数字信号处理的基础工具。

它与网络理论、信号与系统、控制理论、通信理论、故障诊断等密切相关。

DSP可以代表数字信号处理技术(Digital SignalProcessing),也可以代表数字信号处理器(Digital Signal Processor)。

前者是理论和计算方法上的技术,后者是指实现这些技术的通用或专用可编程微处理器芯片。

数字信号处理包括两个方面的内容: 1.法的研究 2.数字信号处理的实现图1.1是数字信号处理系统的简化框图。

此系统先将模拟信号转换为数字信号,经数字信号处理后,再转换成模拟信号输出。

其中抗混叠滤波器的作用是将输入信号x(t)中高于折叠频率的分量滤除,以防止信号频谱的混叠。

随后,信号经采样和A/D转换后,变成数字信号x(n)。

数字信号处理器对x(n)进行处理,得到输出数字信号y(n),经D/A转换器变成模拟信号。

此信号经低通滤波器,滤除不需要的高频分量,最后输出平滑的模拟信号y(t)。

图1.1数字信号处理系统简化框图数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。

例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。

DSP课程设计--DSP原理及应用实验报告

DSP课程设计--DSP原理及应用实验报告

电子通信工程系DSP原理及应用实验报告学号:姓名:专业:指导老师:实验一CCS的安装与设置1.实验目的掌握CCS 2(…2000)集成开发环境的安装;掌握软件仿真环境的设置方法;熟悉CCS集成开发环境的应用界面。

2.实验设备PC机、CCS 2(…2000)IDE软件、EXP-IV DSP实验箱3.实验要求●熟悉安装CCS 2(…2000)IDE软件的步骤●根据DSP芯片的型号正确设置软件仿真环境●了解CCS集成开发环境应用界面的各项内容4.实验内容(1)CCS 2(…2000)IDE软件的安装步骤S的安装1.1退出病毒防火墙及杀毒软件1.2解压CCS20002.2 .rar文件并运行setup.exe安装程序文件。

1.3选择安装界面中“Code Cmposter Studio”选项。

如下图(1-1)所示图(1-1)1.4完成上述步骤后只需点“Next”继续。

在出现提示确认没有运行病毒检测软件的提示窗口时点“确定”。

如下图(1-2)所示图(1-2)1.5选择“Yes”同意CCS的安装协议。

如下图(1-3)所示图(1-3)1.6选择默认安装组件,点“Next”。

如下图(1-4)所示图(1-4)1.7选择默认安装路径“C:\ti”点“Next”。

如下图(1-5)所示图(1-5)1.8出现下图(1-6)所示时取消勾选项,并点击“Finish”。

图(1-6)1.9完成上述步骤,再出现的对话框中点击“确定”。

如下图(1-7)所示图(1-7)1.10安装完成后,计算机桌面出现如下图(1-8)所示的快捷方式图标。

图(1-8)(2)TMS320F2812 微处理器的软件仿真环境的设置2.1双击桌面“Setup CCS 2”的快捷方式启动设置程序。

2.2在出现的如下图(1-9)所示的窗口中依次进行①单击“Clear”清除原有设置②选择“F2812 Device Simulator”配置③单击“Import”输入配置④单击“Save and Quit”图(1-9)2.3在接下来的对话框中单击“否”完成对CCS的设置。

dsp课程设计报告像处理

dsp课程设计报告像处理

dsp课程设计报告像处理一、课程目标知识目标:1. 让学生掌握数字信号处理(DSP)的基本概念,包括采样、量化、滤波器等;2. 使学生了解图像处理的基本原理,如图像的表示、转换和增强;3. 引导学生掌握图像处理中常用的算法,如卷积、边缘检测、图像压缩等。

技能目标:1. 培养学生运用DSP技术解决实际图像处理问题的能力;2. 培养学生运用编程工具(如MATLAB)实现图像处理算法的能力;3. 培养学生通过小组合作、讨论和思考,解决图像处理中遇到的难题。

情感态度价值观目标:1. 激发学生对数字信号处理和图像处理领域的兴趣,培养其探索精神;2. 培养学生具备良好的团队协作和沟通能力,学会倾听、尊重他人意见;3. 培养学生具备严谨的科学态度和较强的实践能力,善于发现和解决问题。

课程性质分析:本课程为选修课,适用于高年级学生,具有一定的理论深度和实用性。

结合学生特点和教学要求,课程目标旨在使学生掌握数字信号处理和图像处理的基本知识,培养其实践能力和创新思维。

二、教学内容1. 数字信号处理基础- 采样与重建- 量化与编码- 离散时间信号与系统- 傅里叶变换及其应用2. 图像处理基本原理- 图像表示与转换- 图像增强- 图像滤波- 边缘检测3. 常用图像处理算法- 卷积算法- 图像压缩(如JPEG、PNG)- 图像分割- 特征提取4. 实践教学- 使用MATLAB进行图像处理编程实践- 分析实际图像处理案例- 小组项目:设计与实现一个简单的图像处理应用教学大纲安排:第一周:数字信号处理基础第二周:图像处理基本原理第三周:常用图像处理算法第四周:实践教学与小组项目教学内容进度:第一周:完成采样、重建、量化、编码等基础知识的讲解与练习;第二周:学习图像表示、转换、增强、滤波等原理,并进行相关实践;第三周:讲解卷积、图像压缩、图像分割等算法,进行案例分析;第四周:指导学生进行MATLAB编程实践,完成小组项目设计与实现。

DSP课程设计报告(精)

DSP课程设计报告(精)

DSP课程设计实验报告语音压缩、存储与回放成绩:工程设计50报告20答辩30总分、—评语:指导教师签字:日期:一、实验背景与内容语音通信是现代多媒体通信中一个重要的组成部分,而语音信号是信息的重要形式, 语音信号处理有着广泛的应用领域,同时语音压缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中已经有较成熟的发展和广泛应用。

本设计要求采用DSP及其A/D、D/A转换器进行语音信号的压缩、存储和回放。

语音的数字通信无论在可靠性、抗干扰能力、保密性还是价格方面都远优于模拟语音信号,但这是以信道占用宽频带宽为代价的。

因此为了减少语音信号所占用的带宽或存储空间,就必须对数字语音信号进行压缩编码。

一个优秀的语音压缩系统要求能够在软硬件资源占用比例低和压缩编解码时间短的同时,可以实现多通道语音实时压缩。

【DSP仿真器用于DSP的在线调试开发,可以通过软件在线控制DSP的运行状态,并能够查看DSP内部寄存器。

PC是开发人员和DSP系统之间的交互界面,通过PC上安装的CCS集成开发环境,开发人员可以在友好的图形界面下对目标系统进行操作。

本次实验采用DSP C5402实验板实现语音信号的压缩解压的。

SEED-VC5402 DSK实验板上集成了SRAM,FLASH,音频输入输出接口等部件。

二、实验目的1、应用DSP算法实现对语音信号的压缩、存储和回放。

2、熟悉使用C语言编写较复杂的程序;3、熟悉C语言对外设(DSK板或示波器)的访问(软件编程、硬件连接);4、熟练使用软件CCS5000对程序的完整调试过程。

三、实验设计要求及目标>1要求(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用、等语音压缩算法。

(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。

(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。

dsp课程设计报告

dsp课程设计报告

DSP课程设计报告班级:姓名:学号:题目一:基于Matlab的数字滤波器设计及其对语音信号的应用1.课程设计的目的:1).掌握数字信号处理的基本概念、基本理论和基本方法;2).掌握MATLAB设计FIR和IIR数字滤波器的方法;3).掌握在Windows环境下语音信号采集以及时域、频域分析;4).学会MATLAB的使用,掌握MATLAB的程序设计方法;5).学会用MATLAB对信号进行分析和处理。

2.课程设计内容:录制一段自己的语音信号,对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,采matlab设计数字滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;回放语音信号。

3.课程设计基础:MATLAB编程基础、数字信号处理知识、语音信号处理知识。

4.具体步骤与要求:4.1 语音信号的采集录制一段自己的话音,或利用老师给的语音,在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。

wavrecord(2*fs,fs)4.2语音信号的频谱分析要求画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性。

fft4.3设计数字滤波器,画出其频率响应曲线各滤波器的性能指标:(1)低通滤波器性能指标fp=1000Hz, fs=1200Hz, As=40dB, Ap=1dB。

(2)高通滤波器性能指标fs=4000Hz, fp=4300Hz, As=40dB, Ap=1dB(3)带通滤波器性能指标fp1=1200 Hz, fp2=3 000 Hz, fs1=1000 Hz, fs2=3200 Hz, As=40dB, Ap=1dB。

要求:(1)频率变换法设计IIR滤波器:可以利用函数butter、cheby1、cheby2和ellip等设计。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JIU JIANG UNIVERSITYDSP应用课程设计报告题目利用按键任意输入一个数值控制的转动角度院系电子工程学院专业电子信息工程姓名班级 1211 学号 35 日期 2015.5.22- I -内容提要步进电机作为一种电脉冲—角位移的转换元件,由于具有价格低廉、易于控制、无积累误差和计算机接口方便等优点,在机械、仪表、工业控制等领域中获得了广泛的应用。

通过DSP 对步进电机的控制可以实现系统实时、精确、高效、安全的设计要求,从而实现了自动化生产过程。

作为重要部件的DSP是否实现控制要求是应用系统能否可靠工作的关键。

许多研究机构和电机生产厂家对于用单片机和用功率器件来设计步进电机驱动系统作了大量的研究,如把MCS-51系列的8031单片机、美国Microchip公司的PIC系列的PIC16C5X、各类PLC和VMOS管等功率器件作为控制系统都是比较成熟的。

这些方面的资料和经验对于将更高速的DSP器件用在驱动系统上都是很有帮助的。

现在流行的方法是将一系列外围设备如数模转换器(A/D)、脉宽调制发生器(PWM)和数字信号处理器(DSP)内核集成在一起,就获得一个强大又非常经济的电机控制专用的的DSP。

许多厂家开发出了电机专用的DSP器件和支持各种通用算法的模拟软件。

不仅芯片的运算速度越来越快,且软件中集成和固化在硬件中的算法模块越来越多,使得实现各种功能和进行电机性能研究变得现实和容易,能够实现更加理想的控制要求,随着对步进电机的研究更加深入与芯片价格的降低和功能的增加以及随着半导体工艺,尤其是高密度CMOS工艺的发展和进步,芯片的价格日益下降,而性能却不断提高,软件和开发工具越来越多,越来越好,应用范围日益广泛。

DSP作为一种高速处理器件在驱动系统中的应用也会更加广泛和普及,研究DSP在控制领域中的应用也有着重大现实意义。

目录一课程设计要求 (4)二总体方案 (5)三硬件系统设计 (6)四软件系统设计 (10)五系统调试及结果分析 (34)六总结 (34)- III -一课程设计要求设计要求:一、利用开发板上的3*3的矩阵键盘的S1~S6的6个按键实现输入1~360之间任意给定的一个整数,用4位数码管依序显示输入的整数。

二、按键S7表示“退格”键。

按下此键:若数码管当前显示的数值是两位及以上的数时,删除所显示数据最后的一位;若当前显示的数是一位数时,则显示数据变成0。

三、按键S8表示“+/-”符号键。

按下此键,改变显示数据的符号:若当前显示的数值是正数时,则在显示的数前加“-”号;若当前显示的数是负数时,则去掉显示的数前的“-”号。

四、按键S9代表“确认”。

按下此键,步进电机根据数码管显示数值进行相应的动作。

规则如下:1、如果数码管显示的是正数,则步进电机顺时针旋转显示数字的角度。

如:数码管显示125,则步进电机顺时针转动至与起始位置成125度的位置停下。

步进电机转动完成后,蜂鸣器“嘀-嘀-嘀”响三声。

2、如果数码管显示的是负数,则步进电机逆时针旋转显示数字的角度。

如:数码管显示-125,则步进电机逆时针转动至与起始位置成125度的位置停下。

步进电机转动完成后,蜂鸣器“嘀-嘀-嘀”响三声。

3、步进电机的转动角度和所设定的角度的误差控制在15度以内,如果误差超过15度,可以利用按键输入一个数值让步进电机再转动一次进行角度修正。

但修正之后的误差要控制在8度以内。

4二总体方案按照设计要求可以把设计分为4个部分。

首先是对按键电路的设计、数码管电路的设计、步进电机的设计、蜂鸣器响应的设计。

下面分别介绍这4个部分的详细方案。

按键电路:采用3*3的键盘。

S1键为数码管数值+1,S2键为数码管数值+10,S3键为数码管数值+100,S4键为数码管数值-1,S5键为数码管数值-10,S6键为数码管数值-100,S7为退格键,S8为负号键,S9为确定键。

数码管显示电路:采用共阳极四位七段数码管。

由按键控制显示值,显示值为(0~正负360)。

步进电机:由按键S9控制。

数码管显示的数值即为电机需要转动的角度,按键按下S9电机转动。

按键S8控制电机正转(正数)或反转(负数)电机所转的角度计算过程:。

蜂鸣器:步进电机转完,蜂鸣器响3声。

三硬件系统设计本设计用到了DSPF28335开发板上的数码管、3*3按键、蜂鸣器还有电机。

1.数码管本开发板上的数码管采用的是共阳极四位七段数码管。

每个数码管内部共有12个引脚,分别是内部四个数码管共用a~dp这8根数据线(也称段选线)和四个数码管的四个公共端SEG1~SEG4(也称位选线)。

7段数码管是指数码管里有7个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。

除了7段式以外常用的还有8段式,8段比7段多了一个小数点,其他基本相同。

一个7段或8段数码管称为一位,多个数码管并列在一起可构成多位数码管,如本开发板是4个数码管并在一起,所以叫4位数码管。

图3 数码管控制电路3.按键61.3*3矩阵键盘的工作原理和扫描确认方式当键盘中按键数量较多时,为了减少对I/O口的占用,通常将按键排列成矩阵形式,也称为行列键盘。

矩阵式键盘接口如图4所示,它由行线和列线组成,按键位于行、列的交叉点上。

当按键按下时,其交点的行线和列线接通,相应的行线或列线的电平发生变化,DSP通过检测行或列线上的电平变化可以确定哪个按键被按下。

图4 F28335键盘接口图在矩阵键盘的软件接口程序中,经常使用的按键识别方法有行列扫描法和线反转法,本项目采用列扫描法对矩阵键盘进行判别。

图1中GPIO53、GPIO52、GPIO51为3根行线,作为键盘的输入口(工作于输入方式);GPIO50、GPIO49、GPIO48为3根列线,作为输出口(工作于输出方式),由DSP控制其输出的电平值。

按键识别的过程如下。

1)将全部列线GPIO50、GPIO49、GPIO48置低电平输出,然后读GPIO53、GPIO52、GPIO51三根输入行线中有无低电平出现。

只要有低电平出现,则说明有按键按下(实际编程时,还要考虑按键的消抖);如果读到的电平都是高电平,则表示无按键按下。

2)在确认某行有按键按下后,需要确定具体是哪一列的按键按下。

其思路是:依次将列线置为高电平,并检测行线的输入,如果行线的电平值由低电平变为高电平,则该列对应的按键处于闭合状态。

由此,DSP对矩阵键盘的按键识别是,采用扫描方式控制列线的输出信号和检测行线输入的信号相配合实现。

4.电机采用的是步进电机。

步进电机是一种将电脉冲转化为角位移的执行机构。

通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。

在非超载情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。

这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得步进电机在速度、位置等控制领域的控制操作非常简单。

对于步进电机可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达调速的目的。

图步进电机接口85.蜂鸣器图蜂鸣器与DSP的硬件连接图开发板采用三极管来控制峰鸣器的发声,输入的控制信号是DSP的GPIO35管脚,经J23跳线选择。

四软件系统设计1.软件流程主程序流程图:10按键设置流程图:数码管显示流程图电机流程图:蜂鸣器响应流程图:中断流程图:2.完整程序清单/******************************************************************** * 文件名:数码管显示程序* 描述: 执行该程序,数码管显示数字从0000~9999递增**********************************************************************/ /******************************************************************** 程序说明:更换控制平台,仅需更改IO口初始化、宏定义以及spi初始化********************************************************************/#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File#include "DSP2833x_Examples.h" // DSP2833x Examples Include File#define SET_KY3 GpioDataRegs.GPBSET.bit.GPIO48 = 1 //Y3拉高#define RST_KY3 GpioDataRegs.GPBCLEAR.bit.GPIO48 = 1 //Y3拉低#define SET_KY2 GpioDataRegs.GPBSET.bit.GPIO49 = 1 //Y2拉高#define RST_KY2 GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1 //Y2拉低#define SET_KY1 GpioDataRegs.GPBSET.bit.GPIO50 = 1 //Y1拉高#define RST_KY1 GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1 //Y1拉低#define KX3_STATUS GpioDataRegs.GPBDAT.bit.GPIO51 //X3状态#define KX2_STATUS GpioDataRegs.GPBDAT.bit.GPIO52 //X2状态#define KX1_STATUS GpioDataRegs.GPBDAT.bit.GPIO53 //X1状态//数据第3位,SEG1,GPIO16#define SET_BIT4 GpioDataRegs.GPASET.bit.GPIO16 = 1//与外设板8_LEDS 端子的IO16 对应#define RST_BIT4 GpioDataRegs.GPACLEAR.bit.GPIO16 = 1//与外设板8_LEDS 端子的IO16对应//数据第2位,SEG2,GPIO17#define SET_BIT3 GpioDataRegs.GPASET.bit.GPIO17 = 1//与外设板8_LEDS 端子的IO17 对应#define RST_BIT3 GpioDataRegs.GPACLEAR.bit.GPIO17 = 1//与外设板8_LEDS 端子的IO17 对应//数据第1位,SEG3#define SET_BIT2 GpioDataRegs.GPBSET.bit.GPIO62 = 1//与外设板8_LEDS 端子的IO62 对应#define RST_BIT2 GpioDataRegs. GPBCLEAR.bit.GPIO62 = 1//与外设板8_LEDS 端子的IO62 对应//数据第0位,SEG4#define SET_BIT1 GpioDataRegs.GPBSET.bit.GPIO63 = 1//与外设板8_LEDS 端子的IO63 对应#define RST_BIT1 GpioDataRegs.GPBCLEAR.bit.GPIO63 = 1//与外设板8_LEDS 端子的IO63 对应/*****************电机宏定义*********************/#define PHA_ON GpioDataRegs.GPASET.bit.GPIO8 = 1 //A相输出高电平#define PHA_OFF GpioDataRegs.GPACLEAR.bit.GPIO8 = 1 //A相输出低电平#define PHB_ON GpioDataRegs.GPASET.bit.GPIO10 = 1 //B相输出高电平#define PHB_OFF GpioDataRegs.GPACLEAR.bit.GPIO10 = 1 //B相输出低电平#define PHC_ON GpioDataRegs.GPASET.bit.GPIO13 = 1 //C相输出高电平#define PHC_OFF GpioDataRegs.GPACLEAR.bit.GPIO13 = 1 //C相输出低电平#define PHD_ON GpioDataRegs.GPASET.bit.GPIO14 = 1 //D相输出高电平#define PHD_OFF GpioDataRegs.GPACLEAR.bit.GPIO14 = 1 //D相输出低电平#define DELAY_TIME 100 //延时时间#define STEP_TIME 15000/*******************宏定义蜂鸣器相关操作******************/#define BUZZ_CLK_GENER GpioDataRegs.GPBTOGGLE.bit.GPIO35 = 1; //蜂鸣器控制IO,IO电平翻转,产生控制脉冲#define BUZZ_OFF GpioDataRegs.GPBSET.bit.GPIO35 = 1; //关闭蜂鸣器/**********************函数申明************************/void DisData_Trans(Uint16 data);// 4位数拆分为4个数,保存到数组DisData_Trans[4],DisData_Trans[0]为个位void Sellect_Bit(Uint16 i); // 数码管位选函数,i为0~3,对应SEG1~4void Init_LEDS_Gpio(void); // 设置SEG1~4为I/O输出,并初始化为Lvoid spi_xmit(Uint16 a); // 将数据a发送到SPITXBUFvoid spi_fifo_init(void); // 使能FIFO发送功能,接收功能未开启void spi_init(void);void delay2(Uint32 t);void MotionControl1(void);/***********************************************//**********************定义相关变量******************///unsigned int Count,Flag;unsigned int k=0;interrupt void cpu_timer0_isr(void);unsigned char msg[12]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xff};//共阳段码:0~9unsigned int DisData_Bit[4] = {0}; //存放拆分后的四位数字Uint16 DisData = 0; //显示的数字Uint16 Loop = 0; //循环扫描变量Uint16 Loop2 = 0;Uint16 Keys[3][3] = {1,2,3,4,5,6,7,8,9}; //数据表,与9个按键对应Uint16 Key = 0; //实时按键信息变量Uint16 KX_On = 0;Uint16 KY_On = 0;Uint16 KX_Tim[4] = {0};Uint16 KX_Status[4]={0};unsigned int Count,Flag; //时钟变量Uint16 alarm_flag=0;Uint16 Flash;Const Uint16 Step Mode1[8]= {0x0D0A,0x0D0A,0x0A0B,0x0A0B,0x0B0C,0x0B0C,0x0C0D,0x0C0D};//单四拍时序A-B-C-D-A//电机正反转标志'0'为反转,'1'为正转const Uint16 StepMode1_N[8] = {0x0C0D,0x0C0D,0x0B0C,0x0B0C,0x0A0B,0x0A0B,0x0D0A,0x0D0A}; //单四拍时序A-B-C-D-Aconst Uint16 StepMode3[8] = {0x0D0A,0x0DAB,0x0A0B,0x0ABC,0x0B0C,0x0BCD,0x0C0D,0x0CDA};//八拍时序A-AB-B-BC-C-CD-D-DA-Aconst Uint16 StepMode3_N[8] = {0x0CDA,0x0C0D,0x0BCD,0x0B0C,0x0ABC,0x0A0B,0x0DAB,0x0D0A};void Init_KeyGpio(void); //初始化按键IOvoid ResetAllKY(void); //3列全部输出低电平void KX_AllStatus(void); //读取3行IO电平状态void Read_KX(Uint16 x); //读取按键所在行void Set_KY(Uint16 x); //设置任意列输出高电平void Rst_KY(Uint16 x); //设置任意列输出低电平void Read_KY(Uint16 x); //读取按键所在列void Read_KY(Uint16 x); //读取按键所在列void GetKey(void); //读取按键值void Motor(); //电机void show(); //蜂鸣器//void stop1();void MotionControl1(void); //单四拍正转void MotionControl2(void); //单四拍反转void MotionControl3(void); //八拍拍正转void MotionControl4(void); //八拍拍反转void PhaseOff(Uint16 i);void PhaseOn(Uint16 i);void Init_LedGpio(void);void Buzz_Gpio_Init(void); //蜂鸣器响interrupt void cpu_timer0_isr(void);/*****************3列全部输出低电平****************************/ void ResetAllKY(void){RST_KY3 ;RST_KY2 ;RST_KY1 ;}/********************读取3行IO电平状态***********************/ void KX_AllStatus(void){KX_Status[1] = KX1_STATUS;KX_Status[2] = KX2_STATUS;KX_Status[3] = KX3_STATUS;}/*************************读取按键行位置****************/void Read_KX(Uint16 x){KX_AllStatus();if(KX_Status[x] == 0){KX_Tim[x]++;if(KX_Tim[x] >= 6000){KX_On = x;KX_Tim[1]=0;KX_Tim[2]=0;KX_Tim[3]=0;}}}/*******************************指定列输出高电平*******************/ void Set_KY(Uint16 x){if(x==1){SET_KY1;}if(x==2){SET_KY2;}if(x==3){SET_KY3;}}/*******************************指定列输出低电平******************/ void Rst_KY(Uint16 x){if(x==1){RST_KY1;}if(x==2){RST_KY2;}if(x==3){RST_KY3;}}/****************************读取按键列位置***********************/ void Read_KY(Uint16 x){if(!KX_Status[KX_On] && KX_On){Set_KY(x);delay2(200);KX_AllStatus();if(KX_Status[KX_On]){KY_On = x;Key = Keys[KX_On-1][KY_On-1];KY_On = 0;KX_On = 0;}Rst_KY(x);}}void GetKey(void){Read_KX(1);Read_KX(2);Read_KX(3);Read_KY(1);Read_KY(2);Read_KY(3);}/*****************按键IO初始化************************************/void Init_KeyGpio(void){EALLOW;//////////////////////////////以下3个IO口设置为输出,作为列扫描//////////////////////////////KY3: 对应PCB端子KEY_MATRIX:IO24GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0; // Enable pullup on GPIO11GpioDataRegs.GPBSET.bit.GPIO48 = 1; // Load output latchGpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0; // GPIO11 = GPIOGpioCtrlRegs.GPBDIR.bit.GPIO48 = 1; // GPIO11 = output//KY2: 对应PCB端子KEY_MATRIX:IO25GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0; // Enable pullup on GPIO11GpioDataRegs.GPBSET.bit.GPIO49 = 1; // Load output latchGpioCtrlRegs.GPBMUX2.bit.GPIO49 = 0; // GPIO11 = GPIOGpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; // GPIO11 = output//KY1: 对应PCB端子KEY_MATRIX:IO26GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0; // Enable pullup on GPIO11GpioDataRegs.GPBSET.bit.GPIO50 = 1; // Load output latchGpioCtrlRegs.GPBMUX2.bit.GPIO50 = 0; // GPIO11 = GPIOGpioCtrlRegs.GPBDIR.bit.GPIO50 = 1; // GPIO11 = output//////////////////////////////以下3个IO口设置为输入,作为行扫描//////////////////////////////KX3: 对应PCB端子KEY_MATRIX:IO28GpioCtrlRegs.GPBPUD.bit.GPIO51 = 0; // Enable pullup on GPIO11 GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 0; // 设置为一般IO口GpioCtrlRegs.GPBDIR.bit.GPIO51 = 0; // IO口方向为输入//KX2: 对应PCB端子KEY_MATRIX:IO29GpioCtrlRegs.GPBPUD.bit.GPIO52 = 0; // Enable pullup on GPIO11GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 0; // 设置为一般IO口GpioCtrlRegs.GPBDIR.bit.GPIO52 = 0; // IO口方向为输入//KX1: 对应PCB端子KEY_MATRIX:IO30GpioCtrlRegs.GPBPUD.bit.GPIO53 = 0; // Enable pullup on GPIO11 GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 0; // 设置为一般IO口GpioCtrlRegs.GPBDIR.bit.GPIO53 = 0; // IO口方向为输入EDIS;ResetAllKY();}/******************电机控制IO初始化*****************/void Init_StepMotorGpio(void){EALLOW;//Phase AGpioCtrlRegs.GPAPUD.bit.GPIO8 = 0; // Enable pullup on GPIO11GpioDataRegs.GPASET.bit.GPIO8 = 1; // Load output latchGpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // GPIO11 = GPIOGpioCtrlRegs.GPADIR.bit.GPIO8 = 1; // GPIO11 = output//Phase BGpioCtrlRegs.GPAPUD.bit.GPIO13 = 0; // Enable pullup on GPIO11GpioDataRegs.GPASET.bit.GPIO13 = 1; // Load output latchGpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0; // GPIO11 = GPIOGpioCtrlRegs.GPADIR.bit.GPIO13 = 1; // GPIO11 = output//Phase CGpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pullup on GPIO11GpioDataRegs.GPASET.bit.GPIO10 = 1; // Load output latchGpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // GPIO11 = GPIOGpioCtrlRegs.GPADIR.bit.GPIO10 = 1; // GPIO11 = output//Phase DGpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; // Enable pullup on GPIO11 GpioDataRegs.GPASET.bit.GPIO14 = 1; // Load output latchGpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0; // GPIO11 = GPIOGpioCtrlRegs.GPADIR.bit.GPIO14 = 1; // GPIO11 = outputEDIS;PHA_OFF;PHB_OFF;PHC_OFF;PHD_OFF;}/***************电机控制IO高电平输出***********/void PhaseOn(Uint16 i){switch(i){case 0xA:PHA_ON;break;case 0xB:PHB_ON;break;case 0xC:PHC_ON;break;case 0xD:PHD_ON;break;case 0x0:break;default:break;}}/*******************************电机控制IO低电平输出******/void PhaseOff(Uint16 i){switch(i){case 0xA:PHA_OFF;break;case 0xB:PHB_OFF;break;case 0xC:PHC_OFF;break;case 0xD:PHD_OFF;break;case 0x0:break;default:break;}}/************************单四拍控制时序zheng转函数**********/void MotionControl1(void){Uint16 loop = 0;for(loop = 0;loop<=7;loop++){PhaseOn (StepMode1[loop] & 0x000F); //第一位:控制信号高电平判断PhaseOn ((StepMode1[loop] & 0x00F0)>>4); //第二位:控制信号高电平判断PhaseOff((StepMode1[loop] & 0x0F00)>>8); //第三位:控制信号低电平判断PhaseOff((StepMode1[loop] & 0xF000)>>12); //第四位:控制信号低电平判断delay2(STEP_TIME);}}/************************单四拍控制时序fan转函数**************/void MotionControl2(void){Uint16 loop = 0;for(loop = 0;loop<=7;loop++){PhaseOn (StepMode1_N[loop] & 0x000F); //第一位:控制信号高电平判断 PhaseOn ((StepMode1_N[loop] & 0x00F0)>>4); //第二位:控制信号高电平判断 PhaseOff((StepMode1_N[loop] & 0x0F00)>>8); //第三位:控制信号低电平判断 PhaseOff((StepMode1_N[loop] & 0xF000)>>12); //第四位:控制信号低电平判断 delay2(STEP_TIME);}}/******************************************八拍控制时序正转********/ void MotionControl3(void){Uint16 loop = 0;for(loop = 0;loop<=7;loop++){PhaseOn (StepMode3[loop] & 0x000F); //第一位:控制信号高电平判断 PhaseOn ((StepMode3[loop] & 0x00F0)>>4); //第二位:控制信号高电平判断 PhaseOff((StepMode3[loop] & 0x0F00)>>8); //第三位:控制信号低电平判断 PhaseOff((StepMode3[loop] & 0xF000)>>12); //第四位:控制信号低电平判断 delay2(STEP_TIME);}}/************************八拍控制时序反转函数********************/void MotionControl4(){Uint16 loop = 0;for(loop = 0;loop<=7;loop++){PhaseOn (StepMode3_N[loop] & 0x000F); //第一位:控制信号高电平判断 PhaseOn ((StepMode3_N[loop] & 0x00F0)>>4); //第二位:控制信号高电平判断 PhaseOff((StepMode3_N[loop] & 0x0F00)>>8); //第三位:控制信号低电平判断 PhaseOff((StepMode3_N[loop] & 0xF000)>>12); //第四位:控制信号低电平判断 delay2(STEP_TIME);}}/****************************初始化IO端口**************************/void Buzz_Gpio_Init(void){EALLOW;GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0; // Enable pullup on GPIO35GpioDataRegs.GPBSET.bit.GPIO35 = 1; // Load output latchGpioCtrlRegs.GPBMUX1.bit.GPIO35 = 0; // GPIO35 = GPIOGpioCtrlRegs.GPBDIR.bit.GPIO35 = 1; // GPIO35 = outputEDIS;}/*******************数码管位选IO 接口初始化***************************/// 设置SEG1~4为I/O输出,并初始化为Lvoid Init_LEDS_Gpio(void){EALLOW;//GpioCtrlRegs.GPBPUD.bit.GPIO16= 0; // Enable pullup on GPIO16 GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0; // GPIO16 = GPIOGpioCtrlRegs.GPADIR.bit.GPIO16 = 1; // GPIO16 = outputGpioDataRegs.GPASET.bit.GPIO16 = 1; // Load output latch//GpioCtrlRegs.GPBPUD.bit.GPIO59= 0; // Enable pullup on GPIO17 GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0; // GPIO17 = GPIOGpioCtrlRegs.GPADIR.bit.GPIO17 = 1; // GPIO17 = outputGpioDataRegs.GPASET.bit.GPIO17 = 1; // Load output latch//GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; // Enable pullup on GPIO62 GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 0; // GPIO62 = GPIOGpioCtrlRegs.GPBDIR.bit.GPIO62 = 1; // GPIO62 = outputGpioDataRegs.GPBSET.bit.GPIO62 = 1; // Load output latch//GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; // Enable pullup on GPIO63 GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 0; // GPIO63 = GPIOGpioCtrlRegs.GPBDIR.bit.GPIO63 = 1; // GPIO63 = outputGpioDataRegs.GPBSET.bit.GPIO63 = 1; // Load output latchEDIS;RST_BIT1;RST_BIT2;RST_BIT3;RST_BIT4;}/*************数码管位选函数(从低位到高位扫描)*************/// 数码管位选函数void Sellect_Bit(Uint16 i){switch(i){case 0:SET_BIT1; //选通数码管第一位RST_BIT2; //关断数码管第四位RST_BIT3;RST_BIT4;break;case 1:RST_BIT1;SET_BIT2; //选通数码管第二位RST_BIT3;RST_BIT4;break;case 2:RST_BIT1;RST_BIT2; //关断数码管第二位SET_BIT3; //选通数码管第三位RST_BIT4;break;case 3:RST_BIT1;RST_BIT2;RST_BIT3; //关断数码管第三位SET_BIT4; //选通数码管第四位break;default:break;}}/****************** 拆分要显示的四位数保存到数组DisData_Trans【】**********/ // 4位数拆分为4个数,保存到数组DisData_Trans[4],DisData_Trans[0]为个位void DisData_Trans(Uint16 data){if(data>=100){DisData_Bit[2] = data % 1000 / 100 ; //百位数DisData_Bit[1] = data % 100 / 10; //十位数DisData_Bit[0] = data % 10; //个位数if(k%2!=0){DisData_Bit[3]=10;}else DisData_Bit[3]=11;}if(data<100 &&data>=10){DisData_Bit[3] = 11;//DisData_Bit[2] = 11;DisData_Bit[1] = data % 100 / 10;DisData_Bit[0] = data % 10;if(k%2!=0){DisData_Bit[2]=10;}else DisData_Bit[2]=11;}if(data<10 &&data>0){DisData_Bit[3] = 11;DisData_Bit[2] = 11;//DisData_Bit[1] = 11;DisData_Bit[0] = data % 10;if(k%2!=0){DisData_Bit[1]=10;}else DisData_Bit[1]=11;}}/*******************************延时函数*****************/void delay2(Uint32 t){Uint32 i = 0;for (i = 0; i < t; i++);}/*************************************Spi初始化**********************/ void spi_init(){SpiaRegs.SPICCR.all =0x004F; // Reset on, Falling Edge out, 16-bit char bits//0x000F对应Rising Edge,0x004F对应Falling Edge SpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase,// enable talk, and SPI int disabled.SpiaRegs.SPIBRR =0x007F; // 波特率寄存器:波特率=LSPCLK/(SPIBRR+1),// 最大为LSPCLK/4,最小为LSPCLK/128(0x7F)SpiaRegs.SPICCR.all =0x00DF; // Relinquish SPI from Reset(环路模式)SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission(自由运行)}/**********************Spi模块FIFO设置*************************/// 使能FIFO发送功能,接收功能未开启void spi_fifo_init(){// Initialize SPI FIFO registersSpiaRegs.SPIFFTX.all=0xE040;SpiaRegs.SPIFFRX.all=0x204f;SpiaRegs.SPIFFCT.all=0x0;}/********Spi发送************************************************/// 将数据a发送到SPITXBUFvoid spi_xmit(Uint16 a){SpiaRegs.SPITXBUF=a;}/********************** **********/// 在四个数码管上显示4位数DisData,DisData=0000~9999;void Disp4Nums(unsigned int DisData){unsigned int Loop=0;DisData_Trans(DisData); //拆分四位数for(Loop=0;Loop<4;Loop++) //分别显示四位{Sellect_Bit(Loop); //选择要扫描的数码管位spi_xmit(msg[DisData_Bit[Loop]]); //串行输出要显示的数字delay2(25000); //延时配合人眼反应时间}}void show() //蜂鸣器响应函数{static Uint16 step = 0,cnt=0;if(alarm_flag ==1){ alarm_flag=0;for(step=0;step<3;step++){for(cnt=0;cnt<100;cnt++){BUZZ_CLK_GENER;delay2(10000);}BUZZ_OFF;delay2(1000000);}}}void Motor1() //电机函数{static Uint16 buf;buf = (int)(DisData/2.8); //电机步数if(k%2==0) //正转{while(buf){MotionControl2();buf--;}if(buf ==0){alarm_flag =1;}}else if(k%2 !=0) //反转{while(buf){MotionControl1();buf--;}if(buf ==0){alarm_flag =1;}}}void keyscan(){while(Key != 9){GetKey();switch(Key){case0:Key=0;DisData_Bit[2]=11;DisData_Bit[1]=11;DisData_Bit[0]=DisData%10;break;case 1:Key = 0; DisData++; if(DisData_Bit[0]>9){DisData = 0;}break; //+1 case 2:Key = 0; DisData+=10; if(DisData_Bit[1]>9){DisData%=100;}break; //+10 case 3:Key = 0; DisData+=100; if(DisData_Bit[2]==3){DisData/=100;}break; //+100 case 4:Key = 0; DisData--; if(DisData_Bit[0] ==0){DisData = 9;}break; //-1case 5:Key = 0; DisData-=10; if(DisData_Bit[1] ==0){DisData+=90;}break; //-10 case 6:Key = 0; DisData-=100; if(DisData_Bit[2] ==0){DisData %=100;}break; //-100 case7:Key = 0; DisData = DisData/10; break; //退格键case 8:Key = 0; k++;break; //负号键case 9:Key = 0; Motor1();break; //确定键,电机转相应角度default:break;}if(DisData >360) DisData = 0; //数值大于360,清零}}void main(void){ InitSysCtrl();EALLOW;GpioCtrlRegs.GPBMUX2.all = 0x0; // GPIO pinGpioCtrlRegs.GPBDIR.all = 0xFF; // Output pinGpioDataRegs.GPBDAT.all =0xFF; // Close LEDsEDIS;InitSpiaGpio(); //28335 SPIa引脚Init_LEDS_Gpio(); // 初始化3个数码管的片选引脚Init_KeyGpio(); //初始化按键IOInit_StepMotorGpio(); //电机初始化DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();spi_fifo_init(); // Initialize the Spi FIFOspi_init(); // init SPIEALLOW; // This is needed to write to EALLOW protected registers PieVectTable.TINT0 = &cpu_timer0_isr;Count = 0; //初始化变量Flag=0;EDIS; // This is needed to disable write to EALLOW protected registers InitCpuTimers(); // For this example, only initialize the Cpu Timers#if (CPU_FRQ_150MHZ)// Configure CPU-Timer 0 to interrupt every 500 milliseconds:// 150MHz CPU Freq, 50 millisecond Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 150, 1000);#endif#if (CPU_FRQ_100MHZ)// Configure CPU-Timer 0 to interrupt every 500 milliseconds:// 100MHz CPU Freq, 50 millisecond Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 100, 500000);#endifCpuTimer0Regs.TCR.all = 0x4001;IER |= M_INT1;PieCtrlRegs.PIEIER1.bit.INTx7 = 1;EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM while(1){keyscan(); //按键显示函数Motor1(); //电机转动函数}}interrupt void cpu_timer0_isr(void){ static char T0IntCnt;CpuTimer0.InterruptCount++;T0IntCnt=(T0IntCnt+1)%7;if(T0IntCnt<4){Disp4Nums(DisData);}else if(T0IntCnt==6){RST_BIT1;RST_BIT2;RST_BIT3;RST_BIT4;}show(); //蜂鸣器函数PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}五系统调试及结果分析程序中步进电机的角度计算:电机里面有两个圈,为1:16,也就是内圈转16步,外圈转1步,外圈转一圈为八拍。

相关文档
最新文档