Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
PowerSampling Class Reference

Sample power. More...

#include <cs_PowerSampling.h>

Inheritance diagram for PowerSampling:
Collaboration diagram for PowerSampling:

Classes

struct  power_t
 Struct that defines the buffer received from the ADC sampler in scanning mode. More...
 

Public Member Functions

void init (const boards_config_t *boardConfig)
 Init the class. More...
 
void powerSampleFirstStart ()
 Initializes and starts the ADC, also starts interval timer. More...
 
void startSampling ()
 Starts a new power sample burst. More...
 
void powerSampleAdcDone (adc_buffer_id_t bufIndex)
 Called when the sample burst is finished. More...
 
void sampleCurrentDone (uint8_t type)
 Fill up the current curve and send it out over bluetooth @type specifies over which characteristic the current curve should be sent. More...
 
void enableZeroCrossingInterrupt (ps_zero_crossing_cb_t callback)
 Enable zero crossing detection on given channel, generating interrupts. More...
 
uint32_t getSkippedBufCount ()
 Get the number of bufs that have been recently skipped. More...
 
void handleEvent (event_t &event)
 handle (crownstone) events More...
 

Static Public Member Functions

static PowerSamplinggetInstance ()
 Gets a static singleton (no dynamic memory allocation) More...
 

Private Member Functions

 PowerSampling ()
 
 TYPIFY (CONFIG_VOLTAGE_MULTIPLIER) _voltageMultiplier
 
 TYPIFY (CONFIG_CURRENT_MULTIPLIER) _currentMultiplier
 Voltage multiplier from settings. More...
 
 TYPIFY (CONFIG_VOLTAGE_ADC_ZERO) _voltageZero
 Current multiplier from settings. More...
 
 TYPIFY (CONFIG_CURRENT_ADC_ZERO) _currentZero
 Voltage zero from settings. More...
 
 TYPIFY (CONFIG_POWER_ZERO) _powerZero
 Current zero from settings. More...
 
 TYPIFY (CONFIG_SOFT_FUSE_CURRENT_THRESHOLD) _currentMilliAmpThreshold
 
void initEnergyUsed ()
 Load energy used from IPC ram. More...
 
void storeEnergyUsed ()
 Store energy used to IPC ram. More...
 
void initAverages ()
 Initialize the moving averages. More...
 
bool isValidBuf (adc_buffer_id_t bufIndex)
 Whether the given buffer is valid. More...
 
bool isConsecutiveBuf (adc_buffer_seq_nr_t seqNr, adc_buffer_seq_nr_t prevSeqNr)
 Whether the given sequence nr follows directly after the previous sequence nr. More...
 
void removeInvalidBufs ()
 Remove all buffers from queue that are older than the newest invalid buffer. More...
 
void calculateVoltageZero (adc_buffer_id_t bufIndex)
 Calculate the value of the zero line of the voltage samples (the offset). More...
 
void calculateCurrentZero (adc_buffer_id_t bufIndex)
 Calculate the value of the zero line of the current samples. More...
 
void filter (adc_buffer_id_t bufIndexIn, adc_buffer_id_t bufIndexOut, adc_channel_id_t channel_id)
 Filter the samples. More...
 
bool isVoltageAndCurrentSwapped (adc_buffer_id_t bufIndex, adc_buffer_id_t prevBufIndex)
 Checks if voltage and current index are swapped. More...
 
bool calculatePower (adc_buffer_id_t bufIndex)
 Calculate the average power usage. More...
 
void calculateSlowAveragePower (float powerMilliWatt, float fastAvgPowerMilliWatt)
 
void calibratePowerZero (int32_t powerMilliWatt)
 Determines measured power usage with no load. More...
 
void calculateEnergy ()
 Calculate the energy used. More...
 
void checkSoftfuse (int32_t currentRmsMilliAmp, int32_t currentRmsMilliAmpFiltered, int32_t voltageRmsMilliVolt, adc_buffer_id_t bufIndex)
 Check if the current goes above a threshold (for long enough). More...
 
void handleGetPowerSamples (PowerSamplesType type, uint8_t index, cs_result_t &result)
 
void selectNextPin (adc_channel_id_t channel)
 
void enableDifferentialModeCurrent (bool enable)
 
void enableDifferentialModeVoltage (bool enable)
 
void changeRange (uint8_t channel, int32_t amount)
 
void applyAdcConfig (adc_channel_id_t channelIndex)
 
void enableSwitchcraft (bool enable)
 
void printBuf (adc_buffer_id_t bufIndex)
 
- Private Member Functions inherited from EventListener
 EventListener ()
 
virtual ~EventListener ()
 unregisters the listener. More...
 
virtual void handleEvent (event_t &event)=0
 Handle events. More...
 
void listen ()
 Registers this with the EventDispatcher. More...
 

Private Attributes

bool _isInitialized = false
 Variable to keep up whether power sampling is initialized. More...
 
ADC_adc
 Reference to the ADC instance. More...
 
OperationMode _operationMode
 Operation mode of this device. More...
 
const boards_config_t_boardConfig = nullptr
 
CircularBuffer< adc_buffer_id_t_bufferQueue
 Queue of buffers we can use for processing. More...
 
cs_power_samples_header_t _lastSoftfuse
 
adc_sample_value_t _lastSoftfuseSamples [AdcBuffer::getChannelLength()] = {0}
 
CircularBuffer< switch_state_t_switchHist
 
cs_power_samples_header_t _lastSwitchSamplesHeader
 
adc_sample_value_t _lastSwitchSamples [numSwitchSamplesBuffers *AdcBuffer::getChannelLength()] = {0}
 
uint16_t _avgZeroCurrentDiscount
 Power zero from settings. More...
 
uint16_t _avgZeroVoltageDiscount
 
uint16_t _avgPowerDiscount
 
float _slowAvgPowerDiscount
 
float _slowAvgPowerMilliWatt = 0.0f
 
uint16_t _slowAvgPowerCount
 
const uint16_t slowAvgPowerConvergedCount = 1000
 
float _powerDiffThresholdPart
 
float _powerDiffThresholdMinMilliWatt
 
float _negativePowerThresholdMilliWatt
 
int32_t _boardPowerZero
 
int32_t _avgZeroVoltage
 Measured power when there is no load for this board (mW). More...
 
int32_t _avgZeroCurrent
 Used for storing and calculating the average zero voltage value (times 1024). More...
 
bool _recalibrateZeroVoltage
 Used for storing and calculating the average zero current value (times 1024). More...
 
bool _recalibrateZeroCurrent
 Whether or not the zero voltage value should be recalculated. More...
 
uint16_t _zeroVoltageCount
 Whether or not the zero current value should be recalculated. More...
 
uint16_t _zeroCurrentCount
 Number of times the zero voltage has been calculated. More...
 
int32_t _avgPowerMilliWatt
 Number of times the zero current has been calculated. More...
 
int32_t _avgCurrentRmsMilliAmp
 Used to send out the average power (in mW). More...
 
int32_t _avgVoltageRmsMilliVolt
 Used for storing the average rms current (in mA). More...
 
PowerVector_inputSamples
 Used for storing the average rms voltage (in mV). More...
 
PowerVector_outputSamples
 Used for storing the samples to be filtered. More...
 
MedianFilter_filterParams
 Used for storing the filtered samples. More...
 
CircularBuffer< int32_t > * _powerMilliWattHist
 Stores the parameters for the moving median filter. More...
 
CircularBuffer< int32_t > * _currentRmsMilliAmpHist
 Used to store a history of the power. More...
 
CircularBuffer< int32_t > * _filteredCurrentRmsHistMA
 Used to store a history of the current_rms. More...
 
CircularBuffer< int32_t > * _voltageRmsMilliVoltHist
 Used to store a history of the filtered current_rms. More...
 
int32_t _histCopy [POWER_SAMPLING_RMS_WINDOW_SIZE]
 Used to store a history of the voltage_rms. More...
 
uint16_t _consecutiveDimmerOvercurrent = 0
 Used to copy a history to (so it can be used to calculate the median) More...
 
uint16_t _consecutiveOvercurrent = 0
 
 _currentMilliAmpThresholdDimmer
 Current threshold from settings. More...
 
int64_t _energyUsedmicroJoule = 0
 Current threshold when using dimmer from settings. More...
 
switch_state_t _lastSwitchState
 Energy used in micro joule. More...
 
uint32_t _lastSwitchOffTicks
 Stores the last seen switch state. More...
 
bool _lastSwitchOffTicksValid = false
 RTC ticks when the switch was last turned off. More...
 
