搜索
bottom↓
回复: 40

关于MSP430与CC1101低功耗问题

[复制链接]

出0入0汤圆

发表于 2012-4-12 20:48:59 | 显示全部楼层 |阅读模式
小弟最近在采用MSP430 与 CC1101做一个无线通讯的项目,项目进行到现在已经大概一个月了,基本功能都已经调通,目前遇到棘手的问题未能解决,忘各位高手指点!

项目描述:
    项目有两个设备组成,一个为从机、一个为主机,主机与从机是一对多的通讯方式,从机(电池供电)平时处于低功耗休眠模式,每个10秒发送一个数据,主机负责接收,要求从机功耗控制在30uA一下,主机采用市电供电。

目前进展:
1、主机与从机已经能正常通讯,且通讯稳定性都正常;
2、从机在未接CC1101模块时,低功耗已经完成,且其他切换功能均正常,功耗在27uA左右,包括外设EEPORM、FLASH以及其他等等;
3、但是设备接上CC1101模块时,让模块进入低功耗只能做到250uA,暂且还是查找问题中,未找到问题所在;
4、从机在低功耗状态转入发送数据后,不能正常进入SLEEP模式,所以一旦有数据发送后,设备功耗就维持在1.9mA左右,等于模块的IDLE状态工作电流,并且这个时候继续写入SPWD,也不能进入SLEEP状态。

工作方式:
1、设备休眠时间到,执行以下指令,让模块进入SLEEP状态:

    TI_CC_ChangeStateToIDLE();        // SPWD切换在IDLE 状态下有效
               
    TI_CC_SPIWriteByte(TI_CCxxx0_IOCFG2,        0x2F);       
    TI_CC_SPIWriteByte(TI_CCxxx0_IOCFG0,        0x2F);       

    TI_CC_SPIStrobe(TI_CCxxx0_SPWD);        // 进入断电模式

    TI_CCxxx0_CSn_DISABLE();        // CS 拉高

    其他IO口置位,设备进入低功耗状态,整个设备进入低功耗模式,功耗为250uA,偏大!!!

2、设备数据发送时间到,执行以下指令,使模块退出低功耗模式

    UCSCTL4 = (SELM__DCOCLK + SELA__XT1CLK + SELS__DCOCLK);   // 切换SPI时钟为DCO
      UCA1Init();   // 初始化SPI端口配置
      TI_CCxxx0_CSn_ENABLE();  // 拉高,使得模块退出低功耗模式
   
    // 发数据代码如下,采用中断方式发送,并且为不定长度发送数据模式
    TI_CC_ChangeStateToIDLE();

      TI_CC_SPIWriteBurst(TI_CCxxx0_TXFIFO,         &SendNum,         1);
      TI_CC_SPIWriteBurst(TI_CCxxx0_TXFIFO,          SendBuf,                SendNum);
       
      TI_CC_GDOx_INT_OPEN(EXTI_INT_GDO2_ON);

      TI_CC_SPIStrobe(TI_CCxxx0_STX);        // Change state to TX, initiating   

       // 等到检测到中断发送完成后,执行以下代码
     TI_CC_ChangeStateToIDLE();        // SPWD切换在IDLE 状态下有效
               
    TI_CC_SPIWriteByte(TI_CCxxx0_IOCFG2,        0x2F);       
      TI_CC_SPIWriteByte(TI_CCxxx0_IOCFG0,        0x2F);       

      TI_CC_SPIStrobe(TI_CCxxx0_SPWD);        // 进入断电模式

    TI_CCxxx0_CSn_DISABLE();        // CS 拉高

     其他IO口置位,设备进入低功耗状态,整个设备进入低功耗模式,功耗为1.9mA,非常偏大!!! === 模块IDLE电流

