搜索
bottom↓
回复: 26

SI4432 AFC 接收不到数据

[复制链接]

出0入0汤圆

发表于 2010-7-14 14:02:33 | 显示全部楼层 |阅读模式
大家好,我在使用SI4432的时候也遇到一些问题。
我使用的是直接调制模式,现在通信正常,指标正常(20kbps时,功率20dbm,灵敏度-108dbm)。但是有一个问题,在模块处于接收状态等待数据接收时(中间不收发数据),经过不定的时间,就会接收不到数据。经测试发现接收的频率已经偏了30多k(使用综测仪将频率调偏30多k才能正常解调出数据,上电时,不用将频率调偏就能解调出数据,将频率调偏则不能解调)。如果这时候用它发射一组数据,然后就可以接收到数据了,经测试发现频率也回到中心点啦。

我也是使用了AFC功能,估计是AFC造成的。因为通过测试晶体振荡器频率,频率基本没偏(测试时时将时钟通过SI4432的GPIO2引出,因为直接测试晶体管脚根本测不到信号,估计已经停诊。这个问题也很困惑,还没有遇到过这么容易停诊的振荡器,如果真是这样,那通信时也会很不稳定)。原来使用CC1020和ADF7021一直很好,没有遇到过这种问题。选用这个芯片主要是其外围器件少,输出功率高,接收指标也还可以,但是却遇到了这个问题,现在正在解决中,有结果一定和大家分享。也希望大家能给点建议

出0入0汤圆

 楼主| 发表于 2010-7-14 14:03:32 | 显示全部楼层
将AFC关掉后,发现上述问题更突出啦,希望高手能够给与解答

出0入0汤圆

 楼主| 发表于 2010-7-14 15:44:41 | 显示全部楼层
又将晶体换成了高稳定度的TXCO,问题依旧(那就判定和晶体的稳定度没关系),此芯片真是让人失望,功率再大,灵敏度再高有啥用,比较1020和7021,那真是一点不偏呀,希望厂家给与解决,否则,不用它啦

出0入0汤圆

 楼主| 发表于 2010-7-14 15:46:04 | 显示全部楼层
必须要设置成发射状态,再设汇接收状态才能用,真郁闷

出0入0汤圆

 楼主| 发表于 2010-7-14 15:48:09 | 显示全部楼层
因为我进行无限制的透明传输,不可能在中间时不时的在发一次数据或初始化一次寄存器,那样会丢数据的

出0入0汤圆

发表于 2010-7-14 16:58:49 | 显示全部楼层
回复【18楼】lyd961418  
-----------------------------------------------------------------------
    1. 频漂问题,建议AFC 关闭,不太看好AFC这功能,SI4432配置好了,频率偏30多KHz,是可以正常通信的;
    2. 直接测量晶体管脚,探头要衰减大一点,不然停振是正常的,另外你用什么仪器测试的晶体频率,这个精度需要比较高;
    3. 给点建议,注意做死机检测,我们的方法是检测数据时钟,当SI4432不产生数据时钟时,可以判断死机,需要复位重启;

    比较关注 你们的 ADF7021 的使用情况,请问做的哪个频段?使用多大的晶体?晶体的稳定度是多高的?带温补吗?测试过通信允许的频率误差么?实验过 7021 的 AFC 功能么?

   模式切换需要注意: Tx--TUNE--500us--RX       RX--TUNE--500us--TX