bool _dimmerFailureDetectionStarted = false
 Keep up whether the last switch off time is valid. More...
 
uint32_t _calibratePowerZeroCountDown = 4000 / TICK_INTERVAL_MS
 Keep up whether the IGBT failure detection has started yet. More...
 
struct {
   adc_channel_config_t   config
 
   uint8_t   pinIndex = 0
 
   uint8_t   pinCount = 0
 
_adcConfig [2]
 
union {
   struct {
      bool   power: 1
 
      bool   current: 1
 
      bool   voltage: 1
 
      bool   filteredCurrent: 1
 
   }   flags
 
   uint32_t   asInt
 
_logsEnabled
 
adc_buffer_seq_nr_t _lastBufSeqNr = 0
 
adc_buffer_id_t _lastBufIndex = 0
 
adc_buffer_id_t _lastFilteredBufIndex = 0
 
cs_adc_restarts_t _adcRestarts
 
cs_adc_channel_swaps_t _adcChannelSwaps
 
uint32_t _bufSkipCount = 0
 Count number of buffers that have been skipped for processing. More...
 

Static Private Attributes

static const uint8_t numFilteredBuffersForProcessing = 4
 
static const uint8_t numUnfilteredBuffers = 1
 
static const uint8_t switchHistSize = 3
 
static const uint8_t numSwitchSamplesBuffers = 6
 

Detailed Description

Sample power.

Constructor & Destructor Documentation

◆ PowerSampling()

Member Function Documentation

◆ applyAdcConfig()

void PowerSampling::applyAdcConfig ( adc_channel_id_t  channelIndex)
private

◆ calculateCurrentZero()

void PowerSampling::calculateCurrentZero ( adc_buffer_id_t  bufIndex)
private

Calculate the value of the zero line of the current samples.

◆ calculateEnergy()

void PowerSampling::calculateEnergy ( )
private

Calculate the energy used.

◆ calculatePower()

bool PowerSampling::calculatePower ( adc_buffer_id_t  bufIndex)
private

Calculate the average power usage.

Returns
true when calculation was successful.

◆ calculateSlowAveragePower()

void PowerSampling::calculateSlowAveragePower ( float  powerMilliWatt,
float  fastAvgPowerMilliWatt 
)
private

◆ calculateVoltageZero()

void PowerSampling::calculateVoltageZero ( adc_buffer_id_t  bufIndex)
private

Calculate the value of the zero line of the voltage samples (the offset).

◆ calibratePowerZero()

void PowerSampling::calibratePowerZero ( int32_t  powerMilliWatt)
private

Determines measured power usage with no load.

When successful, sets the value in state.

Careful: make sure this doesn't interfere with dimmer on failure detection.

◆ changeRange()

void PowerSampling::changeRange ( uint8_t  channel,
int32_t  amount 
)
private

◆ checkSoftfuse()

void PowerSampling::checkSoftfuse ( int32_t  currentRmsMilliAmp,
int32_t  currentRmsMilliAmpFiltered,
int32_t  voltageRmsMilliVolt,
adc_buffer_id_t  bufIndex 
)
private

Check if the current goes above a threshold (for long enough).

Emits an event when a softfuse triggers. Stores the current buffer of the last buffer that's above threshold, before the softfuse triggered.

Parameters
[in]currentRmsMilliAmpRMS current in mA of the last AC period.
[in]currentRmsMilliAmpFilteredFiltered (averaged or so) RMS current in mA.
[in]voltageRmsMilliVoltRMS voltage in mV of the last AC period.
[in]powerStruct that holds the buffers.

◆ enableDifferentialModeCurrent()

void PowerSampling::enableDifferentialModeCurrent ( bool  enable)
private

◆ enableDifferentialModeVoltage()

void PowerSampling::enableDifferentialModeVoltage ( bool  enable)
private

◆ enableSwitchcraft()

void PowerSampling::enableSwitchcraft ( bool  enable)
private

◆ enableZeroCrossingInterrupt()

void PowerSampling::enableZeroCrossingInterrupt ( ps_zero_crossing_cb_t  callback)

Enable zero crossing detection on given channel, generating interrupts.

Parameters
[in]callbackFunction to be called on a zero crossing event. This function will run at interrupt level!

◆ filter()

void PowerSampling::filter ( adc_buffer_id_t  bufIndexIn,
adc_buffer_id_t  bufIndexOut,
adc_channel_id_t  channel_id 
)
private

Filter the samples.

◆ getInstance()

static PowerSampling & PowerSampling::getInstance ( )
inlinestatic

Gets a static singleton (no dynamic memory allocation)

◆ getSkippedBufCount()

uint32_t PowerSampling::getSkippedBufCount ( )

Get the number of bufs that have been recently skipped.

Is reset every second.

◆ handleEvent()

void PowerSampling::handleEvent ( event_t event)
virtual

handle (crownstone) events

Implements EventListener.

◆ handleGetPowerSamples()

void PowerSampling::handleGetPowerSamples ( PowerSamplesType  type,
uint8_t  index,
cs_result_t result 
)
private

◆ init()

void PowerSampling::init ( const boards_config_t boardConfig)

Init the class.

The board config must remain in memory.

◆ initAverages()

void PowerSampling::initAverages ( )
private

Initialize the moving averages.

◆ initEnergyUsed()

void PowerSampling::initEnergyUsed ( )
private

Load energy used from IPC ram.

◆ isConsecutiveBuf()

bool PowerSampling::isConsecutiveBuf ( adc_buffer_seq_nr_t  seqNr,
adc_buffer_seq_nr_t  prevSeqNr 
)
private

Whether the given sequence nr follows directly after the previous sequence nr.

This can change at any moment (set in interrupt).

◆ isValidBuf()

bool PowerSampling::isValidBuf ( adc_buffer_id_t  bufIndex)
private

Whether the given buffer is valid.

This can change at any moment (set in interrupt).

◆ isVoltageAndCurrentSwapped()

bool PowerSampling::isVoltageAndCurrentSwapped ( adc_buffer_id_t  bufIndex,
adc_buffer_id_t  prevBufIndex 
)
private

Checks if voltage and current index are swapped.

Checks if previous voltage samples look more like this buffer voltage samples or current samples. Assumes previous buffer is valid, and of same size as this buffer.

◆ powerSampleAdcDone()

void PowerSampling::powerSampleAdcDone ( adc_buffer_id_t  bufIndex)

Called when the sample burst is finished.

Calculates the power usage, updates the state. Sends the samples if the central is subscribed for that.

◆ powerSampleFirstStart()

void PowerSampling::powerSampleFirstStart ( )

Initializes and starts the ADC, also starts interval timer.

◆ printBuf()

void PowerSampling::printBuf ( adc_buffer_id_t  bufIndex)
private

◆ removeInvalidBufs()

void PowerSampling::removeInvalidBufs ( )
private

Remove all buffers from queue that are older than the newest invalid buffer.

What remains is a queue of consecutive valid buffers.

◆ sampleCurrentDone()

void PowerSampling::sampleCurrentDone ( uint8_t  type)

Fill up the current curve and send it out over bluetooth @type specifies over which characteristic the current curve should be sent.

◆ selectNextPin()

void PowerSampling::selectNextPin ( adc_channel_id_t  channel)
private

◆ startSampling()

void PowerSampling::startSampling ( )

Starts a new power sample burst.

Called at a low interval.

◆ storeEnergyUsed()

void PowerSampling::storeEnergyUsed ( )
private

Store energy used to IPC ram.

◆ TYPIFY() [1/6]

PowerSampling::TYPIFY ( CONFIG_CURRENT_ADC_ZERO  )
private

Voltage zero from settings.

◆ TYPIFY() [2/6]

PowerSampling::TYPIFY ( CONFIG_CURRENT_MULTIPLIER  )
private

Voltage multiplier from settings.

◆ TYPIFY() [3/6]

PowerSampling::TYPIFY ( CONFIG_POWER_ZERO  )
private

Current zero from settings.

◆ TYPIFY() [4/6]

PowerSampling::TYPIFY ( CONFIG_SOFT_FUSE_CURRENT_THRESHOLD  )
private

◆ TYPIFY() [5/6]

PowerSampling::TYPIFY ( CONFIG_VOLTAGE_ADC_ZERO  )
private

Current multiplier from settings.

◆ TYPIFY() [6/6]

PowerSampling::TYPIFY ( CONFIG_VOLTAGE_MULTIPLIER  )
private

Member Data Documentation

◆ _adc

ADC* PowerSampling::_adc
private

Reference to the ADC instance.

◆ _adcChannelSwaps

cs_adc_channel_swaps_t PowerSampling::_adcChannelSwaps
private

◆ 

struct { ... } PowerSampling::_adcConfig[2]

◆ _adcRestarts

cs_adc_restarts_t PowerSampling::_adcRestarts
private

◆ _avgCurrentRmsMilliAmp

int32_t PowerSampling::_avgCurrentRmsMilliAmp
private

Used to send out the average power (in mW).

◆ _avgPowerDiscount

uint16_t PowerSampling::_avgPowerDiscount
private

◆ _avgPowerMilliWatt

int32_t PowerSampling::_avgPowerMilliWatt
private

Number of times the zero current has been calculated.

◆ _avgVoltageRmsMilliVolt

int32_t PowerSampling::_avgVoltageRmsMilliVolt
private

Used for storing the average rms current (in mA).

◆ _avgZeroCurrent

int32_t PowerSampling::_avgZeroCurrent
private

Used for storing and calculating the average zero voltage value (times 1024).

◆ _avgZeroCurrentDiscount

uint16_t PowerSampling::_avgZeroCurrentDiscount
private

Power zero from settings.

◆ _avgZeroVoltage

int32_t PowerSampling::_avgZeroVoltage
private

Measured power when there is no load for this board (mW).

◆ _avgZeroVoltageDiscount

uint16_t PowerSampling::_avgZeroVoltageDiscount
private

◆ _boardConfig

const boards_config_t* PowerSampling::_boardConfig = nullptr
private

◆ _boardPowerZero

int32_t PowerSampling::_boardPowerZero
private

◆ _bufferQueue

CircularBuffer<adc_buffer_id_t> PowerSampling::_bufferQueue
private

Queue of buffers we can use for processing.

If queue size == 1:

  • buffer[0] = last filtered. If queue size > 1:
  • buffer[size] = last unfiltered.
  • buffer[size-1] = last filtered.
  • buffer[size-2] = previous filtered.

◆ _bufSkipCount

uint32_t PowerSampling::_bufSkipCount = 0
private

Count number of buffers that have been skipped for processing.

◆ _calibratePowerZeroCountDown

uint32_t PowerSampling::_calibratePowerZeroCountDown = 4000 / TICK_INTERVAL_MS
private

Keep up whether the IGBT failure detection has started yet.

◆ _consecutiveDimmerOvercurrent

uint16_t PowerSampling::_consecutiveDimmerOvercurrent = 0
private

Used to copy a history to (so it can be used to calculate the median)

◆ _consecutiveOvercurrent

uint16_t PowerSampling::_consecutiveOvercurrent = 0
private

◆ _currentMilliAmpThresholdDimmer

PowerSampling::_currentMilliAmpThresholdDimmer
private

Current threshold from settings.

◆ _currentRmsMilliAmpHist

CircularBuffer<int32_t>* PowerSampling::_currentRmsMilliAmpHist
private

Used to store a history of the power.

◆ _dimmerFailureDetectionStarted

bool PowerSampling::_dimmerFailureDetectionStarted = false
private

Keep up whether the last switch off time is valid.

◆ _energyUsedmicroJoule

int64_t PowerSampling::_energyUsedmicroJoule = 0
private

Current threshold when using dimmer from settings.

◆ _filteredCurrentRmsHistMA

CircularBuffer<int32_t>* PowerSampling::_filteredCurrentRmsHistMA
private

Used to store a history of the current_rms.

◆ _filterParams

MedianFilter* PowerSampling::_filterParams
private

Used for storing the filtered samples.

◆ _histCopy

int32_t PowerSampling::_histCopy[POWER_SAMPLING_RMS_WINDOW_SIZE]
private

Used to store a history of the voltage_rms.

◆ _inputSamples

PowerVector* PowerSampling::_inputSamples
private

Used for storing the average rms voltage (in mV).

◆ _isInitialized

bool PowerSampling::_isInitialized = false
private

Variable to keep up whether power sampling is initialized.

◆ _lastBufIndex

adc_buffer_id_t PowerSampling::_lastBufIndex = 0
private

◆ _lastBufSeqNr

adc_buffer_seq_nr_t PowerSampling::_lastBufSeqNr = 0
private

◆ _lastFilteredBufIndex

adc_buffer_id_t PowerSampling::_lastFilteredBufIndex = 0
private

◆ _lastSoftfuse

cs_power_samples_header_t PowerSampling::_lastSoftfuse
private

◆ _lastSoftfuseSamples

adc_sample_value_t PowerSampling::_lastSoftfuseSamples[AdcBuffer::getChannelLength()] = {0}
private

◆ _lastSwitchOffTicks

uint32_t PowerSampling::_lastSwitchOffTicks
private

Stores the last seen switch state.

◆ _lastSwitchOffTicksValid

bool PowerSampling::_lastSwitchOffTicksValid = false
private

RTC ticks when the switch was last turned off.

◆ _lastSwitchSamples

adc_sample_value_t PowerSampling::_lastSwitchSamples[numSwitchSamplesBuffers *AdcBuffer::getChannelLength()] = {0}
private

◆ _lastSwitchSamplesHeader

cs_power_samples_header_t PowerSampling::_lastSwitchSamplesHeader
private

◆ _lastSwitchState

switch_state_t PowerSampling::_lastSwitchState
private

Energy used in micro joule.

◆ 

union { ... } PowerSampling::_logsEnabled

◆ _negativePowerThresholdMilliWatt

float PowerSampling::_negativePowerThresholdMilliWatt
private

◆ _operationMode

OperationMode PowerSampling::_operationMode
private

Operation mode of this device.

◆ _outputSamples

PowerVector* PowerSampling::_outputSamples
private

Used for storing the samples to be filtered.

◆ _powerDiffThresholdMinMilliWatt

float PowerSampling::_powerDiffThresholdMinMilliWatt
private

◆ _powerDiffThresholdPart

float PowerSampling::_powerDiffThresholdPart
private

◆ _powerMilliWattHist

CircularBuffer<int32_t>* PowerSampling::_powerMilliWattHist
private

Stores the parameters for the moving median filter.

◆ _recalibrateZeroCurrent

bool PowerSampling::_recalibrateZeroCurrent
private

Whether or not the zero voltage value should be recalculated.

◆ _recalibrateZeroVoltage

bool PowerSampling::_recalibrateZeroVoltage
private

Used for storing and calculating the average zero current value (times 1024).

◆ _slowAvgPowerCount

uint16_t PowerSampling::_slowAvgPowerCount
private

◆ _slowAvgPowerDiscount

float PowerSampling::_slowAvgPowerDiscount
private

◆ _slowAvgPowerMilliWatt

float PowerSampling::_slowAvgPowerMilliWatt = 0.0f
private

◆ _switchHist

CircularBuffer<switch_state_t> PowerSampling::_switchHist
private

◆ _voltageRmsMilliVoltHist

CircularBuffer<int32_t>* PowerSampling::_voltageRmsMilliVoltHist
private

Used to store a history of the filtered current_rms.

◆ _zeroCurrentCount

uint16_t PowerSampling::_zeroCurrentCount
private

Number of times the zero voltage has been calculated.

◆ _zeroVoltageCount

uint16_t PowerSampling::_zeroVoltageCount
private

Whether or not the zero current value should be recalculated.

◆ asInt

uint32_t PowerSampling::asInt

◆ config

adc_channel_config_t PowerSampling::config

◆ current

bool PowerSampling::current

◆ filteredCurrent

bool PowerSampling::filteredCurrent

◆ 

struct { ... } PowerSampling::flags

◆ numFilteredBuffersForProcessing

const uint8_t PowerSampling::numFilteredBuffersForProcessing = 4
staticprivate

◆ numSwitchSamplesBuffers

const uint8_t PowerSampling::numSwitchSamplesBuffers = 6
staticprivate

◆ numUnfilteredBuffers

const uint8_t PowerSampling::numUnfilteredBuffers = 1
staticprivate

◆ pinCount

uint8_t PowerSampling::pinCount = 0

◆ pinIndex

uint8_t PowerSampling::pinIndex = 0

◆ power

bool PowerSampling::power

◆ slowAvgPowerConvergedCount

const uint16_t PowerSampling::slowAvgPowerConvergedCount = 1000
private

◆ switchHistSize

const uint8_t PowerSampling::switchHistSize = 3
staticprivate

◆ voltage

bool PowerSampling::voltage

The documentation for this class was generated from the following file: