当前位置:文档之家› ad9851程序

ad9851程序

ad9851程序
ad9851程序

标签:DDS,AD9851,信号发生器

基于ad9851的信号发生器

本人有一块个人闲置的ad9852芯片转让;需要者点击本链接,进入本人淘宝店;

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

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

如果相位累加器(频率控制子)的位宽为N位(ad9851的N=32位)这就意味着把一个周期的正弦波形离散成了2的N次方个点,把这些点的幅值存在一个ROM中就构成了正弦查找ROM。如果系统时钟为Fclk,即把Fclk分成了2的N 次方份。如果此时的相位累加增量为(频率控制字)为B,那么此时的输出频率

应为Fout=(B*Fclk)/。显然B=1时其最小值为Fclk/。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;

}

DDS_FQUD=1;

DDS_FQUD=0;

}

//--------------------------主函数部分(主要包括菜单框架)

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

main(void)

{

unsigned char key;

int i,menu,k;

unsigned long x;//频率控制字

i=1;

Clr_Scr();

init_lcd();

Msg(0);

delay(5000);

Clr_Scr();

Msg(1);

delay(8000);

Clr_Scr();

Msg(2);

DDS_FQUD=0;

AD9851Init();//ad9851初始化

x=control_word(1000);//得到频率控制字

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

while(1)

{

// x="control"_word(2500000); //DDS

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

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

key=kbscan();

while(judge_hitkey()); //判断按键释放肖注释

switch(key)

{

case 0x12: i++;Clr_Scr(); break;

case 0x11: i--;Clr_Scr(); break;

case 0x18: j_j=1;Clr_Scr(); break;

case 0x14: j_j=0;Clr_Scr(); break;

}

§1—1电路及电路图

§1—1电路及电路图 教学目的:了解电路的组成,掌握常用的电工图形符号,掌握电路的的三种状态。 教学重点:熟悉部分常用的电工图形符号;电路的三种工作状态和特点。 教学难点:电路的工作状态和特点。 教学过程: 一、电路和电路的组成 电子积木演示实验: 把一个灯泡通过开关、导线和干电池连接起来,就组成了一个照明电路,如图1—1所示。当合上开关,电路中就有电流通过,灯泡就亮起来。 1、电路定义:把各种电气设备和元件,按照一定的连接方式构成的电流通路称为电路。换句话讲,就是电流所流经的路径称为电路。 在工厂的动力用电中,电动机通过开关、导线和电源接通时,有电流通过,电动机就转起来。日常生活中,人们最常见的电路,如电灯、收音机、电视机、计算机、电风扇等各种电路,它们是

由各种电路基本元部件(如电阻器、电容器、电感器、二极管、三极管、变压器、指示器等)组成的总体。现实世界中的电路形式是各种各样的,有的甚至是非常复杂的,任何一个完整的实际电路,不论电路多么复杂,不论其结构和作用如何,通常总是由电源、负载和中间环节(导线和开关)等基本部分组成。 2、电路的组成:电路通常由电源、负载、开关、导线(中间环节)四个基本部分组成。 1)、电源 电源是电路中产生电能的设备。发电机、蓄电池、光电池等都是电源。发电机是将机械能(热能、水能、风能、原子能)转换成电能,蓄电池是将化学能转换成电能,光电池是将光能转换成电能。 2)、负载 负载是将电能转换成其他形式能量的装置。电灯泡、电炉、电动机等都是负载。电灯泡是将电能转变成光能,电炉是将电能转变成热能,电动机是将电能转变成机械能。 3)、导线和开关 开关是控制电路接通和断开的装置。 导线是用来连接电源和负载的元件。是把电源、负载、开关连接起来,组成一个闭合回路,起传输和分配电能的作用。 电路中根据需要还装配有其他辅助设备,如测量仪表是用来测量电路中的电量,熔丝用来执行保护任务的。

程序流程图编写规范_(终极整理版)

程序流程图规范 1.引言 国际通用的流程图形态和程序: 开始(六角菱型)、过程(四方型)、决策(菱型)、终止(椭圆型)。在作管理业务流程图时,国际通用的形态:方框是流程的描述;菱形是检查、审批、审核(一般要有回路的);椭圆一般用作一个流程的终结;小圆是表示按顺序数据的流程;竖文件框式的一般是表示原定的程序;两边文件框式的一般是表示留下来的资料数据的存储。 2.符号用法 程序流程图用于描述程序内部各种问题的解决方法、思路或算法。 图1-1 标准程序流程图符号 1)数据:平行四边形表示数据,其中可注明数据名、来源、用途或其 它的文字说明。此符号并不限定数据的媒体。 2)处理:矩形表示各种处理功能。例如,执行一个或一组特定的操作,

