二、 国家标准 标准可参考“信部无[2005]423 号 关于发布《微功率(短距离)无线电设备的技术要求》的通知”,要 求如下: (十一)各类民用设备的无线控制装置 不得用于无线控制玩具、模型等。 1.使用频率:314-316MHz,430-432MHz,433.00-434.79MHz 发射功率限值:10mW(e.r.p) 占用带宽:不大于 400kHz 三、 编码与解码 以遥控器为例,在明确调制方式后,需要为遥控器编码方式进行约定。一组遥控编码通常需要包含“引 导码/起始码”、“用户码” 、“数据码” 、 “结束码”、 “重复码”,格式如下:
确定编码组成后需要明确“逻辑 0” 、 “逻辑 1”的表示方法,可以遵循标准的编码方案,也可以进行自 定义。标准编码方案可以使用“曼彻斯特编码”等方案,在自定义编码方案时可以参考下图所示的编码 规则,主要是电平顺序与电平长度的组合。
以遥控的编码为例进行分析,得到如下编码波形:
假设: 高电平长码 + 低电平短码表示逻辑 1 高电平短码 + 低电平长码表示逻辑 0 可以得到该组数据为“0x88 0x03 0xBD 0xB6”。
解码过程是对编码过程的逆向,解码程序需要根据编码方案进行设计。竞品遥控器的解码方案请参考 “参考示例” 。 四、 参考示例 根据测得的遥控器编码波形可知,433MHz 接收端输出的信号中,电平维持时间有 20ms、9ms、1.6ms、 700us 这几种。使用 1.6ms 高电平 + 700us 低电平表示逻辑 1,700us 高电平 + 1.6ms 低电平表示逻辑 0,9ms 高电平表示引导/起始码,700us 高电平 + 20ms 低电含中平表示结束码,同时也表示“重复码“”的 起始。 程序设计中,对 700us 的电平进行检测并计数,要保证做够的容错能力,需要将定时器中断做到 100us 以下,甚至更小,显然使用定时器中断处理时不合理的。在本示例中,采用外部中断 + 定时器计数的 方式进行电平长度采样。外部中断采用上升沿和下降沿触发,在中断中根据当前电平切换边沿触发方 式枝羡。定时器使用系统时钟(16.6MHz)的 64 分频作为时钟源,具有足够的分辨率,可提高接收机的容错 能力。 数据采样逻辑中,下降沿时判断当前高电平表示的逻辑值,谈搭山上升沿是对上一步中产生的逻辑值进行确 认,若逻辑值合法则对该逻辑值进行记录,若不合法,这舍弃该逻辑值,并初始化接收机,等待下一次 数据。程序流程图如下:
示例代码: 外部中断初始化为上升沿触发,当前电平 INT45Level 默认为低。 使用定时器 3 作为计数器
/*---------------定时器时钟使用系统频率 64 分频------------------*/
//1ms 计数 260 //实测引导码高电平长度为 9.7ms,低电平长度为 2ms
#define HeadCont_H 2540 //9.7ms
#define HeadCont_L 500 //2ms
//实测逻辑 1 为高电平 1.7ms+低电平 0.6ms
#define OneCode_H 450 //1.7ms
#define OneCode_L 160 //0.6ms
//假设 0 码为高电平 0.6ms+低电平 1.7ms
#define Zero_H 160
#define Zero_L 450
//容错范围
#define FaultTolerant 50
寄存器定义
uint16 T3Counter
bit INT45Level = 0
bit ZeroCode//接收到逻辑 0
bit OneCode//接收到逻辑 1
bit MaybeRemoteStart//疑似接收到起始码
bit RemoteStart//开始接收遥控数据
bit ReadOver//接收完成
#define DefRemoteDataBufLen 10 //默认遥控数据长度
idata uint8 RemoteDataBuffer[DefRemoteDataBufLen]//接收缓冲区
idata uint8 ReadTab[DefRemoteDataBufLen]//已接收,待处理数据
idata uint8 ReadBitCont//读取 Bit 计数
idata uint8 ReadBuffer//数据缓存区
idata uint8 ReadByteCont//读取字节计数
外部中断服务程序
void INT45_interrupt() interrupt 9
{
u8 backtemp
backtemp = INSCON
INSCON = 0x00
if((EXF1&0x20) == 0x20)
{
//读取 T3 计数器
INSCON |= 0x40
T3CON = 0x00
T3Counter = 0x0000|(TH3 <<8)
T3Counter |= TL3
TL3 = 0x00
TH3 = 0x00
T3CON = 0x24//系统分频 1/64,启动定时器
INSCON &= ~0x40
if(INT45Level) //处理下降沿
{
if((T3Counter >(HeadCont_H - FaultTolerant))&&(T3Counter <(HeadCont_H + FaultTolerant)))
{
MaybeRemoteStart = 1//疑似遥控数据头
}
else
{
if((T3Counter>(OneCode_H - FaultTolerant))&&(T3Counter <(OneCode_H + FaultTolerant)))
{
OneCode = 1
ZeroCode = 0
}
else
{
if((T3Counter >(Zero_H - FaultTolerant))&&(T3Counter <(Zero_H + FaultTolerant)))
{
ZeroCode = 1
OneCode = 0
}
else
{
ZeroCode = 0
OneCode = 0
}
}
}
INT45Level = 0//当前电平为低
EXF0 = 0x80//设置为上升沿触发
}
else //处理上升沿
{
if(RemoteStart)
{
if((T3Counter >(OneCode_L - FaultTolerant))&&(T3Counter <(OneCode_L + FaultTolerant)))
{
if(OneCode)
{ //接收到一个 bit 为 1
GetOneByte()
}
else
{ //数据出错,丢弃
RemoteStart = 0
OneCode = 0
ZeroCode = 0
ReadOver = 0
}
}
else
{
if((T3Counter >(Zero_L - FaultTolerant))&&(T3Counter <(Zero_L + FaultTolerant)))
{
if(ZeroCode)
{ //接收到一个 bit 为 0
GetOneByte()
}
else
{ //数据出错,丢弃
RemoteStart = 0
OneCode = 0
ZeroCode = 0
ReadOver = 0
}
}
else
{
if(ZeroCode &&(T3Counter >4000)) //结束码,同时也是重复码的起始
{
ReadOver = 1
OneCode = 0
ZeroCode = 0
RemoteStart = 0
GetOneByte()
}
else
{ //干扰数据,接收器初始化
RemoteStart = 0
OneCode = 0
ZeroCode = 0
ReadOver = 0
}
}
}
}
else
{
if(MaybeRemoteStart)
{
if((T3Counter >(HeadCont_L - 20))&&(T3Counter <(HeadCont_L + 20)))
{
RemoteStart = 1//遥控数据开始发送
ReadBitCont = 0//读取 Bit 计数
ReadBuffer = 0//数据缓存区
ReadByteCont = 0//读取字节计数
ReadOver = 0
MaybeRemoteStart = 0
}
}
}
INT45Level = 1//当前电平为高
EXF0 = 0x40//设置为下降沿触发
}
}
EXF1 = 0x00
INSCON = backtemp
}
GetOneByte()子函数,接收完整字节并处理
void GetOneByte()
{
int i
if(ReadBitCont<=7)
{
ReadBuffer <<= 1
if(OneCode)
{
ReadBuffer |= 0x01
}
}
ReadBitCont ++
if(ReadBitCont >= 8)
{
RemoteDataBuffer[ReadByteCont++] = ReadBuffer//每接收 1byte,写入缓存
ReadBuffer = 0
ReadBitCont = 0
}
if(ReadOver) //全部接收完后
{
for(i=0i<ReadByteConti++)
{
ReadTab[i]=RemoteDataBuffer[i]
}
ReadByteCont = 0
}
}
基于 EV1527良 好 的 安 全 性 能 ,将 会 逐 步 代 替PT2272/罩闭2262的应用 ,可以把编码芯片 EV1527和解码芯
片 TDH6300配合应用到模特车防盗系统中物高裂,必将大大提
高模特车被盗的难度 ,从而减小模特车被盗的可能性。
遥控器有16个按键,存储各个按键对应
的字念顷码。遥控器采用带锁开关按钮 S1来选择其是接收学
习功能还是无线指令的编码发射 功能。对于码位的脉冲
宽度识别 ,采用单片机定时器的门控计数方式来测量脉冲
宽度 ,定时器 0用来计高电平宽度,定时器 1用来计低 电
平宽度 ,这些均在软件 中实现。为了提高遥控器接收模块
的抗干扰能力,在硬件上本文对连接无线接收模块数据端
的 I/0 口采用三极管进行端 口隔离,可以有效抑制单片机
对无线接收模块的电磁干扰 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)