基于C语言的信号发生器的设计

基于C语言的信号发生器的设计

万欢,耿健(南昌理工学院电子与信息学院,南昌330044)

图1系统整体框图

该系统采用了模块化的设计思想。其中的单片机控制芯片选用了STC89C52RC芯片,它的内部自带8K的FLASH程序存储器,后经系统调试证明,8K的存储空间基本能满足我们的设计要求;键盘显示模块是采用常用的4*4点阵键盘和12864液晶显示器来实现;幅度控制则是采用DAC0832这款D/A转换器的内部的电阻分压网络进行了程控。功放电路采用了成熟的OCL功率放大器,采用对管互推从而实现功率的放大输出;信号产生模块的设计采用的核心芯片AD9833,该芯片是ADI公司生产的一款低功耗、安全集成了DDS电路的可编程芯片,能够产生正弦波、三角波和方波。输出频率和相位可通过软件编程实现,易于调节,频率寄存器是28位的,主时钟为25MHz时,精度为0.1Hz,主频时钟为1MHz时,输出频率范围为0MHz—12.5MHz,精度可以达到0.004Hz。可以通过3线SPI接口将数据写入AD9833,这3个串口的最高工作频率可以达到40MHz,该芯片采用10引脚MSOP型表面封装,体积很小。三、频率参数的计算本文设计的波形发生器的频率步进可调值为0.1Hz,通过改变输入到AD9833中相位器的步长值,可达到改变频率的目的,根据DDFS原理有:fout=M(fMCLK/228)=>M=(228*fout)/25*106=10.73fout根据要输出的频率可以算出M值。四、波形产生的程序设计波形发生程序,采用C语言编程实现,较好的实现了正弦波的输出。下面给出波形产生程序的程序代码:voidWave_Generate(unsignedlongFreq,unsignedcharShape)//波形发生函数{unsignedlongtemp;unsignedchark;if(Freq>12000000)Freq=12000000;Config_Data[0]=0x2108;Config_Data[7]=0x2008;//设置AD9833的控制寄存器Temp=Freq*10.73;//Freq为预置的频率值Config_Data[1]=temp&0x00003fff;//以下为:将24位数据写入AD9833的频率寄存器Config_Data[3]=Config_Data[1];//每一个寄存器写两次Config_Data[2]=(temp&0x0fffc000)>>14;Config_Data[4]=Config_Data[2];Config_Data[1]=Config_Data[1]|0x4000;Config_Data[2]=Config_Data[2]|0x4000;Config_Data[3]=Config_Data[3]|0x4000;Config_Data[4]=Config_Data[4]|0x4000;Config_Data[5]=0xC000;//设置相位寄存器,使得初相位为零Config_Data[6]=0xE000;For(k=0;k<8;k++)//调用AD9833_send_word子程序,该程序实现向芯片写2个字节数据{AD9833_send_word(Config_Date[k])};}参考文献:[1]胡学武.用AT89C51实现超低频任意函数发生器[J].现代电子技术,2005,28(17),p105-106[2]刘复华.MCS296单片机及应用系统设计[M].北京:清华大学出版社,2004

标签:;  ;  ;  

基于C语言的信号发生器的设计
下载Doc文档

猜你喜欢