3、附上寄存器配置状态

           TI_CC_SPIWriteByte(TI_CCxxx0_IOCFG2,           0x06);         //
        TI_CC_SPIWriteByte(TI_CCxxx0_IOCFG1,           0x2E);        // 默认值
        TI_CC_SPIWriteByte(TI_CCxxx0_IOCFG0,           0x01);         // 与 RX FIFO 相关:达到或超出 RX FIFO 阈值填充 RX FIFO 时置位,或到达数据包结尾时置位。RX FIFO 为空时取消置位。
        TI_CC_SPIWriteByte(TI_CCxxx0_FIFOTHR,          0x07);        // 默认值: TX_FIFO_THR:33, RX_FIFO_THR:32
        TI_CC_SPIWriteByte(TI_CCxxx0_SYNC1,            0xD3);        // 默认值
        TI_CC_SPIWriteByte(TI_CCxxx0_SYNC0,            0x91);        // 默认值
        TI_CC_SPIWriteByte(TI_CCxxx0_PKTLEN,           0x40);         // 可变数据包长度,最大允许数据包长度为64字节
        TI_CC_SPIWriteByte(TI_CCxxx0_PKTCTRL1,         0x0C);         // 开启CRC错误自动刷新功能,且FIFO后包含两个字节的状态State
        TI_CC_SPIWriteByte(TI_CCxxx0_PKTCTRL0,         0x45);         // 开启数据白化,开启CRC检验,可变数据包长度
        TI_CC_SPIWriteByte(TI_CCxxx0_ADDR,             0x00);         // 默认值: 无地址
        TI_CC_SPIWriteByte(TI_CCxxx0_CHANNR,           0x00);         // 默认值: 00
        TI_CC_SPIWriteByte(TI_CCxxx0_FSCTRL1,          0x08);         // 中频计算
        TI_CC_SPIWriteByte(TI_CCxxx0_FSCTRL0,          0x00);         // 频率补偿
        TI_CC_SPIWriteByte(TI_CCxxx0_FREQ2,            0x10);         // 432.999878频率
        TI_CC_SPIWriteByte(TI_CCxxx0_FREQ1,            0xA7);
        TI_CC_SPIWriteByte(TI_CCxxx0_FREQ0,            0x62);
        TI_CC_SPIWriteByte(TI_CCxxx0_MDMCFG4,          0x5B);         // Baud : 100K,RX Filter BW : 325KHZ
        TI_CC_SPIWriteByte(TI_CCxxx0_MDMCFG3,          0xF8);
        TI_CC_SPIWriteByte(TI_CCxxx0_MDMCFG2,          0x03);         // 2-FSK
        TI_CC_SPIWriteByte(TI_CCxxx0_MDMCFG1,          0x22);
        TI_CC_SPIWriteByte(TI_CCxxx0_MDMCFG0,          0xF8);
        TI_CC_SPIWriteByte(TI_CCxxx0_DEVIATN,          0x47);         // 调制解调器偏差设置: 47.6K
        TI_CC_SPIWriteByte(TI_CCxxx0_MCSM2,           0x07);        // 默认值
        TI_CC_SPIWriteByte(TI_CCxxx0_MCSM1,           0x30);        // 接收到一个数据包后保持IDLE,择发送一个数据包后保持IDLE
        TI_CC_SPIWriteByte(TI_CCxxx0_MCSM0 ,           0x08);         // 手动校准频率
        TI_CC_SPIWriteByte(TI_CCxxx0_FOCCFG,           0x1D);         // 频率偏移补偿配置
        TI_CC_SPIWriteByte(TI_CCxxx0_BSCFG,            0x1C);         // 位同步配置
        TI_CC_SPIWriteByte(TI_CCxxx0_AGCCTRL2,         0xC7);         // 自动增益控制
        TI_CC_SPIWriteByte(TI_CCxxx0_AGCCTRL1,         0x00);
        TI_CC_SPIWriteByte(TI_CCxxx0_AGCCTRL0,         0xB2);         
        TI_CC_SPIWriteByte(TI_CCxxx0_WOREVT1,   0x87);         // 默认值
        TI_CC_SPIWriteByte(TI_CCxxx0_WOREVT0,   0x6B);          
        TI_CC_SPIWriteByte(TI_CCxxx0_WORCTRL,   0xF8);         // 无线唤醒设置: 默认值
        TI_CC_SPIWriteByte(TI_CCxxx0_FREND1,           0xB6);         // 前端 RX 配置
        TI_CC_SPIWriteByte(TI_CCxxx0_FREND0,           0x10);         // 前端 TX 配置       
        TI_CC_SPIWriteByte(TI_CCxxx0_FSCAL3,           0xEA);         // 频率合成器校准
        TI_CC_SPIWriteByte(TI_CCxxx0_FSCAL2,           0x2A);
        TI_CC_SPIWriteByte(TI_CCxxx0_FSCAL1,           0x00);        
        TI_CC_SPIWriteByte(TI_CCxxx0_FSCAL0,           0x1F);
        TI_CC_SPIWriteByte(TI_CCxxx0_RCCTRL1,   0x41);         // 振荡器配置: 默认值       
        TI_CC_SPIWriteByte(TI_CCxxx0_RCCTRL0,   0x00);
        TI_CC_SPIWriteByte(TI_CCxxx0_TEST2,            0x88);         // Various test settings.
        TI_CC_SPIWriteByte(TI_CCxxx0_TEST1,            0x31);         // Various test settings.
        TI_CC_SPIWriteByte(TI_CCxxx0_TEST0,            0x0B);         // Various test settings.

