1937|8

3414

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【短时天气预报系统】indoor装置基本功能实现 [复制链接]

  本帖最后由 ljj3166 于 2021-6-20 13:55 编辑

周末开撸

整理处理了一下indoor的基本功能

 

功耗

 

Indoor用到了一块eink屏,需要开辟一大块内存

并且需要保持实时状态

为了方便,这里就没采用休眠的方式来降低功耗

而是采用待机的方式

加上没有对这块老旧的eink屏进行电源控制设计

如果采用软件指令使其进入sleep,就无法通过指令唤醒了

所以只能通过软复位的方式

将eink复位待机,然后写入后续的数据

RSL10待机电流大约在30uA左右

eink待机大约在60uA左右

合计大约90uA

看看RSL10的待机代码

Standby模式配置

 

 

 

void Standby_Mode_Configure(struct standby_mode_env_tag *standby_mode_env) {
        /* If RTC clock source is XTAL 32 kHz oscillator */
        if (RTC_CLK_SRC == RTC_CLK_SRC_XTAL32K) {
                /* Enable XTAL32K oscillator amplitude control
                 * Set XTAL32K load capacitance to 0x38: 22.4 pF
                 * Enable XTAL32K oscillator */

                ACS->XTAL32K_CTRL = (XTAL32K_XIN_CAP_BYPASS_DISABLE |
                XTAL32K_AMPL_CTRL_ENABLE |
                XTAL32K_NOT_FORCE_READY
                                | (XTAL32K_CLOAD_TRIM_VALUE << ACS_XTAL32K_CTRL_CLOAD_TRIM_Pos)
                                | (XTAL32K_ITRIM_VALUE << ACS_XTAL32K_CTRL_ITRIM_Pos) |
                                XTAL32K_IBOOST_DISABLE |
                                XTAL32K_ENABLE);

                /* Wait for XTAL32K oscillator to be ready */
                while (ACS_XTAL32K_CTRL->READY_ALIAS != XTAL32K_OK_BITBAND) {
                }

                LowPowerClock_Source_Set(0);
        }

        /* Else: if RTC clock source is RC 32 kHz oscillator */
        else if (RTC_CLK_SRC == RTC_CLK_SRC_RC_OSC) {
                ACS_VDDC_CTRL->STANDBY_VTRIM_BYTE = ACS_VDDC_CTRL->VTRIM_BYTE;

                /* Start the RC oscillator */
                Sys_Clocks_Osc32kHz(RC_OSC_ENABLE | RC_OSC_NOM);

                /* Read the OSC_32K calibration trim data from NVR4 */
                unsigned int osc_calibration_value = 0;
                Sys_ReadNVR4(MANU_INFO_OSC_32K, 1, (unsigned
                int*) &osc_calibration_value);

                /* Use calibrated value for RC clock */
                if (osc_calibration_value != 0xFFFFFFFF) {
                        ACS_RCOSC_CTRL->FTRIM_32K_BYTE = (uint8_t) (osc_calibration_value);
                }

                /* Delay for 4 ms */
                Sys_Delay_ProgramROM(4 * (SystemCoreClock / 1000));

                LowPowerClock_Source_Set(1);

                /* In us, for typical RCOSC until measurement is obtained. */
                RTCCLK_Period_Value_Set(RCCLK_PERIOD_VALUE);

                /* Set-up the Audiosink block for frequency measurement */
                Sys_Audiosink_ResetCounters();
                Sys_Audiosink_InputClock(0, AUDIOSINK_CLK_SRC_STANDBYCLK);
                Sys_Audiosink_Config(AUDIO_SINK_PERIODS_16, 0, 0);

                /* Enable interrupts */
                NVIC_ClearPendingIRQ(AUDIOSINK_PERIOD_IRQn);
                NVIC_EnableIRQ(AUDIOSINK_PERIOD_IRQn);

                /* Start period counter to start period measurement */
                AUDIOSINK_CTRL->PERIOD_CNT_START_ALIAS = 1;
        }

        /* else: if RTC clock source is external oscillator */
        else {
                DIO->CFG[EXT_LOW_POWER_CLK_GPIO_NUM] = (DIO_2X_DRIVE |
                DIO_LPF_DISABLE |
                DIO_NO_PULL |
                DIO_MODE_INPUT);

                LowPowerClock_Source_Set(1);

                /* Clock period in us for external clock */
                RTCCLK_Period_Value_Set(EXT_LOW_POWER_CLK_PERIOD_VALUE);

                /* Set-up the Audiosink block for frequency measurement */
                Sys_Audiosink_ResetCounters();
                Sys_Audiosink_InputClock(0, AUDIOSINK_CLK_SRC_STANDBYCLK);
                Sys_Audiosink_Config(AUDIO_SINK_PERIODS_16, 0, 0);

                /* Enable interrupts */
                NVIC_ClearPendingIRQ(AUDIOSINK_PERIOD_IRQn);
                NVIC_EnableIRQ(AUDIOSINK_PERIOD_IRQn);

                /* Start period counter to start period measurement */
                AUDIOSINK_CTRL->PERIOD_CNT_START_ALIAS = 1;
        }

        standby_mode_env->RTC_clk_src = RTC_CLK_SRC;

        /* Update wake-up configuration and control registers */
        standby_mode_env->wakeup_cfg = WAKEUP_DELAY_16 |
        WAKEUP_WAKEUP_PAD_FALLING |
        WAKEUP_DIO3_DISABLE |
        WAKEUP_DIO2_DISABLE |
        WAKEUP_DIO1_DISABLE |
        WAKEUP_DIO0_DISABLE;

        /* Update wake-up control and clear previous wake-up events */
        standby_mode_env->wakeup_ctrl = PADS_RETENTION_DISABLE |
        WAKEUP_DCDC_OVERLOAD_CLEAR |
        WAKEUP_PAD_EVENT_CLEAR |
        WAKEUP_RTC_ALARM_CLEAR |
        WAKEUP_BB_TIMER_CLEAR |
        WAKEUP_DIO3_EVENT_CLEAR |
        WAKEUP_DIO2_EVENT_CLEAR |
        WAKEUP_DIO1_EVENT_CLEAR |
        WAKEUP_DIO0_EVENT_CLEAR;

        /* Set DMA channel used to save/restore RF registers
         * in each standby/wake-up cycle */
        standby_mode_env->DMA_channel_RF = DMA_CHAN_SLP_WK_RF_REGS_COPY;

        /* Initialize some system blocks for standby mode,
         * save RF registers and memory banks*/
        Sys_PowerModes_Standby_Init(standby_mode_env);

        /* BLE not in standby mode and ready for normal operations */
        BLE_Is_Awake_Flag_Set();
}

 

 

主循环中空闲时段进入standby

 

GLOBAL_INT_DISABLE();
                BLE_Power_Mode_Enter(&standby_mode_env, POWER_MODE_STANDBY);
                GLOBAL_INT_RESTORE();

                /* Wait for an event before executing the scheduler again */
                SYS_WAIT_FOR_EVENT;

 

大概测了一下待机电流

 

 

 

大约88uA,预料内

不过好在使用了大容量的锂电池

可以充电,苟着用吧

顺道测了一下一次完整屏幕刷新的消耗

 

 

 

0.5mA左右吧

Indoor的装置会不断扫描周边的蓝牙设备

配置的间隔100ms,扫描window时间50ms

算是频率比较高了

 

 

 

Outdoor装置每3分钟广播6s

记录了4indoor装置扫描和显示更新的消耗

平均电流大约是1mA

不太理想

理想中应该和outdoor一起

能够有个时间的同步

其他时间都保持在90uA左右的待机状态

目前还没想到有什么好的办法来进行时间戳的同步

暂时先这样吧

毕竟使用了1200mAh的电池

打个7折,也能够使用超过一个月充电一次

接着苟用

 

界面设计

 

 

1—太阳直射温度(outdoor装置安装在路灯盒中,如果是百叶箱可以看成气温)

2—空气湿度

3—气压值

4—outdoor端上次RSSI范围

5—indoor端电池电量估计

6—最近三十次气压值柱状图

7—预测天气图标

天气图标大概有这几个

 

后面可能会有细节的修改吧

先按这个撸

 

天气数据简要分析

 

 

1s的频率

采集了一次对流天气的气压数据

生成了一个曲线

 

 

 

根据记录的时间

大致划分了一下强对流降雨的过程

大概可以发现,气压的变化趋势

和降雨的情况还是密切相关的

特别是开始下雨那一段

放大后

 

 

 

这一段在10分钟内

气压快速下降了接近130pa

在此之后的曲线中

气压逐渐上升

雨势渐停,天气放晴

上面只是从气压一个维度来观察下雨的情况

气象谚语说:燕子低飞要下雨

很可能还需要考虑湿度

可能气压湿度组合起来效果会更好些

后面再尝试吧

脑海里突然冒出想法

气压湿度预测短时天气

是不是采集好数据搞点机器学习的算法,结果会更准确?

 

先到这

 

 

 

 

 

 

 

 

 

 

 

 

最新回复

nmg
举报   详情 回复 发表于 2021-6-21 10:13
点赞 关注
个人签名

So TM what......?

 

 

回复
举报

1237

帖子

66

TA的资源

纯净的硅(中级)

沙发
 

墨水屏nice,2.13寸的吗

点评

2.9的,好几年前的库存货,功能不全  详情 回复 发表于 2021-6-20 21:27
 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

板凳
 

天气预报原理原来是这样的,学习了

点评

拍脑瓜的  详情 回复 发表于 2021-6-20 21:28
 
 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

4
 
dql2016 发表于 2021-6-20 17:52 墨水屏nice,2.13寸的吗

2.9的,好几年前的库存货,功能不全

个人签名

So TM what......?

 

 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

5
 
sipower 发表于 2021-6-20 19:06 天气预报原理原来是这样的,学习了

拍脑瓜的

点评

nmg
举报  详情 回复 发表于 2021-6-21 10:13
个人签名

So TM what......?

 

 
 

回复

1942

帖子

3

TA的资源

版主

6
 

可行性感觉还不错!数据图形也非常容易理解!

点评

看上去似乎可以,用通用mcu来做,实际可能问题很多  详情 回复 发表于 2021-6-21 14:53
 
 
 

回复

5220

帖子

239

TA的资源

管理员

7
 

举报

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

阿达....  详情 回复 发表于 2021-6-21 14:56
 
 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

8
 
w494143467 发表于 2021-6-21 08:51 可行性感觉还不错!数据图形也非常容易理解!

看上去似乎可以,用通用mcu来做,实际可能问题很多

个人签名

So TM what......?

 

 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

9
个人签名

So TM what......?

 

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表