1 基于 DSP 的数字振荡器的设计与实现 基于 DSP 的数字振荡器的设计与实现 黄福莹 陈华 徐金隆 广西大学计算机与电子信息学院 南宁 530004 摘要 摘要 本文阐述了一种基于 DSP 芯片 TMS320C5409 的数字振荡器的设计方法 该方法利用 TMS320C5409 芯片的定时器和中断通过迭代算法设计数字振荡器 本文分别使用 TMS320C5409 芯片的汇编语言和 C 语言编程实现数字振荡器产生正弦信号和余弦信号 并 通过 CCS 的虚拟示波器观察所设计的信号波形 该数字振荡器具有实现容易 频率方便修 改的特点 关键词 关键词 DSP 定时器 CCS 中断 中图分类号 TN911 72 文献标识码 A Design and Realization of a Digital Osillator Based on DSP HUANG Fu ying CHEN Hua XU Jin long School of Computer and Electronics and Information Guangxi University Nanning 530004 Abstract The paper is focused on the design method of a digital oscillator based on the DSP Digital Signal Processor chip TMS320C5409 With the interruption and the Timer on a TMS320C5409 chip the digital oscillator is designed through a iterative arithmetic The digital oscillator can bring sine signal and cosine signal respectively by the assemble language of the chip TMS320C5409 and C language The designed signal wave can be observed by a dummy oscillograph on CCS Code Composer Studio The characteristic of the digital oscillator is that it is realized easily and its frequence can be amended expediently Keywords DSP Timer CCS Interruption 1 引言 1 引言 自 20 世纪 70 年代末 DSP 芯片诞生以来 在过去的将近 30 年的时间里得到了飞速的发 展 现在已广泛应用于通信 医疗 影像 雷达及声纳 高保真音乐重现 石油勘探 工业 控制 军事 航空航天等领域 由于 DSP 芯片运算速度快的特点 在数字控制系统中得到广 泛的应用 在数字控制系统中往往离不开数字振荡器 由 DSP 芯片的定时器和中断所构成的 数字振荡器不但实现容易 而且信号的频率可由软件修改 可以方便获得所需的振荡频率 2 数字振荡器的原理 2 数字振荡器的原理 下面首先分析数字振荡器产生正弦振荡波形的工作原理 1 设冲击响应激励下 一个系统的传递函数为正弦序列sink T 其Z变换为 11 1212 sin 12cos 1 T zCZ H Z T zzAZBZ 1 其中A 2cos T B 1 C sin T 2 假设初始条件为0 式 1 的Z反变换为 y k Ay k 1 By k 2 Cx k 1 3 利用单位脉冲序列 x k 1 k 1 的性质 即仅当 k 1 时 x k 1 0 1 代入式 3 得 k 0 y 0 Ay 1 By 2 0 0 k 1 y 1 Ay 0 By 1 C C k 2 y 2 Ay 1 By 0 0 Ay 1 k 3 y 3 Ay 2 By 1 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛 2 k n y n Ay n 1 By n 2 4 在 k 2 以后 y k 都能用 y k 1 和 y k 2 算出 这是一个递归的差分方程 由于式 4 是一 个乘加表达式 所以使用 DSP 可以很容易实现正弦振荡波形 其次用同样的分析方法分析数字振荡器产生余弦振荡波形的工作原理 设冲击响应激励下 一个系统的传递函数为余弦序列 cosk T 其 Z 变换为 11 1212 1 cos 1 12cos 1 T zCz H Z T zzAzBz 5 式中2cos 1 cosAT BCT 6 假设初始条件为 0 对式 5 进行 Z 反变换得到 y k Ay k 1 By k 2 Cx k 1 x k 7 利用单位脉冲序列 x k 1 k 1 的性质 即仅当 k 1 时 x k 1 0 1 代入式 7 得 k 1 y 1 Ay 2 By 3 Cx 2 x 1 0 k 0 y 0 Ay 1 By 2 0 1 1 k 1 y 1 Ay 0 By 1 C A C k 2 y 2 Ay 1 By 0 0 Ay 1 By 0 k 3 y 3 Ay 2 By 1 k n y n Ay n 1 By n 2 8 比较式 8 和式 4 可看出 在 k 2 以后 余弦信号的递归差分方程和正弦信号的递 归差分方程是一样的 所以产生余弦信号的中断服务程序应该与产生正弦信号的中断服务程 序基本一致 只需简单修改即可 3 数字振荡器的实现3 数字振荡器的实现 利用 DSP 芯片 TMS320C5409 的定时器和中断设计数字振荡器的基本思路是 通过定时 器设置采样率 定时器每产生一次中断 则执行一次中断服务程序 在中断服务程序中用式 4 或式 8 计算出一个 y n 同时送到 CCS 的虚拟示波器 这时可在电脑屏幕上看到 输出的正弦波形或余弦波形 3 1 定时器的初始化 2 3 1 定时器的初始化 2 使用定时器的三个寄存器 TIM PRD TCR 实现对定时器的初始化 已知时钟频率 d f 为 60MHz 通过定时器设置采样频率 s f为 40KHz 其周期 s t为 25 s 即定时器每隔 25 s 产 生一个中断 定时器的初值 N 则由下式 9 决定 1 ds Nff 9 即 N 60MHz 40KHz 1 1499 下面是实现定时器初始化的汇编程序 STM 10h TCR Soft Free 0 TSS 1 停止定时器 同时 TDDR 0 STM 1499 PRD 设置 PRD 寄存器值为 1499 TINT 中断频率为 clk F 1499 1 60MHz 1500 40 KHz STM 20h TCR 重新将 PRD 装入 TIM 并将 TDDR 装入 PSC 然后启动定时器 3 2 正弦波的实现 3 2 正弦波的实现 设数字振荡器产生一个 2kHz 的正弦振荡信号 由式 2 计算递归差分方程系数 A B C 如下 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛 3 A 2 cos T 2 cos 2 2000 40000 2 0 95105652 B 1 C sin T sin 2 2000 40000 0 30901699 为了便于进行小数定点 DSP 处理 防溢出 将产生 2kHz 正弦信号的所有系数除以 2 并用 16 位定点格式表示如下 1515 1515 1515 20 95105652 231164 2200473679 2 20 5 216384000 2 20 1545085 25062 9343641613 6 2 A BCh B Ch C C h 编写程序时分主程序和中断服务程序两部分 主程序负责对 y 1 和 y 2 赋初值 中断 服务程序负责实现迭代算法 即用式 4 计算出 y n 下面是应用 DSP 芯片 TMS320C5409 的汇编语言编写主程序和中断服务程序 主程序 SSBX FRCT 置 FRCT 1 准备进行小数乘法运算 ST INIT A AA 将常数 A 装入变量 AA ST INIT B BB 将常数 B 装入变量 BB ST INIT C CC 将常数 C 装入变量 CC PSHD CC 将变量 CC 压入堆栈 POPD y2 初始化 y2 CC 得 y 1 C LD AA T 装 AA 到 T 寄存器 MPY y2 A y2 乘系数 A 结果放入 A 寄存器 STH A y1 将 A 寄存器的高 16 位存入变量 y1 得 y 2 Ay 1 中断服务程序 LD BB T 将系数 B 装入 T 寄存器 MPY y2 A y2 乘系数 B 结果放入 A 寄存器 A y2 BB LTD y1 将 y1 装入 T 寄存器 同时复制到 y2 y1 MAC AA A 完成新正弦数据的计算 A 寄存器中为 y1 AA y2 BB STH A 1 y1 将新数据存入 y1 因所有系数都除过 2 所以在保存时结果左移一位 将新数据存人 y1 y1 y1 AA y2 BB STH A 1 y0 将新正弦数据存入 y0 得 y0 y n Ay n 1 By n 2 3 3 余弦波的实现 3 3 余弦波的实现 利用数字振荡器产生余弦振荡信号时 用式 6 计算出系数 A B C 在产生正弦振 荡信号的程序中稍作修改就可以实现产生余弦振荡信号 如果产生正弦信号的频率和产生余 弦信号的频率一样 可以把两者的中断服务程序统一在一个中断服务程序里 下面是应用 C 语言编写一个同时产生正弦波和余弦波的中断服务程序 void interrupt tint y0 aa y1 bb y2 aa 为存放系数 A 的变量 bb 为存放系数 B 的变量 y2 y1 y1 y0 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛 4 sin buf con buf y0 sin buf 存放的是正弦 sinx 的值 y5 aa y3 bb y4 y4 y3 y3 y5 cos buf con buf y5 cos buf 存放的是余弦 cosx 的值 con buf if con buf 128 con buf 0 4 实验结果分析 4 实验结果分析 下图是利用所设计的数字振荡器产生频率均为 2kHz 的正弦波和余弦波在 CCS 的显示结 果 上为余弦波形 下为正弦波形 图 1 正弦波和余弦波 图 1 正弦波和余弦波 对比图 1 的上下波形 可看出余弦波和正弦波的相位差刚好是 2 说明所设计的数字 振荡器与理论是相符合的 5 结束语 5 结束语 本文介绍了一种基于 DSP 芯片 TMS320C5409 的数字振荡器的设计方法 并使用 DSP 的汇编语言和 C 语言两种编程方法实现了数字振荡器产生振荡信号 与其它使用 DSP 产生 正弦信号和余弦信号的方法相比 本文设计的数字振荡器通过软件修改很容易产生另外一个 频率的正弦信号或余弦信号 本文创新点 详细分析了数字振荡器产生正弦振荡信号和余弦振荡信号的工作原理 使 用两种编程方法实现数字振荡器产生正弦振荡信号和余弦振荡信号 实现了产生两者信号的 中断服务程序统一在一起 并给出了主要程序代码 本文在使用 DSP 芯片设计数字振荡器 方面进行有实际意义的探索和实践 参考文献参考文献 1 陈金鹰 DSP 技术及应用 北京 机械工业出版社 2004 2 汪安民 TMS320C54xx DSP 实用技术 北京 清华大学出版社 2002 3 缪欣 唐慧强 基于 ARM 的数字信号发生器的设计与实现 J 微计算机信息 2007 10 2 129 130 4 刘艳萍 DSP 技术原理及应用教程 北京 北京航空航天大学大学出版社 2005 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛 5 作者简介 黄福莹 1972 男 壮族 广西桂平人 广西大学电子与信息工程系讲师 硕士 主要 从事嵌入式技术研究 陈华 1958 男 壮族 广西桂平人 广西大学电子与信息工程系教授 博士 主要从 事数字图像处理研究 徐金隆 男 广西大学计算机与电子信息学院 2003 级本科毕业生 Biography HUANG Fu ying 1972 male zhuang Guiping Guangxi instructor of Department of Electronics and Information Engineering Guangxi University master major in the embedded technology CHEN Hua 1958 male zhuang Guiping Guangxi professor of Department of Electronics and Information Engineering Guangxi University doctor major in the processing of digital image XU Jin long male graduate of Department of Electronics and Information Engineering Guangxi University in 2003 bachelor 基金资助项目名称 广西自然科学基金 数字共焦显微图像超分辨率复原方法研究 颁发部门 广西自然科学基金委 编号 桂科自 0728034 h t t p w w w e l e c f a n s c o m 电子发烧友 h t t p b b s e l e c f a n s c o m 电子技术论坛

