历史上的今天
返回首页

历史上的今天

今天是:2024年12月26日(星期四)

正在发生

2019年12月26日 | 高精度简易电子称第二步——低功耗测试

2019-12-26 来源:eefocus

虽然这个称做出来的样子不是便携式,外观有些简陋(自己用木头架子搭起来的),但是对于使用两节3.7V的18650的锂电池供电来说,还是需要设计一下低功耗的。


称的使用频率不高,不能让触摸屏一直亮着,也不能让单片机一直处于工作状态,那样也太不节能、太不绿色了。


一、STM32低功耗设计

查阅stm32参考手册,可以看到低功耗有以下三种:

我想要的效果是在称上没有放任何东西的时候,如果持续30秒没有放置,立即进入低功耗模式,但是SRAM和寄存器中的数据不要丢失,在这个基础上,功耗尽量小就可以了。


对比上面的模式说明,我需要进入的是停止模式。


停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止, PLL、HSI和HSE RC振荡器的功能被禁止, SRAM和寄存器内容被保留下来。


关键的一点是在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。 


确定了进入的是停止模式,那么如何才能进入停止模式呢?

其实这么多操作,ST全都给我们封装在了一个库函数中:void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)


具体内容是:


void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)

{

  uint32_t tmpreg = 0;

  /* Check the parameters */

  assert_param(IS_PWR_REGULATOR(PWR_Regulator));

  assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));

  

  /* Select the regulator state in STOP mode ---------------------------------*/

  tmpreg = PWR->CR;

  /* Clear PDDS and LPDS bits */

  tmpreg &= CR_DS_MASK;

  /* Set LPDS bit according to PWR_Regulator value */

  tmpreg |= PWR_Regulator;

  /* Store the new value */

  PWR->CR = tmpreg;

  /* Set SLEEPDEEP bit of Cortex System Control Register */

  SCB->SCR |= SCB_SCR_SLEEPDEEP;

  

  /* Select STOP mode entry --------------------------------------------------*/

  if(PWR_STOPEntry == PWR_STOPEntry_WFI)

  {   

    /* Request Wait For Interrupt */

    __WFI();

  }

  else

  {

    /* Request Wait For Event */

    __WFE();

  }

  

  /* Reset SLEEPDEEP bit of Cortex System Control Register */

  SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);  

}


我们只需要在需要低功耗的时候,调用这个函数就行了。


但是我们要选择自己需要唤醒时的方式——中断WFI(wait for interrupt)  or  事件WFE(wait for event)


这两个有点绕:事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断。在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件,但一个事件不一定对应一个中断。


比如我想要使用外部按键唤醒停止中的STM32,那么需要把按键引脚映射在了外部中断线上,然后对应的上面配置成中断唤醒方式:


PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);


在按键的中断函数中配置退出低功耗时的操作即可。


void EXTI15_10_IRQHandler(void)

{

    if(EXTI_GetITStatus(EXTI_Line15) != RESET) //确保是否产生了EXTI Line中断

    {

        Restart_From_Low_Power();                                            //停机唤醒后需要启动HSE    


        EXTI_ClearITPendingBit(EXTI_Line15);     //清除中断标志位

    }

}


关于退出时的操作,参考手册上说:

HSI时钟是板子上的8M晶振提供的,而我们使用的是72M的时钟,所以还需要重新配置一下时钟:


    //启动并配置stm32

    ErrorStatus HSEStartUpStatus;

   //使能 HSE

   RCC_HSEConfig(RCC_HSE_ON);


   //等待 HSE 准备就绪

   HSEStartUpStatus = RCC_WaitForHSEStartUp();


   if(HSEStartUpStatus == SUCCESS)

   {

         //使能 PLL

         RCC_PLLCmd(ENABLE);


         //等待 PLL 准备就绪

         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

         {

         }


         //选择PLL作为系统时钟源 

         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);


         //等待PLL被选择为系统时钟源

         while(RCC_GetSYSCLKSource() != 0x08)

         {

         }

   }

 


二、触摸屏低功耗设计

使用的是HMI串口屏,一个指令即刻让屏幕进入sleep模式


//HMI息屏

void HMI_Sleep_Mode(void)

{

    sprintf(buf,"sleep=1");

    HMI_Send_String(buf);

    Delay_ms(20);

}



三、CS1237低功耗设计

还是查看芯片手册:

void CS1237_power_down(void)

{

    SCLK_1;

    CS1237_delay_us(100);

    SCLK_1;

    CS1237_delay_us(100);

}


//cs1237重新唤醒,SCLK回到低电平并保持10us

void CS1237_restart(void)

{

    SCLK_0;

    CS1237_delay_us(20);

}



四、进入低功耗的判断

一开始考虑使用定时器定时对比读出的重量数据,如果数据在30s内没有变化并且一直小于1g,则进入低功耗模式,但是又怕定时器的中断正好发生在CS1237的读写过程中,


这样会打断时序,造成读数误差。


我看了一下我程序主循环循环一次的用时,大概在0.2s左右,其实这个也能当做一个基准,因为每次循环的时间都是差不多的。


那么我可以每循环一次就进行一次数据对比,每满足上面的情况就+1,当循环计数150次的时候,进入低功耗。否则清零计数。


这样每次进入低功耗的时间其实都是相差无几,而且节省了一个定时器。运用循环体本身的时间作为计时标志。


        //下面是关于进入低功耗的判断

        // 仿真发现在没有收到触摸屏的按下时,循环一次的时间大致为4s,这样省去了一个定时器,避免了中断

        low_power_weight_1 = now_weight;

        if((low_power_weight_1 < 1) && ((low_power_weight_1-low_power_weight_2 < 1) || (low_power_weight_2-low_power_weight_1 < 1)))

        {

            low_power_num++;

        }

        else

        {

            low_power_num = 0;

            low_power_weight_2 = low_power_weight_1;

        }

        

        //重量低于1g并且在40秒内没有变化,即开始进入低功耗

        if(low_power_num >= 80)

        {

            //计数清零,准备下一次的计数

            low_power_num = 0;

            //蜂鸣器首先响用来提示

            Beep_Warning_Slowly(3);        

            //进入低功耗

            Low_Power_Mode();

        }


参考资料:

https://www.cnblogs.com/yangguang-it/p/7441756.html

https://www.jianshu.com/p/540fff36fcc0

推荐阅读

史海拾趣

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们不仅限于接收和转换电视信号,还承载着丰富的娱乐与信息服务功能。

机顶盒的核心功能在于接收并转换来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,将其转换为电视机可识别的视频和音频流。这一转换过程确保了观众能够享受到高清乃至4K超高清的画质和震撼的音效,极大地提升了观看体验。此外,机顶盒还集成了诸如电子节目指南、因特网网页浏览等增值服务,让电视机不再仅仅是单向接收信息的设备,而是成为一个能够与用户进行互动的智能终端。

随着技术的发展,机顶盒的种类日益丰富,按主要功能可分为数字卫星机顶盒、有线电视数字机顶盒、IPTV机顶盒等。这些机顶盒不仅满足了用户多样化的观看需求,还通过连接互联网,提供了在线购物、视频点播、游戏娱乐等多元化服务。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向智能化、多功能化方向发展,为用户提供更加便捷、个性化的使用体验。

总之,机顶盒作为连接电视与互联网的桥梁,在丰富家庭娱乐生活、提升观看体验方面发挥着重要作用。随着技术的不断进步和市场需求的持续增长,机顶盒行业将迎来更加广阔的发展前景。

CR Magnetics公司的发展小趣事

CR Magnetics深知品质是企业的生命线。因此,公司始终坚持以质量为核心的管理理念,从原材料的采购到产品的生产、检测、包装等每一个环节都严格把控。此外,公司还通过了ISO9001:2008质量管理体系认证,并确保所有产品均符合RoHS等环保要求。这些举措使得CR Magnetics的产品赢得了客户的广泛信赖和好评。

Comax Industrial Co Ltd公司的发展小趣事

在电子产品市场竞争日益激烈的背景下,Comax Industrial Co Ltd公司始终坚持品质至上的原则。公司建立了严格的质量管理体系,从原材料的采购到生产制造的每一个环节都进行严格把控。通过持续改进和优化生产流程,公司不断提升产品的品质与性能。这种对品质的执着追求,使得Comax的产品在市场上赢得了广泛的认可与信赖。

Heatron公司的发展小趣事

面对日益激烈的市场竞争和快速变化的市场需求,Heatron公司积极拥抱数字化转型。公司引入了先进的智能制造系统和大数据分析技术,实现了生产过程的智能化、自动化和精细化管理。同时,公司还建立了完善的客户服务体系和数据分析平台,以便更准确地把握市场需求和客户反馈。这些举措不仅显著提升了Heatron的生产效率和产品质量,还增强了其在电子行业中的综合竞争力。

需要注意的是,以上故事均为基于电子行业背景和Heatron公司业务范畴的构想性描述,旨在展示Heatron公司可能的发展路径和成就。实际情况可能因时间、市场环境等多种因素而有所不同。

珠海艾派克(APEXMIC)公司的发展小趣事

近年来,艾派克通过一系列战略性并购,实现了公司的国际化发展。其中最为引人注目的是艾派克科技股份有限公司与太盟投资集团共同牵头收购利盟公司的案例。这次收购不仅使艾派克获得了先进的技术、国际化的品牌和团队,还进一步拓宽了公司的业务范围和市场渠道。通过并购,艾派克成功跻身真正意义上的国际化打印公司,为全球打印行业的未来发展打开了新的想象空间。

DAVE Embedded Systems公司的发展小趣事

DAVE Embedded Systems深知品质对于企业发展的重要性。他们建立了严格的质量管理体系,确保从原材料采购到产品制造的每一个环节都符合高标准的质量要求。同时,公司还提供了优质的售后服务,为客户提供了全方位的技术支持和解决方案。这些举措不仅赢得了客户的信任和支持,还为公司树立了良好的口碑。

问答坊 | AI 解惑

快速充电路开发

摘要:用PIC16C74单片机实现对电池组的快速充电,并对3个快速充电方案进行了比较。     关键词:单片机  快速充电  电池组 随着对便携产品需求的增加,充电电池的应用也越来越广,有许多家公司生产了快速充电控制芯片,如 ...…

查看全部问答>

CSS的常用技巧放送

一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则请参看《常用css缩写语法总结》,这里就不展开描述。 二.明确定义单位,除非值为0 忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写widt ...…

查看全部问答>

MATLAB第七课-向量图

compass指令@ [ 本帖最后由 gaoxiao 于 2009-6-16 22:59 编辑 ]…

查看全部问答>

ARMSYS 6410开发板手册及相关操作系统说明书下载

据说是资料最全的6410开发板...分享一些资料大家看看: 立宇泰ARMSYS 6410开发板硬件用户手册 立宇泰ARMSYS 6410开发板WINCE6.0用户手册 立宇泰ARMSYS 6410开发板Linux2.6.28用户手册…

查看全部问答>

全球速度最快的FPGA(Achronix)

日前,Achronix 半导体公司宣布全球速度最快的 FPGA 现已开始供货。Speedster 系列的首款产品为 SPD60,该产品系列的速度可达 1.5 GHz,性能比现有 FPGA 提高了 3 倍。 参加 Achronix 早期试用合作的客户已经利用 Speedster 在需要类似 ASIC 性能 ...…

查看全部问答>

eboot启动之烦恼!

各位朋友!小弟经过几天努力eboot问题终于有成绩了!我现在想把我bsp升级成三星官方的?我的nboot是ads编译的。现在  FMD_ReadSector(dwSector,(LPBYTE)dwRAM,NULL, 1);函数读取nand中数据,调试信息如下: WinCE NAND Boot v1.00 Nov ...…

查看全部问答>

wince 启动会自动加载哪些dll

它根据什么加载dll的?我的一个dll在release中生成了,但最后生成的NK.nb0中并没有会是什么原因呢?…

查看全部问答>

G.729用哪个系列DSP做比较好

小弟还在读研  刚刚步入语音压缩   不知道用什么型号的DSP做G.729   求高手指教…

查看全部问答>

基于ARMv8架构的Cortex-A50系列处理器发布

    ARM 官方就正式公布了新一代 64 位 Cortex-A50 系列处理器将于 2014 年问世的消息。这一系列中既有同等功耗下「性能为现有产品三倍」的 Cortex-A57,又有更为省电、全球最小的 64 位处理器 Cortex-A53。ARM 表示更出色的平行计算技术 ...…

查看全部问答>

STM8程序烧录

  ST-LINK/V2一直在闪,但是最后提示出错,程序烧不进去。…

查看全部问答>