搜档网
当前位置:搜档网 › 基于AD9851的信号发生器(带程序).

基于AD9851的信号发生器(带程序).

基于AD9851的信号发生器(带程序).
基于AD9851的信号发生器(带程序).

基于AD9851的信号发生器

最近几年的电子设计大赛,差不多每年都考了DDS的设计。本人曾经也调试过DDS,但走了一些弯路,在这里写下一些心得,希望能对初调者有点帮助。下面将有电路图,以及详细的代码。

学过FPGA的同仁们,应该对DDS的原理就会有很好的理解了。用FPGA是很容易把一个简单型的ad8952烧出来的!其实原理相当的简单,无非就是由相位累加器,相位调制器,正弦查找ROM,DAC构成。通过改变相位累加的增量就很容易的改变的输出的频率了。

如果相位累加器(频率控制子)的位宽为N位(ad9851的N=32位)这就意味着把一个周期的正弦波形离散成了2的N次方个点,把这些点的幅值存在一个ROM中就构成了正弦查找ROM。如果系统时钟为Fclk,即把Fclk分成了2的N 次方份。如果此时的相位累加增量为(频率控制字)为B,那么此时的输出频率应为Fout=(B*Fclk)/ N。显然B=1时其最小值为Fclk/ N。B的值也不能太大,否则会输出失真波形。Fout的最大值理论上应该至少小于Fclk/4。所以要想提高输出频率的最大值,就得靠提高系统的外部时钟Fclk。

下面结合本人的代码来具体讲讲AD9851的应用。

AD9851的一些具体介绍这里就不说了。其DATASHEET上都说的很清楚。若看不懂E文,可以发E_M给我,我有中文资料。AD9851要写40位的控制子。其中前面32位就是频率控制子了。后面是有1个6倍频使能位,1个logic0位,1个POWER_DOWN位,还有5位相位模式字。这里我们只解决频率控制问题。也就是说在代码中本人只写了,32位的频率控制子,还有一个6倍频使能。其余的剩下几位由于没用到也就默认写为0了。AD9851可以用并和串俩中方式写入控制子。

其串行发送方式的控制子表如下:

本人主要将用串写控制子的时序与代码。其并的方式的代码也会给出。硬件电路图网上有很多资源,自己去找找!

主要看看代码吧:

/************************************************************* ad9851串口驱动程序

2007-8-28-------------water

************************************************************/

#include

#include

#include

//-----------------------定义管脚-------------------------------------------------------- sbit

D7=P3^3; //控制子串传送位

sbit DDS_FQUD=P3^4; //更新发送频率

sbit DDS_CLK=P3^5; //接外部晶振时钟这里为30M

unsigned long control_word(float freq);

void send_control( unsigned long bytedata);

void AD9851Init(void) //DDS初始化函数,包括DDS复位和初始化为串行发送{

DDS_CLK=0;

DDS_FQUD=0;

DDS_CLK=1;

DDS_CLK=0;

DDS_FQUD=1;

DDS_FQUD=0;

}

main()

{

unsigned long x;

DDS_FQUD=0;

AD9851Init();

x=control_word(500000);

while(1)

send_control(x);

}

//计算9851控制字,freq为你要输出的频率

unsigned long control_word(float freq)

{

unsigned long water;

water=23.86115*freq;//外部晶振为30M,6倍频后180M,其关系由公式算出。//water=143.456*freq; //若不用6倍频,则其关系

return(water);

}

//发送控制字

void send_control( unsigned long bytedata)

{

int i;

unsigned char model="0x01";//模式选择为六倍频

DDS_FQUD=0;

_nop_();_nop_();_nop_();_nop_();_nop_();

for(i=0;i<32;i++)//先写32位的频率控制子(现低位后高位) {

D7=(bit)(bytedata&(0x00000001)); //按时序写入

DDS_CLK=1;

_nop_();_nop_();_nop_();_nop_();_nop_(); //必要的时序延时 DDS_CLK=0;

_nop_();_nop_();_nop_();_nop_();_nop_();

bytedata>>=1;

}

for(i=0;i<8;i++)//再写其他8位控制字,这里只写了6倍频使能 {

D7=(bit)(model&(0x01));

DDS_CLK=1;

_nop_();_nop_();_nop_();_nop_();_nop_();

DDS_CLK=0;

_nop_();_nop_();_nop_();_nop_();_nop_();

model>>=1;

}

DDS_FQUD=1;

DDS_FQUD=0;

}

上面的代码中已经有详细的注解。其参考DATASHEET中的时序如下:

并行方式的驱动代码如下:

AD9851.H文件

//======IO Define=======

//sbit DDSRST="P2"^0;

sbit FQ_UD_AD9851=P3^3;

sbit W_CLK_AD9851=P3^4;

//======================

unsigned long int freq = 0;

//unsigned char Control_AD9851 = 0x09; // Phase0 ,power down mode and 6 REFCLK Multiplier enable

//unsigned char Control_AD9851 = 0x00; // Phase0 ,power on mode and 6 REFCLK Multiplier disable

unsigned char Control_AD9851 = 0x01; // Phase0 ,power on mode and 6 REFCLK Multiplier enable

unsigned char W1=0X0e;//附初值为1MHZ

unsigned char W2=0X38;

unsigned char W3=0Xe3;

unsigned char W4=0X8e;

void Parallel2Serial_AD9851(void)

{ FQ_UD_AD9851=0;

W_CLK_AD9851=0;

P2=Control_AD9851;_nop_();_nop_();_nop_();_nop_();//延时很重要,对时序

W_CLK_AD9851=1;//字装入信号,上升沿有效

W_CLK_AD9851=0;

P2=W1;_nop_();_nop_();_nop_();_nop_();_nop_();

W_CLK_AD9851=1;

W_CLK_AD9851=0;

P2=W2;_nop_();_nop_();_nop_();_nop_();_nop_();

W_CLK_AD9851=1;

W_CLK_AD9851=0;

P2=W3;_nop_();_nop_();_nop_();_nop_();_nop_();

W_CLK_AD9851=1;

W_CLK_AD9851=0;

P2=W4;_nop_();_nop_();_nop_();_nop_();_nop_();

W_CLK_AD9851=1;

W_CLK_AD9851=0;

FQ_UD_AD9851=1;

FQ_UD_AD9851=0;

}

void Set_Freq(float Freqency)

{

//freq= (unsigned long int)(23.86092942*Freqency); // SYSCLK = 180 MHz

freq= (unsigned long int)(23.86115*Freqency); // SYSCLK = 180 MHz W4=(unsigned char)freq&0xff;

freq=freq>>8;

W3=(unsigned char)freq&0xff;

freq=freq>>8;

W2=(unsigned char)freq&0xff;

freq=freq>>8;

W1=(unsigned char)freq&0xff;

Parallel2Serial_AD9851();

}

AD9851.C文件

/******************************************************* ad9851并口驱动程序

外部提供30MHZ晶振,6倍频率模式

2007-8-28-----------------water

*********************************************************/

#include

#include

#include

sbit RST_AD9851= P3^2;

//长延时

void Delay80Ms(unsigned int k)

{

unsigned int j;

while(k--)

{

j=7269;

while(j--);

}

}

void main(void)

{

RST_AD9851=1;

RST_AD9851=1;

RST_AD9851=0;

//Set_Freq(23000000);//发送的频率

while(1)

{

Set_Freq(22000000);//发送的频率

}

}

以上就是AD9851的驱动程序。

下面是本人用KS0108控制器的LCD做的任意频率信号发生器(当然为简单只写了正弦波和方波)AD9851是可以直接产生方波的(里面有比较器)。

全部代码如下(有兴趣的可以参考):

// body.h文件

void delay(unsigned int t);

void write_com(unsigned char cmdcode);