展开阅读全文

基于DSP的数字振荡器C语言编程,基于DSP的数字振荡器的设计与实现.pdf相关推荐

  1. r语言 悲观剪枝_《R语言编程—基于tidyverse》新书信息汇总

    我之前预告过的 R 语言新书,起名为<R语言编程-基于tidyverse>,本书的目的是为了在国内推广 R 语言和 R 语言最新技术,电子版将始终跟踪最新并免费分享.本书非常适合新手 R ...

  2. c语言程序设计 猜数字,猜数字游戏c语言编程,c语言编程 编一个猜数字游戏

    c语言编程 编一个猜数字游戏 #include #include #include #include void main()/*主函数*/ { int a,b,times=0,i,j,guess=0, ...

  3. 基于C语言编程的职工工资管理系统项目的设计与开发

    文章目录 基于C语言编程的职工工资管理系统项目的设计与开发 一.需求分析 二.项目环境 2.1.项目创建过程 2.2.向项目添加头文件与源文件 三.职工工资管理系统模块功能 3.1.系统总体设计框图 ...

  4. 电子秤c语言编程,基于AT89C51的数字电子秤的设计最终版(样例3)

    <基于AT89C51的数字电子秤的设计.doc>由会员分享,可免费在线阅读全文,更多与<基于AT89C51的数字电子秤的设计(最终版)>相关文档资源请在帮帮文库(www.woc ...

  5. 四路抢答器c语言编程,基于单片机的四路抢答器设计

    基于单片机的四路抢答器设计 课程设计(论文) 题 目 名 称 多路数字抢答器设计 课 程 名 称 单片机原理及其应用 学 生 姓 名 学 号 系 .专 业 指 导 教 师 2013年 6月 24日 摘 ...

  6. 质数之和c语言编程,C程序检查一个数字是否可以表示为两个质数之和

    C程序检查一个数字是否可以表示为两个质数之和 在此示例中,您将学习检查用户输入的整数是否可以表示为所有可能组合的两个质数之和. 要理解此示例,您应该了解以下C语言编程主题: 为了完成此任务,我们将创建 ...

  7. 基于51单片机的数字电压表c语言程序,基于单片机的数字电压表(全文完整版)...

    <基于单片机的数字电压表.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的数字电压表>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. 1 ...

  8. python语言的三种数字类型_Python语言中的类型之数字类型--Python(10)

    数据从不一样的角度能够用不一样的含义去解释它,如: 10,011,101 对上面这个数据,咱们有以下多种含义去解释它: 1)它是1个二进制数字,或者是1个十进制数字: 2)一段文本: 3)用 , 号分 ...

  9. 猜数字小c语言游戏课程任务书,猜数字游戏课程设计.doc

    猜数字游戏课程设计.doc 1(c/c程序设计课程设计)设 计 说 明 书猜数字游戏的设计与实现学 生 姓 名学 号班 级成 绩指 导 教 师计算机科学与技术系2010 年 7 月 9 日C/C程序设 ...

最新文章

  1. python【力扣LeetCode算法题库】面试题 17.16- 按摩师(DP)
  2. 技术人员如何创业《一》—— 产品及想法(转载)
  3. 5.用户APC执行过程
  4. 学起来 —— CSS 入门基础
  5. 漫步数理统计二十八——混合分布
  6. python的认识从唯物主义_你对唯物主义的看法是怎么样的?
  7. 数据挖掘实践(金融风控)——task5:模型融合
  8. [导入]2007年美国电影上映时间表
  9. 徐小凤将现身东方卫视跨年晚会 为63岁庆生
  10. 中小企业信息化规划案例--初级篇
  11. SSIS(简单数据抽取过程介绍)
  12. 目标检测数据集:直升机(1)
  13. WPF 使用Microsoft.Ink 做的墨迹输入法
  14. UR机器人装箱姿态_ur机器人坐标系说明来了,感兴趣的朋友可以看看
  15. SpringBoot启动图标修改(通俗易懂)
  16. JAVA之模拟注册登录幸运抽奖
  17. shell实现除法计算器
  18. 礼品 read.php,心愿送礼网教你如何体面的接受礼品
  19. (附源码)ssm基于java的线上阅读平台的设计与实现 毕业设计291023
  20. 【基于Arduino自动水位指示器和控制器】

热门文章

  1. 2020 蚂蚁面试指南!
  2. 2020 年 4月全国程序员工资出炉!
  3. Sentinel Dashboard 中修改规则同步到 Nacos
  4. linux中用户的权限是什么,linux中用户权限设置与更改相关介绍(上)
  5. html网页共用头部和脚部,如何在HTML不同的页面中,共用头部与尾部?_html/css_WEB-ITnose...
  6. java 圈复杂度_关于Java:降低Switch语句的循环复杂度-Sonar
  7. torch.stack(), torch.cat()用法详解
  8. 未加载 ntdll.pdb的可能错误原因
  9. 海康摄像头取、录像机RTSP视频流的字串格式
  10. python3.x中的生成器generator调用next方法