单片机课程设计---信号发生器

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

课程设计

信号发生器

学生姓名:***

学号: *********

学院:理学院

专业:应用物理

指导教师:任世伟刘天山

2016年 06 月 28 日

信号发生器

摘要:本文以STC89C51单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、锯齿波、波形的频率和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。介绍了波形的生成原理、硬件电路和软件部分的设计原理。

关键词:单片机,信号发生器,D/A转换

一、设计要求

利用单片机的控制及编程能力,采用查询法设计一个函数发生器,要求能够产生方波、正弦波,分析采样点数量与频率之间的关系。二、设计原理

向单片机输入所需要的程序并通过扩展D/A转换接口就可以方便地产生正弦信号。正弦波的产生比较特殊,它不是由单片机直接产生波形的,它只能产生连续的阶梯波来向正弦波不断地逼近。很显然,在一个周期内阶梯波的阶梯数目越多,单片机输出的波形也就越接近正弦波。如图所所示

一般而言,计算机要形成正弦波信号的最简便办法就是使用D/A 转换器,因计算机可以隔一定时间向D/A转换器输出一个数字量,而输出的该数字量为相应时刻的函数值,则在D/A转换器输出端就可以得到一个相应的函数信号。D/A转换器形成的函数信号实际上是一个阶梯状波。所以用D/A转化器形成的正弦波信号除了正弦基频分量(所需要的信号)外,还包含了各种高次谐波与余弦基频分量。因而形成的正弦波信号只能是一逼近的正弦波信号。为了正弦信号的数字量逼近,可以有多种方案。而逼近一个正弦函数的精确程度是和正弦波信号的细分度N和D/A转换器的分辨率直接有关。细分度N越大产生的正弦信号就越精确,但是这要求计算机速度也相应的高;D/A转化器的分辨率越高产生的正弦信号也就越精确,但是D/A转化器的分辨率受其价格和计算速度以及字长的制约,不宜过高,应取一个合理的分辨率。故对正弦信号逼近方案的讨论,是在确定的细分度N和D/A 转化器的分辨率基础上比较的。把其结果转换为十六进制,并把计算的十六进制以表格的形式存放于EPROM内存中,然后以查表的方式来形成正弦信号。采用查表的方式单片机正弦波发生器的工作原理如下:

对正弦信号进行采样,将正弦波的第一个周期的波形均分为若干等份,设正弦波一个周期采样点数共N 个。则有:

()360X n sin n N ⎛⎫

=• ⎪

⎝⎭ ①

上式中n 取0,1,2,......N-1,考虑到正弦函数值的范围是从-1 0 +1,将它们转化为定点无符号数值存放,例如存放的位数(即M )是8,那么对公式①:进行数值迁移,则有:

()360X 127sin 128

n n N ⎛⎫

=•+ ⎪⎝⎭ ②

这样正弦函数值范围-1-->0--> +1,因为00H~FFH 对应的数字量为0~255,存放的8位(即M)二进制数据则相应为0-->128--> 255(十进制表示)。依次对公式②采样可得X(n),n=0,1,2,......N-1共N 个数据,组成了一张正弦数据表,单片机将这一个周期的数据表存入EPROM 中。EPROM 的地址线和地址发生器的输出端相连。地址发生器在时钟作用下依次产生选通地址,就会依次选中EPROM 的0单元、1单元、2单元......N-1单元地址,再由D/A 转化器输出相应幅值的模拟信号,当地址发生器输出满N 个地址时,一个完整的正弦波就产生了。假设从数据表中每取一个数据,并将它从D/A 转化器输出至少需要时间为s t ,那么输出一个完整的正弦波所需要的时间为M T ,则有M T = s t ⨯N 。查表程序周而复始进行下去,便可产生连续的正弦波信号。

固定周期S T 是由若干机器周期组成,机器周期M T 一般又是单片机时钟周期s t 的若干倍,则有:

T =

s

M T N

一旦时钟确定,M T 也就固定了。一个固定周期T N 内的计数脉冲数就可以通过下式计算出来:

int N

s

T M t ⎛⎫=

⎪⎝⎭

三、程序设计: 3.1、设计流程图:

3.2程序源代码:(见附录1)

3.3产生波形图:(见附录2)

四、正弦波误差分析

4.1计数脉冲数M 对正弦波的影响

固定周期S T 是由若干机器周期组成,机器周期M T 一般又是单片机时钟周期s t 的若干倍,产生的正弦波周期为:

s T N s N T N M t =⨯=⨯⨯

在一个周期内相对误差为:

1==N M M s s s M

N t t

t T γ⨯=

⨯⨯

若用16MHz 时钟的单片机产生的正弦波,设其定时器输入脉冲周期是时钟脉冲的2倍时,则s t 计算如下:

6011t =

220.125f 1610

s ⨯=⨯=⨯ (

若要产生2300HZ 的正弦波,其周期应为

11

T =

434.783f 2300

s s ==(

取N=128则:

434.783T =

3.397128

s N T N ==(

因为int s

s T M t ⎛⎫

=

⎪⎝⎭

,所以M=27,则最大相对误差为:

11

=

==3.7%M 27

γ 由此可见,要减小误差,只能通过减小s t ,就可以是误差接近真实值。

4.2采样点N 对正弦波的影响

正弦波发生器是用N 个顺序的以正弦变化的数值来驱动D/A 芯片来产生正弦波的。按前面假设的来说,当每输出一点X(n),需要的最少时间为t s ,那么输出一个完整的正弦波(即一个周期)需要的时间为

s 3.397==27.1740.125

N T M t =

相关文档
最新文档