从而使信息的值,信息形式或所在位置发生变化,或是确定对某一流向的选择。矩形内可注明处理名或其简要功能。 3)特定处理:带有双纵边线的矩形表示已命名的特定处理。该处理为 在另外地方已得到详细说明的一个操作或一组操作,便如子例行程序,模块。矩形内可注明特定处理名或其简要功能。 4)准备:六边形符号表示准备。它表示修改一条指令或一组指令以影 响随后的活动。例如,设置开关,修改变址寄存器,初始化例行程序。 5)判断:菱形表示判断或开关。菱形内可注明判断的条件。它只有一 个入口,但可以有若干个可供选择的出口,在对符号内定义各条件求值后,有一个且仅有一个出口被激活,求值结果可在表示出口路径的流线附近写出。 6)循环界限:循环界限为去上角矩形或去下角矩形,分别表示循环的 开始和循环的结束。一对符号内应注明同一循环标识符。可根据检验终止循环条件在循环的开始还是在循环的末尾,将其条件分别在上界限符内注明(如:当A>B)或在下界限符内注明(如:直到C

初中物理电路和电路图练习题集

初中物理电路、电路图训练题 姓名: 1、.将下左图中两个灯泡串联起来,将下右图中的两个灯泡并联起来。 2.、根据电路图连接将右边实物图连成对应电路。 3、将下左图中的电路元件按电路图连接成对应实物图(要求导线不交叉)。 4、根据图1,将图2元件连成对应电路。 5、按照下左实物图在虚框内画出对应电路图。

6、请根据下右的实物图,在左侧虚框内画出对应的电路图。 7、根据下右的实物图,在左侧虚框内画出对应的电路图。 8、请按要求设计电路图(电路图画在左侧虚框内),并按你设计的电路,用笔画线代替导线,将图20中的电器元件连成电路。要求:(1)开关K1只控制电灯L1,开关K2只控制电灯L2;(2)共用一个电池组。 9、根据题目中的要求,先在虚线框内画出电路图,再根据你设计的电路,用线条代替导线,将两节干电 池、两个相同规格的电灯泡,一只开关(如图21所示)连成电路。 要求:使开关同时控制两盏灯。 10、把图1中各电路元件接成串联电路;把图2中各电路元件接成并联电路(电键接在干路上):把图3 中各电路元件接成串联电路。

L 1 L 2 S 1 11、如图4所示电路中,当开关断开或闭合时,电路结构将发生什么 变化?灯的亮灭情况如何?试根据下列条件画出相应的等效电路图。 ⑴只闭合开关S3,其余开关断开;⑵只闭合开关S2,其余开关断开; ⑶同时闭合S1和S3,其余开关断开;⑷同时闭合S1和S2,其余开关 断开; 12、如图右所示的电路中,⑴当只闭合开关S1时,哪些灯发光? 其等效电路如何?⑵当开关S1和S2同时闭合时,哪些灯发光? 其等效电路如何? 13、请你在上边方框中设计一个楼梯灯的电路图。下面四个图中由一个开关能够控制3个灯泡,试画出所有可能的连接方式。 14、图1、图2中灯泡L1和L2并联,S是总开关,S1只控制灯泡L1,S2只控制灯泡L2。 15、图3中三个灯泡并联,S是总开关,S1只控制灯泡L1,S2只控制灯泡L2。 16、图4、图5、图6、图7、图8、图9、图10中两灯并联,S是总开关,S1只控制灯泡L1,请将所缺的导线补上。 图 4 3 1 S 2 L L S1 图1 S S S1 L 1 L2 S 1 S L 1 L2 L L S S S 图2 L1 L 2 L3 S1 S S2 图3

2014-2015-并行程序设计期末考试卷

中 国 科 学 技 术 大 学 2014-2015学年第一学期考试试卷 考试科目: 并行程序设计 得分:___ ______ 学生所在系:______ _____ 姓名:____ _ _ 学号:_ ____ ______ 一、 分析以下3个循环中存在的依赖关系;分别通过循环交换、分布 和逆转等多种方法来尝试向量化和/或并行化变换:(3×10=30分) p 的二维 拓扑结构,并且将各个行或列进程组划分为单独的子通信域。这样,root 进程可先在其行子通信域中进行广播,然后该行中的所有进程在各自的列通信子域中再广播。给出该广播方案的MPI 具体实现。(20分)

三、设有两个进程A和B,以及结构变量stu。现在,进程A将stu发 送给进程B。请用三种不同的MPI实现来完成进程A的发送操作。(3×10=30分) struct Student {int id; char name[10];double mark[3]; char pass; } stu; 四、以下是单处理器上的矩阵求逆算法: Begin for i=1 to n do (1) a[i,i]=1/a[i,i] (2)for j=1 to n do if (j≠i) then a[i,j]=a[i,j]*a[i,i] end if end for (3)for k=1 to n do for j=1 to n do if ((k≠i and j≠i)) then a[k,j]=a[k,j]-a[k,i]*a[i,j] end if end for end for (4)for k=1 to n do if (k≠i) then a[k,i]= -a[k,i]*a[i,i] end if end for end for End 矩阵求逆的过程中,依次利用主行i(i=0,1,…,n-1)对其余各行j(j≠i)作初等行变换,由于各行计算之间没有数据相关关系,因此可以对矩阵A按行划分来实现并行计算。考虑到在计算过程中处理器之间的负载均衡,对A采用行交叉划分:设处理器个数为p,矩阵A的阶数为n,??p =,对矩阵A行交叉划分后,编号为i(i=0,1,…,p-1)的处理器存有A的第i, i+p,…, i+(m-1)p n m/ 行。在计算中,依次将第0,1,…,n-1行作为主行,将其广播给所有处理器,这实际上是各处理器轮流选出主行并广播。发送主行数据的处理器利用主行对其主行之外的m-1行行向量做行变换,其余处理器则利用主行对其m行行向量做行变换。 请写出矩阵求逆算法的MPI并行实现。(20分)

非常实用的流程图符号及说明.doc

标准程序流程图的符号及使用约定 一,引言 程序流程图(Progran flowchart)作为一种算法表达工具,早已为工国计算机工作者和广大计算机用户十分熟悉和普通使用.然而它的一个明显缺点在于缺乏统一的规范化符号表示和严格的使用规则.最近,国家标准局批准的国家标准(GB1525-89)<<信息处理--数据流程图,程序流程图,系统流程图,程序网络图和系统资源图的文件编制符号及约定>>为我们推荐了一套标准化符号和使用约定.由于该标准是与国际标准化组织公布的标准ISO5807--85 Information processing--Documentation symbols and comventions for data,program and system flowcharts,program network charts and system resources charts是一致的,这里将其中程序流程图部分摘录出来,并做了一些解释,供读者参考. 根据这一标准画出的程序流程图我们称为标准流程图. 二,符号 程序流程图表示了程序的操作顺序.它应包括: (1)指明实际处理操作的处理符号,包括根据逻辑条件确定要执行的路径的符号. (2)指明控制流的流线符号. (3)便于读写程序流程图的特殊符号. 以下给出标准流程图所用的符号及其简要说明,请参看图1. 图1 标准程序流程图符号 1.数据---- 平行四边形表示数据,其中可注明数据名,来源,用途或其它的文字说明.此符号并不限定数据的媒体. 2.处理---- 矩形表示各种处理功能.例如,执行一个或一组特定的操作,从而使信息的值,信息形世或所在位置发生变化,或是确定对某一流向的选择.矩形内可注明处理名或其简工功能. 3.特定处理---- 带有双纵边线的矩形表示已命名的特定处理.该处理为在另外地方已得到详细说明的一个操作或一组操作,便如子例行程序,模块.矩形内可注明特定处理名或其简要功能. 4.准备---- 六边形符号表示准备.它表示修改一条指令或一组指令以影响随后的活动.例如,设置开关,修改变址寄存器,初始化例行程序. 5.判断----- 菱形表示判断或开关.菱形内可注明判断的条件.它只有一个入口,但可以有若干个可供选择的出口,在对符号内定义折条件求值后,有一个且仅有一个出口被激活.求值结果可在表示出口路径的流线附近写出. 6.循环界限---- 循环界限为去上角矩形表示年界限和去下角矩形的下界限构成,分别表示循环的开始和循环的结束.

电路和电路图专题

电路图连实物图与实物图连电路图的专题训练 一、由电路图连接实物图 1、如果是串联电路,则按一定的次序从电源的正极向电源的负极连接,遇到什么就连什么,直到完成; 2、如果是并联电路,可以采取分路完成的方法——将电路分解成几条路,然后一条一条完成连接; 3、应该注意:a、导线必须接在元件的两个接线柱上,b、不能形成交叉线不得已绕道连接 C、严格按照电路图中各元件的顺序连接实物图。 二、由实物图画出对应的电路图 1、如果是串联电路,则按一定的次序从电源的正极向电源的负极画出,遇到什么就画什么,直到完成;

还要注意相交且相连的点要用明显的黑点描出。 3.画好电路图应注意的事项: A 必须用电路符号表示元件,不能用实物图形 B 整个电路图画成方框型 C 按照实物图元件摆放顺序画电路图 D 养成随时将各元件用字母表示的好习惯 E 注意连接处不要形成开路,节点要点好! 练习 1.由实物图画电路图 四、 电路设计 1、用 笔画线代替导线,把下列元件 连成并联电路,开关同S 时控制灯泡L1, L2,并画出电路图。 2、用笔画线代替导线,把下列元件连成并联电路,开关S 同时控制灯泡L1, L2, 开关S1只控制灯泡L1, 开关S2只控制灯泡L2,并画出电路图。 3、用笔画线代替导线,把下列元件连成并联电路,开关S 同时控制两个灯泡,开关S1只控制灯泡L2,并画出电路图。 5题图 6题图 7题图 4\根据以下要求,设计电路,用笔代线在图 中画出相应的实物连接图。(导线不能交叉) 要求:(1)只闭合S 1时,红灯发光,绿灯不发光; (2)S 1、S 2都闭合时,两灯都发光; (3)只闭合S 2时,两灯均不发光。

MPI并行程序设计实例教程

编辑推荐 ◆书中内容侧重于以MPI库为基础开发并行应用程序,对MP规范定义的各项功能和特征在阐述其特点基础上均配以实例加以说明和印证。 ◆书中所附实例尽量采用独立的功能划分,其中的代码片段可直接用于并行应用程序开发 ◆在讲述基本原理的同时,注重对各项消息传递和管理操作的功能及局限性、适用性进行分析从而使熟读此书的读者能够编写出适合应用特点,易维护、高效率的并行程序。 ◆与本书配套的电子教案可在清华大学出版社网站下载。 本书简介 本书旨在通过示例全面介绍MP1并行程序开发库的使用方法、程序设计技巧等方面的内容,力争完整讨论MP1规范所定义的各种特征。主要也括MPI环境下开发并行程序常用的方法、模式、技巧等 内容。在内容组织上力求全面综合地反映MPl-1和MPI-2规范。对MPI所定义的各种功能、特征分别

给出可验证和测试其工作细节的示例程序 目录 第1章 MPI并行环境及编程模型  1.1 MPICH2环境及安装和测试 1.1.1 编译及安装 1.1.2 配置及验汪 1.1.3 应用程序的编译、链接 1.1.4 运行及调试 1.1.5 MPD中的安全问题  1.2 MPI环境编程模型 1.2.1 并行系统介绍 1.2.2 并行编程模式 1.2.3 MPI程序工作模式  1.3 MPI消息传递通信的基本概念 1.3.1 消息 1.3.2 缓冲区 1.3.3 通信子 1.3.4 进样号和进程纰 1.3.5 通价胁议 1.3.6 隐形对象 第2章 点到点通信  2.1 阻糍通信 2.1.1 标准通信模式 2.1.2 缓冲通信模式 2.1.3 就绪通信模式 2.1.4 同步通信模式 2.1.5 小结  2.2 非阻塞通信 2.2.1 通信结束测试 2.2.2 非重复的非阻塞通信 2.2.3 可醺复的非阻塞通信 2.2.4 Probe和Cancel  2.3 组合发送接收 2.3.1 MPl_Send,MPI_RecvoMPl_Sendreev 2.3.2 MPI_Bsend←→MPl_Sendrecv 2.3.3 MPI_Rsend←→MPI_Sendrecv 2.3.4 MPl_Ssend←→MPl_Sendrecv 2.3.5 MPl_lsend←→MP1一Sendrecv 2.3.6 MPl_Ibsend←→MPI_Sendrecv 2.3.7 MPI_Irsend←→MPI_Sendrecv 2.3.8 MPl_Issend,MPI_Irecv←→MPI_Sendrecv 2.3.9 MPI Send_init←→MPl_Sendrecv 2.3.10 MPI一Bsendj init←→MPl_Sendrecv 2.3.11 MPI_Rsend_init←→MPI_Sendrecv 2.3.12 MPl_Ssend_init,MPl_Recv_init←→MPl_Sendrecv 2.4 点到点通信总结

程序流程图编写规范详解

程序流程图编写规范 一、符号用法 (2) 1.1数据 (2) 1.2处理 (2) 1.3特定处理 (2) 1.4准备 (2) 1.5判断 (3) 1.6循环界限 (3) 1.7连接符 (3) 1.8端点符 (3) 1.9注解符 (3) 1.10流线 (4) 1.11虚线 (4) 1.12省略符 (4) 1.13并行方式 (4) 二、使用约定 (6) 2.1图的布局 (6) 2.2符号的形状 (6) 2.3符号内的说明文字 (6) 2.4符号标识符 (6) 2.5符号描述符 (6) 2.6详细表示 (7) 2.7流线 (7) 2.8多出口判断的两种表示方法 (8) 三、示例 (9)

一、符号用法 程序流程图用于描述程序内部各种问题的解决方法、思路或算法。 图1-1 标准程序流程图符号 1.1数据 平行四边形表示数据,其中可注明数据名、来源、用途或其它的文字说明。此符号并不限定数据的媒体。 1.2处理 矩形表示各种处理功能。例如,执行一个或一组特定的操作,从而使信息的值,信息形式或所在位置发生变化,或是确定对某一流向的选择。矩形内可注明处理名或其简工功能。 1.3特定处理 带有双纵边线的矩形表示已命名的特定处理。该处理为在另外地方已得到详细说明的一个操作或一组操作,便如子例行程序,模块。矩形内可注明特定处理名或其简要功能。 1.4准备 六边形符号表示准备。它表示修改一条指令或一组指令以影响随后的活动。例如,设置开关,修改变址寄存器,初始化例行程序。

1.5判断 菱形表示判断或开关。菱形内可注明判断的条件。它只有一个入口,但可以有若干个可供选择的出口,在对符号内定义各条件求值后,有一个且仅有一个出口被激活,求值结果可在表示出口路径的流线附近写出。 1.6循环界限 循环界限为去上角矩形表示年界限和去下角矩形的下界限成,分别表示循环的开始和循环的结束。一对符号内应注明同一循环标识符。可根据检验终止循环条件在循环的开始还是在循环的末尾,将其条件分别在上界限符内注明(如:当A>B)或在下界限符内注明(如:直到C

并行程序设计

一、并行程序开发策略 1.自动并行化:有目的地稍许修改源代码 2.调用并行库:开发并行库 3.重新编写并行代码:对源代码做重大修改 二、并行编程模式 1.主从模式(任务播种模式):将待求解的任务分成一个主任务(主进程)和一些子任务 (子进程)。所考虑的因素是负载均衡,一般可以采用静态分配和动态分配两种方法。 2.单程序流多数据流(SPMD):并行进程执行相同的代码段,但操作不同的数据。 3.数据流水线:将各个计算进程组成一条流水线,每个进程执行一个特定的计算任务。 4.分治策略:将一个大而复杂的问题分解成若干个特性相同的子问题。 三、并行程序的编程过程(PCAM过程) 1.任务划分(Partitioning) 2.通信分析(Communication) 3.任务组合(Agglomeration):增加粒度和保持灵活性 4.处理器映射(Mapping):映射策略、负载均衡、任务的分配与调度(静态和动态) 动态调度:基本自调度(SS)、块自调度(BSS)、指导自调度(GSS)、因子分解调度(FS)、梯形自调度(TSS)、耦合调度(AS)、安全自调度(SSS)、自适应耦合调度(AAS) 串匹配问题是计算机科学中的一个基本问题,在文字编辑、图像处理等利于都得到了广泛的应用,串匹配算法在这些应用中起到至关重要的作用。因此研究快速的串匹配算法具有重要的理论和实际意义。 KMP是一种改进的字符串模式匹配的算法,他能够在o(m+n)时间复杂度内完成字符串的模式匹配算法。本文将详细的介绍KMP算法的思想,串行及并行实现。 一、KMP算法思想 1、问题描述 给定主串S[0...n-1]、模式串T[0...m-1],其中m<=n。在主串S中找出所有模式串T的起始位置。 2、算法思想 令指针i指向主串S,指针j指向模式串T中当前正在比较的位置。令指针i和指针j指向的字符比较之,如两字符相等,则顺次比较后面的字符;如不相等,则指针i不动,回溯指针j,令其指向模式串T的第pos个字符,使T[0...pos-1] == S[i-pos, i-1],然后,指针i和指针j所指向的字符按此种方法继续比较,知道j == m-1,即在主串S中找到模式串T为止。 从算法的思想思想中我们可以看出,其算法的难点在于如何求出指针j的回溯值,即:当指针j回溯时,j将指向的位置,我们几位next[j]。下面我们首先对kmp的算法做出详细的描述。 二、KMP算法描述 输入:主串S[0...n-1], 模式串T[0...m-1] 输出:m[0...n-1],当m[i] = 1时,则主串S中匹配到模式串,且i为起始位置 begin i = 0;j = 0; while(i < n) if(S[i] != T[j])

并行程序设计开题

并行程序设计开题报告 院系:信息技术科学学院 成员:王亚光2120100319 田金凤1120100119 题目:串匹配算法KPM和矩阵运算的并行算法实现与分析

1.文献综述 1.1消息传递并行程序设计(MPI)介绍 (1)M assage P assing I nterface:是消息传递函数库的标准规范,由MPI论坛开发,支持Fortran和C (2)一种新的库描述,不是一种语言。共有上百个函数调用接口,在Fortran 和C语言中可以直接对这些函数进行调用 (3)MPI是一种标准或规范的代表,而不是特指某一个对它的具体实 (4)MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准 (5)指用户必须通过显式地发送和接收消息来实现处理机间的数据交换。 (6)在这种并行编程中,每个并行进程均有自己独立的地址空间,相互之间访问不能直接进行,必须通过显式的消息传递来实现。 (7)这种编程方式是大规模并行处理机(MPP)和机群(Cluster)采用的主要编程方式。 (8)并行计算粒度大,特别适合于大规模可扩展并行算法,由于消息传递程序设计要求用户很好地分解问题,组织不同进程间的数据交换,并行计算粒度大,特别适合于大规模可扩展并行算法。 (9)消息传递是当前并行计算领域的一个非常重要的并行程序设计方式。 (10)高可移植性。MPI已在IBM PC机上、MS Windows上、所有主要的Unix 工作站上和所有主流的并行机上得到实现。使用MPI作消息传递的C或Fortran 并行程序可不加改变地运行在IBM PC、MS Windows、Unix工作站、以及各种并行机上。 1.2串匹配算法 以字符序列形式出现而且不能将这些字符分成互相独立的关键字的一种数据称之为字符串(Strings)。字符串十分重要、常用的一种操作是串匹配(String Matching)。串匹配分为字符串精确匹配(Exact String Matching)和字符串近似匹配(Approximate String Matching)两大类。字符串匹配技术在正文编辑、文本压缩、数据加密、数据挖掘、图像处理、模式识别、Internet信息搜索、网络入侵检测、网络远程教学、电子商务、生物信息学、计算音乐等领域具有广泛的应用。而且串匹配是这些应用中最好时的核心问题,好的串匹配算法能显著的提高应用的效率。因此研究并设计快速的串匹配算法具有重要的理论价值和实际意义。 串匹配问题实际上就是一种模式匹配问题,即在给定的文本串中找出与模式串匹配的子串的起始位置。本文对已有的基于分布存储系统上的并行的串匹配算法(KMP)进行了分析和实现,并与串行的算法进行了比较。KMP算法首先是由D.E. Knuth、J.H. Morris以及V.R. Pratt分别设计出来的,所以该算法被命名为KMP算法。KMP串匹配算法的基本思想是:对给出的文本串T[1,n]与模式串P[1,m],假设在模式匹配的进程中,执行T[i]和P[j]的匹配检查。若T[i]=P[j],则继续检查T[i+1]和P[j+1]是否匹配。若T[i]≠P[j],则分成两种情况:若j=1,则模式串右移一位,检查T[i+1]和P[1]是否匹配;若1

GX-Works2编程软件SFC流程图编写讲解学习

GX-WORK2编程软件中SFC流程图的编写 5.3.2 GX-WORK2编程软件中SFC单序列流程图编写 用SFC编程实现自动闪烁信号生成,PLC上电后Y0、Y1以一秒钟为周期交替闪烁。以下为编程过程讲解。 启动GX-WORK2编程软件,单击“工程”菜单,点击创建新工程菜单项或点击新建工程按钮(如图5-23)。 单击 工程 菜单 图5-23 GX work2编程软件窗口 弹出创建新工程对话框如图5-24。工程类型下拉列表中选择简单工程PLC系列下拉列表框中选择FXCPU,PLC类型下拉列表框中选择FX3U,在程序类型项中选择SFC,点击确定按钮。 图5-24 新工程对话框 弹出如图5-25块信息设置窗口,0号块一般作为初始程序块,所以选择梯形图块。点击执行。

图5-25 块信息设置窗口 在块标题文本框中可以填入相应的块标题(也可以不填),在块类型中选择梯形图块,为什么选择梯形图块,我们不是在编辑SFC程序吗?原因是在SFC程序中初始状态必须是激活的,而我们激活的方法是利用一段梯形图程序,而且这一段梯形图程序必须是放在SFC 程序的开头部分,点击执行按钮弹出梯形图编辑窗口如图5-26,在右边梯形图编辑窗口中输入启动初始状态的梯形图,本例中我们利用PLC的一个辅助继电器M8002的上电脉冲使初始状态生效。初始化梯形图如图5-27所示,输入完成单击“变换”菜单选择“变换”项或按F4快捷键,完成梯形图的变换。 5-26 梯形图编辑窗口

单击变换菜 单,选择变换 项。 编辑启动初 始状态的梯 形图 图5-27 启动初始状态梯形图编程界面 如果想使用其他方式启动初始状态,只需要改动上图中的启动脉冲M8002即可,如果有多种方式启动初始化进行触点的并联即可。需要说明的是在每一个SFC程序中至少有一个初始状态,且初始状态必须在SFC程序的最前面。在SFC程序的编制过程中每一个状态中的梯形图编制完成后必须进行变换,才能进行下一步工作,否则弹出出错信息如图5-28所示。 图5-28 出错信息窗口 编辑好0号块的初始梯形图程序后,编辑1号块SFC程序,右击工程数据列表窗口中的“程序”\“MAIN”选择“新建数据”,弹出新建数据设置。如图5-29所示。

电气原理图及电子电路

电气原理图及接线图识读方法VS画图技巧2016-11-11 07:30 识图方法 电气图纸一般可分为两大类,一类为电力电气图,它主要是表 述电能的传输、分配和转换,如电网电气图、电厂电气控制图等。 另一类为电子电气图,它主要表述电子信息的传递、处理;如 电视机电气原理图。本文主要谈电力电气图的识读。 电力电气图分一次回路图、二次回路图。一次回路图表示一次电气 设备(主设备)连接顺序。一次电气设备主要包括发电机、变压器、 断路器、电动机、电抗器、电力电缆、电力母线、输电线等。 为对一次设备及其电路进行控制、测量、保护而设计安装的各类 电气设备,如测量仪表、控制开关、继电器、信号装置、自动装置 等称二次设备。表示二次设备之间连接顺序的电气图称二次回路 图。 一、电气图的种类 电气图主要有系统原理图、电路原理图、安装接线图。 1.系统原理图(方框图) 用较简单的符号或带有文字的方框,简单明了地表示电路系统的最 基本结构和组成,直观表述电路中最基本的构成单元和主要特征 及相互间关系。 2.电路原理图 电路原理图又分为集中式、展开式两种。集中式电路图中各元器件 等均以整体形式集中画出,说明元件的结构原理和工作原理。识读 时需清楚了解图中继电器相关线圈、触点属于什么回路,在什么情 况下动作,动作后各相关部分触点发生什么样变化。 展开式电路图在表明各元件、继电器动作原理、动作顺序方面, 较集中式电路图有其独特的优点。展开式电路图按元件的线圈、触 点划分为各自独立的交流电流、交流电压、直流信号等回路.凡属 于同一元件或继电器的电流、电压线圈及触点采用相同的文字。展

开式电路图中对每个独立回路,交流按U、V、W相序;直流按继电器动作顺序依次排列。识读展开式电路图时,对照每一回路右侧的文字说明,先交流后直流,由上而下,由左至右逐行识读。集中式、展开式电路图互相补充、互相对照来识读更易理解。 3.安装接线图 安装接线图是以电路原理为依据绘制而成,是现场维修中不可缺少的重要资料。安装图中各元件图形、位置及相互间连接关系与元件的实际形状、实际安装位置及实际连接关系相一致。图中连接关系采用相对标号法来表示。 二、识读电气图须知 1.学习掌握一定的电子、电工技术基本知识,了解各类电气设备的性能、工作原理,并清楚有关触点动作前后状态的变化关系。 2.对常用常见的典型电路,如过流、欠压、过负荷、控制、信号电路的工作原理和动作顺序有一定的了解。 3.熟悉国家统一规定的电力设备的图形符号、文字符号、数字符号、回路编号规定通则及相关的国标。了解常见常用的外围电气图形符号、文字符号、数字符号、回路编号及国际电工委员会(IEC)规定的通用符号和物理量符号(相关资料附后)。 4.了解绘制二次回路图的基本方法。电气图中一次回路用粗实线,二次回路用细实线画出。一次回路画在图纸左侧,二次回路画在图纸右侧。由上而下先画交流回路,再画直流回路。同一电器中不同部分(如线圈、触点)不画在一起时用同一文字符号标注。对接在不同回路中的相同电器,在相同文字符号后面标注数字来区别。 5.电路中开关、触点位置均在"平常状态"绘制。所谓"平常状态"是指开关、继电器线圈在没有电流通过及无任何外力作用时触点的状态。通常说的动合、动断触点都指开关电器在线圈无电、无外力作用时它们是断开或闭合的,一旦通电或有外力作用时触点状态随之改变。 三、识读电气图方法 1.仔细阅读设备说明书、操作手册,了解设备动作方式、顺序,有关设备元件在电路中的作用。

经典的20个模拟电路原理及其电路图汇总

经典的20个模拟电路原理及其电路图对模拟电路的掌握分为三个层次:初级层次:是熟练记住这二十个电路,清楚这二十个电路的作用。只要是电子爱好者,只要是学习自动化、电子等电控类专业的人士都应该且能够记住这二十个基本模拟电路。 中级层次:是能分析这二十个电路中的关键元器件的作用,每个元器件出现故障时电路的功能受到什么影响,测量时参数的变化规律,掌握对故障元器件的处理方法;定性分析电路信号的流向,相位变化;定性分析信号波形的变化过程;定性了解电路输入输出阻抗的大小,信号与阻抗的关系。有了这些电路知识,您极有可能成长为电子产品和工业控制设备的出色的维修维护技师。 高级层次:是能定量计算这二十个电路的输入输出阻抗、输出信号与输入信号的比值、电路中信号电流或电压与电路参数的关系、电路中信号的幅度与频率关系特性、相位与频率关系特性、电路中元器件参数的选择等。达到高级层次后,只要您愿意,受人尊敬的高薪职业--电子产品和工业控制设备的开发设计工程师将是您的首选职业。 一、桥式整流电路 1、二极管的单向导电性: 伏安特性曲线: 理想开关模型和恒压降模型: 2、桥式整流电流流向过程: 输入输出波形: 3、计算:Vo, Io,二极管反向电压。

二、电源滤波器 1、电源滤波的过程分析: 波形形成过程: 2、计算:滤波电容的容量和耐压值选择。 三、信号滤波器 1、信号滤波器的作用: 与电源滤波器的区别和相同点: 2、LC 串联和并联电路的阻抗计算,幅频关系和相频关系曲线。 3、画出通频带曲线。 计算谐振频率。

四、微分和积分电路 1、电路的作用,与滤波器的区别和相同点。 2、微分和积分电路电压变化过程分析,画出电压变化波形图。 3、计算:时间常数,电压变化方程,电阻和电容参数的选择。

电子电路图及工作原理

桥式整流电路图及工作原理介绍 桥式整流电路如图1所示,图(a)、(b)、(c)是桥式整流电路的三种不同画法。由电源变压器、四只整流二极管D1~4 和负载电阻RL组成。四只整流二极管接成电桥形式,故称桥式整流。 图1 桥式整流电路图 桥式整流电路的工作原理 如图2所示。

在u2的正半周,D1、D3导通,D2、D4截止,电流由TR次级上端经D1→ RL →D3回到TR 次级下端,在负载RL上得到一半波整流电压 在u2的负半周,D1、D3截止,D2、D4导通,电流由Tr次级的下端经D2→ RL →D4 回到Tr次级上端,在负载RL 上得到另一半波整流电压。 这样就在负载RL上得到一个与全波整流相同的电压波形,其电流的计算与全波整流相同,即 UL = 0.9U2 IL = 0.9U2/RL 流过每个二极管的平均电流为 ID = IL/2 = 0.45 U2/RL 每个二极管所承受的最高反向电压为 什么叫硅桥,什么叫桥堆 目前,小功率桥式整流电路的四只整流二极管,被接成桥路后封装成一个整流器件,称"硅桥"或"桥堆",使用方便,整流电路也常简化为图Z图1(c)的形式。桥式整流电路克服了全波整流电路要求变压器次级有中心抽头和二极管承受反压大的缺点,但多用了两只二极管。在半导体器件发展快,成本较低的今天,此缺点并不突出,因而桥式整流电路在实际中应用较为广泛。

二极管整流电路原理与分析 半波整流 二极管半波整流电路实际上利用了二极管的单向导电特性。 当输入电压处于交流电压的正半周时,二极管导通,输出电压v o=v i-v d。当输入电压处于交 流电压的负半周时,二极管截止,输出电压v o=0。半波整流电路输入和输出电压的波形如图所 示。 二极管半波整流电路 对于使用直流电源的电动机等功率型的电气设备,半波整流输出的脉动电压就足够了。但对于电子电路,这种电压则不能直接作为半导体器件的电源,还必须经过平滑(滤波)处理。平滑处理电路实际上就是在半波整流的输出端接一个电容,在交流电压正半周时,交流电源在通过二极管向负载提供电源的同时对电容充电,在交流电压负半周时,电容通过负载电阻放电。 电容输出的二极管半波整流电路仿真演示 通过上述分析可以得到半波整流电路的基本特点如下:

程序流程图编写规范-(终极整理版)

程序流程图规范 1. 引言 国际通用的流程图形态和程序: 开始(六角菱型)、过程(四方型)、决策(菱型)、终止(椭圆型)在作管理业务流程图时,国际通用的形态:方框是流程的描述;菱形是检查、审批、审核(一般要有回路的);椭圆一般用作一个流程的终结;小圆是表示按顺序数据的流程;竖文件框式的一般是表示原定的程序;两边文件框式的一般是表示留下来的资料数据的存储。 2. 符号用法 程序流程图用于描述程序内部各种问题的解决方法、思路或算法 /1irn O ③特毎处理 a匸O CZZ)■ ■ ■冃— 勒箝环(上〉 界礙⑥纸环(下) ⑨t£A? 苻 ?rm 图1-1 标准程序流程图符号 1)数据:平行四边形表示数据,其中可注明数据名、来源、用途或其它的文字说明。此符号并不限定数据的媒体。 2)处理:矩形表示各种处理功能。例如,执行一个或一组特定的操作,

