❶ 51单片机无线通信
如果你用分离元件搭的收发电路能正常工作的话,接收端需要加AD将接收到的信号转化为单片机可识别的数字信号,发射的话,你如果只用一个I/O口的话,需要一个移位寄存器进行串并转换,将转换后的数据进行DA转换,然后输出到调制器即可。至于频率的问题,如果你输出的频率足够高的话就没必要调制,直接放大发射,那么接收端显然不用解调,直接接收得了,你输出的频率要受DA速度的限制,不会很高。
❷ 急需基于51单片机的红外遥控开关的设计原理图和程序(c语言版)
/*------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit IR=P3^2; //红外接口标志
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit DUAN=P2^6;//定义锁存使能端口 段锁存
sbit WEI=P2^7;// 位锁存
/*------------------------------------------------
全局变量声明
------------------------------------------------*/
unsigned char code dofly_DuanMa[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];
/*------------------------------------------------
函数声明
------------------------------------------------*/
void Ir_work(void);
void Ircordpro(void);
/*------------------------------------------------
显示函数,用于动态扫描数码管
输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
如输入0表示从第一个显示。
Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;
DataPort=0; //清空数据,防止有交替重影
DUAN=1; //段锁存
DUAN=0;
DataPort=dofly_WeiMa[i+FirstBit]; //取位码
WEI=1; //位锁存
WEI=0;
DataPort=TempData[i]; //取显示数据,段码
DUAN=1; //段锁存
DUAN=0;
i++;
if(i==Num)
i=0;
}
/*------------------------------------------------
定时器0中断处理
------------------------------------------------*/
void tim0_isr (void) interrupt 1 using 1
{
irtime++; //用于计数2个下降沿之间的时间
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer1_isr(void) interrupt 3
{
TH1=(65536-2000)/256; //重新赋值 2ms
TL1=(65536-2000)%256;
Display(0,8); // 调用数码管扫描
}
/*------------------------------------------------
外部中断0中断处理
------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
{
static unsigned char i; //接收红外信号处理
static bit startflag; //是否开始处理标志位
if(startflag)
{
if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms
i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{
irtime=0;
startflag=1;
}
}
/*------------------------------------------------
定时器0初始化
------------------------------------------------*/
void TIM0init(void)//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00; //重载值
TL0=0x00; //初始化值
ET0=1; //开中断
TR0=1;
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer1(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH1=0x00; //给定初值
//TL1=0x00;
EA=1; //总中断打开
ET1=1; //定时器中断打开
TR1=1; //定时器开关打开
}
/*------------------------------------------------
外部中断0初始化
------------------------------------------------*/
void EX0init(void)
{
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1; //使能外部中断
EA = 1; //开总中断
}
/*------------------------------------------------
键值处理
------------------------------------------------*/
void Ir_work(void)//红外键值散转程序
{
TempData[0]=dofly_DuanMa[IRcord[0]/16];
TempData[1]=dofly_DuanMa[IRcord[0]%16];
TempData[2]=dofly_DuanMa[IRcord[1]/16];
TempData[3]=dofly_DuanMa[IRcord[1]%16];
TempData[4]=dofly_DuanMa[IRcord[2]/16];
TempData[5]=dofly_DuanMa[IRcord[2]%16];
TempData[6]=dofly_DuanMa[IRcord[3]/16];
TempData[7]=dofly_DuanMa[IRcord[3]%16];
//Display(0,8); // 调用数码管扫描
irpro_ok=0;//处理完成标志
}
/*------------------------------------------------
红外码值处理
------------------------------------------------*/
void Ircordpro(void)//红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;
k=1;
for(i=0;i<4;i++) //处理4个字节
{
for(j=1;j<=8;j++) //处理1个字节8位
{
cord=irdata[k];
if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
value|=0x80;
if(j<8)
{
value>>=1;
}
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
Init_Timer1();
while(1)//主循环
{
if(irok) //如果接收好了进行红外处理
{
Ircordpro();
irok=0;
}
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
{
Ir_work();
}
}
}
51P3^2是外部中断,红外接收管接这个引脚就能接收到数据然后显示在数码管上
❸ 51单片机红外接收端的程序怎么写,我想知道写的方法和原理,最好有一个具体的模版,好让我参考.
这是采用STC12C5A60S2单片机的红外解码程序及其说明。
;采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的"0";
;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的"1
;上述"0"和"1"组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,
;达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射
;遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,
;防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H
;后16位为8位操作码(功能码)及其反码。
;当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),
;一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)
;和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,
;接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。
;
;解码的关键是如何识别"0"和"1",接收端而言,"0"是0.56ms的高+0.56ms的低。"1"是1.68ms的高+0.56ms的低。
;所以可以根据高电平的宽度区别"0"和"1"。当高电平出现时开始延时,0.56ms以后,若读到的电平为低,
;说明该位为"0",反之则为"1",为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为"0",
;读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。
;为了共用引导部分延时程序,这里用0.9ms延时。
;-------------红外解码程序---------------------------
EXINT0:
PUSH ACC
PUSH PSW
PUSH 1
PUSH 2
PUSH 6
CLR EA ;暂时关闭中断请求
MOV R6,#10
EXINT10:
LCALL DELAY09MS ;调用900us延时子程序
JB IRIN,INTOUT1 ;判断P3.2是否有高电平,如果有就退出解码程序
DJNZ R6,EXINT10 ;循环10次,检测在900微妙中是否存在高电平。以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB IRIN,$ ;等待高电平避开9毫秒低电平引导脉冲
LCALL DELAY45MS ;延时4.5毫秒
;-------------接受32位代码--------------------------
MOV R1,#IRUSERL
MOV R2,#04H
EXINT101:
MOV R6,#08H ;每组数据位8位
EXINT102:
JNB IRIN,$ ;等待地址码第一组数据的高电平信号
LCALL DELAY09MS ;高电平开始后延时判断信号此时的高/低状态
MOV C,IRIN ;将P3.2引脚此时的电平状态0或1存入C中
JNC INT1OUT ;如果为0跳出
LCALL DELAY1MS
INT1OUT:
MOV A,@R1
RRC A ;将C中的数据0/1移入A中最低位
MOV @R1,A ;将A中的数据暂存在R1
DJNZ R6,EXINT102 ;接受完8位代码
INC R1
DJNZ R2,EXINT101 ;接受完4组32位代码
;--------------数据码比较-------------------------------
MOV A,IRDATAL
; LCALL SENDRXDAT
MOV A,IRDATAL
CPL A
CJNE A,IRDATAH,INTOUT1 ;判断数码正误,不等退出
MOV IR_DAT,IRDATAL ;相等则保存正确数据
MOV A,IR_DAT
; LCALL SENDRXDAT
SETB IRBIT
INTOUT1:
LCALL DELAY45MS
SETB EA ;允许中断
POP 6
POP 2
POP 1
POP PSW
POP ACC
RETI
;;*****************11.0592*900=9953******************
DELAY09MS: ;6
PUSH 4 ;4
PUSH 3 ;4
MOV R4,#20 ;2
DLY900:
MOV R3,#122 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY900 ;4
MOV R4,#11 ;2
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ;3
RET ;4
;TOTAL=9952
;;*****************11.0592*560=6193******************
DELAY056: ;6
PUSH 4 ;4
PUSH 3 ;4
MOV R4,#12 ;2
DLY5600:
MOV R3,#122 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY5600 ;4
MOV R4,#71 ;2
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ;3
RET ;4
;TOTAL=6194
;;*****************11.0592*4500=49766****************
DELAY45MS: ;6
PUSH 4 ;4
PUSH 3 ;4
MOV R4,#52 ;2
DLY45:
MOV R3,#236 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY45 ;4
MOV R4,#85 ;2
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ;3
RET ;4
;;TOTAL=49768
;;*****************11.0592*1000=11059****************
DELAY1MS: ;6
PUSH 4 ;4
PUSH 3 ;4
MOV R4,#20 ;2
DLY1MS:
MOV R3,#136 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY1MS ;4
MOV R4,#8 ;2
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ;3
RET ;4
;TOTAL=11060
;;***************************************************
DELAY100US: ;6
PUSH 4 ;4
MOV R4,#140 ;2
DJNZ R4,$ ;4
MOV R4,#131 ;2
DJNZ R4,$ ;4
POP 4 ;3
RET ;4
;TOTAL=1105
;;***************************************************
❹ 简易红外线通信电路的设计制作
简易红外线通信电路的设计,首先将需要发射的语音信号调制到载波信号中,然后以红外反射管发射出去。另一端用光敏电阻或二极管接收,并解调。可以使用555实现调制和解调。
❺ 51单片机怎么接受红外线 C语言
单片机本身不能接收,只是控制器,要另加电路才能接受。
❻ 求单片机C51红外线收发方案(最好有详细解释)
红外线遥控器解码程序
2007-02-07 18:52 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。现在工业设备中,也已经广泛在使用。。。。。
1 红外遥控系统
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
2 遥控发射器及其编码
遥控发射器专用芯片很多,根据编码格式可以分成脉冲宽度调制和脉冲相位调制两大类,这里我们以运用比较广泛,解码比较容易的脉冲宽度调制来加以说明,现以3310组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”
上述“0”和“1”组成的42位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,
3310产生的遥控编码是连续的42位二进制码组,其中前26位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位为8位的操作码和8位的操作反码用于核对数据是否接收准确。
当遥控器上任意一个按键按下超过36ms时,LC7461芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个4.5ms的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。
解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右即可。
根据红外编码的格式,程序应该等待9ms的起始码和4.5ms的结果码完成后才能读码。
接收器及解码
LT0038是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。
下面是一个对51ISP编程实验开发板配套的红外线遥控器的解码程序,它可以把红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。
ORG 0000H
AJMP MAIN;转入主程序
ORG 0003H ;外部中断P3.2脚INT0入口地址
AJMP INT ;转入外部中断服务子程序(解码程序)
;以下为主程序进行CPU中断方式设置
MAIN:SETB EA ;打开CPU总中断请求
SETB IT0 ;设定INT0的触发方式为脉冲负边沿触发
SETB EX0 ;打开INT0中断请求
;以下对单片机的所有引脚进行初始化,全部设置成高电平
MOV P2,#11111111B
AJMP $
;以下为进入P3.2脚外部中断子程序,也就是解码程序
INT: CLR EA ;暂时关闭CPU的所有中断请求
MOV R6,#10
SB: ACALL YS1;调用882微秒延时子程序
JB P3.2,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R6, SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码
MOV R7,#26;忽略前26位系统识别码
JJJJA:JNB P3.2,$;等待地址码第一位的高电平信号
LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
JNC UUUA;如果为0就跳转到UUUA
LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUUA: DJNZ R7,JJJJA
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#2;接收从1AH到1BH的2个内存,用于存放操作码和操作反码
PP: MOV R3,#8;每组数据为8位
JJJJ: JNB P3.2,$;等待地址码第一位的高电平信号
LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
JNC UUU;如果为0就跳转到UUU
LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUU: MOV A,@R1;将R1中地址的给A
RRC A;将C中的值0或1移入A中的最低位
MOV @R1,A;将A中的数暂时存放在R1数值的内存中
DJNZ R3,JJJJ;接收满8位换一个内存
INC R1;对R1中的值加1,换下一个RAM
DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH中
MOV A,1AH
CPL A;对1AH取反后和1BH比较
CJNE A,1BH,EXIT;如果不等表示接收数据发生错误,放弃
MOV P1,1AH;将按键的键值通过P1口的8个LED显示出来!
CLR P2.0;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
LCALL YS2
LCALL YS2
LCALL YS2
SETB P2.0;蜂鸣器停止(使用时可以将J2的YINYUE脚用跳线接J4 的XS1脚才可以使用蜂鸣器)可以看原理图
EXIT: SETB EA ;允许中断
RETI ;退出解码子程序
YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2;延时程序3,精确延时1000微秒
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
END
以上程序紧供参考。
0A 01
11 12 13 14
15 16 17 18
19 10 1A 1B
0E 02 03 1C
06 04 05 0C
0D 08 09 1D
00 1F 1E 0B
07 0F
这是按照红外遥控器按键的实际位置给出的32个按键的键值(16进制)
❼ 51单片机双机红外通信问题
一般来说肯定要调整到38K载波上,不然发射管你到哪里去找去,至于协议嘛?如果不用其他设备接收的话,你自己定就可以了,不一定非得按标准红外收发通讯协议来做。
❽ 基于单片机的红外遥控收发系统的设计与实现
低频信号发生器的设计
摘 要:
直接数字合成(DDS)是一种重要的频率合成技术,具有分辨率高、频率变换快优点,在雷达及通信等领域有着广泛的应用前景。文中介绍了一种高性能DDS芯片AD9850的基本原理和工作特点,阐述了如何利用此芯片设计一种频率在0—50
kHz内变化、相位正交的信号源,给出了AD9850芯片和MCS51单片机的硬件接口和软件流程。
关键词:直接数字频率合成 信号源 AD9850芯片
概述:
随着数字技术的飞速发展,高精度大动态范围数字/模拟(D,A)转换器的出现和广泛应用,用数字控制方法从一个标准参考频率源产生多个频率信号的技术,即直接数字合成(DDS)异军突起。其主要优点有:(1)频率转换快:DDS频率转换时间短,一般在纳秒级;(2)分辨率高:大多数DDS可提供的频率分辨率在1 Hz数量级,许多可达0.001 Hz;(3)频率合成范围宽;(4)相位噪声低,信号纯度高;(5)可控制相位:DDS可方便地控制输出信号的相位,在频率变换时也能保持相位联系;(6)生成的正弦/余弦信号正交特性好等。因此,利用DDS技术特别容易产生频率快速转换、分辨率高、相位可控的信号,这在电子测量、雷达系统、
调频通信、电子对抗等领域具有十分广泛的应用前景。
1. 低频信号发生器的组成
图2.7为低频信号发生器组成框图。它主要包括主振器、电压放大器、输出衰减器、功率放大器、阻抗变换器和指示电压表等。
(1)主振器
RC文氏桥式振荡器具有输出波形失真小、振幅稳定、频率调节方便和频率可调范围宽等特点,故被普遍应用于低频信号发生器主振器中。主振器产生与低频信号发生器频率一致的低频正弦信号。
文氏桥式振荡器每个波段的频率覆盖系数(即最高频率与最低频率之比)为10,因此,要覆盖1Hz~1MHz的频率范围,至少需要五个波段。为了在不分波段的情况下得到很宽的频率覆盖范围,有时采用差频式低频振荡器,图2.8为其组成框图。假设f2=3.4MHz,f1可调范围为3.3997MHz~5.1MHz,则振荡器输出差频信号频率范围为300Hz (3.4MHz-3.3997MHz)~1.7MHz(5.1 MHz-3.4 MHz)。
差频式振荡器的缺点是对两个振荡器的频率稳定性要求很高,两个振荡器应远离整流管、功率管等发热元件,彼此分开,并良好屏蔽。
(2)电压放大器
电压放大器兼有缓冲与电压放大的作用。缓冲是为了使后级电路不影响主振器的工作,一般采用射极跟随器或运放组成的电压跟随器。放大是为了使信号发生器的输出电压达到预定技术指标。为了使主振输出调节电位器的阻值变化不影响电压放大倍数,要求电压放大器的输入阻抗较高。为了在调节输出衰减器时,不影响电压放大器,要求电压放大器的输出阻抗低,有一定的带负载能力。为了适应信号发生器宽频带等的要求,电压放大器应具有宽的频带、小的谐波失真和稳定的工作性能。
(3)输出衰减器
输出衰减器用于改变信号发生器的输出电压或功率,分为连续调节和步进调节。连续调节由电位器实现,步进调节由步进衰减器实现。图2.9为常用输出衰减器原理图,图中电位器RP为连续调节器(细调),电阻R1~R8与开关S构成步进衰减器,开关S为步进调节器(粗调)。调节RP或变换开关S的挡
(4) 功率放大器及阻抗变换器功率放大器用来对衰减器输出的电压信号进行功率放大,使信号发生器达到额定功率输出。为了能实现与不同负载匹配,功率放大器之后与阻抗变换器相接,这样可以得到失真小的波形和最大的功率输出。
阻抗变换器只有在要求功率输出时才使用,电压输出时只需衰减器。阻抗变换器即匹配输出变压器,输出频率为5Hz~5kHz时使用低频匹配变压器,以减少低频损耗,输出频率为5kHz~1MHz时使用高频匹配变压器。输出阻抗利用波段开关改变输出变压器次级圈数来改变。
2. 工作原理及结构
函数信号发生器产生信号的方法有三种:一种是由施密特电路产生方波,然后经变换得到三角波和正弦波形;第二种是先产生正弦波再得到方波和三角波;第三种是先产生三角波再变换为方波和正弦波。在此主要介绍第一种方法,即脉冲式函数信号发生器
3. 低频信号发生器的主要工作特性
目前,低频信号发生器的主要工作特性如下:
①频率范围 一般为20Hz~1MHz,且连续可调。
②频率准确度 ±(1~3)%。
③频率稳定度 一般为(0.1~0.4)%/小时。
④输出电压 0~10V连续可调。
⑤输出功率 0.5~5W连续可调。
⑥非线性失真范围 (0.1~1)%。
⑦输出阻抗 50Ω、75Ω、150Ω、600Ω、5kΩ等几种。
⑧输出形式 平衡输出与不平衡输出。
4. 低频信号发生器的使用
低频信号发生器型号很多,但它们的使用方法基本类似
(1)了解面板结构
使用仪器之前,应结合面板文字符号及技术说明书对各开关旋钮的功能及使用方法进行耐心细致的分析了解,切忌盲目猜测。信号发生器面板上有关部分通常按其功能分区布置,一般包括:波形选择开关、输出频率调谐部分(包括波段、粗调、微调等)、幅度调节旋钮(包括粗调、细调)、阻抗变换开关、指示电压表及其量程选择、电源开关及电源指示、输出接线柱等。
5. AD9850 芯片介绍
AD9850是AD公司生产的最高时钟为125 MHz、采用先进的CMOS技术的直接频率合成器,主要由可编程DDS系统、高性能模数变换器(DAC)和高速比较器3部分构成,能实现全数字编程控制的频率合成,并具有时钟产生功能。AD9850的DDS系统包括相位累加器和正弦查找表,其中相位累加器由一个加法器和一个32位相位寄存器组成,相位寄存器的输出与外部相位控制字(5位)相加后作为正弦查找表的地址。正弦查找表实际上是一个相位/幅度转换表,它包含一个正弦波周期的数字幅度信息,每一个地址对应正弦波中0。一360。范围的一个相位点。查找表把输入地址的相位信息映射成正弦波幅度信号,然后驱动10bit的DA变换器,输出2个互补的电流,其幅度可通过外接电阻进行调节。AD9850还包括—个高速比较器,将DA变换器的输出经外部低通滤波器后接到此比较器上即可产生一个抖动很小的方波,这使得AD9850可以方便地用作时钟发生器。AD9850包含40位频率/相位控制字,可通过并行或串行方式送人器件:并行方式指连续输入5次,每次同时输入8位(1个字节);串行方式则是在—个管脚完成40位串行数据流的输入。这40位控制字中有32位用于频率控制,5位用于相位控制,1位用于掉电(powerdown)控制,2位用于选择工作方式。在并行输入方式下,通过8位总线D0一D7将外部控制字输入到寄存器,在W—CLK(字输入时钟)的上升沿装入第一个字节,并把指针指向下一个输入寄存器,连续5个W—CLK的上升沿读入5个字节数据到输入寄存器后,W—CLK的边沿就不再起作用。然后在rQ—UD(频率更新时钟)上升沿到来时将这40位数据从输入寄存器装入到频率/相位寄存器,这时DDS输出频率和相位更新一次,同时把地址指针复位到第一个输入寄存器以等待下一次的频率/相位控制字输入。
6 硬件设计
要产生两路相位正交、频率可由外部控制的正弦信号,必须通过单片机编程来完成外部输入的频率数据(3个字节)与DDS38芯片(AD9850)内部频率相位控制字(5个字节)间的转换。单片机8051与AD9850芯片的接口既可采用并行方式,也可采用串行方式,本设计采用的是8位并行接口方式。由于需要产生VQ两路正弦信号,因此使用了2片AD9850芯片,这两路的频率相同,相位差90。。单片机8051的P1口(P1.0一P1.7脚)用作外部控制字输入,通过中断1和中断0读入外部频率数据,连续读3次,对应频率值的二进制数;单片机的P0口(P0.0一P0.7脚)用作频率/相位控制字输出,通过8位缓冲器74LS244作数据缓冲后加到2片AD9850芯片的8位控制字输入端(DO—D7脚),同时产生相应的DDS时序控制信号(一路复位reset1、二路复位reset2、一路字输入时钟W1、二路字输入时钟W2、一路频率更新时钟FU1、二路频率更新时钟FU2)加到AD9850芯片的对应管脚。AD9850的外部参考时钟信号(dk4Om)频率为40 MHz,由晶体振荡器产生。单片机8051的复位信号(reset)、中断0和中断1控制信号(intO、int1)由外部控制系统给出,从而实现两路相位正交、频率可控的正弦信号。该DDS信号源的硬件接口电路如图1所
图1 DDS信号源硬件接口电路
7. 软件控制
此程序的功能就是要将外部输入的频率数据按照一定协议和算法变换成DDS芯片(AD9850)所能接受的格式,并送出相应的频率相位控制信号,从而使AD9850能产生两路相位正交、频率可控的正弦信号。下面给出程序设计输入、输出、变换算法。
(1) 输入
数据同步:上升沿时读人1个字节的频率数据,作为intl中断输入;
数据写入:上升沿时频率更新1次,作为intO中断输入;
8位数据:输入的频率字节。分3次输入,如图2所示。
(2)输出
单片机控制程序将产生下述输出信号加到DDS芯片(AD9850)的对应脚:
reset1:一路DDS复位(一路AD9850第22脚);
reset7.:二路DDS复位(-路AD9850第22脚);
w1:一路数据同步(一路AD9850第7脚);
w2:二路数据同步(二路AD9850第7脚);
ful:一路数据写入(一路AD9850第8脚);
fu2:二路数据写入(二路AD9850第8脚);
P0口(P0.0一P0.7):8位频率/相位数据输出(AD9850的DO—D7脚)。
(3)算法:程序中单片机输入频率数据F(3个字节)与输出频
率数据△P(4个字节)间的变换算法见式(2)
其中CLKIN为外部参考时钟(40 M Hz)。
(4)程序流程:整个程序由主程序、中断0子程序、中断1子
程序三部分构成。流程图略。
8 结论
对设计的信号源在不同频率下的输出波形进行了测试,结果完全能达到所要求的性能指标。而且AD9850工作可靠,对参考时钟波形要求不高,输出信号稳定且信噪比高,是一种性价比很高的芯片,正广泛应用于电子测量、跳频通信、雷达系统等领域。
9 致谢
通过对低频信号发生器的设计,我深刻认识到了“理论联系实际”的这句话的重要性与真实性。而且通过对此课程的设计,我不但知道了以前不知道的理论知识,而且也巩固了以前知道的知识。最重要的是在实践中理解了书本上的知识,明白了学以致用的真谛。也明白老师为什么要求我们做好这个课程设计的原因。他是为了教会我们如何运用所学的知识去解决实际的问题,提高我们的动手能力。在整个设计到电路的焊接以及调试过程中,我个人感觉调试部分是最难的,因为你理论计算的值在实际当中并不一定是最佳参数,我们必须通过观察效果来改变参数的数值以期达到最好。而参数的调试是一个经验的积累过程,没有经验是不可能在短时间内将其完成的,而这个可能也是老师要求我们加以提高的一个重要方面吧
参考文献:
【1】高卫东.等.AD9850 DDS芯片信号源的研制【J】.实验室研究与探
索,2000,(5).
【2】石雄.等.DDS芯片AD9850的工作原理及其与单片机的接口【J】.国
外电子元器件,2001。(5).
(上
❾ 基于红外技术的多点集中通信的设计
我来试试。
采用现在电视机用的940nm红外发光管,接收也用这个频率的接收管,这样有发也有接了。接收管如果用TSOP1738之类的红外一体接收器,就不带38K解调了。这样,一个发射管,一个TSOP1738就构成了一对发射/接收。主机和各个终端都要有这样的一对才行。
接下来就是通讯协议了。类似于I2C,发送有地址,有指令(数据)。接收方都要有解析才行。是自己的地址,就应答,不是自己的地址,就不回答。
发射管的发射控制:用CPU定时器产生的38KH方波,与串口输出数据信号“与”一下。程序里编一下也行。就不能用串口输出数据了,就得用口线仿真了。
38K的调制,允许的通讯波特率不能太高,在2400bps左右。
从TSOP1738出来的TTL电平,直接接到RXD上即可。
再高速的通讯,就要用手机上或电脑上用的红外发射接收专用“对管”了,可以支持更高的频率。如HSL7001等器件,它可以实现115K的UART,但调制频率不用我们管。只需连到串口就可以通讯。