//==========================================================================
// 函数名称:sub_si4431_rx_mode
// 函数功能:进入接收模式
// 入口参数:无
// 出口参数:无
// 程序版本:1.0
// 编写日期:2010-01-19
// 程序作者
// 修改作者:
// 修改日期:
// 修改内容:
// 版本升级:
//==========================================================================
void    sub_si4431_rx_mode(void)
{
    SI4431_CLOSE_ALL_INT();                                             // 关闭数据时钟中断
    SI4431_TXC_OUTPUT_1();                                              // 关闭发射开关
    SI4431_DATA_INPUT_PH();                                             // 数据线输入上拉

    SI4431_TLED_OUTPUT_1();                                             // 熄灭发射指示灯
    SI4431_RLED_OUTPUT_1();                                             // 熄灭接收指示灯
   
    sub_si4431_write_register(0x07, 0x03);                              // TUNE(调谐)模式
    sub_si4431_delay( 10 );                                             // 500us
    sub_si4431_write_register(0x0D, 0xF4 );                             // F4:SI4431数据输出   F0:SI4431 数据输入(直接调制)
    sub_si4431_read_register(0x04);                                     // 清零状态标志
    si4431_swd_flag = 0;                                                //
    sub_si4431_write_register(0x06, 0x80);                              // 开启同步字中断允许
    sub_si4431_write_register(0x07, 0x07);                              // 接收模式
    SI4431_NIRQ_FALL_INT();                                             //

    SI4431_RXC_OUTPUT_0();                                              // 开启接收开关
    si4431_state = SI4431_IDLE_MODE;                                    //
}                                                                       //

出0入0汤圆

发表于 2010-7-14 17:07:21 | 显示全部楼层
如果晶体频率稳定,射频输出就是PLL倍频上去的,怎么会偏?好好看看数据手册,影响频率的就那么8个寄存器,看哪里没注意到。

1. R09  晶体负载电容,这个用来校准晶体的;
2. R79 R7A 用于快速设置频率,跳频用的,不用就设置为 0x00

    sub_si4431_write_register(0x79, 0x00);                              // 1. 快速设置,用于跳频系统
    sub_si4431_write_register(0x7A, 0x00);                              //

3. R73 R74 校准值,AFC就是通过这两个寄存器调整频率的,不用AFC,这个寄存器设置为 0x00

    sub_si4431_write_register(0x74, 0x00);                              // 2. 校准值设置
    sub_si4431_write_register(0x73, 0x00);                              //

4. R75 R76 R77 频点设置,没特殊要求,修改频点改这三个寄存器就可以了。

出0入0汤圆

 楼主| 发表于 2010-7-14 17:20:57 | 显示全部楼层
1、我的速率是19200bps,频偏是Fd=12khz,偏30多k,肯定是通不上了,因为此时的中频滤波器带宽是47.7k,允许的频率偏差是16.7k,这都是用寄存器设置的那个excel表算出来的
2、这个我明白,我用的就是X10档,示波器用的是泰克的百兆示波器,本来想用频谱分析仪来着,闲麻烦
3、我这还没有发现同步时钟没有了,就是解调不出正确的数据,如果真有同步时钟都没有了的情况,我只能丢弃
4、7021相对来说比4432要好用些

出0入0汤圆

发表于 2010-7-14 17:43:04 | 显示全部楼层
1、我的速率是19200bps,频偏是Fd=12khz,偏30多k,肯定是通不上了,因为此时的中频滤波器带宽是47.7k,允许的频率偏差是16.7k,这都是用寄存器设置的那个excel表算出来的
    Re:为什么要这样设置呢?窄带又不算窄带,又失去了宽带对频率稳定度不高的优势。 这样的话,晶体成本就上去了。


4、7021相对来说比4432要好用些
   Re:能具体点么,谢谢。 比较关注 你们的 ADF7021 的使用情况,请问做的哪个频段?使用多大的晶体?晶体的稳定度是多高的?带温补吗?测试过通信允许的频率误差么?实验过 7021 的 AFC 功能么?

出0入0汤圆

 楼主| 发表于 2010-7-14 17:50:27 | 显示全部楼层
如果中频滤波器太宽,灵敏度和选择性肯定做不上去

出0入0汤圆

发表于 2010-7-14 17:55:02 | 显示全部楼层


4、7021相对来说比4432要好用些  
   Re:比较关注你们的 ADF7021 的使用情况,能具体点说明一下么,请教了,谢谢。 请问做的哪个频段?使用多大的晶体?晶体的稳定度是多高的?带温补吗?测试过通信允许的频率误差么?实验过 7021 的 AFC 功能么? 谢谢。

出0入0汤圆

 楼主| 发表于 2010-7-15 08:12:29 | 显示全部楼层
7021 400M和900M都用过了,晶体用的是20M的,就是普通晶振(中关村市场买的,估计不会低于20ppm),通信允许的频率误差和设置的中频滤波器的带宽以及频偏都有关系,没具体测试。AFC功能没具体测试,只是使能了。相对来说,7021的频谱和频道选择性要优于1020,窄带时,相邻信道间隔25K即可互不干扰,而1020则非常差,相邻几M都不能确保没有邻道干扰。而且外围器件要比1020少些,但比4432要多,这也是为什么选择4432的原因之一
另外请教下,你们做的4432没有发现接收不到数据,然后启动一下发射,然后就可以接收数据了吗?附上我的4432的寄存器设置程序
void         SI4432Init(void){
        uint8 temp;

        //设置中心频率433MHz
        SI4432WriteRegister(0x75,0x53);
        SI4432WriteRegister(0x76,0x4b);
        SI4432WriteRegister(0x77,0x00);

        SI4432WriteRegister(0x79,0x00);
        SI4432WriteRegister(0x7a,0x00);


/*
        //设置中心频率915MHz
        SI4432WriteRegister(SI4432_FREQUENCY_BAND_SELECT,0x75);
        SI4432WriteRegister(SI4432_NOMINAL_CARRIER_FREQUENCY_1,0xbb);
        SI4432WriteRegister(SI4432_NOMINAL_CARRIER_FREQUENCY_0,0x80);
*/

        //设置无线发射速率20kbps
        SI4432WriteRegister(0x6E,0xa3);
        SI4432WriteRegister(0x6f,0xd7);
        SI4432WriteRegister(0x70,0x25);//////25
        SI4432WriteRegister(0x58,0x80);

        //设置晶体的负载电容
        SI4432WriteRegister(0x09,0x00);


        //设置发射频偏12khz,经测试20kbps时最小频偏可设置为7~8khz
        SI4432WriteRegister(0x72,0x13);
        SI4432WriteRegister(0x71,0x43); //0x23是FIFO模式,0x43是direct模式

        //设置发射功率
        SI4432WriteRegister(0x6d,0x0f);        //输出功率为20dbm

        //GFSK/FSK rx modem settings
        SI4432WriteRegister(0x1c,0x2d);
        SI4432WriteRegister(0x20,0x32);
        SI4432WriteRegister(0x21,0x02);
        SI4432WriteRegister(0x22,0x8f);
        SI4432WriteRegister(0x23,0x5c);
        SI4432WriteRegister(0x24,0x07);
        SI4432WriteRegister(0x25,0xff);
        //使能AFC
        SI4432WriteRegister(0x1d,0x40);
        SI4432WriteRegister(0x1e,0x0a);
        SI4432WriteRegister(0x2a,0x11);
        //禁止AFC
//        SI4432WriteRegister(0x1d,0x3c);
//        SI4432WriteRegister(0x1e,0x02);
//        SI4432WriteRegister(0x2a,0xff);
        SI4432WriteRegister(0x1f,0x03);
        SI4432WriteRegister(0x69,0x60);

        SI4432WriteRegister(0x33,0x80);        //禁止射频芯片的码同步检测
        //设置GPIO口的功能
        SI4432WriteRegister(0x0c,0x0f);        //GPIO1设置为数据同步时钟


        SI4432WriteRegister(0x0b,0x1f);        //GPIO0设置为GND


        SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x01);//射频芯片置为IDLE模式

    do{
                temp = SI4432ReadRegister(0x02);
    }while(!((temp & 0x03) == 0x00));   
}
//*****************************************************************
//函数功能:设置CC1020进入发射状态
//入口参数:无
//出口参数:无
//*****************************************************************
void    SetupToTx(void){
        uint8        temp;   


        SI4432WriteRegister(0x0b,0x1d);        //GPIO0设置为VDD
        SI4432WriteRegister(0x0d,0x10);        //GPIO2设置为数据入

        //射频芯片置为IDLE模式
        SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x01);
        do{
                temp = SI4432ReadRegister(0x02);
    }while(!((temp & 0x03) == 0x00));   

    //wake up device to tx
    SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x08);
        do{
                temp = SI4432ReadRegister(0x02);
    }while(!((temp & 0x03) == 0x02));   

        //SendOneByte(SI4432ReadRegister(0x02));  

  
}

