您当前的位置:五五电子网电子知识单片机-工控设备综合-其它波形发生器制作原理说明以及源代码 正文
波形发生器制作原理说明以及源代码

波形发生器制作原理说明以及源代码

点击数:7161 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   综合-其它


第二种方案采用六个共阴极数码管LED进行动态显示波形和频率,直接用SPCE061A直接驱动LED,两位提供波形显示,四位提供频率显示。用IOB8—IOB13口作为位选控制, IOA8—IOA14口传输要显示的数据,数据线和位选线直接接凌阳SPCE061A单片机的I/O口即可,因为I/O口输出电流很小不会对LED造成损坏,它的电压值却足以驱动LED,这不像别的单片机还要外接驱动电路和电阻,采用凌阳SPCE061A单片机大大减化了设计过程和硬件电路。硬件电路如图5所示。 


 


2.2.4 语音播报电路的设计电路  
  凌阳的SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最高时钟可达到49M,具备运算速度高的优势等等,这为语音的播放、录放、合成及辨识提供了条件。另外SPCE061A单片机具有32k闪存,事先把所需要的语音信号录制好,整个语音信号经凌阳SACM_S480压缩算法压缩只占有13.2K存储空间,对凌阳SPCE061A单片机的存储系统来说绰绰有余。凌阳SPCE061A单片机自带双通道DAC音频输出, DAC1、DAC2转换输出的模拟量电流信号分别通过AUD1和AUD2管脚输出, DAC输出为电流型输出,经LM396音频放大,即可驱动喇叭放音,放大电路如图6(只列出了DAC1,DAC2类似)。在DAC1、DAC2后面接一个简单的音频放大电路和喇叭就能实现语音播报功能,这为单片机的音频设计提供了极大方便,音频的具体功能主要通过程序来实现。 

 


三、软件设计
  

3.1主程序流程图

  由于使用凌阳SPCE061A使外围电路变得异常简单,整个波形发生器的主体任务落到了程序编写上。整个系统的软件设计方案如图7,采用外部中断二来中断所显示波形,以便进入下一波形的编辑和输出,在波形输出的同时利用外部中断一来实现同步的频率调节。波形的具体产生是通过两路DAC来产生,之所以采用这种方式,是因为凌阳SPCE061A在这方面的设计为我们提供了极大的方便,在DAC的编程方面又提供了及其便利的编程环境。用函数来产生波形是大多数设计者喜之不舍得设计方案,但在具体设计方面,因为函数在单片机的运算过程中占据了太多的时钟周期,这就给我们追求高频波形一个瓶颈,要怎样解决这个问题呢?这里我采用查表来实现,根据理论凌阳SPCE061A单片机可达到一百兆的要求,这就能充分满足题目设计要求了,然而,由于函数产生波形极其方便,凌阳SPCE061A单片机有提供了大量函数库,在设计过程中我在低频部分依然采用函数设计。另外,波形频率随CPU的频率而变法,凌阳SPCE061A单片机的32768的实时时钟经过PLL倍频电路产生系统时钟频率(Fosc),Fosc再经过分频得到CPU时钟频率(CPUCLK)可通过对P_SystemClock(写)($7013H)单元编程来控制,这就为我们设计提供了丰富的CPU时钟选择。默认的Fosc、CPUCLK分别为24.576MHz和Fosc/8。我们可以通过对P_SystemClock单元编程完成对系统时钟和CPU时钟频率的定义,改变设置将可提供多种频率选择。在本设计中,波形编辑的第一部就是进行CPU频率选择,选择最高频和最低频作为粗调,在用键盘和中断进行微调,以便达到所需的频率及其幅值。下面将对各部分编程作详细说明。 


 
按此在新窗口浏览图片

3.2 分块程序流程 

