2 Channel Power Bridge Module
The 2 Channel Power Bridge Module is a GOcontroll Moduline compatible expansion card designed for high-power actuation.

The module carries two power channels for heavier loads. Each channel is configured on its own and drives its load in the way you choose: as a half bridge, switched to the module supply or to ground, on and off or duty cycle controlled, with a current limit and a current measurement of its own. Every channel is brought out on three connector pins in parallel to carry its current. The module fits every module slot of a Moduline L4, Moduline M1, Moduline S1 or Moduline HMI1. The article number is 202001 followed by two digits for the hardware version. For the electrical specifications see the product page.
On this page
- Channels and configuration
- Connections and pinout
- Programming with the CodeBase
- Programming with Simulink
- Programming with Node-RED
- Module status
- Module firmware
Channels and configuration
You set the function of each channel. The function determines how the channel drives its load, and what the value you send to it means:
- Output channel disabled: the driver of the channel is switched off. This is the default for both channels, so a module that has just been scanned drives nothing.
- Half bridge duty cycle controlled: the channel drives its load through a half bridge. A value from 0 to 1000 sets a duty cycle from 0 to 100%, and that percentage is the part of the period the output is connected to the supply; for the rest of the period it is connected to ground. At 650 the load is on the supply for 65% of the period and on ground for 35%.
- Low side switch duty cycle controlled: the channel switches the load to ground with a duty cycle, on the same scale of 0 to 1000. At 0 the low side is floating, at 1000 the load is connected to ground for the whole period.
- High side switch duty cycle controlled: the channel switches the module supply to the load with a duty cycle, again from 0 to 1000. At 0 the high side is floating, at 1000 the load is connected to the supply for the whole period.
- Low side switch on – off: the channel switches the load to ground. A value of 1 or higher switches it on, 0 switches it off.
- High side switch on – off: the same, switching the load to the module supply.
- Peak and hold current mode: for loads that need a high current to open and a lower current to stay open, an injector for example. Through the half bridge the channel first regulates its current to a peak current for a peak time, and after that to the current you send it as its value. Two extra settings belong to this function: the peak current in mA and the peak time in ms.
- Frequency output: the channel puts out a frequency. Here the value is the frequency itself, from 0 to 500 Hz, and 0 switches the output off.
Both channels have the same eight options, but not every tool reaches all eight. Node-RED offers all of them. The CodeBase and the Simulink blockset offer the first six: peak and hold and frequency output cannot be configured from either of them, and neither can the peak current and the peak time that belong to peak and hold. If your application needs one of those two functions, configure the module from Node-RED.
There is no full bridge among the functions, and that is not an omission: a full bridge is a wiring arrangement rather than a setting. Put both channels on the half bridge function and connect the load between the two channel outputs instead of between one output and ground. Which way the load runs follows from which of the two channels carries the duty cycle while the other one stays at 0.
Every channel also has a current limit of its own, from 0 to 10000 mA, where 0 lets the module use its own maximum of 10000 mA. Two things to keep in mind when you set it: that maximum is the nominal rating of a single channel and not a current two channels can carry at the same time, and the total current of both channels together may never exceed 15 A. The CodeBase does not offer this setting; it always sends a limit of 4000 mA. The product page lists the current ratings.
A channel that is duty cycle controlled or in peak and hold mode switches at a frequency you select: 100 Hz, 200 Hz, 500 Hz, 1 kHz, 2 kHz, 5 kHz or 10 kHz. That choice applies to both channels together, because both are driven by the same timer, and it has no effect on the two on – off functions. Do not confuse it with the frequency output function: there the value you send is the frequency itself and the switching frequency plays no part.
The module protects itself in several ways that your program has to take into account. A channel that draws more than its current limit, or that is short circuited, is switched off and reported in the status value. The module also switches both channels off when its temperature rises too far, when the shift on its own power ground grows too large, or when its supply voltage drops below the minimum, and it takes the channels back into service once temperature and ground shift are within their limits again. And it expects a valid message from the controller at least every 600 ms: if none arrives it switches both outputs off as a fail-safe, so an application loop that stalls or pauses drops the loads.
With every message it answers, the module reports back the current of each channel in mA, its own temperature, the shift on its ground in mV, its supply voltage in mV, and a status value that carries fault flags, listed under Module status. The channel current is signed: a negative value means the current flows into the module rather than out of it. A channel in peak and hold mode also reports the duty cycle it settles on. Not every tool passes all of this on – the three sections below say what each one gives you.
Connections and pinout
The module presents three supply pins, three pins for output channel 1, three for output channel 2, three ground pins and one pin without a function. The three pins of an output channel are connected in parallel inside the module and share the current of that channel, so connect all three of them. The supply and ground pins carry the power that the outputs switch through to your loads. Which connector pin carries which signal depends on the controller and on the slot.
Connect all supply and ground pins before you drive an actuator: without them the module and the processor board can be permanently damaged. Never fuse the ground and never interrupt it – if a safety relay removes the module power, switch the positive supply only. And connectors may never be hot-plugged: remove power before you remove or install a connector.
Give every output module its own fused supply. This module has three supply pins; splice them into a single wire that runs to the fuse. Size the fuse for your application, and never above 15 A: that is the total current both channels of this module may draw together, whatever the two channels are set to individually.
Pinout Moduline L4
Eight module slots on 26-position connectors. Connector A carries slots 1 and 2, connector B slots 3 and 4, connector D slots 5 and 6, and connector E slots 7 and 8. The pin numbers are the same on all four. Slots 1, 3, 5 and 7 use the uneven layout, slots 2, 4, 6 and 8 the even one.