4、请各位高手指点,CC1101进入SLEEP模式的逻辑顺序以及怎么样做低功耗发送数据,感谢不已,同样欢迎各位同行人进行交流,在这里留下QQ:97068204(加好友请注明中国电子开发网)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2012-4-12 21:16:09 | 显示全部楼层
顶一个,希望大家多多讨论,共同进步

出0入0汤圆

发表于 2012-4-12 22:03:14 | 显示全部楼层
楼主顶一下你吧,虽然对CC1101不是很了解,但现在正在用MSP430,主要是低功耗功能,而且还要与运算放大器相结合,愁死人了

出0入0汤圆

 楼主| 发表于 2012-4-12 22:11:26 | 显示全部楼层
恩   是的  低功耗这东西搞起来的确比较麻烦的,尤其是既要马儿跑得快,又要马儿不吃草的时候

出0入0汤圆

发表于 2012-4-13 08:55:14 | 显示全部楼层
按照楼主所说的情况,显示的功耗为1.5mA左右的确是模块处在IDLE模式,并没有进入SPWD模式。
我现在也发现这个情况一直没能解决。是否可以考虑在SPWD之后加入延时,再把CSn拉高。让模块充分进入SPWD

出0入0汤圆

 楼主| 发表于 2012-4-13 08:56:38 | 显示全部楼层
已经尝试过加延时,在多处地方尝试过,比如说等待模块进入IDLE状态,以及等待模块进入SPWD状态,但是均无效果

出0入42汤圆

发表于 2012-4-13 09:18:10 | 显示全部楼层
既然用MSP430 + CC1101,为什么不用CC430?

出0入0汤圆

 楼主| 发表于 2012-4-13 09:41:14 | 显示全部楼层
my_avr 发表于 2012-4-13 09:18
既然用MSP430 + CC1101,为什么不用CC430?

那是因为还很多硬件资源需要使用,比如说外部的按键、液晶屏、EEPROM、FLASH、ADC、RTC、等等等

目前进展:在休眠发送数据后,未能恢复250uA的问题已经解决,原因是设备未能进入IDLE模式,现在设备功耗已经能维持在250uA,距离目标40uA更近一步了。

同时,希望有CC1101低功耗发送数据经验的前辈指导!!!

出0入0汤圆

发表于 2012-4-13 11:14:47 | 显示全部楼层
按照手册上所说,进入SPWD状态后只有500na的功耗,现在相差的不是一点点,估计是哪个寄存器没有配置正确,导致不能正确进入SPWD模式。

出0入0汤圆

 楼主| 发表于 2012-4-13 11:19:37 | 显示全部楼层
CSNsunli56xxx 发表于 2012-4-13 11:14
按照手册上所说,进入SPWD状态后只有500na的功耗,现在相差的不是一点点,估计是哪个寄存器没有配置正确, ...

感谢您的回复,设备肯定是进入SPWD模式了,可能有些寄存器配置还有问题,继续调试中