void write_data(unsigned char Dispdata);

unsigned char read_data();

void Clr_Scr();

void Disp_Img(unsigned char code *img);

void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk); void

hz_disp32(unsigned char pag,unsigned char col, unsigned char code *hzk); void

hz_disp48(unsigned char pag,unsigned char col, unsigned char code *hzk); void

hz_disp64(unsigned char pag,unsigned char col, unsigned char code *hzk); void

init_lcd();

void Putedot(unsigned char Order);

void Putstr( unsigned char *str , unsigned char i , unsigned char lie, unsigned char hang); void Msg(int flg) ;

bit judge_hitkey() ;

void mdelay(unsigned int N) ;

unsigned char kbscan(void);

unsigned long int covert_decimal_to_hex(unsigned long int r) ;

#define Disp_On 0x3f

#define Disp_Off 0x3e

#define Col_Add 0x40

#define Page_Add 0xb8

#define Start_Line 0xc0

#define Lcd_Bus P0 //MCU P1<------> LCM

sbit Mcs="P1"^5; //Master chip enable

sbit Scs="P1"^6; //Slave chip enable

sbit Enable="P1"^2; //6800 mode Enable single

sbit Di="P1"^0; //Data or Instrument Select

sbit RW="P1"^1; //Write or Read

sbit Lcd_Rst=P1^7; //Lcm reset

// body.c文件

#include

#include

#include

#include

#include

//#include

#include "data.h"

//-----------液晶定义引脚-----------------------

#define Disp_On 0x3f

#define Disp_Off 0x3e

#define Col_Add 0x40

#define Page_Add 0xb8

#define Start_Line 0xc0

#define Lcd_Bus P0 //MCU P1<------> LCM

sbit Mcs="P1"^5; //Master chip enable

sbit Scs="P1"^6; //Slave chip enable

sbit Enable="P1"^2; //6800 mode Enable single

sbit Di="P1"^0; //Data or Instrument Select

sbit RW="P1"^1; //Write or Read

sbit Lcd_Rst=P1^7; //Lcm reset

//-----------------------ad9851定义管脚

--------------------------------------------------------

sbit D7=P3^3;

sbit DDS_FQUD=P3^4; //更新发送频率 sbit DDS_CLK=P3^5;

//--------------------ad9851函数声明-------------

unsigned long control_word(float freq);

void send_control( unsigned long bytedata);

//-----------全局变量---------------------------

unsigned char row;

unsigned char col;

extern unsigned char j_j; //一级菜单标志j_j为全局变量 extern float beauty; /****************************液晶程序部分

************************************/

/*------------------延时子程序-----------------------------*/ void delay(unsigned int t) {

unsigned int i,j;

for(i=0;i

for(j=0;j<10;j++)

;

}

/*------------------写命令到LCD------------------------------*/ void write_com(unsigned char cmdcode)

{

Di=0;

RW=0;

Lcd_Bus=cmdcode;

delay(0);

Enable=1;

delay(0);

Enable=0;

}

/*-------------------写数据到LCD----------------------------*/ void write_data(unsigned char Dispdata)

{

Di=1;

RW=0;

Lcd_Bus=Dispdata;

delay(0);

Enable=1;

delay(0);

Enable=0;

}

/*-------------------读LCD数据----------------------------*/

unsigned char read_data()

{

unsigned char tmpin;

Di=1;

RW=1;

delay(0);

Enable=1;

delay(0);

Enable=0;

tmpin=Lcd_Bus;

return tmpin;

}

/*------------------清除内存---------------*/

void Clr_Scr()

{

unsigned char j,k;

Mcs=1;Scs=1;

write_com(Page_Add+0);

write_com(Col_Add+0);

for(k=0;k<8;k++)

{

write_com(Page_Add+k);

for(j=0;j<64;j++)write_data(0x00);

}

}

/*---------------------指定位置显示汉字8*16-----------------------*/

void hz_disp8(unsigned char pag,unsigned char col, unsigned char code *hzk) { unsigned char j="0",i=0;

for(j=0;j<2;j++)

{

write_com(Page_Add+pag+j);

write_com(Col_Add+col);

for(i=0;i<8;i++) write_data(hzk[8*j+i]);

}

}

/*---------------------指定位置显示汉字16*16-----------------------*/

void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk) {

unsigned char j="0",i=0;

for(j=0;j<2;j++)

{

write_com(Page_Add+pag+j);

write_com(Col_Add+col);

for(i=0;i<16;i++) write_data(hzk[16*j+i]);

}

}

/*---------------------显示32*16的汉字字窜-----------------------*/

void hz_disp32(unsigned char pag,unsigned char col, unsigned char code *hzk) { unsigned char j="0",i=0;

for(j=0;j<2;j++)

{

write_com(Page_Add+pag+j);

write_com(Col_Add+col);

for(i=0;i<32;i++) write_data(hzk[32*j+i]);

}

}

/*---------------------显示48*16的字窜----------------------*/

void hz_disp48(unsigned char pag,unsigned char col, unsigned char code *hzk) { unsigned char j="0",i=0;

for(j=0;j<2;j++)

{

write_com(Page_Add+pag+j);

write_com(Col_Add+col);

for(i=0;i<48;i++) write_data(hzk[48*j+i]);

}

}

/*--------------------显示64*16的字窜---------------------*/

void hz_disp64(unsigned char pag,unsigned char col, unsigned char code *hzk) { unsigned char j="0",i=0;

for(j=0;j<2;j++)

{

write_com(Page_Add+pag+j);

write_com(Col_Add+col);

for(i=0;i<64;i++) write_data(hzk[64*j+i]);

}

}

/*------------------初始化LCD屏--------------------------*/ void init_lcd()

{

Lcd_Rst=0;

delay(100);

Lcd_Rst=1;

delay(100);

Mcs=1;

Scs=1;

delay(100);

write_com(Disp_Off);

write_com(Page_Add+0);

write_com(Start_Line+0);

write_com(Col_Add+0);

write_com(Disp_On);

}

//-----------------半角字符点阵码数据输出---------------------- void Putedot(unsigned char Order)

{

unsigned char cbyte, j="0",i=0;

int x;

x=Order * 0x10;

for(j=0;j<2;j++)

{

write_com(Page_Add+row+j);

write_com(Col_Add+col);

for(i=0;i<8;i++)

{

cbyte = Ezk[x];

write_data(cbyte); //写输出一字节

x++;

}

}

}

//------------------------一个字串的输出----------------------------------------

void Putstr( unsigned char *str , unsigned char i , unsigned char lie, unsigned char hang) {

unsigned char j,X;

for (j=0;j

{

col=lie+8*j; //换列。。。。。肖注释

row=hang;

X = str[j];

Putedot(X-0x20); /*ascii码表从0x20开始*/

}

}

/*************************键盘扫描程序部分

*******************************/

//--------------判断是否有键按下,有返回1,没有返回0 ---------------- bit

judge_hitkey()

{

unsigned char scancode,keycode;

scancode=0x0f; //P1.4~P1.7输出全1全1则无键闭合 P2=scancode;

keycode=P2; //读P1.0~P1.3的状态

if(keycode==0x0f)

return(0); //全1则无键闭合

else

return(1); //否则有键闭合

}

//---------------------延时---------------------------------

void mdelay(unsigned int N)

{

int i;

for(i=0;i

}

//----------------按键扫描--------------------------------

unsigned char kbscan(void)

{

unsigned char sccode,recode,key;

P2=0xf0; //置所有行为低电平,行扫描,列线输入(此时)

if((P2&0xf0)!=0xf0) //判断是否有有键按下(读取列的真实状态,若第4列有键按下则P1的值会变成0111 0000),有往下执行

{

mdelay(10000); //延时去抖动(10ms)

if((P2&0xf0)!=0xf0) //再次判断列中是否是干扰信号,不是则向下执行

{

sccode=0xFE; //逐行扫描初值(即先扫描第1行)

while((sccode&0x10)!=0) //行扫描完成时(即4行已经全部扫描完成)sccode为1110 1111 停止while程序

{

P2=sccode; //输出行扫描码

if ((P2&0xf0)!=0xf0) //本行有键按下(即P1(真实的状态)的高四位不全为1)break;

sccode=(sccode<<1)|0x01;//行扫描码左移一位

}

recode=(P2&0xf0)|0x0f; //列

key=~(sccode&recode); //返回行和列

return(key);

}

}

}

/*------------------------------信息显示部分------------------------*/

void Msg(int flg)

{ unsigned char STR1[]="1HZ"; //用字符窜输出,空间不够时改回,一律用字摸,把EZK库给删除

unsigned char STR2[]="10HZ";

unsigned char STR3[]="100HZ";

unsigned char STR4[]="1kHZ";

unsigned char STR5[]="(KHZ)";

unsigned char STR6[]="ok";

int i1=0,i2=0,i3=0,i4=0;

unsigned char key="0" ;

float beau="0", an="0";

unsigned long x;//频率控制字

if(flg==1) //信号发生器名字

{

Mcs=1;Scs=0;

hz_disp48(3,16,xhf);

Mcs=0;Scs=1;

hz_disp48(3,0,syq);

}

if(flg==2) //一级菜单界面

{

Mcs=1;Scs=0;

hz_disp32(0,32,ry);

hz_disp32(2,32,bj);

Putstr(STR1,strlen(STR1),16,4);

Putstr(STR2,strlen(STR2),16,6);

Mcs=0;Scs=1;

hz_disp16(0,0,p);

hz_disp16(0,16,l);

hz_disp32(2,0,xz);

Putstr(STR3,strlen(STR3),16,4);

Putstr(STR4,strlen(STR4),16,6);

}

if(flg==3) //任意频率输入界面

{

int i="0",a=0,j=0;

Clr_Scr();

Mcs=1;Scs=0;

hz_disp32(0,32,sr);

Mcs=0;Scs=1;

hz_disp16(0,0,p);

hz_disp16(0,16,l);

hz_disp8(0,32,mh);

hz_disp32(3,32,hz);

Mcs=1;Scs=0;

while(1) //再次进入扫描死循环,键控键盘{

j=i;//下面有用

key=kbscan(); //再次扫描

while(judge_hitkey()); //判断键释放

Mcs=1;Scs=0;

if(i<8)//只有8位数大的数据,若还要加大,则要稍改显示左右边 {

switch (key)

{

case 0x24: hz_disp8(3,8*i,shu1[9]);an=9;i++;break;//用i来确定数字显示的位置case 0x28: hz_disp8(3,8*i,shu1[8]);an=8;i++;break;//用an来代表按下的数值case 0x41: hz_disp8(3,8*i,shu1[7]);an=7;i++;break;

case 0x42: hz_disp8(3,8*i,shu1[6]);an=6;i++;break;

case 0x44: hz_disp8(3,8*i,shu1[5]);an=5;i++;break;

case 0x48: hz_disp8(3,8*i,shu1[4]);an=4;i++;break;

case 0x81: hz_disp8(3,8*i,shu1[3]);an=3;i++;break;

case 0x82: hz_disp8(3,8*i,shu1[2]);an=2;i++;break;

case 0x84: hz_disp8(3,8*i,shu1[1]);an=1;i++;break;

case 0x88: hz_disp8(3,8*i,shu1[0]);an=0;i++;break;

default :break;

}

}

if(i!=j)//代表有按键按下,进行十进制移位,把按键值转为十进制数 {

beau=(float)beau*10;

beau=(beau+an);

}

if(key==0x18) //按下确认键,

{

Mcs=1;Scs=0;

Putstr(STR6,2,16,6);

beauty=beau; // 把十进制键值传给全局变量 }

x=control_word(beauty);//得到频率控制字 send_control(x);//发送频率控制字

if(key==0x14) //退出死循环

break; //返回一级菜单

}

beau=0;

beauty=0; //清除键值

Clr_Scr(); //清除此时界面

j_j=0; // 返回一级菜单界面

i=0; //清去i的数值

}

if(flg==4) //步进为1HZ界面

{

Mcs=0;Scs=1;

hz_disp32(3,0,hz);

Mcs=1;Scs=0;

while(1)

{

key=kbscan();

while(judge_hitkey());

if(key==0x12) //每按一下加一HZ,i1位按下的次数 i1++;

if(key==0x11)

i1--;

Mcs=1;Scs=0;

hz_disp8(3,32,shu1[i1]);

if(i1<0||i1>9) //超出范围重0开始 i1=0;

if(key==0x14) break; //退出键

if(key==0x18)

beauty=i1; // 把步进值给全局变量beauty x=control_word(beauty);//得到频率控制字send_control(x);//发送频率控制字

}

beauty=0;

Clr_Scr();

j_j=0; //返回一级菜单界面

i1=0; //消去i1的值

}

if(flg==5) //步进为10HZ界面

{

Mcs=0;Scs=1;

hz_disp32(3,0,hz);

Mcs=1;Scs=0;

hz_disp8(3,32,shu1[0]);

while(1)

{

key=kbscan();

while(judge_hitkey());

if(key==0x12)

i2++;

if(key==0x11)

i2--;

Mcs=1;Scs=0;

hz_disp8(3,24,shu1[i2]);

if(i2<0||i2>9) //超出范围重0开始

i2=0;

if(key==0x14) break; //退出键返回一级菜单界面 if(key==0x18)

beauty=(float)i2*10; //把步进值给全局变量beauty x=control_word(beauty);//得到频率控制字

send_control(x);//发送频率控制字

}

beauty=0;

Clr_Scr();

j_j=0;

i2=0;

}

if(flg==6) //步进为100HZ界面

{

Mcs=0;Scs=1;

hz_disp32(3,0,hz);

Mcs=1;Scs=0;

hz_disp8(3,32,shu1[0]);

hz_disp8(3,24,shu1[0]);

while(1)

{

key=kbscan();

while(judge_hitkey());

if(key==0x12)

i3++;

if(key==0x11)

i3--;

Mcs=1;Scs=0;

hz_disp8(3,16,shu1[i3]);

if(i3<0||i3>9) //超出范围重0开始

i3=0;

if(key==0x14) break; //退出键返回一级菜单界面 if(key==0x18)

beauty=(float)i3*100; // 把步进值给全局变量beauty x=control_word(beauty);//得到频率控制字

send_control(x);//发送频率控制字

}

beauty=0;

Clr_Scr();

j_j=0;

i3=0;

}

if(flg==7 ) //步进为1kHZ界面

{

Mcs=0;Scs=1;

Putstr(STR5,strlen(STR5),0,3);

Mcs=1;Scs=0;

hz_disp8(3,56,shu1[0]);

while(1)

{

key=kbscan();

while(judge_hitkey());

if(key==0x12)

i4++;

if(key==0x11)

i4--;

Mcs=1;Scs=0;

hz_disp8(3,56,shu1[i4]);

if(i4<0||i4>9) //超出范围重0开始

i4=0;

if(key==0x14) break; //退出键返回一级菜单界面 if(key==0x18)

beauty=(float)i4*1000; // 把步进值给全局变量beauty x=control_word(beauty);//得到频率控制字

send_control(x);//发送频率控制字

}

beauty=0;

Clr_Scr();

j_j=0;

i4=0;

}

}

//主程序所在文

//2007-8-14,修改,

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include"data.h"

unsigned char j_j;

float beauty;//要输出的频率