按键控制部份

  在键扫描的过程中,先置IOA0~IOA3为带数据缓存器的高电平输出,置IOA4~IOA7为带下拉电阻的输入管脚,此时若有键按下,取IOA4~IOA7的数据将得到一个值,把此值保存下来,再置IOA4~IOA7为带数据反相器的高电平输出,置IOA0~IOA3为带下拉电阻的输入管脚,此时若键仍没弹起,取IOA0~IOA3的数据将得到另一个值,把这两个值组合就可得知是哪个键按下了,再通过查表得到键值,跳转至相应程序段,执行输出相应波形或者编辑波形,从而达到控制波形的目的。整体按键过程如图8所示。 

 
按此在新窗口浏览图片

正弦波形的形成 


  在设计之初,我一直都在尝试使用函数来计算输出波形,使用这种方法,在示波器上得到了很好的波形,但是在CPU时钟频率没调至最高的情况下,所得到的频率只是多少毫赫兹到几十赫兹之间,基本上没有实用价值。要达到更高的频率,就得另辟蹊径了。分析一下为什么频率上不去,主要原因在于,使用单片机进行正弦函数的运算时占去了不少时间,如果去掉这一计算过程波形的频率应该大有提高,另外就是CPU时钟频率没有调至最高,以及DAC转换过

 
按此在新窗口浏览图片

程需要时间。为了达到更高的频率,首先就要免去单片机的计算负担,我使用的解决方法是人为计算出要输出的点,然后建一个表通过查表来进行输出,这样主要工作任务就落到了建表的过程中。这样做的好处在于,查表所耗费的时钟周期相同,这样输出的点与点之间的距离就相等了,输出的波形行将更趋于完美,当然更让我们感到的高兴的是它输出波形的频率将近达到了100K赫兹,能够满足我们设计的扩展要求了。为了实现频率的调整,我在一个正弦波周期里建了两百个点,如果我们隔一个取点的话,且在CPU时钟频率不改变的情形下,正弦波频率将相对于前面的频率提高将近一倍。这样我们就得到了解决频率调整的方法,首先进行CPU时钟频率选择,再调整一个正弦函数一个周期输出的点数,幅度的调节是通过初始幅度设置再通过外部放大电路来调节,设计程序流程图如图所示。另外,由于函数产生波形及其方便,凌阳SPCE061A单片机又提供了大量函数库,在设计过程中我在低频部分依然采用函数设计,因为这更有利于数字幅度和频率的调节。设计程序流程图如图9和10所示。 


 
按此在新窗口浏览图片

三角波、锯齿波的形成 
  三角波、锯齿波形成的原理同正弦波形成的原理大致相同,在这里将不做作详细介绍,其流程图如图11所示。


 
按此在新窗口浏览图片

方波的形成和实现 
  方波是我们最常用的一种波形,并且常常作为一种标准信号应用在各个领域,凌阳SPCE061A提供了一种很好的方波发生机制,就是APWM调制,通过写入P_TimerA_Ctrl($700BH)单元的第6~9位,可选择设置APWM输出波形的脉宽占空比;同理,写入P_TimerB_Ctrl($700DH)单元的第6~9位,便可选择设置BPWM输出波形的脉宽占空比。我们可以将IOB8设置成同相输出端口,通过设置P_TimerA_Ctrl(写)($700BH)的第0~5位来选择TimerA的时钟源(时钟源A、B)。设置该单元的第6~9位(如图12所示),TimerA将输出不同频率的脉宽调制信号,即对脉宽占空比输出APWM进行控制。这里为了得到最标准的波形采用这种方式来实现标准方波。如图12所示就是我们进行APWM调制的原理图。


 


在某些应用领域由于各种干扰和响应的存在,实际电路往往存在各种信号缺陷和瞬变信号,为了满足各种需要我们还设计了有频率突变的方波,如图11所示。具体设计方案是采用不停的输出和停止输出某一幅度的值,在一个序列周期我们总共提供八位可变数值,因为在数据传输过程中一般是八位为一帧进行传输。通过键盘的编辑可以达到我们的需求。

上一页  [1] [2] [3]  下一页


本文关键字:制作  发生器  源代码  综合-其它单片机-工控设备 - 综合-其它