出0入0汤圆

发表于 2012-4-13 13:35:30 | 显示全部楼层
网上几乎所有的人都是先SPWD然后CSn拉高就能进入低功耗模式l了,而且很多电流都是在几十个uA。

出0入0汤圆

发表于 2012-4-13 16:14:35 | 显示全部楼层
现在我也在弄这个模块,但是弄了几天还是没什么结果,想用硬件SPI实现的,能设置寄存器也能读出寄存器的值,但是发射接受测验的时候没反应啊,lz能不能指点一下啊,能给个例程最好,

出0入0汤圆

 楼主| 发表于 2012-4-13 16:21:28 | 显示全部楼层
liuzs09 发表于 2012-4-13 16:14
现在我也在弄这个模块,但是弄了几天还是没什么结果,想用硬件SPI实现的,能设置寄存器也能读出寄存器的值 ...



这是杭州利尔达公司提供的资料,可以给你参考,至于我的代码,暂时无法给你参考,商业机密的问题!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-4-13 16:25:42 | 显示全部楼层
设备功耗问题已经查到,原因是在设计硬件的时候,在CC1101所有的IO口,都采用了上拉电阻,然后的低功耗的时候,模块GDO0 GDO2为低电平,功耗大!!

所以希望这个结论对大家有好处,在设计CC1101的时候,千万别在GDO0 GDO2上加上拉电阻,加了之后,无论你配置为输出高或者输入,都是没有用的,除非你在休眠时,修改GDO0,GDO2寄存器配置!


目前遇到一个问题,就是在接收状态下,切换至发送数据时,发送完成后等待IDLE状态,这个时间太长!不知道是什么原因

出0入0汤圆

发表于 2012-4-13 17:32:13 | 显示全部楼层
seawind319 发表于 2012-4-13 16:21
这是杭州利尔达公司提供的资料,可以给你参考,至于我的代码,暂时无法给你参考,商业机密的问题! ...

非常感谢!我再好好看看,得自己摸索摸索

出0入0汤圆

发表于 2012-4-16 09:51:31 | 显示全部楼层
CC430可以到1ua以下的。但是流程我我害得弄下。CC1101可能会稍大。

出0入0汤圆

发表于 2012-4-16 23:48:29 | 显示全部楼层
我用CC430,基本就是2ua左右的电流,如果是什么问题的话,基本就是使用到的端口要特别注意,这部分的漏电流不仔细的话很难发现

出0入0汤圆

发表于 2012-4-17 10:44:43 | 显示全部楼层
最近在学CC1101 ,mark下。

出0入0汤圆

发表于 2012-5-23 06:45:05 来自手机 | 显示全部楼层
1101的待机0.2,我也是430+1101总功耗0.7,当然无其他外设。

来自:amoBBS 阿莫电子论坛 iPhone客户端

出0入0汤圆

发表于 2012-5-23 08:37:56 | 显示全部楼层
这个东西我也在搞,不过我用的是MSP430+CC1100,原来用的电磁波激活模式,待机电流能到3uA;这次准备采用主动发送模式了,程序还没有改完。
主动发送模式下,如果要进行双向通讯,是不是在从机主动发送完毕后进入接收状态一段时间等待主机发送数据?这个时间如何确定比较好?
再有就是从机主动上传的电磁波碰撞问题,多个从机如果同时发送就会造成电磁波碰撞,我现在的想到的处理方法如下,请大家看看对不对:
1.首先在发送前使用载波监听功能,如果没有监听到载波就立即发送,否则,延时一个随机时间后再发送;
2.从机每次发送完成后,都要求能接收到下发的数据,如果多次接收不到主机下发的数据,则下次定时发送时间将加上一个随机的延时时间。(这种情况是为了避免多个从机完全同时刻发送的极端情况)

出0入0汤圆

