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

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 电子技术论坛

展开阅读全文

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值