| Signal | Description | Uneven slot | Even slot |
|---|---|---|---|
| SUPPLY 1 | Module supply | 7 | 1 |
| SUPPLY 2 | Module supply | 6 | 2 |
| SUPPLY 3 | Module supply | 5 | 3 |
| OUT1 | Signal out 1 | 13 | 8 |
| OUT1 | Signal out 1 | 12 | 9 |
| OUT1 | Signal out 1 | 11 | 10 |
| OUT2 | Signal out 2 | 19 | 14 |
| OUT2 | Signal out 2 | 18 | 15 |
| OUT2 | Signal out 2 | 17 | 16 |
| GROUND | Module ground | 26 | 20 |
| GROUND | Module ground | 25 | 21 |
| GROUND | Module ground | 24 | 22 |
| NC | No functionality | 4 | 23 |
Pinout Moduline M1
Four module slots on 34-position connectors. Connector A carries slots 1 and 2, connector B slots 3 and 4. The pin numbers are the same on both. Slots 1 and 3 use the uneven layout, slots 2 and 4 the even one.


| Signal | Description | Uneven slot | Even slot |
|---|---|---|---|
| SUPPLY 1 | Module supply | 7 | 1 |
| SUPPLY 2 | Module supply | 6 | 2 |
| SUPPLY 3 | Module supply | 5 | 3 |
| OUT1 | Signal out 1 | 15 | 10 |
| OUT1 | Signal out 1 | 14 | 11 |
| OUT1 | Signal out 1 | 13 | 12 |
| OUT2 | Signal out 2 | 23 | 18 |
| OUT2 | Signal out 2 | 22 | 19 |
| OUT2 | Signal out 2 | 21 | 20 |
| GROUND | Module ground | 32 | 26 |
| GROUND | Module ground | 31 | 27 |
| GROUND | Module ground | 30 | 28 |
| NC | No functionality | 4 | 29 |
Pinout Moduline S1
Two module slots on a single 34-position connector.