发表于 2012-5-23 09:20:50 | 显示全部楼层
wor模式和从机主动发送后接收主机命令模式我都测试过,可行性都可以
wor模式不用多讲了,有很多好处,开启rssi判断后,功耗有大大降低
从机发送结束后,会立即进入接收模式,接收超时时间对于1101是可配置的,无需mcu介入,接收时间无需太长,只要保证能接收到主机的第一个字节即可,因为1101的机制是在接受状态下,即使超时时间到了,只要同步字已经被接收到,那么rx的时间将继续延迟到帧完整的接收到。
对于主机,当收到从机时,将进入tx模式,通过软件判断之前预存的命令将发给谁,进行匹配,立即发送。

出0入84汤圆

发表于 2012-5-24 16:22:16 | 显示全部楼层
我做的人员标签也是430加CC  平时PD模式0.3UA。。。

好好看看DATASHEET, 注意控制字的写入顺序,多参考下官方的历程

出0入0汤圆

发表于 2012-6-14 21:12:12 | 显示全部楼层
最近正在芯片选型,,,,看到上面这么多大牛,功耗都在个位数的ua,心里有底了,望多多交流啊.......

出0入0汤圆

发表于 2012-6-15 12:50:12 | 显示全部楼层
低功耗不单单是芯片的低功耗,外围电路的低功耗设计非常重要
最简单的,给无线模块加个电源控制引脚,那么在无线模块上电的瞬间可以省不少电
测试过用mos管控制无线模块电源,加一个电容和不加电容,示波器测量出来,有电容时电源关闭时间2us,没电容时,电源关闭时间是30ms
对于某些场合,特别是能量收集系统,这是非常重要的

出0入0汤圆

发表于 2012-6-19 06:52:27 | 显示全部楼层
顶一个,希望大家多多讨论,共同进步

出0入0汤圆

发表于 2012-6-19 12:27:41 | 显示全部楼层
也在搞430低功耗,我现在用149,整机休眠大概4uA左右

出0入0汤圆

发表于 2012-6-26 17:51:05 | 显示全部楼层
正在用,学习中,谢谢

出0入0汤圆

发表于 2012-6-27 09:21:03 | 显示全部楼层
本帖最后由 movenight 于 2012-6-27 09:24 编辑

mark一下,最近也很关注cc430方案的功耗问题。这里有没有南京的兄弟能做兼职的?有的话给我发悄悄话。谢谢

出0入0汤圆

发表于 2012-6-27 14:06:01 | 显示全部楼层
不错哈,谢谢分享。

出0入0汤圆

发表于 2012-7-19 23:51:42 | 显示全部楼层
求楼主QQ 求指导~~~求帮助,我发送 却总是无法接收 不知道为什么,我用示波器看过波形,但是 怎么都是不对 求指导 求帮助~~~

出0入0汤圆

发表于 2012-10-12 21:45:48 | 显示全部楼层
MARK !!!!!!

出0入0汤圆

发表于 2012-12-25 11:25:32 | 显示全部楼层
楼主还在吗,从发送转到接收后接收不到数据有遇到过吗。

出0入0汤圆

发表于 2013-2-22 10:14:45 | 显示全部楼层
ddddddddddddddddddddddd
头像被屏蔽

出0入0汤圆

发表于 2013-2-26 09:33:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-2-26 10:22:57 | 显示全部楼层
mark一下,楼主经验之谈

出0入0汤圆

发表于 2013-2-26 10:24:18 | 显示全部楼层
cc430价格多少啊

出0入8汤圆

发表于 2013-2-26 13:57:06 来自手机 | 显示全部楼层
标记一下,正在用CC430做低功耗

出0入0汤圆

发表于 2013-3-4 04:24:05 | 显示全部楼层
Cortex_M3 发表于 2013-2-26 13:57
标记一下,正在用CC430做低功耗

嗯,我也一样,有机会多向前辈们学习,少走弯路。

出0入0汤圆

发表于 2013-7-25 17:12:25 | 显示全部楼层
seawind319 发表于 2012-4-13 16:25
设备功耗问题已经查到,原因是在设计硬件的时候,在CC1101所有的IO口,都采用了上拉电阻,然后的低功耗的时 ...

这条对我很有启发。谢谢

出0入0汤圆

发表于 2013-10-10 21:57:56 | 显示全部楼层
顶一下,最近在研究CC的WOR中

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-26 08:55

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

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