关键术语解释
-
inductive coupled carrier
电感耦合载波,即连接LF1P、LF2P、LF3P三个引脚的电感和电容产生的频率,如使用125KHz作为载波频率。这里就要设置为125kHz,根据电感和电容的不同值可产生不同频率的载波,在改变寄存器R17<4:0>、R18<4:0>、R19<4:0>中的值可微调所产生的频率,使其尽可能接近125KHz,以达到最佳感应效果。 -
On-Off-Keying (OOK)
开关控键,即如下所示,
关键寄存器说明
R0<7>=1 | 1: PAT32,扩展模式32bit |
---|---|
R0<6>=1 | DAT_MASK, 唤醒前 DAT 引脚上的数据掩码数据被屏蔽。即屏蔽Pattern,只显示Data |
R0<5>=1 | ON_OFF,使用低功耗模式中的ON/OFF模式 |
R0<4>=0 | MUX_123,低功耗扫描模式,不使用 |
R0<3>=1 | EN_A2,通道 2 使能 |
R0<2>=1 | EN_A3,通道 3 使能 |
R0<1>=1 | EN_A1,通道 1 使能 |
R0<0>=0 | Reserved,保留位 |
– | – |
R1<7>=0 | ABS_HY,0:配置数据分割器不采用绝对参考值 1:配置数据分割器采用绝对参考值。绝对参考值可应用于环境噪声小的地方 |
R1<6>=0 | AGC_TLIM,AGC作用的时间限制,不使用。如果使用, It will then only be active for 256 µs after the frequency detection was successful. |
R1<5>=1 | AGC_UD,AGC 工作在 up & down 模式 |
R1<4>=0 | ATT_ON,天线阻尼器不使用 |
R1<3>=1 | EN_MANCH,曼彻斯特解码器使能 |
R1<2>=0 | EN_PAT2,双唤醒 Pattern 相关器 不使用 |
R1<1>=1 | EN_WPAT,Pattern 相关器使能。如果R1<1>=1,载波突破(Carrier Burst )之后先校验前导码(Preamble),然后校验模式(Pattern),最后是数据(Data);如果R1<1>=0,载波突破(Carrier Burst )之后直接是数据(Data) |
R1<0>=1 | EN_XTAL,晶体振荡器使能,使用了外部晶振 |
– | – |
R2<7>=0 | S_ABSH,数据分割器绝对阈值降低 |
R2<6>=0 | EN_EXT_CLK,外部时钟发生器,不使用 |
R2<5>=1 | G_BOOST,1.5dB 额外增益(80nA),It is possible to boost the gain of the amplifiers for +3dB with an improvement of the sensitivity |
R2<4>=1 | AGC_LOW_CTRL,AGC 下限控制位 |
R2<3:2>=00 | DIS-PLAY_CLK,设置为 11 时,将时钟 32KHZ 的频率通过CL_DAT 输出,不使用 |
R2<1:0>=00 | S_WU1,唤醒的公差设置 |
– | – |
R3<7>=1 | HY_20m,数据分割器迟滞 20mV,即迟滞比较器的阈值为20mV。 |
R3<6>=0 | HY_POS,迟滞发生在上升沿和下降沿 |
R3<5:3>=011 | FS_SCL,产生迟滞比较器参考波形的滤波时间常数1.9ms |
R3<2:0>=010 | FS_ENV,包络检测器时间常数 |
– | – |
R4<7:6>=00 | T_OFF, ON/OFF 模式下,ON时间固定为1ms; OFF 时间可调,此处设置1ms(也可设置为2、4、8ms) |
R4<5:4>=00 | D_RES,天线阻尼器电阻值设置,没使用天线阻尼器,所以不关心该位 |
R4<3:0> =0000 | GR,AGC 增益衰减设置,即设置为0dBm、-4dBm、-8dBm等 |
– | – |
R5<7:0> | TS2,唤醒 Pattern 的第二个字节 |
R6<7:0> | TS1,唤醒 Pattern 的第一个字节 |
– | – |
R7<7:5>=011 | T_OUT,自动超时设为150ms,若被唤醒后不使用CLEAR_WAKE或超过150ms后,AS3933自动进入低功耗模式,即 listening mode |
R7<4:0>=01010 | T_HBIT,比特率定义,即定义一个位所持续的时间为11个时钟周期。这里的一个位指的是OOK signal中的一个位,参考数据手册P28。AS3933使用32.768KHz的晶振,时钟周期约为30.5uS,所以一个位持续时间为11*30.5uS = 335.5uS |
– | – |
R8<7:5> | BAND_SEL,工作频率范围选择设为95-150KHz,项目使用125KHz |
R8<4:3> | Reserved, |
R8<2:0> | T_AUTO,没有人工唤醒 |
– | – |
R16<7>=0 | CLOCK_GEN_DIS,如果为1,将时钟 32khz 输出在 CL_DAT 引脚上 |
R16<6> =0 | LC_OSC_DIS,如果为1,将 LC 的谐振频率输出在 DAT 引脚上(LC即LF1P、LF2P、LF3P三路中的一路) |
R16<5> =0 | RC_OSC_MIN,如果为1,将 RC 振荡器设置为最小频率 |
R16<4> =0 | RC_OSC_MAX,如果为1,将 RC 振荡器设置为最大频率 |
R16<3> =0 | Reserved |
R16<2> =0 | LC_OSC_MUX3,如果为1,将 LF3P 的谐振频率显示在 DAT 引脚上 |
R16<1> =0 | LC_OSC_MUX2,如果为1,将 LF2P 的谐振频率显示在 DAT 引脚上 |
R16<0> =0 | LC_OSC_MUX1 ,如果为1,将 LF1P 的谐振频率显示在 DAT 引脚上 |
– | – |
R17<4:0> | CAPS_CH1,设置通道 1 的调谐电容值 ,视实际情况而定 |
R17<4:0> | CAPS_CH2,设置通道 2 的调谐电容值,视实际情况而定 |
R17<4:0> | CAPS_CH3,设置通道 3 的调谐电容值,视实际情况而定 |
载波频率
载波频率选择Fcarr=125KHz (R8<7:5> = 000)
时钟频率
时钟选择外部晶振 (R1<0> =1)
晶振频率计算如下:
Frc = Fcarr / 4
其中,Fcarr为载波频率125kHz,所以晶振频率 Frc = 31.25kHz。这里选择常用的32.768kHz晶振。(Tclk = 1 / Frc ≈ 30.5us)
频率检测及其公差设置
The frequency detection is based on a zero crossing counter and uses the Clock Generator as time base.This counter counts the zero crossing of the input signal within a time window defined by the clock generator。The Clock Generator generates time windows equal to N times its period,其中N如下所示。
频率检测可设置为严格或宽松,由于晶振选择没按标准的31.25KHz选择,所以这里频率检测公差设置为宽松 R2<1:0> = 00。
频率检测成功的定义为,在两个连续的时间窗口的零阈值计数器检测到M个过零。其中M就是R2<1:0> = 00所定义的值16±6;
其中一个时间窗口为N*Tclk,由于载波频率为125KHz,所以N为4,Tclk为30.5us,所以一个时间窗口为122us;
频率检测范围:(10/122)<F< (22/122),即81.967KHz<F<180.328KHz
低功耗模式
低功耗模式有两种:扫描模式(scanning mode)和On/Off模式,两模式中只能选择其中一种,这里选择On/Off模式(R0<5>=1)。On/Off模式即三个通道同时激活1ms,休眠Nms,其中激活1ms是固定的,休眠Nms可由R4<7:6> 设置
载波突破 Carrier Burst
低功耗模式选择的是On/Off模式,所以载波突破最小时间为:Tburst ≥ 16Tclk + 16Tcarr = 0.616ms,其中Tclk = 1 / Frc ≈ 30.5us,Tcarr = 1/125KHz = 8us;载波突破最大时间要小于155Tclk,即4.7275ms
所以载波突破时间范围为:0.616ms <Tburst<4.7275ms
比特率 Bit rate & 曼彻斯特符号率 Symbol rate
Choosing a higher bit rate will require more bandwidth from the antenna and make the system more sensitive towards noise. 高比特率需要更多的天线带宽,还会给系统带来噪音,因此这里选择中等,R7<4:0> = 01010 ,Bit rate = 1/(11*Tclk) ≈ 2980 b/s
一位曼彻斯特符号即两个Bit,所以Symbol rate = 1490 Manchester/s,R3<2:0> = 010,这里计算的Symbol rate不一定和数据手册表格一模一样,选最接近的。
前导码(preamble)最小时间
根据比特率可知一Bit 时间为 1/2980 ≈ 336us,前导码最少为6个bit(101010),这里选择6个bit,所以最小时间为6*336us=2.016, R3<5:3> = 011 (即1.9ms;或者也可以配置为R3<5:3> = 010,1.55ms)
模式相关性 Pattern correlation
这里Pattern选择32Bit R0<7> =1;
Pattern由R5、R6 寄存器决定,发射模块的 Pattern 要根据AS3933的R5、R6寄存器决定
自动超时 Automatic Time-Out
如果检测到匹配的频率被唤醒后,没有使用 “clear wake” 命令,经过N毫秒后则自动进入低功耗模式,这里的N是由寄存器R7<7:5>决定的,这里配置为150ms,R7<7:5>=011;如果使用直接命令“clear wake”可立即进入低功耗模式。
自动增益控制器(automatic gain control (AGC))和可变增益放大器(variable gain amplifier (VGA) )
可变增益放大器VGA可由寄存器R4<3:0>配置,改变这里可以改变感应距离,R4<3:0>=0000时感应距离最远;
自动增益控制器AGC, R1<6> =1时,Setting R1<6> will set a time limit for the AGC. It will then only be active for 256 µs after the frequency detection was successful.这里不对AGC做时间限制,R1<6> =0.
R1<5> = 1 AGC operating in both directions,AGC working up and down ;R2<5>=1,增加+3dB的灵敏度。
天线阻尼器 Antenna Damper
改变天线阻尼器的值,可以改变天线的质量因素(quality factor ),不是很理解。这里不使用天线阻尼器 R1<4> = 0.天线阻尼器的使用与否和其值的大小调节对感应距离有影响。
天线调节 Antenna Tuning
载波频率使用125KHz,因此AS3933三个通道(LF1P、LF2P、LF3P)的天线产生的频率也要尽可能的接近125KHz;在硬件电路上使用电感、电容产生125KHz的谐振频率,但可能存在一定的误差,这时就可以使用AS3933内部电容进行微调达到尽可能接近125KHz,这样可以达到最佳的感应效果。
在软件调试时,配置R16<6>=1,将 LC 的谐振频率输出在 DAT 引脚上(LC即LF1P、LF2P、LF3P三路中的一路)
R16<2:0>可选择将三路通道中的哪里路谐振频率引出到DAT引脚,如R16<2:0>=001,将 LF1P 的谐振频率显示在 DAT 引脚上;R16<2:0>=010,将 LF2P 的谐振频率显示在 DAT 引脚上;R16<2:0>=100,将 LF3P 的谐振频率显示在 DAT 引脚上。最后可使用逻辑分析仪或示波器等工具查看相应引脚具体的频率,如果输出频率与125KHz相差不大,可调节R17<4:0>对应LF1P、R18<4:0>对应LF2P、R19<4:0>对应LF3P,如下所示。如果频率与125KHz相差很大,就需要调节PCB中的电感、电容值。
解调器/数据切片 Demodulator / Data Slicer
AS3933一旦成功检测到125KHz频率,RSSI就会对比所有活动的通道并选择信号最稳定的通道,最终将通道放大器连接到解调器,从检测到频率到将稳定的通道连接到解调器需要32个载波周期(32*(1/125KHz)=256us);从解调器出来将得到两个信号:快速包络信号和慢速包络信号,这两个信号将连接到数据切片器,数据切片器即迟滞比较器,最后得到一串数字信号,如下图所示。这一串数字信号即Pattern和DATA。
载波发射器
载波发射器发射的信号要根据如下协议
载波发射器模块中MCU需要产生125KHz的PWM,如上图所示,即根据自定义的Carrier、Preamble、Pattern、Data协议对PWM引脚做开关处理。
程序实现
载波发射器,使用MCU不一样,配置产生PWM的引脚也不一样
/********************************************************************************************/
/* R6_Dat ----- Pattern1 对应AS3393 R6寄存器的值 第1个唤醒前导码*/
/* R5_Dat ----- Pattern2 对应AS3393 R5寄存器的值 第2个唤醒前导码 */
/* Patt16_32 启用32Bit模式 */
/* Send_Dat_Len 发送的数据的长度*/
/* Bit_Tim 一个Bit的时间 */
/********************************************************************************************/
void LF_SendData(uint8 R6_Dat,uint8 R5_Dat,uint8 Patt16_32,uint8 Send_Dat_Len,uint16 Bit_Tim)
{
uint8 i,j;
uint8 temp = 0;
uint8 Data_Buff[6];
Data_Buff[0] = 0xAA;
Data_Buff[1] = 0x55;
Data_Buff[2] = 0xAA;
Data_Buff[3] = 0x55;
Data_Buff[4] = 0xAA;
CarrierBurst(Bit_Tim); /*发射载波和前导码*/
Pattern(R6_Dat,R5_Dat,Patt16_32,Bit_Tim); //模式字 (和AS3393寄存器配置一致,修改此值已达到和AS3933的配对使用。)
for(i = 0;i < Send_Dat_Len;i++) /*发射的数据 DATA*/
{
for(j = 0;j < 8;j++) //发送一个字节
{
temp = Data_Buff[i] & 0x80;
Data_Buff[i]= Data_Buff[i] << 1;
//AS3933曼彻斯特编码 编码1: 1到0跳变 编码1持续时间366us
if(temp == 0x80) //0x80 = 1000 0000
{
Out_125K(Bit_Tim); // 开通时间12*30.5us=366us NxRC=0x0c= 12 LF_RC_TIME=30.5us //32768K
Close_125K(Bit_Tim);// 关闭时间12*30.5us=366us
}
else //AS3933曼彻斯特编码 编码 0:0到1跳变 编码0持续时间366us
{
Close_125K(Bit_Tim);
Out_125K(Bit_Tim);
}
}
}
PWM_CLOSE(1);
}
static void CarrierBurst(uint16 Bit_Tim)
{
unsigned int i;
Out_125K(2500); /*开启载波突破*/
Close_125K(Bit_Tim); /*间隔*/
for(i = 0;i < 3;i ++) /*前导码 至少3组10*/
{
Out_125K(Bit_Tim); /*开启125K信号 为1*/
Close_125K(Bit_Tim); /*停止125K信号 为0*/
}
}
static void Pattern(uint8 R6_Dat,uint8 R5_Dat,uint8 Patt16_32,uint16 Bit_Tim) //发送模式字 0 - 16bit, 1 - 32bit
{
uint8 i;
uint16 Patt_Data = 0;
Patt_Data = R6_Dat * 256 + R5_Dat;
if(Patt16_32 == PATT_32BIT)
{
for(i = 0;i < 16;i ++)
{
if(Patt_Data & 0x8000)
{
Out_125K(Bit_Tim);
Close_125K(Bit_Tim);
}
else
{
Close_125K(Bit_Tim);
Out_125K(Bit_Tim);
}
Patt_Data = Patt_Data << 1;
}
}
else
{
for(i = 0;i < 16;i ++)
{
if(Patt_Data & 0x8000)
{
Out_125K(Bit_Tim);
}
else
{
Close_125K(Bit_Tim);
}
Patt_Data = Patt_Data << 1;
}
}
}