//-----------------------ad9851定义管脚

--------------------------------------------------------

sbit D7=P3^3;

sbit DDS_FQUD=P3^4; //更新发送频率

sbit DDS_CLK=P3^5;

unsigned long control_word(float freq);

void send_control( unsigned long bytedata);

//-------------------ad9851部分

-------------------------------------------------------------------------

//DDS初始化函数,包括DDS复位和初始化为串行发送

void AD9851Init(void)

{

DDS_CLK=0;

DDS_FQUD=0;

DDS_CLK=1;

DDS_CLK=0;

DDS_FQUD=1;

DDS_FQUD=0;

}

//计算9851控制字

unsigned long control_word(float freq)

{

unsigned long water;

water=23.86115*freq;

return(water);

}

//发送控制字

void send_control( unsigned long bytedata)

{

int i;

unsigned char model="0x01";//模式选择为六倍频 DDS_FQUD=0; _nop_();_nop_();_nop_();_nop_();_nop_(); for(i=0;i<32;i++)

{

D7=(bit)(bytedata&(0x00000001));

DDS_CLK=1;

_nop_();_nop_();_nop_();_nop_();_nop_(); DDS_CLK=0;

_nop_();_nop_();_nop_();_nop_();_nop_(); bytedata>>=1;

}

for(i=0;i<8;i++)

{

D7=(bit)(model&(0x01));

DDS_CLK=1;

_nop_();_nop_();_nop_();_nop_();_nop_(); DDS_CLK=0;

_nop_();_nop_();_nop_();_nop_();_nop_(); model>>=1;

}

4-20ma信号发生器电路

4-20ma信号发生器电路 制作要求:以精度0.5级为例,二线制4~20mA模拟恒环路信号发生器执行标准:GB/T13850-1998; (1)基准要稳,4mA是对应的输入零位基准,基准不稳,谈何精度线性度,冷开机3分锺内4mA的零位漂移变化不超过4.000mA0.5%以内;(即3.98-4.02mA),负载250Ω上的压降为0.995-1.005V,国外IC心片多用昂贵的能隙基准,温漂系数每度变化10ppm; (2)内电路总计消耗电流<4mA,加整定后等于4.000mA,而且有源整流滤波放大恒流电路不因原边输入变化而消耗电流也随之变化,国外IC心片采用恒流供电; (3)当工作电压24.000V时,满量程20.000mA时,满量程20.000mA的读数不会因负载0-700Ω变化而变化;变化不超过20.000mA0.5%以内; (4)当满量程20.000mA时,负载250Ω时,满量程20.000mA的读数不会因工作电压15.000V-30.000V变化而变化;变化不超过20.000mA0.5%以内;

(5)当原边过载时,输出电流不超过25.000mA+10%以内,否则PLC/DCS内供变送器用的24V工作电源和A/D输入箝位电路因功耗过大而损坏,另外变送器内的射随输出亦因功耗过大而损坏,无A/D输入箝位电路的更遭殃; (6)当工作电压24V接反时不得损坏变送器,必须有极性保护; (7)当两线之间因感应雷及感应浪涌电压超过24V时要箝位,不得损坏变送器;一般在两线之间并联1-2只TVS瞬态保护二极管 1.5KE可抑制每20秒间隔一次的20毫秒脉宽的正反脉冲的冲击,瞬态承受冲击功率1.5KW-3KW; (8)产品标示的线性度0.5%是绝对误差还是相对误差,可以按以下方法来辨别 方可一目了然:符合下述指标是真的线性度0.5%. 原边输入为零时输出4mA正负0.5%(3.98-4.02mA),负载250Ω上的压降为 0.995-1.005V 原边输入10%时输出5.6mA正负0.5%(5.572-5.628mA)负载250欧姆上的压降为1.393-1.407V 原边输入25%时输出8mA正负0.5%(7.96-8.04mA)负载250Ω上的压降为 1.990- 2.010V 原边输入50%时输出12mA正负0.5%(11.94-12.06mA)负载250Ω上的压降为2.985-3.015V 原边输入75%时输出16mA正负0.5%(15.92-16.08mA)负载250Ω上的压降为3.980-4.020V 原边输入100%时输出20mA正负0.5%(19.90-20.10mA)负载250Ω上的压降为4.975-5.025V (9)原边输入过载时必须限流:原边输入过载大于125%时输出过流限制25mA +10%(25.00-27.50mA)负载250Ω上的压降为6.250-6.875V; (10)感应浪涌电压超过24V时有无箝位的辨别:在两线输出端口并一个交流50V 指针式表头,用交流30-35V接两根线去瞬间碰一下两线输出端口,看有无箝位,箝位多少伏可一目了然啦; (11)有无极性保护的辨别:用指针式万用表Ω乘10K档正反测量两线输出端口,总有一次Ω阻值无限大,就有极性保护; (12)有无极输出电流长时间短路保护:原边输入100%时或过载大于125%-200%时,将负载250Ω短路,测量短路保护限制是否在25mA+10%; (13)工业级别和民用商用级别的辨别:工业级别工作温度范围是-25度到+70度,温漂系数是每度变化100ppm,即温度每度变化1度,精度变化为万分之一;

PWM信号发生器的设计程序(veriloghdl)

PWM信号发生器的设计程序 module pwmgen(clk,rst,ce,addr,write,wrdata,read,bytesel,rddata,pwm); input clk,rst,ce; input [1:0]addr; input write,read; input[31:0]wrdata; output[31:0]rddata; input[31:0]bytesel; output pwm; reg[31:0]clk_div_reg,duty_cycle_reg; reg control_reg; reg clk_div_reg_sel,duty_cycle_reg_sel,control_reg_sel; reg[31:0]pwm_cnt,rddata; reg pwm; wire pwm_ena; always@(addr) begin clk_div_reg_sel<=0;duty_cycle_reg_sel<=0;control_reg_sel<=0; case(addr) 2'b00:clk_div_reg_sel<=1; 2'b01:duty_cycle_reg_sel<=1; 2'b10:control_reg_sel<=1; default: begin clk_div_reg_sel<=0; duty_cycle_reg_sel<=0; control_reg_sel<=0; end endcase end always@(posedge clk or negedge rst) begin if(rst==1'b0) clk_div_reg=0; else begin if(write & ce & clk_div_reg_sel) begin if(bytesel[0]) clk_div_reg[7:0]=wrdata[7:0]; if(bytesel[1]) clk_div_reg[15:8]=wrdata[15:8];

信号发生器电路的焊接与调试-电路图

一、信号发生器电路安装与调试考核评分表 准考证号姓名规定时间分钟 开始时间结束时间实用时间得分 考核内容及要求配分评分标准扣分 1 元器件清点检查:在10分钟内对所有元 器件进行检测,并将不合格元器件筛选出来进 行更换,缺少的要求补发。 10 超时更换或要求补发按损坏 元件扣分,扣3分/个。 2 安装电路:按装配图进行装接,要求不装 错,不损坏元器件,无虚焊,漏焊和搭锡,元 器件排列整齐并符合工艺要求。 30 漏装,错装或虚焊、漏焊、 搭锡,扣2分/个,安装不整 齐和不符合工艺要求的扣1 分/处,损坏元件扣3分/个。 3 电源电路:接通交流电源,测量交流电压 和各直流电压+12V、-12V、V CC 、-5V。 信号发生器电路:接通+12V、-12V、V CC 、 -5V电源。测量函数信号波形:方波、正弦波、 三角波形。 20 电压测试方法不正确扣10 分,测量值有误差扣5分。 4 选择C=10uf,调节RW13、RW14、RW15, 记录方波的占空比: 1、 2、 3、 10 不会用示波观察输出信号波 形扣10分, 调节不正确扣5分, 波形记录不正确扣5分。 5 改变电容:100nf——100uf,并调节RW11, 记录正弦波输出频率f: 1、 2、 3、 10 最大不失真电压测试方法不 正确扣5分,测量值不准确 扣5分,不会计算最大不失 真功率扣5分。 6 调节RW21、RW22, 记录正弦波输出Vpp: 1、 2、 3、 10 不会测试功放电路的灵敏度 扣5分,不会计算电压放大 倍数扣5分。 7 调节电位器RW16、RW17, 记录正弦波形的失真: 1、 2、 3、 10 测量方法不正确扣5分, 测量数据每处2分,不会绘 制频响曲线扣5分 开始时间:结束时间:实用时间:

信号发生器的基本参数和使用方法

信号发生器 本人介绍一下信号发生器的使用和操作步骤. 1、信号发生器参数性能 频率范围:0.2Hz ~2MHz 粗调、微调旋钮 正弦波, 三角波, 方波, TTL 脉波 0.5" 大型 LED 显示器 可调 DC offset 电位 输出过载保护 信号发生器/信号源的技术指标: 波形正弦波, 三角波, 方波, Ramp 与脉波输出 振幅>20Vp-p (open circuit); >10Vp-p (加 50Ω负载) 阻抗50Ω+10% 衰减器-20dB+1.0dB (at 1kHz) DC 飘移<-10V ~ >+10V, (<-5V ~ >+5V 加 50Ω负载) 周期控制 1 : 1 to 10 : 1 continuously rating 显示幕4位LED显示幕 频率范围0.2Hz to2MHz(共 7 档) 频率控制Separate coarse and fine tuning 失真< 1% 0.2Hz ~ 20kHz , < 2% 20kHz ~ 200kHz 频率响应< 0.2dB 0.2Hz ~100kHz; < 1dB100kHz~2MHz 线性98% 0.2Hz ~100kHz; 95%100kHz~2MHz

对称性<2% 0.2Hz ~100kHz 上升/下降时间<120nS 位准4Vp-p±1Vp-p ~ 14.5Vp-p±0.5Vp-p 可调 上升/下降时间<120nS 位准>3Vpp 上升/下降时间<30nS 输入电压约 0V~10V ±1V input for 10 : 1 frequency ratio 输入阻抗10kΩ (±10%) 交流 100V/120V/220V/230V ±10%, 50/60Hz 电源线× 1, 操作手册× 1, 测试线 GTL-101 × 1 230(宽) × 95(高) × 280(长) mm,约 2.1 公斤 信号发生器是为进行电子测量提供满足一定技术要求电信号的仪器设备。这种仪器是多用途测量仪器,它除了能够输出正弦波、矩形波尖脉冲、TTL电平、单次脉冲等五种波形,还可以作频率计使用,测量外输入信号的频率 1.信号发生器面板: (1)电源开关; (2)信号输出端子; (3)输出信号波形选择;

2021年基于5单片机的信号发生器-完整电路、程序

摘要 欧阳光明(2021.03.07) 本文以STC89C51单片机为核心设计了一个低频函数信号产生器。信号产生器采取数字波形合成技术,通过硬件电路和软件法度相结合,可输出自界说波形,如正弦波、方波、三角波、三角波、梯形涉及其他任意波形,波形的频率和幅度在一定规模内可任意修改。波形和频率的修改通过软件控制,幅度的修改通过硬件实现。介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统可以产生最高频率798.6HZ的波形。该信号产生器具有体积小、价格低、性能稳定、功能齐全的优点。 关键词:低频信号产生器;单片机;D /A转换; 1设计选题及任务 设计题目:基于单片机的信号产生器的设计与实现 任务与要求: 设计一个由单片机控制的信号产生器。运用单片机系统控制产生多种波形,这些波形包含方波、三角波、锯齿波、正弦波等。信号产生器所产生的波形的频率、幅度均可调节。并可通过软件任意修改信号的波形。 基本要求: 1. 产生三种以上波形。如正弦波、三角波、矩形波等。 2.最年夜频率不低于500Hz。并且频率可按一定规律调节,如周期

按1T,2T,3T,4T或1T,2T,4T,8T变更。 3.幅度可调,峰峰值在0——5V之间变更。 扩展要求:产生更多的频率和波形。 2系统概述 2.1计划论证和比较 2.1.1总体计划: 计划一:采取模拟电路搭建函数信号产生器,它可以同时产生方波、三角波、正弦波。可是这种模块产生的不克不及产生任意的波形(例如梯形波),并且频率调节很不便利。 计划二:采取锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该计划性能良好,但难以达到输出频率笼盖系数的要求,且电路庞杂。 计划三:使用集成信号产生器产生芯片,例如AD9854,它可以生成最高几十MHZ的波形。可是该计划也不克不及产生任意波形(例如梯形波),并且价格昂贵。 计划四:采取AT89C51单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯洁。它的特点是可产生任意波形,频率容易调节,频率能达到设计的500HZ以上。性能高,在低频规模内稳定性好、操纵便利、体积小、耗电少。 经比较,计划四既可满足课程设计的基本要求又能充分阐扬其优势,电路简单,易控制,性价比高,所以采取该计划. 2.1.2修改幅度计划: 计划一:可以将送给DA的数字量乘以一个系数,这样就可以修改DA输出电流的幅度,从而修改输出电压;可是这样做有很严重的问题,单片机在做乘法运算时需要很长的时间,这样的话输出波形的频率就会很低,达不到至少500HZ的要求; 并且该计划的输出电压做不到连续可调,当DA的输入数字量比较小时,输出的波形失真就会比较严重。 计划二:将输出电压通过一个运算放年夜器的放年夜。这样还有个优点是幅度连续可调。 经比较,计划二既可满足课程设计的基本要求,并且电路也挺简单。

DDS信号发生器电路设计

1. 信号产生部分 1.1 频率控制字输入模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity ddsinput is port(a,b,c,clk,clr:in std_logic; q1,q2,q3,q4,q5:buffer unsigned(3 downto 0)); end ddsinput; architecture a of ddsinput is signal q:std_logic_vector(2 downto 0); begin q<=c&b&a; process(cp,q,clr) begin if clr='1'then q1<="0000";q2<="0000";q3<="0000";q4<="0000";q5<="0000"; elsif clk 'event and clk='1'then