//*****************************************************************
//函数功能:设置CC1020进入接收状态
//入口参数:无
//出口参数:无
//*****************************************************************
void    SetupToRx(void){
        uint8 temp;

       

        SI4432WriteRegister(0x0b,0x1f);        //GPIO0设置为GND
        SI4432WriteRegister(0x0d,0x34);        //GPIO2设置为数据输出,并连接上拉电阻
        //SI4432WriteRegister(0x0d,0x00);
        //SI4432WriteRegister(0x0a,0x00);//30mhz输出
       
        //射频芯片置为IDLE模式
        SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x01);
        do{
                temp = SI4432ReadRegister(0x02);
    }while(!((temp & 0x03) == 0x00));   

    //wake up device to rx
    SI4432WriteRegister(SI4432_OPERATING_AND_FUNCTION_CONTROL_1, 0x05);
        do{
                temp = SI4432ReadRegister(0x02);
    }while(!((temp & 0x03) == 0x01));   

        //SendOneByte(SI4432ReadRegister(0x02));  
       
}

出0入0汤圆

发表于 2010-7-15 09:10:08 | 显示全部楼层
我们目前没有发现SI4432通信异常,正常环境下,正常通信的时候,丢包率是很低的,1/20000 左右吧。这段时间比较忙,没有仔细看你的程序,如果调试过 7021,调 Si4432 应该跟玩一样简单,特别是使用直接模式,与 7021 没多大区别啊。寄存器的值对比一下EXCEL计算的结果,问题也不大。


    另外再请问一下,你们的 ADF7021 量产了么?有没有批量产品在外面长期运行,ADF7021 数据手册上要求必须小于 10ppm 晶体,你们用的 20ppm 无源晶体,不担心有问题?能具体说说下面的情况么?

调制方式:2FSK/3FSK/4FSK
基带滤波:高斯滤波开启/关闭(2FSK)   升余弦滤波开启/ 关闭(3FSK)
载波:400MHz / 900MHz
频偏:
中频带宽:12.5KHz/18.75KHz/25KHz
解调方式:相关解调/线性解调(2FSK)  门限解调/维特比(viterbi)解调(3FSK)
鉴频器:鉴频器设置很关键,是按数据手册上说明设置的么?
AFC:校准KP KI 以及 校准宽度是多少?

    假设你们使用的是 +-20ppm 的晶体,对于 400MHz 的载波,频率误差可以达到 +-8KHz,也就是说两台机子间可能频率偏差16KHz,对于 900MHz 的载波,频率误差可达到+-18KHz,也就是说,两台机子间可能存在频差36KHz的情况,对于中频带宽最大才25KHz的窄带系统,频率偏差可以允许这么大么?
    允许频率的偏差没有测试,如何选择晶体呢?比如我们,3FSK 通信方式,没有使用AFC的时候,频率偏差允许1.6KHz,220MHz 的载波频率时,也就是说可以允许 7.3ppm 频率偏差,对于晶体来说也就是+-3.65ppm,考虑到晶体老化等问题,于是我们使用 2.0ppm 温补晶体。

出0入0汤圆

 楼主| 发表于 2010-7-15 09:21:52 | 显示全部楼层
晶体的稳定度没有太大问题,即使同一批次的晶体,相差也会很大,所以可以通过微调其负载电容的方法将发射的载波频率调整到想要的频率,比如设置的频率是433M,但同一批晶体出来的频率肯定有的偏大,有的偏小,这时就可以调整负载电容,使其发射频率都在433M附近,我们一般的要求是正负偏差不超过1khz,
你说的关于7021的问题没有具体研究,都是按照软件设置的,指标是输出功率150mW(加PA后),灵敏度-117dbm(加LNA),3db鞭状天线,通信距离1.5km左右
GFSK、433/915MHZ、18.7Khz、相关解调(理论上优于线性解调3db),其他都按默认设置

出0入0汤圆

发表于 2010-7-15 09:36:20 | 显示全部楼层
回复【13楼】lyd961418
晶体的稳定度没有太大问题,即使同一批次的晶体,相差也会很大,所以可以通过微调其负载电容的方法将发射的载波频率调整到想要的频率,比如设置的频率是433m,但同一批晶体出来的频率肯定有的偏大,有的偏小,这时就可以调整负载电容,使其发射频率都在433m附近,我们一般的要求是正负偏差不超过1khz,
你说的关于7021的问题没有具体研究,都是按照软件设置的,指标是输出功率150mw(加pa后),灵敏度-117dbm(加lna),3db鞭状天线,通信距离1.5km左右
gfsk、433/915mhz、18.7khz、相关解调(理论上优于线性解调3db),其他都按默认设置
-----------------------------------------------------------------------
     大哥,你确定一下,你说的是 ADF7020-1 还是 ADF7021,因为 ADF7021 的配置软件是根本就不能用的,至少是有问题的,我不敢用,有图为证。

(原文件名:ADF7021 Error.JPG)


(原文件名:3FSK Error.JPG)

    18.7khz 是频偏,算算带宽多少了,25KHz的带宽,能用 18.7KHz 频偏?

    晶体标的精度,我最关注的是 温度特性,以及年老化率。出厂偏差可以通过软件、硬件校准,但是温度特性、年老化误差怎么校准?

出0入0汤圆

 楼主| 发表于 2010-7-15 10:53:40 | 显示全部楼层
刚看了我下程序,是25k的带宽,频偏设置的是10k,如果用仪器测试,实际频偏可设置到6k左右。你2.4kbps的速率,没必要将频偏设置到7k吧

出0入0汤圆

 楼主| 发表于 2010-7-15 10:59:19 | 显示全部楼层
温度特性没有太关注,这样的小模块还用那么好的晶振,一个好晶振得买多少片7021呀

出0入0汤圆

发表于 2010-7-17 11:36:37 | 显示全部楼层
2ppm的温补晶体价格很贵的吧?估计比RFIC还要贵呢。

出0入0汤圆

发表于 2010-7-17 12:26:46 | 显示全部楼层
回复【17楼】taishan
2ppm的温补晶体价格很贵的吧?估计比rfic还要贵呢。
-----------------------------------------------------------------------
    不一定的,要看情况。如果晶体达不到要求,窄带就不那么好玩了。

出0入0汤圆

发表于 2010-7-18 13:05:43 | 显示全部楼层
嗯,窄带的话就要用好的晶体了,TXCO的价格悬殊很大。

出0入0汤圆

发表于 2011-11-5 01:29:05 | 显示全部楼层
正在研究SI1010 先MARK下,奶奶的寄存器太多了,还没整明白

出0入0汤圆

发表于 2011-11-7 18:36:58 | 显示全部楼层
回复【5楼】windy__xp 龙笑
-----------------------------------------------------------------------
请教:windy__xp 龙笑

si4432冒失数据包格式中没有对地址码进行编码,如果多机通讯的话, 那是不是在数据包中用几个BYTES做地址码来区别

出0入0汤圆

发表于 2011-11-7 19:49:28 | 显示全部楼层
这个芯片用的挺多啊啊!!

说说优势啊?

出0入0汤圆

发表于 2011-11-17 15:29:10 | 显示全部楼层
我在学习SI1000的无线部分,也是接收不到数据,程序运行在等待接收中断的状态,但一直没有中断产生。

出0入0汤圆

发表于 2011-11-17 15:35:50 | 显示全部楼层
补充一下:我使用的FIFO模式,我的板子是仿照技术手册上的,如下图:
(原文件名:si1000.jpg)

DEMO上是使用的天线分集,用GPIO控制的;
我的调制模式应该选哪个脚的时钟有效呢?

出0入0汤圆

发表于 2011-11-23 11:23:09 | 显示全部楼层
回复【楼主位】lyd961418
-----------------------------------------------------------------------

要求复位时钟慢变与重写内部电容的值就可以正常使用跳频

出0入0汤圆

发表于 2011-12-29 19:41:32 | 显示全部楼层
回复【23楼】duguchengxin
-----------------------------------------------------------------------
我也在研究si1000,同样是接收不到数据,进不去接收中断,请问你现在解决了吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 10:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表