PWMOperator Class
(Automation::PWMOperator)The PWMOperator encodes input value into a pulse width modulated bool output value. More...
Header: | #include <PWMOperator.h> |
Inherits: | CDPOperator<double> |
Public Functions
PWMOperator(const CDPPropertyBase &in) |
Reimplemented Public Functions
- 18 public functions inherited from CDPOperator
- 17 public functions inherited from CDPOperatorBase
- 46 public functions inherited from CDPBaseObject
- 26 public functions inherited from CDP::StudioAPI::CDPNode
- 22 public functions inherited from CDP::StudioAPI::ICDPNode
Additional Inherited Members
- 1 public variable inherited from CDPOperatorBase
- 1 static public member inherited from CDPBaseObject
- 1 protected function inherited from CDP::StudioAPI::CDPNode
- 8 protected variables inherited from CDPOperator
- 5 protected variables inherited from CDPOperatorBase
- 11 protected variables inherited from CDPBaseObject
Detailed Description
The PWMOperator encodes input value into a pulse width modulated bool output value.
Pulse-width modulation (PWM) is a modulation technique used to encode a message into a pulsing value. Its main use is to allow the control of the power supplied to electrical devices, such as motors.
If input <= MinInput
then the output bool value is false
. If input >= MaxInput
then the output bool value is true
. For input value X between MinInput
and MaxInput
, output is a pulsing value that is true
X percent of time.
Arguments
Name | Description |
---|---|
Out | The default output representing the Pulse-width modulation of input value. |
In | The default input. Duty cycle. Should be between MinInput and MaxInput. |
MinInput | Minimum input value which means output signal is always false . |
MaxInput | Maximum input value which means output signal is always true . |
Resolution | Maximum number of pulses that can be packed into a PWM period. For example, if Resolution is 5 then input value step is 20 (100 divided by 5). Increasing input by less than 20 makes no difference to output. |
Note: When using PWMOperator, it is recommended to set your component fs
Property to at least 1000 Hz (or use a lower Resolution). Otherwise pulsing output might be too slow for smooth operation of a motor.
When operator is used inside a signal its default input is automatically tied to signal's InternalValue or previous operator's output. Its default output is automatically tied to next operator's input or to signal's Value. See also CDP Operator Usage In CDP Signals.
Actual Processing Code of the PWMOperator
unsigned int PWMOperator::Process() { if (!m_minInput || !m_maxInput || !m_pwmResolution) return STATUS_ERROR; double input = m_input.GetVariantValue().GetConvertedValue<double>(); input = std::max<double>(input, (double)*m_minInput); input = std::min<double>(input, (double)*m_maxInput); double dutyCycle = (*m_maxInput - static_cast<double>(*m_minInput))?(input - *m_minInput) / (*m_maxInput - static_cast<double>(*m_minInput)) : 0.0; ++m_counter; if (m_counter == *m_pwmResolution) m_counter = 0; if (m_counter < dutyCycle * *m_pwmResolution) m_output = 1; else m_output = 0; return STATUS_OK; }
See also Argument.
Member Function Documentation
PWMOperator::PWMOperator(const CDPPropertyBase &in)
Constructs a PWMOperator.
[override virtual]
void PWMOperator::Configure(XMLPrimitive *operatorXML)
Reimplemented from CDPBaseObject::Configure().
[override virtual]
unsigned int PWMOperator::Process()
Get started with CDP Studio today
Let us help you take your great ideas and turn them into the products your customer will love.