【经验】Zigbee SoC芯片EFR32MG21系列如何进行BatteryMonitor Plugin的修正

2020-02-07 世强
Zigbee SoC芯片,EFR32MG21,Silicon Labs Zigbee SoC芯片,EFR32MG21,Silicon Labs Zigbee SoC芯片,EFR32MG21,Silicon Labs Zigbee SoC芯片,EFR32MG21,Silicon Labs

SILICON LABSZigbee SoC芯片EFR32MG系列,与市场同类芯片相比,具有功耗低(1.5uA睡眠功耗,9mA接收功耗,16mA发射功耗at 3dbm),射频性能好(-104.7dbm接收灵敏度,+20dbm最高发射功率),Zigbee网络协议栈性能优(至少400节点在Silicon Labs办公室长期运行测试),在Zigbee市场上占有很高的份额,且目前还有很多工程师在投入研发。

Silicon Labs的EFR32MG Series 2系列由于成本的降低、体积变小、射频性能提升等优点,成为市场的新宠。但是截止EmberZNet 6.7.0版本,对应EFR32MG21系列芯片的Battery Monitor Plugin尚未更新,本文将代码奉上,供参考。主要是使用EFR32MG21的AVDD来测量主供电电压。

对Zigbee工程的battery-monitor-efr32.c直接进行修改,建议Edit in SDK:

在更改时建议增加

#if EFR32MG21

#endif

来避免本次修改对其他工程产生的影响。

前提是需要添加em_iadc.c到工程,参考文章(【经验】SiliconLabs集成开发环境SimplicityStudio IDE如何为工程添加链接文件

将原文件line 22处   #include “em_adc.h”

修改为:

#if EFR32MG21

#include "em_iadc.h"

#else

#include "em_adc.h"

#endif

——————————————分割线——————————————————

 

原文件line 73处的#define ADC_REFERENCE_VOLTAGE_MILLIVOLTS 5000修改为:

#define ADC_REFERENCE_VOLTAGE_MILLIVOLTS  1200

 

原文件Line 111处函数:void halBatteryMonitorInitialize(void)修改为:

 

void halBatteryMonitorInitialize(void)

{

#if EFR32MG21

  CMU_ClockEnable(cmuClock_IADC0, true);

  // Declare init structs

  IADC_Init_t init = IADC_INIT_DEFAULT;

  IADC_AllConfigs_t initAllConfigs = IADC_ALLCONFIGS_DEFAULT;

  IADC_InitSingle_t initSingle = IADC_INITSINGLE_DEFAULT;

  IADC_SingleInput_t initSingleInput = IADC_SINGLEINPUT_DEFAULT;

  IADC_reset(IADC0);

  // Set reference voltage, positive-, negative inputs

  initAllConfigs.configs[0].reference = iadcCfgReferenceInt1V2;

  //initAllConfigs.configs[0].analogGain = iadcCfgAnalogGain3x;

  initSingleInput.posInput = iadcPosInputAvdd;

  initSingleInput.negInput = iadcNegInputGnd;

  // Initialize IADC

  IADC_init(IADC0, &init, &initAllConfigs);

  // Initialize Scan

  IADC_initSingle(IADC0, &initSingle, &initSingleInput);

  IADC0->SINGLE |= 1;

  // Allocate the analog bus for ADC0 inputs

  // GPIO->IADC_INPUT_0_BUS |= IADC_INPUT_BUSALLOC;

   //GPIO->CDBUSALLOC

//  IADC_command(IADC0, iadcCmdStartSingle);

//  IADC_Result_t sample=IADC_pullSingleFifoResult(IADC0);

// // vData = sample.data;

//   //      voltageMilliV = AdcToMilliV(vData);

//             emberAfPluginBatteryMonitorDataCallback(sample.data);

 

  emberEventControlSetDelayMS(emberAfPluginBatteryMonitorReadADCEventControl,MS_BETWEEN_BATTERY_CHECK);

#else

 

  uint32_t flags;

  ADC_Init_TypeDef init = ADC_INIT_DEFAULT;

  ADC_InitSingle_TypeDef initAdc = ADC_INITSINGLE_BATTERY_VOLTAGE;

 

  // Enable ADC clock

  CMU_ClockEnable(cmuClock_ADC0, true);

 

  // Initialize the ADC peripheral

  ADC_Init(ADC0, &init);

 

  // Setup ADC for single conversions for reading AVDD with a 5V reference

  ADC_InitSingle(ADC0, &initAdc);

 

  flags = ADC_IntGet(ADC0);

  ADC_IntClear(ADC0, flags);

  ADC_Start(ADC0, adcStartSingle);

 

  CMU_ClockEnable(cmuClock_PRS, true);

 

  // Initialize the PRS system to drive a GPIO high when the preamble is in the

  // air, effectively becoming a TX_ACT pin

  PRS_SourceSignalSet(BSP_BATTERYMON_TX_ACTIVE_CHANNEL,

                      PRS_SOURCE,

                      PRS_SIGNAL,

                      PRS_EDGE);

  // Enable the PRS channel and set the pin routing per the settings in the

  // board configuration header

  PRS->ROUTEPEN = 1 << BSP_BATTERYMON_TX_ACTIVE_CHANNEL;

  PRS->PRS_ROUTE_LOC = PRS->PRS_ROUTE_LOC & ~PRS_PIN_MASK;

  PRS->PRS_ROUTE_LOC = PRS->PRS_ROUTE_LOC

                       | (BSP_BATTERYMON_TX_ACTIVE_LOC

                          << PRS_PIN_SHIFT);

  GPIO_PinModeSet(BSP_BATTERYMON_TX_ACTIVE_PORT,

                  BSP_BATTERYMON_TX_ACTIVE_PIN,

                  gpioModePushPull,

                  0);

 

  // Set up the generic interrupt controller to activate the readADC event when

  // TX_ACTIVE goes hi

  irqConfig = halGenericInterruptControlIrqCfgInitialize(

    BSP_BATTERYMON_TX_ACTIVE_PIN,

    BSP_BATTERYMON_TX_ACTIVE_PORT,

    0);

  halGenericInterruptControlIrqEventRegister(

    irqConfig,

    &emberAfPluginBatteryMonitorReadADCEventControl);

  halGenericInterruptControlIrqEdgeConfig(irqConfig,

                                          HAL_GIC_INT_CFG_LEVEL_POS);

 

  halGenericInterruptControlIrqEnable(irqConfig);

#endif

}

——————————————分割线——————————————————————

原文件Line 173处函数 void emberAfPluginBatteryMonitorReadADCEventHandler(void)修改为:

void emberAfPluginBatteryMonitorReadADCEventHandler(void)

{

#if     EFR32MG21

         uint16_t voltageMilliV;

         uint32_t vData;

         uint32_t currentMsTick = halCommonGetInt32uMillisecondTick();

         uint32_t timeSinceLastMeasureMS = currentMsTick - lastBatteryMeasureTick;

         //emberEventControlSetInactive(emberAfPluginBatteryMonitorReadADCEventControl);

         //if (timeSinceLastMeasureMS >= MS_BETWEEN_BATTERY_CHECK)

         {

                   IADC_command(IADC0, iadcCmdStartSingle);

                   IADC_Result_t sample=IADC_pullSingleFifoResult(IADC0);

                   //double singleResult = sample.data * 3.3 / 0xFFF;

                   vData = sample.data;

                   voltageMilliV = 4*AdcToMilliV(vData);

                   emberAfPluginBatteryMonitorDataCallback(voltageMilliV);

                   lastReportedVoltageMilliV = voltageMilliV;

                   lastBatteryMeasureTick = currentMsTick;

                   }

         emberEventControlSetDelayMS(emberAfPluginBatteryMonitorReadADCEventControl,MS_BETWEEN_BATTERY_CHECK);

#else

 

  uint32_t flags;

  uint32_t vData;

  uint16_t voltageMilliV;

  uint32_t currentMsTick = halCommonGetInt32uMillisecondTick();

  uint32_t timeSinceLastMeasureMS = currentMsTick - lastBatteryMeasureTick;

  ADC_InitSingle_TypeDef initAdc = ADC_INITSINGLE_BATTERY_VOLTAGE;

 

  emberEventControlSetInactive(emberAfPluginBatteryMonitorReadADCEventControl);

 

  // In case something else in the system was using the ADC, reconfigure it to

  // properly sample the battery voltage

  ADC_InitSingle(ADC0, &initAdc);

 

  if (timeSinceLastMeasureMS >= MS_BETWEEN_BATTERY_CHECK) {

    // The most common and shortest (other than the ACK) transmission is the

    // data poll.  It takes 512 uS for a data poll, which is plenty of time for

    // a 16 cycle conversion

    flags = ADC_IntGet(ADC0);

    ADC_IntClear(ADC0, flags);

    ADC_Start(ADC0, adcStartSingle);

 

    // wait for the ADC to finish sampling

    while ((ADC_IntGet(ADC0) & ADC_IF_SINGLE) != ADC_IF_SINGLE) {

    }

    vData = ADC_DataSingleGet(ADC0);

    voltageMilliV = AdcToMilliV(vData);

 

    // filter the voltage to prevent spikes from overly influencing data

    voltageMilliV = filterVoltageSample(voltageMilliV);

 

    emberAfPluginBatteryMonitorDataCallback(voltageMilliV);

    lastReportedVoltageMilliV = voltageMilliV;

    lastBatteryMeasureTick = currentMsTick;

  }

#endif

}

—————————————————分割线———————————————————

 

最后说明一下,该电池电压测量经修改后,不再是RF发送时测量电池电压,而是周期性测量电池电压。

 

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 2

本文由Song提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。

相关研发服务和供应服务

评论

   |   

提交评论

全部评论(2

  • asd Lv8 2020-02-19
    nice
  • ACE Lv8. 研究员 2020-02-07
    学写了
没有更多评论了

相关推荐

【经验】多协议无线 SOC EFR32MG实现ZigBee的OTA操作指南

EFR32MG系列是Silicon Labs公司推出支持多协议无线 SOC,可以单芯片支持私有协议、BLE5.0、BLE MESH、ZigBee和Thread协议,并且可以单芯片支持Sub-GHz和2.4GHz的频段。由于其超低功耗、高射频性能以及高集成度等特点被广泛应用于智能家居、安防、智能工业等市场。在ZigBee的实际应用中,OTA是必不可少的功能,由于选择的型号不同,配置OT

2018-09-24 -  设计经验 代理服务 技术支持 采购服务

【经验】无线SoC芯片EFR32MG21程序中MFG_SECURITY_CONFIG参数的设置与功能

在无线SoC芯片EFR32MG21的ZigBee默认Z3Light程序运行时我们可以通过keys print这个CLI命令打印NWK key与TC Link Key等密钥参数,打印的效果如下,那我们是否可以隐藏这些密钥无法打印呢?

2023-05-26 -  设计经验 代理服务 技术支持 采购服务

【经验】Simplicity Studio v5软件创建ZigBee Z3Gateway Host工程的方法

本文主要介绍如何使用Simplicity Studio v5软件创建ZigBee Z3Gateway Host工程的方法,以Silicon Labs的无线SoC芯片EFR32MG21为例。

2022-06-11 -  设计经验 代理服务 技术支持 采购服务

【经验】EFR32MG21系列芯片zigbee射频性能测试

本文介绍使用CMW100测试Silicon Labs EFR32MG21系列芯片zigbee射频性能,从测试硬件、软件准备,测试环境搭建,测试zigbee射频TX和RX射频指标步骤进行详细描述,并描述了测试中的遇到的问题和解决方法。

2020-09-30 -  设计经验 代理服务 技术支持 采购服务 IoT射频性能测试

【经验】无线SoC芯片EFR32MG21手动生成OTA文件的方法与注意事项

在使用SILICON LABS无线SoC芯片EFR32MG21芯片设计ZigBee产品时,我们会用到OTA功能,这就要产生OTA文件。EmberZNet 6.x版本的项目中会自动为启用了OTA客户端插件的项目创建OTA文件,需要我们手动去创建OTA文件。

2023-05-24 -  设计经验 代理服务 技术支持 采购服务

【经验】配置迈斯威志WizPro200EFM烧录器实现脱机烧录无线SoC芯片EFR32MG21固件的方法

Silicon Labs的EFR32MG21无线SoC芯片,主要用于ZigBee和Matter设备。本文主要介绍如何配置迈斯威志WizPro200EFM烧录器,实现脱机烧录EFR32MG21无线SoC芯片固件的方法。

2023-01-21 -  设计经验 代理服务 技术支持 采购服务

【经验】教你如何修改EFR32MG系列SOC ZigBee工程的CCA阈值

Silicon Labs公司的EFR32MG系列SOC单芯片已被广泛应用于智能家居市场产品中。对于ZigBee协议栈,无论单播还是广播,数据包在发送之前MAC层会检测CCA(Clear Channel Assessment ),如果检测到接收信号强度低于阈值,数据包就不发送。因此需要根据实际情况来设置合理的CCA阈值,本文就指导大家来设置EFR32MG系列SOC的CCA阈值。

2019-01-31 -  设计经验 代理服务 技术支持 采购服务

【经验】ZigBee程序中NVM3基地址的重新定义

我们在使用无线SoC芯片EFR32MG21做ZigBee程序时,程序中会用到NVM3保存一些参数,但NVM3的存储地址我们在程序中很难找到设置的地方,如果想修改NVM3的存储地址要如何处理?

2023-05-23 -  设计经验 代理服务 技术支持 采购服务

【经验】创建ZigBee的无线SOC网关工程操作步骤

Silicon Labs公司的EFR32MG系列是针对智能家居市场应用的多协议无线SOC,单芯片支持蓝牙、ZigBee和Thread等协议,尤其是高性价比的系列2产品MG21、MG22,在ZigBee应用方面受到广大工程师的青睐。对于新手来说,使用SOC模式网关是最简单不过,本文就指导大家创建ZigBee的SOC网关工程操作步骤。

2020-04-09 -  设计经验 代理服务 技术支持 采购服务

【选型】ZigBee Soc芯片EM3585与EFR32MG21(Serial 2)参数对比

自2013以来,Silicon Labs(原Ember)推出了EM35x系列,这个方案凭借极好的协议栈运行稳定性,在大量产品中得到应用。2019年EFR32MG Serial 2推出后,在性能与价格方面都体现出具大的优势。加之许多原来在用EM3585,EM357的产品也遇到了一些供应和维护的困难,在进行产品升级或者降成本两个方面考虑,都会遇到选型困难,希望本文可以可以帮助大家了解到ZigBee芯片

2019-07-26 -  器件选型 代理服务 技术支持 采购服务

【经验】Simplicity Studio v5软件配置ZigBee调试打印信息的方法

在调试EFR32MG21无线SoC芯片的ZigBee程序时,需要EFR32MG21芯片使用串口打印ZigBee的调试信息。本文以EFR32MG21芯片的Z3Light工程为例,介绍Simplicity Studio v5软件配置ZigBee调试打印信息方法。

2023-03-31 -  设计经验 代理服务 技术支持 采购服务

【经验】多协议无线SoC EFR32MG的ZigBee开发之Token使用教程

EFR32MG系列是Silicon Labs公司针对多协议推出的无线SOC,单芯片可以支持Sub-G、蓝牙、Thread和Zigbee多种协议。Token是用来存储非易失性数据的即掉电后也能保存,本文档指导大家如何在EmberZNet PRO应用程序中自定义Token来存储非易失性数据。

2019-02-13 -  设计经验 代理服务 技术支持 采购服务

【应用】基于EFR32MG21作为zigbee接入单元和SGM2205作为电源转换芯片设计的智能家居zigbee网关产品

笔者有参与一款智能家居zigbee网关产品研发,zigbee单元基于芯科科技最新Gecko系列2高性价比EFR32MG21A020F512IM32-B芯片设计,WiFi单元基于专注于物联网应用的乐鑫ESP32-DOWD芯片设计,并选用圣邦微SGM2205-ADJXTDB8G/TR电源芯片实现5V转3.3V为zigbee和WiFi芯片供电。

2019-08-15 -  应用方案

【经验】芯科多协议SoC EFR32MG22从启动到加入ZigBee3.0网络的时间分析

我们在使用SILICON LABS多协议SoC EFR32MG22做ZigBee产品时会关心芯片从上电到加入网络具体需要多长时间,这个对使用电池类供电的产品是很重要的参数,本文将分析一下这个过程的时间,介绍初始化时间与扫描入网时间。

2023-03-28 -  设计经验 代理服务 技术支持 采购服务
展开更多

电子商城

查看更多

品牌:SILICON LABS

品类:Wireless SoC

价格:¥35.3989

现货: 76,847

品牌:SILICON LABS

品类:Wireless Gecko SoC

价格:¥8.1764

现货: 102,628

品牌:SILICON LABS

品类:Mighty Gecko Multi-Protocol Wireless SoC

价格:¥27.0929

现货: 90,767

品牌:SILICON LABS

品类:Wireless SoC

价格:¥31.7756

现货: 88,140

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.5305

现货: 85,765

品牌:SILICON LABS

品类:Wireless SoC

价格:¥19.9760

现货: 84,418

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.9026

现货: 83,555

品牌:SILICON LABS

品类:8位MCU

价格:¥5.8534

现货: 71,919

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥12.9143

现货: 61,558

品牌:SILICON LABS

品类:Transceiver

价格:¥15.8878

现货: 53,758

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:SILICON LABS

品类:Switch Hall Effect Magnetic Position Sensor

价格:¥2.2924

现货:126,000

品牌:SILICON LABS

品类:Light Sensor

价格:¥20.3400

现货:28,003

品牌:SILICON LABS

品类:8位MCU

价格:¥4.9000

现货:12,000

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥10.1700

现货:10,000

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.7900

现货:3,451

品牌:SILICON LABS

品类:Wireless SoC

价格:¥15.1400

现货:1,455

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥11.1200

现货:1,201

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥16.8500

现货:550

品牌:SILICON LABS

品类:8位MCU

价格:¥56.0000

现货:550

品牌:SILICON LABS

品类:8位MCU

价格:¥5.1900

现货:396

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

物联网天线方案设计/虚拟天线芯片方案设计

Ignion可支持多协议、宽频段的物联网天线方案设计,协议:Wi-Fi、Bluetooth、UWB、Lora、Zigbee、2G、3G、4G、5G、CBRS、GNSS、GSM、LTE-M、NB-IoT等,频段范围:400MHz~10600MHz。

最小起订量: 2500 提交需求>

IoT射频性能测试

支持 3Hz ~ 26.5GHz射频信号中心频率测试;9kHz ~ 3GHz频率范围内Wi-SUN、lora、zigbee、ble和Sub-G 灵敏度测量与测试,天线阻抗测量与匹配电路调试服务。支持到场/视频直播测试,资深专家全程指导。

实验室地址: 深圳/苏州 提交需求>

查看更多

授权代理品牌:接插件及结构件

查看更多

授权代理品牌:部件、组件及配件

查看更多

授权代理品牌:电源及模块

查看更多

授权代理品牌:电子材料

查看更多

授权代理品牌:仪器仪表及测试配组件

查看更多

授权代理品牌:电工工具及材料

查看更多

授权代理品牌:机械电子元件

查看更多

授权代理品牌:加工与定制

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面