| Signal | Description | Slot 1 | Slot 2 |
|---|---|---|---|
| SUPPLY 1 | Module supply | 7 | 1 |
| SUPPLY 2 | Module supply | 6 | 2 |
| SUPPLY 3 | Module supply | 5 | 3 |
| OUT1 | Signal out 1 | 15 | 10 |
| OUT1 | Signal out 1 | 14 | 11 |
| OUT1 | Signal out 1 | 13 | 12 |
| OUT2 | Signal out 2 | 23 | 18 |
| OUT2 | Signal out 2 | 22 | 19 |
| OUT2 | Signal out 2 | 21 | 20 |
| GROUND | Module ground | 32 | 26 |
| GROUND | Module ground | 31 | 27 |
| GROUND | Module ground | 30 | 28 |
| NC | No functionality | 4 | 29 |
Pinout Moduline HMI1
Two module slots on a single 34-position connector.


| Signal | Description | Slot 1 | Slot 2 |
|---|---|---|---|
| SUPPLY 1 | Module supply | 7 | 1 |
| SUPPLY 2 | Module supply | 6 | 2 |
| SUPPLY 3 | Module supply | 5 | 3 |
| OUT1 | Signal out 1 | 15 | 10 |
| OUT1 | Signal out 1 | 14 | 11 |
| OUT1 | Signal out 1 | 13 | 12 |
| OUT2 | Signal out 2 | 23 | 18 |
| OUT2 | Signal out 2 | 22 | 19 |
| OUT2 | Signal out 2 | 21 | 20 |
| GROUND | Module ground | 32 | 26 |
| GROUND | Module ground | 31 | 27 |
| GROUND | Module ground | 30 | 28 |
| NC | No functionality | 4 | 29 |
Note: only one application may claim the modules. If a second program initialises the same module – most often a compiled Simulink model next to a Node-RED flow – it causes strange behaviour. Use the CodeBase, Simulink or Node-RED, not two of them at the same time.
Programming with the CodeBase
The GOcontroll CodeBase is the C library for writing your own program. The module is handled through GO_module_bridge.h and one _bridgeModule instance. Configure it before you drive it, and initialise the communication before you assign the slot:
static _bridgeModule bridgeModule;
GO_board_get_hardware_version();
GO_communication_modules_initialize(MODULESLOT1);
GO_module_bridge_set_module_slot(&bridgeModule, MODULESLOT1);
GO_module_bridge_configure_channel(&bridgeModule, BRIDGECHANNEL1,
BRIDGEFUNC_HALFBRIDGE,
BRIDGEFREQ_200HZ);
GO_module_bridge_configure_channel(&bridgeModule, BRIDGECHANNEL2,
BRIDGEFUNC_HIGHSIDEBOOL,
BRIDGEFREQ_200HZ);
GO_module_bridge_configuration(&bridgeModule);
Both calls have to happen before GO_module_bridge_configuration(), which is the single call that ships the configuration to the module. Each of them takes a frequency, but the module runs both channels from one timer: give both calls the same frequency, because the one configured last is the frequency both channels end up switching at.
The functions you can pass are BRIDGEFUNC_DISABLED, BRIDGEFUNC_HALFBRIDGE, BRIDGEFUNC_LOWSIDEDUTY, BRIDGEFUNC_HIGHSIDEDUTY, BRIDGEFUNC_LOWSIDEBOOL and BRIDGEFUNC_HIGHSIDEBOOL. Peak and hold and frequency output are not among them: the call rejects anything beyond this list. The call has no parameter for the current limit either, and the library always sends a limit of 4000 mA per channel.
Be aware that GO_communication_modules_initialize() must be called before GO_module_bridge_set_module_slot(). The initialize call fills the module occupancy data that set_module_slot uses to verify the module is really present. In the other order you get a contested slot error at runtime.
Driving the module is one call in your application loop, which also brings the feedback back:
bridgeModule.value[BRIDGECHANNEL1] = 500;
bridgeModule.value[BRIDGECHANNEL2] = 1;
GO_module_bridge_send_values(&bridgeModule);
/* bridgeModule.current[], .temperature and .ground now hold
what the module sent back */
Keep that call between 10 ms and 400 ms apart: faster than 10 ms overdrives the module, and once 600 ms pass without a message the communication watchdog of the module switches both outputs off. The 400 ms ceiling keeps a margin against that threshold; ten milliseconds is the usual loop time. The status value is not part of the structure, so it cannot be read through the CodeBase. The complete example is in examples/bridge_module/ of the CodeBase; it also shows a shutdown callback that switches both channels off before the program exits.
Programming with Simulink
The GOcontroll blockset for MATLAB Simulink holds the block Bridge Module, in the Output Module group under Modules in the library browser. See using the blockset and create model to get started.
The block has two int32 inputs, one per channel, and no outputs. The input labels show the three connector pins that belong to the controller type and slot you selected, so you can trace a channel from the model back to the wiring.
Its mask holds the sample time, the controller type and the module slot, and per channel a function and a frequency. It offers the first six functions; peak and hold and frequency output cannot be selected here. The mask carries a frequency per channel while the module has one timer for both, so set the two to the same value.
The feedback from the module has its own block, Bridge Module Monitor, with four outputs: the module temperature, the ground shift in mV, and the current of each of the two channels in mA. The ground shift should stay below 50 mV. The status value is not among the outputs of this block.
Programming with Node-RED
The GOcontroll nodes are installed on the controller by default. The node for this module is Bridge Mod, in the GOcontroll section of the palette. See first flow for building a flow.
Note: the Moduline S1 does not run Node-RED.
The node needs module firmware 2.0.0 or newer. On an older module it turns its status red and writes a warning to the debug panel instead of driving the outputs.
In the node you set the module slot, the sample time (200 ms, 100 ms or 50 ms), one frequency for both channels, and per channel its function and its current limit in mA. A channel set to peak and hold gets two more fields, for the peak current and the peak time. Each channel also gets a key: the name you use to address it, and the name its feedback carries. Use a descriptive name, it makes the rest of the flow readable.
You drive the outputs by sending a message into the node that carries those keys. The default names are outputSignal1 and outputSignal2:
{"outputSignal1": 500}
You may combine both channels in one message, and a channel you leave out keeps the value it already had. Values run from 0 to 1000; anything outside that range is ignored.
Every sample period the node sends out a message with the feedback from the module:
{"moduleTemperature": 28,
"moduleGroundShift": 0,
"moduleStatus": 0,
"moduleSupply": 13800,
"outputSignal1Current": 1000,
"outputSignal2Current": 500}
The current keys are built from the key of the channel, so they follow the names you gave. A channel in peak and hold mode adds a key with the duty cycle it runs.
The Object I/O (legacy shape) checkbox determines where those keys end up. Enabled, they sit directly on the message. Disabled, they sit in msg.payload, which is the Node-RED convention. The same choice applies to the messages you send into the node.
The node shows the article number and the firmware version of the module as its status. If the slot holds a different module type, the status turns red and reports that the selected module does not match the module present in this slot.
Module status
The status value the module returns is a 32 bit field in which every bit that is set stands for one fault. A bit that is not in the table below is reserved. Node-RED passes this value on as moduleStatus; the CodeBase and the Simulink blockset do not expose it.
| Bit | Fault |
|---|---|
| 0 | Overcurrent on channel 1 |
| 1 | Short circuit on channel 1 |
| 4 | Overcurrent on channel 2 |
| 5 | Short circuit on channel 2 |
| 24 | Ground shift above the limit |
| 25 | Module temperature above the limit |
| 26 | Total module current above the limit |
| 27 | Module communication timeout |
| 29 | Module supply voltage below the minimum |
Module firmware
The module runs its own firmware, which drives the output stages according to the configuration your application sends and reports the module measurements back. Use go-modules to check the installed version and to update it, and identify to list the modules the controller detects.
Also see
- 6 Channel Output Module – six channels with the same eight functions, at a lower current per channel
- 10 Channel Output Module – ten channels, high side switching only, without a current limit or a current measurement per channel
- Important notice – the sample time to use with output based modules
- Hot plugging – why connectors are never connected or disconnected under power
- go-modules – reading out and updating module firmware
- 2 Channel Power Bridge Module product page – specifications and ordering