DDS信号信号发生器电路设计 case q is when"001"=>q1<=q1+1; when"010"=>q2<=q2+1; when"011"=>q3<=q3+1; when"100"=>q4<=q4+1; when"101"=>q5<=q5+1; when others=>NULL; end case; end if; end process; end a; 1.2 相位累加器模块 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity xiangwei is port(m:in std_logic_vector(19 downto 0); clk,clr:in std_logic; data:out std_logic_vector(23 downto 0)); end xiangwei; architecture a of xiangwei is signal q:std_logic_vector(23 downto 0); begin process(clr,clk,m,q) begin if clr='1'then q<="000000000000000000000000"; elsif (clk'event and clk='1')then q<=q+m; end if; data<=q; end process; end a;

基于AD9851的信号发生器(带程序).

基于AD9851的信号发生器 最近几年的电子设计大赛,差不多每年都考了DDS的设计。本人曾经也调试过DDS,但走了一些弯路,在这里写下一些心得,希望能对初调者有点帮助。下面将有电路图,以及详细的代码。 学过FPGA的同仁们,应该对DDS的原理就会有很好的理解了。用FPGA是很容易把一个简单型的ad8952烧出来的!其实原理相当的简单,无非就是由相位累加器,相位调制器,正弦查找ROM,DAC构成。通过改变相位累加的增量就很容易的改变的输出的频率了。 如果相位累加器(频率控制子)的位宽为N位(ad9851的N=32位)这就意味着把一个周期的正弦波形离散成了2的N次方个点,把这些点的幅值存在一个ROM中就构成了正弦查找ROM。如果系统时钟为Fclk,即把Fclk分成了2的N 次方份。如果此时的相位累加增量为(频率控制字)为B,那么此时的输出频率应为Fout=(B*Fclk)/ N。显然B=1时其最小值为Fclk/ N。B的值也不能太大,否则会输出失真波形。Fout的最大值理论上应该至少小于Fclk/4。所以要想提高输出频率的最大值,就得靠提高系统的外部时钟Fclk。 下面结合本人的代码来具体讲讲AD9851的应用。 AD9851的一些具体介绍这里就不说了。其DATASHEET上都说的很清楚。若看不懂E文,可以发E_M给我,我有中文资料。AD9851要写40位的控制子。其中前面32位就是频率控制子了。后面是有1个6倍频使能位,1个logic0位,1个POWER_DOWN位,还有5位相位模式字。这里我们只解决频率控制问题。也就是说在代码中本人只写了,32位的频率控制子,还有一个6倍频使能。其余的剩下几位由于没用到也就默认写为0了。AD9851可以用并和串俩中方式写入控制子。 其串行发送方式的控制子表如下: 本人主要将用串写控制子的时序与代码。其并的方式的代码也会给出。硬件电路图网上有很多资源,自己去找找! 主要看看代码吧: /************************************************************* ad9851串口驱动程序 2007-8-28-------------water ************************************************************/ #include #include #include

基于单片机的信号发生器(完整电路_程序)资料

电子与信息工程学院综合实验课程报告 实验名称:基于单片机的信号发生器的设计与实现班级:10电工2班 学号:20101851046 姓名:李俊 指导教师: 时间:

摘要 本文以STC89C51单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如 正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统可以产生最高频率798.6HZ的波形。该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。 关键词:低频信号发生器;单片机;D /A转换; 1设计选题及任务 设计题目:基于单片机的信号发生器的设计与实现 任务与要求: 设计一个由单片机控制的信号发生器。运用单片机系统控制产生多种波形,这些波形包括方波、三角波、锯齿波、正弦波等。信号发生器所产生的波形的频率、幅度均可调节。并可通过软件任意改变信号的波形。 基本要求: 1. 产生三种以上波形。如正弦波、三角波、矩形波等。 2.最大频率不低于500Hz。并且频率可按一定规律调节,如周期按1T,2T,3T,4T 或1T,2T,4T,8T变化。 3.幅度可调,峰峰值在0——5V之间变化。 扩展要求:产生更多的频率和波形。 2系统概述 2.1方案论证和比较 2.1.1总体方案: 方案一:采用模拟电路搭建函数信号发生器,它可以同时产生方波、三角波、正弦波。但是这种模块产生的不能产生任意的波形(例如梯形波),并且频率调节很不方便。 方案二:采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。

(完整版)数字信号发生器的电路设计_(毕业课程设计)

1 引言 信号发生器又称信号源或者振荡器,它是根据用户对其波形的命令来产生信号的电子仪器,在生产实践和科技领域有着广泛的应用。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。信号源主要给被测电路提供所需要的已知信号(各种波形),然后用其他仪表测量感兴趣的参数。信号发生器在通信、广播、电视系统,在工业、农业、生物医学领域内,在实验室和设备检测中具有十分广泛的用途。 信号发生器是一种悠久的测量仪器,早在20年代电子设备刚出现时它就产生了。随着通信和雷达技术的发展,40年代出现了主要用于测试各种接收机的标准信号发生器,使信号发生器从定性分析的测试仪器发展成定量分析的测量仪器。自60年代以来信号发生器有了迅速的发展,出现了函数发生器,这个时期的信号发生器多采用模拟电子技术,由分立元件或模拟集成电路构成,其电路结构复杂,且仅能产生正弦波、方波、锯齿波和三角波等几种简单波形。到70年代处理器出现以后,利用微处理器、模数转换器和数模转换器,硬件和软件使信号发生器的功能扩大,产生比较复杂的波形。这时期的信号发生器多以软件为主,实质是采用微处理器对DAC的程序控制,就可以得到各种简单的波形。随着现代电子、计算机和信号处理等技术的发展,极大地促进了数字化技术在电子测量仪器中的应用,使原有的模拟信号处理逐步被数字信号处理所代替,从而扩充了仪器信号的处理能力,提高了信号测量的准确度、精度和变换速度,克服了模拟信号处理的诸多缺点,数字信号发生器随之发展起来。

信号发生器作为电子领域不可缺少的测量工具,它必然将向更高性能,更高精确度,更高智能化方向发展,就象现在在数字化信号发生器的崛起一样。但作为一种仪器,我们必然要考虑其所用领域,也就是说要因地制宜,综合考虑性价比,用低成本制作的集成芯片信号发生器短期内还不会被完全取代,还会比较广泛的用于理论实验以及精确度要求不是太高的实验。因此完整的函数信号发生器的设计具有非常重要的实践意义和广阔的应用前景。 2 数字信号发生器的系统总述 2.1 系统简介 信号发生器广泛应用于电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域。 本设计以AT89C52[1]单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统主要包括CPU模块、显示模块、键盘输入模块、数模转换模块、波形输出模块。系统电路原理图见附录A,PCB (印制电路板)图见附录B。其中CPU模块负责控制信号的产生、变化及频率的改变;模数转换模块采用DAC0832实现不同波形的输出;显示模块采用1602液晶显示,实现波型和频率显示;键盘输入模块实

基于51单片机的函数信号发生器的设计

龙源期刊网 https://www.sodocs.net/doc/0416021564.html, 基于51单片机的函数信号发生器的设计 作者:朱兆旭 来源:《数字技术与应用》2017年第02期 摘要:本文所设计的系统是采用AT89C51单片机和D/A转换器件DAC0832产生所需不 同信号的低频信号源,AT89C51 单片机作为主体,采用D/A转换电路、运放电路、按键和LCD液晶显示电路等,按下按键控制生成方波、三角波、正弦波,同时用LCD显示相应的波形,输出波形的周期可以用程序改变,具有线路简单、结构紧凑、性能优越等特点。 关键词:51单片机;模数转换器;信号发生器 中图分类号:TP391 文献标识码:A 文章编号:1007-9416(2017)02-0011-01 1 前言 波形发生器,是一种作为测试用的信号源,是当下很多电子设计要用到的仪器。现如今是科学技术和设备高速智能化发展的科技信息社会,集成电路发展迅猛,集成电路能简单地生成各式各样的波形发生器,将其他信号波形发生器于用集成电路实现的信号波形发生器进行对比,波形质量、幅度和频率稳定性等性能指标,集成电路实现的信号波形发生器都胜过一筹,随着单片机应用技术的不断成长和完善,导致传统控制与检测技术更加快捷方便。 2 系统设计思路 文章基于单片机信号发生器设计,产生正弦波、方波、三角波,连接示波器,将生成的波形显示在示波器上。按照对作品的设计研究,编写程序,来实现各种波形的频率和幅值数值与要求相匹配,然后把该程序导入到程序存储器里面。 当程序运行时,一旦收到外界发出的指令,要求设备输出相应的波形时,设备会调用对应波形发生程序以及中断服务子程序,D/A转换器和运放器随之处理信号,然后设备的端口输出该信号。其中,KEY0为复位键,KEY1的作用是选择频率的步进值,KEY2的作用是增加频 率或增加频率的步进值,KEY3的作用是减小频率或减小频率的步进值,KEY4的作用是选择三种波形。103为可调电阻,用于幅值的调节。自锁开关起到电源开关的作用。启动电源,程序运行的时候,选择正弦波,红色LED灯亮起;选择方波,黄色LED灯亮起;选择三角波,绿色LED灯亮起。函数信号发生器频率最高可达到100Hz,最低可达到10Hz,步进值0.1- 10Hz,幅值最高可到3.5V。系统框图如图1所示。 3 软件设计

信号发生器的原理及应用

实验一信号发生器的原理及应用 一、实验目的 (1)熟悉直接数字合成双路函数信号发生器的工作原理以及面板装置及功能; (2)会运用UTG2025A型数字信号合成信号发生器产生标准信号和调制信号。 二、实验设备 (1)UTG2025A型函数/任意波形信号发生器1台; (2)UTD2102C数字存储示波器各1台。 三、实验原理 函数信号发生器是能产生多种特定时间函数波形(如正弦波、方波、三角波 等)供测试用的信号发生器。典型函数信号发生器由输入单元、内/外转换电路、 波形产生电路、频段转换器、扫频电路、占空比和频率调节电路、微处理器、A/D 转换器、直流功率放大器和计数显示器等组成,其电路原理方框图如下所示: 图1典型函数信号发生器电路原理框图 其中波形产生电路、频率调整电路、占空比调整电路、内外扫频控制电路、测频 单元电路等具体电路原理与分析见教材《电子测量技术》P67-P71页内容。 四、实验内容及步骤 4.1 产生标准信号 4.1.1 产生正弦波信号

实验内容:产生一个20MHz、峰峰值100mV、直流偏置-150mV的正弦波信号。 1 实验步骤: (1)确保仪器正确连接后,打开开关,等仪器自检回到主菜 单;(2)按【menu】→【波形】→【正弦波】,如下图所示: (3)按【menu】→【波形】→【参数】 选择【频率】、【幅度】、【直流偏移】、【相位】不同功能按钮进行设 置:可以用三种方法来输入频率值:(其他数字量输入类似) ①通过按方向键来移动选择光标,再通过多功能按钮来增加、减少频率值; ②通过多功能按钮选中再逆时针、顺时针旋转来增加、减少频率值; ③通过数字键盘输入:进入频率设置状态后,当您按下数字键盘任意一个按键后,屏幕弹出输入窗口,如下图所示: 键入数字后再分别选择不同单位。

简易信号发生器单片机课程设计报告

课程设计(论文)任务书 电气学院电力系统及其自动化专业12(1 )班 一、课程设计(论文)题目:简易信号发生器设计 二、课程设计(论文)工作自 2015年1 月12 日起至2015 年 1月16 日止。 三、课程设计(论文) 地点:电气学院机房 10-303 四、课程设计(论文)内容要求: 1.课程设计的目的 (1)综合运用单片机原理及应用相关课程的理论知识和实际应用知识,进行单片机应用系统电路及程序设计,从而使这些知识得到进一步的巩固,加深和发展;(2)熟悉和掌握单片机控制系统的设计方法,汇编语言程序设计及proteus 软件的使用; (3)通过查阅图书资料、以及书写课程设计报告可提高综合应用设计能力,培养独立分析问题和解决问题的能力。 2.课程设计的内容及任务 (1)可产生频率可调的正弦波(64个点)、方波、锯齿波或三角波。 (2)显示出仿真波形。 (3)通过按键选择输出波形的种类。 (4)在此基础上使输出波形的幅值可控。

3.课程设计说明书编写要求 (1)设计说明书用A4纸统一规格,论述清晰,字迹端正,应用资料应说明出处。(2)说明书内容应包括(装订次序):题目、目录、正文、设计总结、参考文献等。应阐述整个设计内容,要重点突出,图文并茂,文字通畅。 (3)报告内容应包括方案分析;方案对比;整体设计论述;硬件设计(电路接线,元器件说明,硬件资源分配);软件设计(软件流程,编程思想,程序注释,) 调试结果;收获与体会;附录(设计代码放在附录部分,必须加上合理的注释)(4) 学生签名: 2015年1月16 日 课程设计(论文)评审意见 (1)总体方案的选择是否正确;正确()、较正确()、基本正确()(2)程序仿真能满足基本要求;满足()、较满足()、基本满足()(3)设计功能是否完善;完善()、较完善()、基本完善()(4)元器件选择是否合理;合理()、较合理()、基本合理()(5)动手实践能力;强()、较强()、一般()(6)学习态度;好()、良好()、一般()(7)基础知识掌握程度;好()、良好()、一般()(8)回答问题是否正确;正确()、较正确()、基本正确()、不正确() (9)程序代码是否具有创新性;全部()、部分()、无() (10)书写整洁、条理清楚、格式规范;规范()、较规范()、一般()总评成绩优()、良()、中()、及格()、不及格() 评阅人:

低频信号发生器电路图制作以及调试

低频信号发生器电路图制作以及调试 1 画原理图 本设计中要求用Protel软件完成原理图以及PCB板。我用的是Protel2004 版本。电路原理图的设计是印制电路板设计中的第一步,也是非常重要的一步。电路原理图设计得好坏将直接影响到后面的工作。首先,原理图的正确性是最基本的要求,因为在一个错误的基础上所进行的工作是没有意义的;其次,原理图应该布局合理,这样不仅可以尽量避免出错,也便于读图、便于查找和纠正错误;最后,在满足正确性和布局合理的前提下应力求原理图的美观。 电路原理图的设计过程可分为以下几个步骤: 1、设置电路图纸参数及相关信息根据电路图的复杂程度设置图纸的格式、尺寸、方向等参数以及与设计有关的信息,为以后的设计工作建立一个合适的工作平面。 2、装入所需要的元件库将所需的元件库装入设计系统中,以便从中查找和选定所需的元器件。 3、设置元件将选定的元件放置到已建立好的工作平面上,并对元件在工作平面上的位置进行调整,对元件的序号、封装形式、显示状态等进行定义和设置,以便为下一步的布线工作打好基础。 4、电路图布线利用Protel 2004所提供的各种工具、命令进行画图工作,将事先放置好的元器件用具有电气意义的导线、网络标号等连接起来,布线结束后,一张完整的电路原理图基本完成。 5、调整、检查和修改利用Prote2004所提供的各种工具对前面所绘制的原理图做进一步的调整和修改。 6、补充完善对原理图做一些相应的说明、标注和修饰,增加可读性和可观性。 2 硬件单元电路调试 对于本波形法发生器,其硬件电路的调试最重要的地方在于板子制作的前期一

定要保证其质量,尽量减少因虚焊等因不细心造成的故障。将元件焊接完毕后,为了方便调试,采用分块调试的方法。电路由多个模块组成,D/A 转换 电路、显示电路、电源电路、按键电路、复位电路。因为这次在焊点的时候比较细心,所以焊得很结实,检验的时候,未发现有虚焊的问题。 5.2.1 焊电路 设计好电路图,开始焊电路板,刚开始觉得线路很简单,所以电路排版没花心思,真正开始焊的时候才发现相当麻烦,导线用去很多,看起来有点乱。由于元气件的管脚图并不跟原理图中一样,所以必须先查阅资料弄明白各个器件的封装,像LED先用万用表检测是共阴还是共阳,每个管脚对应哪一段也可以检测。还有四脚的按键也要测出哪两脚是相通的等等。 5.2.2 硬件电路的总体检查 电路板焊完之后,应该首先认真细致地检查一遍,确认无误后方能通电。通电前检查,主要检查以下内容: 第一,根据硬件电气原理图和装配图仔细检查线路的正确性,并检查元器件安装是否正确。尤其注意的是芯片、二极管和开关管的极性、电容器的耐压和极性、电阻的阻值和功率是否与设计图纸相符,重点检查系统总线间或总线与其它信号线间是否存在短路;第二,检查焊接点是否牢固,特别要仔细检查有无漏焊和错焊;对于靠得很近的相邻焊点,要注意检查金属毛刺和是否短路,必要时可用欧姆表进行测量;第三,在不加电的情况下,插上所有元器件,为联机调试作准备。确保电源和地无故障之后,再通电,然后检查各电源+5V、+12V 和-12V电压数值的正确性。排除可能出现的故障后,再进行各单元电路调试。 5.2.3 单元电路调试 1 、单片机最小系统调试 按照前面设计的单片机最小系统和电源,焊接并插上相应的元器件,连好线,检查正确无误后,接上电源,用示波器测试单片机的时钟波形。时钟波形和频率正确,进行下一步检查。 切断电源,空出单片机AT89S51的位置,并在此位置上插入仿真器的40芯

信号发生器程序

#include //包含头文件 #include #define uchar unsigned char //宏定义 #define uint unsigned int sbit s1=P3^4; //定义按键的接口 sbit s2=P3^5; sbit s3=P3^6; sbit s4=P3^7; sbit lcdrs=P2^3; //液晶控制位 sbit lcdrw=P2^4; sbit lcden=P2^5; char num,boxing,u; //定义全局变量 int pinlv=100,bujin=1,bujin1=1; uchar code table[]="0123456789"; //定义显示的数组 uchar code table1[]="frequence:boxing:"; unsigned long int m; int a,b,h,num1; uchar code sin[64]={ 135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,23 0,222,213,204,193,182,170,158, 146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,11 4,128 }; //正弦波取码 uchar code juxing[64]={ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,25 5,255,255,255, 255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; //矩形波取码 uchar code sanjiao[64]={ 0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208 ,216,224,232,240,248, 248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64, 56,48,40,32,24,16,8,0 }; //三角波取码 uchar code juchi[64]={ 0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,12 1,125,130,134,138,142, 146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,23 5,239,243,247,251,255 }; //锯齿波取码

实验10任意信号发生器

实验十任意信号发生器 座位号: 第一组B5 姓名:陈翔宇1104210311 小组成员: 董泽人1104210202 于杏 1104210101 指导老师: 李彧晟 2014年

一、实验目的 1、熟悉DSP的软硬件开发平台 2、熟悉TI DSP软件集成开发环境 3、学习DSP程序的编程开发 4、熟悉工程代码产生方法 5、掌握TMS320F2812的ADC外设的使用 6、熟悉TMS320F2812的中断的设置 7、掌握代码调试的基本方法 二、实验仪器 计算机、C2000 DSP 教学实验箱、XDS510USB仿真器、示波器和信号源等。 三、注意事项 进入CCS顺序: 1、打开C2000实验箱电源(确认实验箱电源正常加载) 2、点击CCS2(C2000) 进入开发界面 退出CCS顺序: 1、关闭CCS2(C2000)应用程序 2、关闭C2000实验箱电源 四、实验内容 建立工程,编写DSP的主程序,并对工程进行编译、链接,利用现有DSP 平台实现数据的采集、存储以及模拟还原,通过图表以及示波器观察结果。五、实验要求 实验指导书上的要求: 1、独立完成项目编译、链接、调试的全过程; 2、利用数码显示管,在DSP初始化子模块后添加语句或者编写程序,使之能够显示实验日期; 3、记录实验中各子程序包括主程序的入口实际地址,与memory比较,指出分别位于什么类型的存储器中; 4、指出波形数据保存的空间地址,并以图形方式显示线性调频信号的波

形,并保存,附在实验报告中。 课件上的要求: 5、数码管显示实验日期或学号(同要求2); 6、指出线性调频信号波形的存储地址,作图显示,并在示波器上输出该波形; 7、改变正弦信号频率编程实现,在示波器上验证,要求记录改变参数以及实测频率。 六、实验步骤及结果 1、检查DSP平台(仿真器、实验箱、计算机)之间的连接,打开计算机及实验板电源,检查电源加载是否异常; 2、打开CCS,执行命令Project→New,弹出“Project Creation”对话框,在第一项Project Name中输入工程名“A2”,在第二项Location中选择D 盘名为a文件夹下的A2文件夹中,其余默认,单击“完成”。 3、单击Project→Add Files to Project,找到实验十的范例程序所在位置,拉下文件类型选择框改为“显示所有类型文件”,选中第一个需要加入工程 的文件,按住shift键,选中最后一个需要加入的文件,点击确认,这样,所有需要添加进去的.c文件、.cmd文件和.lib文件都添加进了工程。 4、打开source下的RamGen.c文件,进入c程序编辑界面;将初始化LED 的程序段改为下面程序: /* 初始化LED */ *LED8 = 0x66; // LED8显示4 *(LED8+0x100) = 0x06; // LED7显示1 *(LED8+0x200) = 0x86; // LED6显示1. *(LED8+0x300) = 0x06; // LED5显示1 *(LED8+0x400) = 0xE6; // LED4显示4. *(LED8+0x500) = 0x06; // LED3显示1 *(LED8+0x600) = 0x3F; // LED2显示0 *(LED8+0x700) = 0x5B; // LED1显示2 *(LEDWR) = 0XFF; // WIRTE DATA TO LED

函数信号发生器电路设计

题目:函数信号发生器 班级: 学号: 姓名: 指导: 时间: 景德镇陶瓷学院

电工电子技术课程设计任务书

目录 1、总体方案与原理说明. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 2、单元电路1——稳压电源电路. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3、单元电路2——AT89S52最小系统. . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . .6 4、单元电路3——1602液晶显示电路. . . . . . . . . . . . . . . . . . . . . . . . . . .8 5、单元电路4——矩阵键盘输入电路. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 6、单元电路5——AD9850函数信号发生电路. . . .. . . . . . . . . . . . . . . . . . . . .10 7、总体电路原理说明. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 8、总体电路原理图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 9、元件清单;. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 10、参考文献. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 11、设计心得体会. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

音频测试-低频信号发生器-使用方法

低频信号发生器的操作方法 第一步骤:低频信号发生器的连接 连接电源线 用220V AC 线把低频信号发生器连上市电。如电源插座旁有控制开关,还须把开关打开。(如上图2) 连接信号线 将输出线插入到低频信号发生器的信号输出(OUTPUT )接口,并顺时针扭动半圈(如下图3)。图 1 图 2 将开关打开

第二步骤:信号电压幅度调节 上述步骤完成后,接下来需要开机预热和调节输出信号的幅度。 1) 开机(POWER ) 按下电源键开机,开机后电源指示灯会亮。电源按钮一般为红色。 图 3 图 4 连接输出线 电源按钮 电源指示灯

波形选择(WAVE FORM ) 控制低频信号发生器的输出波形。此按钮未按下去时为正弦波,按下去后为矩形波。中文意思为波形。在音频测试中应选择正弦波。(如上图6) 振幅调节(AMPLITUDE ) 此旋钮用来对信号幅度进行微调。顺时针为调大(MAX ),逆顺针为调小(MIN )。如下图图 6 图 5 波形选择 按钮 衰减度选择 -20dB 档 振幅微 调旋钮 图 7 交流电压 20V 档 信号频率 为50Hz

第四步骤:信号频率调节 当调好低频信号发生器的信号电压时,我们还要调节信号发生器的信号频率。 1) 频率调节(FREQUENCY ) 频率调节旋钮上有刻度盘,刻度盘上的数值从10~100,我们调节时把刻度盘上的数值对准正上方的黑色标志,这个数值就是输出信号的基数值。Frequency 中文为频率的意思。(如上图9个琴键按钮,分别为×1、×10、×100、×1K 、×10K ,它们与频率旋钮配合使用。当按下其中的某一个时,表示频率旋钮上指示的基数值×此按钮的倍数。 图 9 图 8 频率旋钮 倍数选择

相关主题