历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2018年09月10日 | STM8L101+si4463低功耗和自动唤醒配置

发布者:正在搬砖的河马71 来源: eefocus关键字:STM8L101  si4463  低功耗  自动唤醒 手机看文章 扫描二维码
随时随地手机看文章

刚开始接触RF通信,借助成都亿佰特的demo很快完成了数据互传,但是功耗一直降不下去,ST和SiliconLabs官方的datasheet里分别说STM8L101在halt模式功耗为1uA(开AWU的情况下)、SI4463在standby模式为50nA,但是即使把STM8和SI4463以外的芯片都拆了,整板的实际测试值也比1uA大两个数量级。


一、关于低功耗


首先,把SI4463拿掉,只剩STM8L,在main函数直接进入halt模式,得到工作电流为0.4uA,达到标称值。

然后,将si4463接上,在main函数直接进入halt模式,工作电流飙升至167uA。为什么呢?

在ST官网找到了《AN3147:Power management in STM8L and STM8AL》,在“第五章 :Power management tips”中找到了问题的关键点——进入HALT之前必须将GPIO设为固定的电平状态,否则有漏电流存在。于是根据电路设计原理图,除了与SI4463连接的SPI_CSN设为输出高、SDN设为输出低,其余全设为输入上拉。电流降到了25uA,仍远远大于标称值。


图1 整板电路图


最后问题定位在SI4463的GIO设置上,亿佰特的SI4463模块采用的是TX和RX分离的模拟电路设计(图2),GIO2和GIO3控制选通开关,它们根据TX和RX的状态输出0和1,比如芯片处于TX状态时GIO2输出1、GIO3输出0,此时天线与TX形成通路,调制信号从TX口经过电感电路被发送出去。在使si4463进入低功耗之前,必须将GIO2、GIO3拉低。



图2 si4463参考电路设计            

SI446X_GPIO_CONFIG(3, 3, 2, 2, 3, 0, 0x60);

SI446X_CHANGE_STATE(1);

最后功率降到了1uA以下,与标称值相符。


二、关于AWU设置

AWU(Auto Wakeup Unit)的时钟源是独立的LSI(Low Speed Internal Clock),官方datasheet显示LSI的一致性比较差,从25KHz到75KHz不等(确实很差生气),所以配置AWU之前要先知道每一片芯片的LSI是多少,才能达到唤醒时间的预期值。首先,用TIM2测量LSI的频率,官方驱动库就有函数实现,函数原型如下


uint32_t TIM2_ComputeLsiClockFreq(uint32_t TIM2_TimerClockFreq);


官网驱动库也有AWU的配置函数 void AWU_LSICalibrationConfig(uint32_t LSIFreqHz), 这个函数给出的结果很糟糕,唤醒时间根本不对。于是自己根据datasheet写了个函数



#define AWU_MAX_INTERNVAL_COEFFICIENT        ((uint32_t)3932160)  

#define AWU_APR_MAX_VALUE                    ((uint8_t)64)  

#define AWU_TBR_MAX_VALUE                    ((uint8_t)0x0f)  

#define AWU_APR_MIN_VALUE                    ((uint8_t)2)  

#define AWU_TBR_MIN_VALUE                    ((uint8_t)0x01)  

#define AWU_HIGH_RESOLUTION_THRESHOLD        ((uint32_t)6889)     

 



/**

  * @brief  Update APR register with the measured LSI frequency.

            Accuracy is much better than AWU_LSICalibrationConfig().

  * @param  LSIFreqHz -- the LSI frequency, in Hertz.

            internval -- AWU wake up interval, in milliseconds

  * @note   AWU must be disabled to avoid unwanted interrupts.

  * @retval None

  */

ErrorStatus AWU_ConfigLSI(uint32_t LSIFreqHz, uint32_t internval)

{

   uint32_t tmp = 0, z = 0;

   uint8_t  y = 0, x = 0;

   uint8_t  flag = 0;

  

  /* Check parameter */

  assert_param(IS_LSI_FREQUENCY(LSIFreqHz));  

 

 

  z = LSIFreqHz * internval;

  

  if(internval>AWU_HIGH_RESOLUTION_THRESHOLD)

  {

    tmp = z / 10240000;

    if( tmp>=AWU_APR_MIN_VALUE && tmp <= AWU_APR_MAX_VALUE)

    {

      AWU->TBR |= 0x0e;

      AWU->APR = (tmp)-2;

      return SUCCESS;

    }

    

    tmp = z / 61440000;

    if( tmp>=AWU_APR_MIN_VALUE && tmp <= AWU_APR_MAX_VALUE)

    {

      AWU->TBR |= 0x0f;

      AWU->APR = (tmp)-2;

      return SUCCESS;

    }  

        

  }

  

  

  /* 2^x*y = LSIFreqHz * internval */

  for(y=64;y>1;y=y>>1)

  {

     tmp =  z/((uint32_t)y*1000) ; 

     if(tmp>=1 && tmp<=4096)  /*value is between 2^0 and 2^12*/

     {

        flag = 1;

        break;

     }

  } 

  

  /*计算TBR,再根据TBR推导出APR*/

  if(flag!=0)

  {

    for(x=0;x<13;x++)

    {

      if( (tmp>>x)==0 )

      {

        break;

      }

    }

    tmp = (uint32_t)1<

    y = z/((uint32_t)tmp*1000);

    if(y<2)

    {

      return ERROR;

    }

    AWU->TBR = x+1;

    AWU->APR = y-2;

    return SUCCESS;

  }

  else

  {

    return ERROR;

  

  }

}