从而使信息的值,信息形式或所在位置发生变化,或是确定对某一 流向的选择。矩形内可注明处理名或其简要功能。 3)特定处理:带有双纵边线的矩形表示已命名的特定处理。该处理为在另外地方已得到详细说明的一个操作或一组操作,便如子例行程序,模块。 矩形内可注明特定处理名或其简要功能。 4)准备:六边形符号表示准备。它表示修改一条指令或一组指令以影响随后的活动。例如,设置开关,修改变址寄存器,初始化例行程序。 5)判断:菱形表示判断或开关。菱形内可注明判断的条件。它只有一个入口,但可以有若干个可供选择的出口,在对符号内定义各条件求值后,有一个且仅有一个出口被激活,求值结果可在表示出口路径的流线附近写出。 6)循环界限:循环界限为去上角矩形或去下角矩形,分别表示循环的开始和循环的结束。一对符号内应注明同一循环标识符。可根据检验终止循环条件在循环的开始还是在循环的末尾,将其条件分别在 上界限符内注明(如:当A>B)或在下界限符内注明(女口:直到C

电路和电路图教案

电路和电路图 教学目标 1.知道电路各组成部分的基本作用. 2.知道什么是电路的通路、开路,知道短路及其危害. 3.能画出常见的电路元件的符号和简单的电路图. 4.会画简单电路的电路图和根据简单的电路图连接电路是本节的重点和难点,也是全章的重点之一,培养学生抽象概括能力和实际操作能力. 教学建议 教材分析 本节的教学内容有:电路各组成部分的基本作用、电路的三种工作状态、电路元件的符号、简单的电路图.其中会画简单电路的电路图和根据简单的电路图连接电路是本节的重点和难点,也是全章的重点之一,培养学生抽象概括能力和实际操作能力. 教法建议 新课的引入可以由实验去研究电路的问题,让学生建立起简单电路和复杂电路的感性认识,从而引出无论电路的复杂程度如何,电路至少要由用电器、导线、开关和电源组成.对于用电器和导线,学生比较熟悉,不必作过多的讲述.而对于开关和电源,教师要结合实物作

详细的介绍:主要介绍干电池、蓄电池、发电机三种电源;介绍拉线、拨动、闸刀、按钮四种开关.介绍过程 不涉及它们的构造和工作原理,只需使学生了解电源是 电路中的供电装置,开关是电路接通或断开的控制装置 即可.结合课本图4-16的实验向学生介绍电路的通路、开路、短路三种状态. 教材先介绍了门铃电路,并提出了用符号来表示实际 电路的意义:简单、方便、一目了然.接着介绍了门铃 电路图并介绍了电路元件符号.这里仅仅是一般的介绍,并不要求学生立即掌握,教师应把握这个分寸.介绍门 铃电路图时,不能只对图讲述,应配合演示一个最简单 的电铃电路实验,让学生的感性认识更丰富,对电路图 的作用理解更深刻. 教学设计方案 1.复习提问: (1)维持电路中有持续电流存在的条件是什么? (2)电源在电路中的作用是什么? 2.引入新课 实验:在磁性黑板上连接如前面的图4-6所示电路, 合上开关,小灯泡发光.先后取走电路中任一元件,观 察小灯泡是否还能继续发光.将小灯泡换成电铃,重复 上面的实验.通过观察实验,让同学思考一个最简单的

标准程序流程图的符号、使用约定及画法

标准程序流程图的符号、使用约定及画法 一,引言 程序流程图(Progran flowchart)作为一种算法表达工具,早已为工国计算机工作者和广大计算机用户十分熟悉和普通使用.然而它的一个明显缺点在于缺乏统一的规范化符号表示和严格的使用规则.最近,国家标准局批准的国家标准(GB1525-89)<<信息处理--数据流程图,程序流程图,系统流程图,程序网络图和系统资源图的文件编制符号及约定>>为我们推荐了一套标准化符号和使用约定.由于该标准是与国际标准化组织公布的标准ISO5807--85 Information processing--Documentation symbols and comventions for data,program and system flowcharts,program network charts and system resources charts是一致的,这里将其中程序流程图部分摘录出来,并做了一些解释,供读者参考. 根据这一标准画出的程序流程图我们称为标准流程图. 二,符号 程序流程图表示了程序的操作顺序.它应包括: (1)指明实际处理操作的处理符号,包括根据逻辑条件确定要执行的路径的符号. (2)指明控制流的流线符号. (3)便于读写程序流程图的特殊符号. 以下给出标准流程图所用的符号及其简要说明,请参看图1. 图1 标准程序流程图符号 1.数据---- 平行四边形表示数据,其中可注明数据名,来源,用途或其它的文字说明.此符号并不限定数据的媒体. 2.处理---- 矩形表示各种处理功能.例如,执行一个或一组特定的操作,从而使信息的值,信息形世或所在位置发生变化,或是确定对某一流向的选择.矩形内可注明处理名或其简工功能. 3.特定处理---- 带有双纵边线的矩形表示已命名的特定处理.该处理为在另外地方已得到详细说明的一个操作或一组操作,便如子例行程序,模块.矩形内可注明特定处理名或其简要功能. 4.准备---- 六边形符号表示准备.它表示修改一条指令或一组指令以影响随后的活动.例如,设置开关,修改变址寄存器,初始化例行程序. 5.判断----- 菱形表示判断或开关.菱形内可注明判断的条件.它只有一个入口,但可以有若干个可供选择的出口,在对符号内定义折条件求值后,有一个且仅有一个出口被激活.求值结果可在表示出口路径的流线附近写出. 6.循环界限---- 循环界限为去上角矩形表示年界限和去下角矩形的下界限构成,分别表示循环的开始和循环的结束. 图2 两种循环表示

物理电路和电路图练习题

电路和电路图练习 1.将下列元件用导线连接起来 使小灯泡能够发光,并在右边 方框中画出相应的电路图。 2、根据实物图,在下边方框中画出相应的电路图 (1)(2)(3) 3.根据电路图连接实物图 (1)(2) 4、试指出下面电路有什么错误,并改正。 5、一个开关能够控制3个灯泡,试画出连接方式。

怎样识别电路图 正确识别电路图,是初中学生的最基本的能力要求,一些电学计算也总是要事先进行电路情况分析,中考中所占比重较大,中考中的电学压轴题的难点、关键点往往就是电路识别问题,是普遍学生觉得难以弄懂,并且也是高中学习及以后从事涉及电学知识工作中还会经常遇到的问题,因此,必须高度重视。要过好识别电路这关,必须扫清知识、方法上的障碍。现将几个关键的问题提出来和大家一道探讨,以期抛砖引玉。 一、串、并联电路的概念及特点 人教版新教材八年级上册第106页是这样说的:“两个小灯泡首尾相连,然后接到电路中,我们说这两个灯泡串联”和“两个小灯泡的两端分别连在一起,然后接到电路中,我们说这两个灯泡是并联”,原老教材第二册第57页也有类似的叙述。 我们从上述关于串联和并联的定义中不难看出串、并联电路的特点,串联电路只有一条通路,各用电器通则都通,断则都断,互相影响,无论开关接在何处均控制整个电路,而并联电路有两条或多条支路,各用电器独立工作,干路的开关控制整个电路,支路的开关只控制其所在的那一路。 二、串、并联电路的判断方法 1.用电器连接法分析电路中用电器的连接法,逐个顺次连接的是串联,并列接在电路两点间的是并联。 2.电流法在串联电路中电流没有分支,在并联电路中干路的电流在分支处分成了几部分。 3.共同接点数法在串联中,某一用电器与另一用电器只有一个共同的连接点,而在并联中,某一用电器与另一用电器有两个共同的连接点。 4.在分析电路连接情况时,从电源正极开始,顺着电流的方向,一直到电源的负极。 5.由于在初中阶段多个用电器的连接不涉及混联,因而对于初中生来说,电路连接的最终结果只能是电路两种基本连接方式

相关主题
文本预览
相关文档 最新文档