参数internval是期望的唤醒时间,单位是ms,数值范围是1到60000。


设置好TBR和APR之后,只要使用AWU_Cmd(ENABLE)即可启动AWU,它只会在STM8处于halt模式下才开始计时,当计时达到设置的interval时产生中断,将STM8从halt模式唤醒。


/***** 补丁1:AWU设置函数存在BUG,修正了一下,现在可以放心使用了 20161205 *******/


关键字:STM8L101  si4463  低功耗  自动唤醒 引用地址:STM8L101+si4463低功耗和自动唤醒配置

上一篇:STM8L SPI使用过程记录
下一篇:STM8L之低功耗模式

推荐阅读

据科技日报报道,九月初的大连海区,这场“水下机器人目标抓取大赛”比日头更火热。大赛由国家自然科学基金委员会和大连市人民政府主办,今年第二届,30支队伍及个人参加。经过定点抓取和自由抓取两个组别两天的决赛,9月6日下午,结果出炉,15支决赛队伍共抓获121只海胆、海参和扇贝,整体优于去年。“我们吃的每一个野生海参都是人抓上来的。”中国工程...
近日,美国检察官指控一名中国教授,称其涉嫌从加利福尼亚州的一家公司获取技术以使华为受益。据了解,毛波(音译)是厦门大学的副教授,去年秋天成为德克萨斯大学的客座教授。根据法庭文件,毛波于8月14日在德克萨斯州被捕,对于检方有关合谋犯下通信欺诈罪的指控,毛波主张无罪,缴纳10万美元后获得保释。根据刑事诉讼文件,毛波与加利福尼亚某科技公司...
 作为工业自动化、智能化的显著特征,工业机器人的发展与应用具有深远意义。如今,工业机器人依然是机器人领域的“顶梁柱”,占据了多数市场,但是不可否认的是,以医疗机器人、配送机器人、教育机器人、餐饮机器人等为代表的服务机器人正快速兴起,市场热度持续上涨。 近日,据中国电子学会数据,中国服务机器人市场已占全球市场25%以上,2020年我国...
对车上的智能语音态度,目前有两类,一类是很拒绝的,“我自己点下就好了”,一类是比较认可,甚至会因为智能语音做得好且有不断OTA的能力而考虑买一台车的,前者多半没用过这玩意儿。我个人的体会是,一个烂的智能语音还不如没有,只要试过1-2次很尴尬的,我就不会再去用它了,但好用的语音,用过还是会愿意去反复用它的,能懒则懒嘛,有时候开车也不方便...

史海拾趣

问答坊 | AI 解惑

32位MCU趋势大揭密

来源:电子时报 微控制器技术与应用论坛专刊 随着功能不断增强,微控制器(MCU)的应用面也愈来愈大,市场需求愈来愈高。因此,追求效能更高、更符合市场需求的规格特性,就成为MCU厂商努力的方向。为能完整说明MCU技术开发的大趋势,同时一次提供研 ...…

查看全部问答∨

《FPGA三国志》什么是“先组合后时序”思维

1--实现一个8路输出的扫描电路, 每个之间都是一个有一定相位差的方波。 如果用先计数器, 然后再用译码, 这个是采用线性思维, what和when的思考模式, 非常合乎常情。 但是, 当速度高的时候, 每个输出之间由于译码长度传输不同, 就导致毛刺 ...…

查看全部问答∨

请问步进电机编程问题

请问大虾们怎样用编码器控制步进电机速度,怎么样写程序…

查看全部问答∨

电子设计大赛前学习的现场

让大家看看原来参加电子设计大赛时实验室的照片: Sea_eeworld在努力编程: 样品: 下个更乱点的: …

查看全部问答∨

wince5.0 for x86哪个地方能下载?

wince5.0 for x86哪个地方能下载?…

查看全部问答∨

SD卡连续读写操作

香主,问个问题:    我用你们的开发板STM3210EEVAL跑Mass_Storage程序,刚开始跑如下的程序int main(){#ifdef DEBUG  debug();#endif  Set_System();  Set_USBClock(); &n ...…

查看全部问答∨

【求助】关于串口得问题

现在我用4301471来做双机通讯,但是能监测有发送得数据,却在从机方接收不到,不知道是什么问题,程序是按照书上的例程来作得。…

查看全部问答∨

单电源供电放大器和双电源供电放大器

我的整个电路就是4节南孚电池供电也就是6v,这样的话就不能用双电源供电放大器,但单电源供电的放大器似乎很少啊,我现在就知道LM324,还有其他推荐吗? 或者有可以将我的供电电路改造一下成双电源吗,似乎可以。 还有我的传感器输出是0-80mv这样 ...…

查看全部问答∨

LH0032电路 ,这个电路pcb上自激

真烦扰,我把它放在multisim仿真这么好使,但一把它拿到PCB腐出板子,它就自激了。 在面包板上搭出来也自激。这是怎么回事?有望高手帮忙分析一下此电路自激的原因啊,我的PCB电路multisim仿真还有LH0032资料都在附件里了。 电路里的C1在LH0032中 ...…

查看全部问答∨

搞不定了,求助,关于MSP430F5438A ADC12时触发钟源

在使用MSP430F5438A ADC12时,想利用定时器触发,进行多通道多次转换,但是查看手册说时钟源选择要看note B ,不知道这个文档在哪。请问MSP430F5438A的触发用的是哪个定时器呢?哪位大婶能贴个代码或解释下~…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved