{"id":46163,"date":"2026-07-07T14:15:02","date_gmt":"2026-07-07T14:15:02","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=46163"},"modified":"2026-07-07T14:16:19","modified_gmt":"2026-07-07T14:16:19","slug":"operating-principles-of-imperix-controllers","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers","title":{"rendered":"Operating principles of imperix controllers"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 ez-toc-wrap-right-text counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\/#Overview-of-imperix-controllers\" >Overview of imperix controllers<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\/#Real-time-control-execution\" >Real-time control execution<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\/#Timers-and-interrupt-generation\" >Timers and interrupt generation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\/#Sampling-configuration\" >Sampling configuration<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\/#PWM-configuration\" >PWM configuration<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\/#Core-operating-states\" >Core operating states<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\/#To-go-further\" >To go further<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">While highly intuitive to use, imperix controllers in fact rely on an internal architecture and operation that sometimes differs significantly from traditional DSPs, MCUs, and general-purpose HIL\/RCP systems. Because these unique characteristics are exactly what set imperix apart, understanding them is often essential to fully leveraging their capabilities. To that end, this article explores the main particularities of our controllers and presents their fundamental operating principles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Overview-of-imperix-controllers\"><\/span>Overview of imperix controllers<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1702\" height=\"1104\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/architecture_overview_ix.png\" alt=\"Architectural overview of imperix controllers\" class=\"wp-image-46164\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/architecture_overview_ix.png 1702w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/architecture_overview_ix-300x195.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/architecture_overview_ix-1024x664.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/architecture_overview_ix-768x498.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/architecture_overview_ix-1536x996.png 1536w\" sizes=\"auto, (max-width: 1702px) 100vw, 1702px\" \/><figcaption class=\"wp-element-caption\">Architectural overview of imperix controllers<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Architecture overview<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Imperix controllers are based on AMD System on Chip (SoC) devices. This allows for an effective separation of the digital signal processing tasks among two different types of resources:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>processing system (PS)<\/strong> leverages fast CPU cores for running floating-point arithmetic operations rapidly. Imperix controllers being multi-core systems, one core is dedicated to the user-defined control code while other cores handle the system monitoring and data logging.<\/li>\n\n\n\n<li>The <strong>programmable logic (PL)<\/strong> area is used to implement specialized functions at the hardware level (FPGA), with absolute determinism and a very high temporal resolution. This notably concerns pulse-width modulators (PWM), I\/O peripheral drivers, etc.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks to the CPUs and FPGA sharing the same die, an extremely low data transfer latency between them is achieved. This more than compensates for the lower CPU clock speed when compared to x86 architectures (or similar).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">More information on the architecture and its benefits is given in <a href=\"https:\/\/imperix.com\/doc\/help\/architecture-of-imperix-controllers\">PN253<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CPU programming (PS side)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On the PS side, only one core is user-programmable, referred to as the <em>user application CPU<\/em>. In parallel, other cores host a Linux-based supervisor that comes as a pre-defined embedded environment. For programming the <em>user application CPU<\/em>, two approaches are possible:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Model-based graphical programming:<\/strong> typically, the control algorithms are developed in Simulink or PLECS, and then automatically translated into executable user code. This approach is supported by the <a href=\"https:\/\/imperix.com\/software\/acg-sdk\/\">ACG SDK<\/a>.<\/li>\n\n\n\n<li><strong>Programming in C\/C++ code:<\/strong> alternatively, the controllers can be programmed \u201cmanually\u201d using the C\/C++ Software Development Kit (<a href=\"https:\/\/imperix.com\/software\/cpp-sdk\/\">CPP SDK<\/a>).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Instructions for getting started with the software development environments are given in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk?currentThread=active-front-end-afe\">(PN134) Getting started with the ACG SDK<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-cpp-sdk?currentThread=cpp-sdk\">(PN148) Getting started with the CPP SDK<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">FPGA programming (PL side)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The PL side is also user-programmable, with most of the logic resources available for that.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This opens a door granting maximum flexibility or performance to advanced users. Programming the FPGA is however only rarely truly required as imperix controllers already present exceptional closed-loop control performance from the CPU.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For those interested in leveraging these resources, the minimum required imperix firmware is available as a pre-packaged IP block, which only requires to be instantiated in any custom-created bitfile. Getting-started information for programming the FPGA is given in <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-fpga-control-development\">PN159<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Program upload and real-time monitoring<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Regardless of the development environment, the compilation generates an executable (<code>.elf<\/code>) corresponding to the user code (for the <em>user application CPU<\/em>). This executable is ultimately uploaded onto the controller via <a href=\"https:\/\/imperix.com\/software\/cockpit\/\">Cockpit<\/a> (over Ethernet), and is generally launched immediately afterward.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A custom bitfile (<code>.bit<\/code>) implementing customized FPGA logic (PL side) can also be uploaded onto the controller. This file is then written on the SD card and loaded at the next startup.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the <em>supervisor CPU(s)<\/em>, the corresponding Linux resources reside permanently on the SD card and are automatically loaded at startup. This is part of the on-device firmware, which can be updated through the regular releases of the imperix SDKs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers?currentThread=b-board-pro\">PN138<\/a> provides guidance on how to program imperix controllers and monitor them during run time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Real-time-control-execution\"><\/span>Real-time control execution<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Base system startup and hardware initialization<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once powered up, imperix controllers execute the following sequence of tasks:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>The supervisor CPU (Linux) is started first. It identifies the supporting hardware, loads the initial FPGA configuration, runs network discovery (RealSync, see <a href=\"https:\/\/imperix.com\/doc\/help\/multi-controller-operation\">PN264<\/a>), and enables Ethernet communication. If the user has stored a custom bitstream, the corresponding FPGA configuration is loaded instead of the default one. During this time, a \u201cbooting in progress\u201d status is displayed on the LCD screen (B-Box 3 and 4).<\/li>\n\n\n\n<li>Once the boot process is finished, the controller is technically ready to use. However, a user code is often not yet present, as it is only loaded afterward using Cockpit. At this point, a \u201ccode stopped, PWM disabled\u201d message is displayed on the LCD screen.<\/li>\n\n\n\n<li>Alternatively to 2., if the user has configured the controller to automatically start a user code at boot time (see Cockpit\u2019s <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide\">user guide<\/a>), then this code is immediately launched (see next section).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">During that time, all physical PWM lanes (optical and electrical) are forcedly maintained low by the safety FPGA (or external hardware logic in gen. 3 devices). This way, imperix controllers guarantee that no dangerous 1:1 state can occur during startup, shutdown, or reprogramming processes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">User code launch<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The initialization phase should be clearly distinguished from the running phase. During initialization, the following actions take place:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Since a user code is desired to be launched, the controller self-identifies as a master device. This is trivial in a setup with only one controller, but has multiple consequences in master-slave or multi-master configurations (see <a href=\"https:\/\/imperix.com\/doc\/help\/multi-controller-operation\">PN264<\/a>).<\/li>\n\n\n\n<li>Before the user code is truly launched, a cryptographic process is executed to check that a valid license is present (see imperix <a href=\"https:\/\/imperix.com\/doc\/help\/software-licensing\">licensing policy<\/a>).<\/li>\n\n\n\n<li>The clock- and timer-dependent configurations are set, including the base configuration for the CLK and ADC peripherals, as well as for the main CPU interrupt.<\/li>\n\n\n\n<li>The user-specific configuration is set, notably containing a variable number of ADC and PWM resources. This is when the validity of the user configuration is checked (existence of the desired hardware resource, potential addressing conflicts, out-of-range settings, etc.). If problems arise, warnings and errors are thrown and made visible through Cockpit\u2019s log messages.<\/li>\n\n\n\n<li>High-level, user-specific initialization actions are taken. When working in C\/C++, this is when the <code>UserInit()<\/code> method is called. When working with Simulink\/PLECS, this is when <code>SimulinkInitialize()<\/code> is called.<\/li>\n\n\n\n<li>Finally, the CPU interrupt and watchdog are enabled. At this point, a \u201ccode running, PWM disabled\u201d message is displayed on the LCD screen.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">From this point onward, the user code is considered to be running safely. Thanks to that, the safety FPGA authorizes the <em>user app CPU<\/em> to enable the PWM outputs when this is desired (manually in Cockpit or using a function call inside the code).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Interrupt-based operation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The user code uses a hardware interrupt to schedule the execution of the control algorithms and manage the associated read\/write accesses from\/to FPGA-based peripherals. This is a <strong>hard real-time task<\/strong>, because no overrun is allowed (a protection trip occurs otherwise, see below).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inside imperix controllers, the user app CPU interrupt is also rigorously timed following a <strong>strictly unbuffered pipeline,<\/strong> meaning that there is <strong>no cycle delay<\/strong> between the sampling and the processing, nor between the processing and the PWM update.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Overall, the processing of the main interrupt follows a 4-step sequence:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#dedf92\" class=\"has-inline-color\">Acquisition<\/mark><\/strong>: ADC data are retrieved and processed (filtered, down-sampled, etc. ) inside the FPGA.<\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#d08d87\" class=\"has-inline-color\">Read<\/mark><\/strong>: once the acquisition finishes, these data are transferred from the FPGA to the shared memory, along with data from other input peripherals (GPI, DEC, etc.).<\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#5468ab\" class=\"has-inline-color\">CPU control task<\/mark><\/strong>: the<em> user app CPU<\/em> reads the input data from the shared memory, executes the user-defined control algorithm and writes the output data back inside the shared memory. When working in C\/C++, this is when the <code>UserInterrupt()<\/code> method is called. When working with Simulink\/PLECS, this is when <code>SimulinkStep()<\/code> is called.<\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#97422d\" class=\"has-inline-color\">Write<\/mark><\/strong>: at the end of the CPU task, the newly-calculated parameters are transferred back from the shared memory to the FPGA peripherals (PWM, GPO, etc.).<\/li>\n\n\n\n<li>Simultaneously with the <strong><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#b10000\" class=\"has-inline-color\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#97422d\" class=\"has-inline-color\">Write<\/mark><\/strong><\/mark><\/strong><\/strong> phase, the CPU also writes a second data set to the shared memory, refreshing the variables the user wishes to monitor (<a href=\"https:\/\/imperix.com\/doc\/software\/probe-variable\">probes<\/a> and <a href=\"https:\/\/imperix.com\/doc\/software\/tunable-parameter\">tunable parameters<\/a>).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">PWM parameters (e.g., duty cycle and phase) are always transferred immediately after the CPU task. However, they are latched at configurable instants <strong>related to the PWM operation <\/strong>rather than the end of the write sequence. In fact, although these instants are generally synchronized with the control execution, this is not always the case (e.g. variable-frequency operation).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The illustration below shows how these steps take place in a single controller configuration. In a master-slave configuration (see <a href=\"https:\/\/imperix.com\/doc\/help\/multi-controller-operation\">PN264<\/a>), the acquisition is triggered simultaneously and runs in parallel on all devices. Only the durations of the read and write phases are slightly extended due to the higher amounts of data exchanged.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1708\" height=\"578\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/dataflow_inside_ix.png\" alt=\"Unbuffered data processing pipeline inside imperix controllers\" class=\"wp-image-46165\" style=\"aspect-ratio:2.9551748415864822;width:619px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/dataflow_inside_ix.png 1708w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/dataflow_inside_ix-300x102.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/dataflow_inside_ix-1024x347.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/dataflow_inside_ix-768x260.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/dataflow_inside_ix-1536x520.png 1536w\" sizes=\"auto, (max-width: 1708px) 100vw, 1708px\" \/><figcaption class=\"wp-element-caption\">Unbuffered data processing pipeline inside imperix controllers<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The above-described process defines two different and equally important timing sets:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">The total control cycle delay<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This represents the total time elapsed from the analog sampling instant to that of the PWM parameters update in the FPGA. It is made of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADC acquisition delay:<\/strong> It represents the time required to physically sample and process the analog data. This can be as low as 200 ns inside the B-Box 4.<\/li>\n\n\n\n<li><strong>CPU control task execution<\/strong>: This is the effective computation time required by the implemented control algorithms.<\/li>\n\n\n\n<li><strong>Read and write delays:<\/strong> These represent the CPU \u2194 FPGA data transfer times. These are generally negligible, except in large multi-device configurations.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\">The total CPU load<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This represents the total workload for the <em>user app CPU<\/em>. It is independent of the I\/O data transfers, but encompasses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CPU control task execution<\/strong>: This is the effective computation time required by the implemented control algorithms.<\/li>\n\n\n\n<li><strong>CPU data monitoring:<\/strong> This represents the time required for the user app CPU to write the monitored data to the shared memory (oversampled data are excluded from this).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The total CPU load is what generally constrains the maximum execution rate for a given code. This cannot exceed 100% (a real-time violation occurs otherwise, see below).<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8c708065 wp-block-columns-is-layout-flex\" style=\"margin-top:-20px;margin-bottom:-20px\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1178\" height=\"321\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cycledelay.png\" alt=\"CPU cycle vs. total PWM period\" class=\"wp-image-46166\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cycledelay.png 1178w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cycledelay-300x82.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cycledelay-1024x279.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cycledelay-768x209.png 768w\" sizes=\"auto, (max-width: 1178px) 100vw, 1178px\" \/><figcaption class=\"wp-element-caption\">CPU cycle vs. total PWM period<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1178\" height=\"359\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cpuload.png\" alt=\"CPU load vs. available CPU time\" class=\"wp-image-46167\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cpuload.png 1178w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cpuload-300x91.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cpuload-1024x312.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cpuload-768x234.png 768w\" sizes=\"auto, (max-width: 1178px) 100vw, 1178px\" \/><figcaption class=\"wp-element-caption\">CPU load vs. available CPU time<\/figcaption><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Cockpit provides a clear representation of these performance metrics within the <em>Timings info<\/em> tab. More information on the control-related consequences of the total cycle delay is given in <a href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay?currentThread=b-board-pro\">PN142<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1013\" height=\"599\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/timing_info_bb4.png\" alt=\"Timing information tab (example from B-Box 4)\" class=\"wp-image-46168\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/timing_info_bb4.png 1013w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/timing_info_bb4-300x177.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/timing_info_bb4-768x454.png 768w\" sizes=\"auto, (max-width: 1013px) 100vw, 1013px\" \/><figcaption class=\"wp-element-caption\">Timing information tab (example from B-Box 4)<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Background operations<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When not serving the main interrupt, the <em>user app CPU<\/em> has essentially nothing <em>time-critical<\/em> to do. It then executes background functions, including the following tasks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Exchanging non-deterministic data with the supervisor, such as communication data carried using Ethernet, CAN, Modbus, etc.<\/li>\n\n\n\n<li>Refreshing OPC-UA variables and transmitting log messages.<\/li>\n\n\n\n<li>Servicing the CPU watchdog.<\/li>\n\n\n\n<li>Executing user-defined actions in <code>UserBackground()<\/code> (C\/C++ only).<\/li>\n\n\n\n<li>Executing non-critical control tasks defined through software interrupts. For example, an&nbsp;<a href=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt-techniques\"><u>MPPT algorithm<\/u><\/a> can be executed at a slower rate than the main CPU (see <a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-with-acg-sdk-on-simulink?currentThread=going-further-with-acg-sdk\"><u>PN145<\/u><\/a> and <a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-on-plecs-acg-sdk?currentThread=going-further-with-acg-sdk\"><u>PN155<\/u><\/a>).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Within the background, the hard real-time execution of the code cannot be guaranteed, especially at high CPU loads. Because of that, the <code>UserBackground()<\/code> and software interrupts should only be used for tasks that are significantly slower than the main interrupt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Timers-and-interrupt-generation\"><\/span>Timers and interrupt generation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most microcontrollers fundamentally base their timings on the pulse-width modulators (PWM). Typically, an interrupt for the ADC sampling is generated in the middle of the PWM period, whereas the CPU interrupt is generated by an end-of-conversion flag after the ADC conversion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While intuitive, this approach is however incompatible with distributed control and modulation because undesirable latencies are then inevitable. Instead, imperix controllers base their timings on independent clocks and use pre-determined relative phase-shifts for each FPGA-based peripheral. Thanks to imperix\u2019s RealSync technology, these clocks are natively distributed across the control network, which permits timing all events precisely, transparently and synchronously.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, four precisely-synchronized time bases are available, implemented through CLK0-CLK3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CLK0 is special as it is used for all the sampling- and processing-related events. Its frequency must however be constant (regular sampling).<\/li>\n\n\n\n<li>CLK1-CLK3 are additional clocks that can be used for PWM operation. These can be of variable frequency.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1560\" height=\"830\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/clock_architecture.png\" alt=\"Timers and interrupt generation\" class=\"wp-image-46177\" style=\"aspect-ratio:1.8795760719483525;width:475px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/clock_architecture.png 1560w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/clock_architecture-300x160.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/clock_architecture-1024x545.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/clock_architecture-768x409.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/clock_architecture-1536x817.png 1536w\" sizes=\"auto, (max-width: 1560px) 100vw, 1560px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">This approach yields perfectly equivalent capabilities while strongly minimizing latencies. Furthermore, synchronous oversampling and synchronous averaging techniques can be easily implemented. As a result, imperix controllers support all the standard sampling configurations, plus some other attractive and more advanced options, which are described in the following sections.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">More information on the timing architecture of imperix controllers is given in <a href=\"https:\/\/imperix.com\/doc\/help\/timing-configuration-on-imperix-controllers\">PN259<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">More information on clock dissemination over a RealSync network is given in <a href=\"https:\/\/imperix.com\/doc\/help\/multi-controller-operation\">PN264<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Sampling-configuration\"><\/span>Sampling configuration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In power electronics, sampling is commonly arranged synchronously to the modulation with a finely-controlled relative phase. This way, aliasing can be advantageously leveraged to extract information about the sliding-average value of a measured quantity without prior low-pass filtering (and its associated group delay).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In contrast to general-purpose RCP systems, this approach is natively supported by all imperix controllers. The corresponding single- and double-update rate configurations are illustrated below and further documented in <a href=\"https:\/\/imperix.com\/doc\/help\/timing-configuration-on-imperix-controllers\">PN259<\/a>.<\/p>\n\n\n<style>.wp-block-kadence-advancedgallery.kb-gallery-wrap-id-46163_2277e0-65{margin-right:var(--global-kb-spacing-md, 2rem);margin-left:var(--global-kb-spacing-md, 2rem);}.kb-gallery-id-46163_2277e0-65 .kadence-blocks-gallery-item .kb-gal-image-radius, .kb-gallery-id-46163_2277e0-65 .kb-slide-item .kb-gal-image-radius img{border-radius:0px 0px 0px 0px;;}.kb-gallery-id-46163_2277e0-65 .kadence-blocks-gallery-item .kadence-blocks-gallery-item-inner .kadence-blocks-gallery-item__caption{font-size:16px;line-height:5px;color:var(--global-palette3, #1A202C);}.kb-gallery-caption-style-bottom.kb-gallery-id-46163_2277e0-65 .kadence-blocks-gallery-item .kadence-blocks-gallery-item-inner .kadence-blocks-gallery-item__caption, .kb-gallery-caption-style-bottom-hover.kb-gallery-id-46163_2277e0-65 .kadence-blocks-gallery-item .kadence-blocks-gallery-item-inner .kadence-blocks-gallery-item__caption{background:linear-gradient(0deg, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 100%);}.kb-gallery-wrap-id-46163_2277e0-65.wp-block-kadence-advancedgallery{overflow:visible;}.kb-gallery-wrap-id-46163_2277e0-65.wp-block-kadence-advancedgallery .kt-blocks-carousel{overflow:visible;}.kb-gallery-id-46163_2277e0-65 .splide.kt-carousel-dotstyle-outlinedark .splide__pagination__page{background-color:transparent;box-shadow:inset 0 0 0 1px #000;-webkit-transition:box-shadow 0.3s ease;-moz-transition:box-shadow 0.3s ease;transition:box-shadow 0.3s ease;}.kb-gallery-id-46163_2277e0-65 .splide.kt-carousel-dotstyle-outlinedark .splide__pagination__page.is-active{background-color:transparent;box-shadow:inset 0 0 0 8px #000;}<\/style><div class=\"kb-gallery-wrap-id-46163_2277e0-65 alignnone wp-block-kadence-advancedgallery\"><div class=\"kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-46163_2277e0-65 kb-gallery-caption-style-bottom kb-gallery-filter-none\" data-image-filter=\"none\" data-lightbox-caption=\"true\"><div class=\"kt-blocks-carousel splide kt-carousel-container-dotstyle-outlinedark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-outlinedark kb-slider-group-arrow kb-slider-arrow-position-center\" data-slider-anim-speed=\"400\" data-slider-scroll=\"1\" data-slider-arrows=\"true\" data-slider-fade=\"true\" data-slider-dots=\"true\" data-slider-type=\"slider\" data-slider-hover-pause=\"false\" data-slider-auto=\"\" data-slider-speed=\"7000\" data-show-pause-button=\"false\"><div class=\"splide__track\"><ul class=\"kt-blocks-carousel-init kb-blocks-slider splide__list\"><li class=\"kb-slide-item kb-gallery-slide-item splide__slide\"><div class=\"kadence-blocks-gallery-item\"><div class=\"kadence-blocks-gallery-item-inner\"><figure class=\"kb-gallery-figure kadence-blocks-gallery-item-has-caption\"><div class=\"kb-gal-image-radius\"><div class=\"kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit\" ><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/singlerate.png\" width=\"1178\" height=\"692\" alt=\"Synchronous sampling with single update rate\" data-full-image=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/singlerate.png\" data-light-image=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/singlerate.png\" data-id=\"46169\" class=\"wp-image-46169 skip-lazy\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/singlerate.png 1178w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/singlerate-300x176.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/singlerate-1024x602.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/singlerate-768x451.png 768w\" sizes=\"auto, (max-width: 1178px) 100vw, 1178px\" \/><\/div><div class=\"kadence-blocks-gallery-item__caption\">Synchronous sampling with single update rate<\/div><\/div><\/figure><\/div><\/div><\/li><li class=\"kb-slide-item kb-gallery-slide-item splide__slide\"><div class=\"kadence-blocks-gallery-item\"><div class=\"kadence-blocks-gallery-item-inner\"><figure class=\"kb-gallery-figure kadence-blocks-gallery-item-has-caption\"><div class=\"kb-gal-image-radius\"><div class=\"kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit\" ><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/doublerate.png\" width=\"1178\" height=\"692\" alt=\"Synchronous sampling with double update rate\" data-full-image=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/doublerate.png\" data-light-image=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/doublerate.png\" data-id=\"46170\" class=\"wp-image-46170 skip-lazy\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/doublerate.png 1178w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/doublerate-300x176.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/doublerate-1024x602.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/doublerate-768x451.png 768w\" sizes=\"auto, (max-width: 1178px) 100vw, 1178px\" \/><\/div><div class=\"kadence-blocks-gallery-item__caption\">Synchronous sampling with double update rate<\/div><\/div><\/figure><\/div><\/div><\/li><\/ul><\/div><\/div><\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">Apart from these two basic configurations, B-Box controllers also support two other options:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Anti-alias filtering prior to ADC sampling (with configurable low-pass filters).<\/li>\n\n\n\n<li>Synchronous averaging.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These two techniques are further described in <a href=\"https:\/\/imperix.com\/doc\/help\/sampling-techniques-for-power-electronics\">PN258<\/a>. Notably, synchronous averaging proves extremely valuable in rejecting all sorts of perturbations when synchronous sampling fails to deliver an accurate estimate of the average value. (In other words, in all cases where the sampled signal is anything else than a perfectly triangular waveform. More details on that are also given in <a href=\"https:\/\/imperix.com\/doc\/help\/sampling-techniques-for-power-electronics\">PN258<\/a>.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"PWM-configuration\"><\/span>PWM configuration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On the modulation side, imperix controllers offer six different types of pre-implemented and fully pre-validated pulse-width modulators. The related documentation is available in <a href=\"https:\/\/imperix.com\/doc\/software\/pulse-width-modulator\">SD009<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the hardware level, these modulators share the following key features:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Output mode: <\/strong>PWM outputs can be configured as individual <em>lanes <\/em>(one bit) or a full <em>channel <\/em>(two bits) with a configurable dead time. When operated as a <em>channel<\/em>, outputs are guaranteed to never produce the dangerous \u201c1:1\u201d state <em>by design<\/em>, because this state is made physically impossible to generate from within the FPGA logic.<\/li>\n\n\n\n<li><strong>Protection &amp; global enable<\/strong>: PWM outputs are globally controlled by the core state and are immediately shut down in case of fault (see \u201csoftware-independent protections\u201d below).<\/li>\n\n\n\n<li><strong>Channel-wise activation<\/strong>: Independent activation is possible per channel using the <em>activate <\/em>pin. This permit to selectively energize only one part of the application (e.g., one inverter from a complete back-to-back configuration) once the <em>PWM enable<\/em> action is triggered.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"2253\" height=\"1095\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/enable-disable.png\" alt=\"PWM generation process including the activate\/deactivate and enable\/disable functions\" class=\"wp-image-46171\" style=\"aspect-ratio:2.057600392172883;width:717px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/enable-disable.png 2253w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/enable-disable-300x146.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/enable-disable-1024x498.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/enable-disable-768x373.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/enable-disable-1536x747.png 1536w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/enable-disable-2048x995.png 2048w\" sizes=\"auto, (max-width: 2253px) 100vw, 2253px\" \/><figcaption class=\"wp-element-caption\">PWM generation process including the activate\/deactivate and enable\/disable functions<\/figcaption><\/figure>\n<\/div>\n\n\n<h5 class=\"wp-block-heading\">Hardware and analog front-end configuration<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">The B-Boxes 3 and 4 possess a high-performance (high bandwidth, high CMRR, high precision) analog front-end that is also fully configurable. This grants users high flexibility to adapt to a broad range of sensors while guaranteeing excellent signal integrity in difficult EMI environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Additionally, all controllers -except the B-Board PRO- possess hardware protections that operate by instantly blocking the PWM outputs in case of an over-value (see below). A key feature of imperix controllers is that these protections operate fully independently from the user code and FPGA logic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Due to the independent nature of this analog front-end, its configuration belongs to the hardware rather than the user code, and is carried along with it. On B-Box units, the corresponding parameters can also be set directly from the front panel (screen and button). For other devices, the available approaches are summarized below:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th class=\"has-text-align-left\" data-align=\"left\">F.-E. configuration<\/th><th class=\"has-text-align-left\" data-align=\"left\">Config. save\/restore<\/th><th class=\"has-text-align-left\" data-align=\"left\"><strong>Documentation<\/strong><\/th><\/tr><\/thead><tbody><tr><td>B-Box 4<\/td><td class=\"has-text-align-left\" data-align=\"left\">Front panel or Cockpit<\/td><td class=\"has-text-align-left\" data-align=\"left\">Cockpit<\/td><td class=\"has-text-align-left\" data-align=\"left\"><a href=\"https:\/\/imperix.com\/doc\/help\/analog-i-o-configuration-on-b-box-4?currentThread=b-box-4#How-to-configure-analog-front-end-hardware\">PN252<\/a><\/td><\/tr><tr><td>B-Box 3 (RCP)<\/td><td class=\"has-text-align-left\" data-align=\"left\">Front panel only<\/td><td class=\"has-text-align-left\" data-align=\"left\">USB key<\/td><td class=\"has-text-align-left\" data-align=\"left\"><a href=\"https:\/\/imperix.com\/doc\/help\/analog-front-end-configuration-on-b-box-rcp?currentThread=b-box-rcp-3-0\">PN105<\/a><\/td><\/tr><tr><td>B-Box micro<\/td><td class=\"has-text-align-left\" data-align=\"left\">Cockpit only<\/td><td class=\"has-text-align-left\" data-align=\"left\">Cockpit<\/td><td class=\"has-text-align-left\" data-align=\"left\"><a href=\"https:\/\/imperix.com\/doc\/help\/analog-inputs-configuration-on-b-box-micro?currentThread=b-box-micro\">PN106<\/a><\/td><\/tr><tr><td>B-Board 3 (PRO)<\/td><td class=\"has-text-align-left\" data-align=\"left\">N\/A<\/td><td class=\"has-text-align-left\" data-align=\"left\">N\/A<\/td><td class=\"has-text-align-left\" data-align=\"left\">N\/A<\/td><\/tr><tr><td>TPI8032<\/td><td class=\"has-text-align-left\" data-align=\"left\">N\/A<\/td><td class=\"has-text-align-left\" data-align=\"left\">N\/A<\/td><td class=\"has-text-align-left\" data-align=\"left\">N\/A<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Core-operating-states\"><\/span>Core operating states<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Imperix controllers block their outputs when inappropriate operation occurs, caused by controller misbehavior, unexpected events, or excessive operating conditions (current, voltage, temperature, etc.). Various trip sources are supported to cover all potential fault scenarios in a real application. This is further documented in <a href=\"https:\/\/imperix.com\/doc\/help\/hardware-protections-on-imperix-controllers\" type=\"link\" id=\"https:\/\/imperix.com\/doc\/help\/software-independent-protections-on-imperix-controllers\">PN263<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When a protection trip is triggered, hardware protections instantly blocks all PWM outputs, thereby preventing any damage to the power stage. Immediately after, various indicators and log messages are available to help identify the root cause and facilitate troubleshooting. This is also further documented in <a href=\"https:\/\/imperix.com\/doc\/help\/hardware-protections-on-imperix-controllers\" type=\"link\" id=\"https:\/\/imperix.com\/doc\/help\/software-independent-protections-on-imperix-controllers\">PN263<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the software level, these mechanisms are supported by a dedicated state machine implementing three <em>core <\/em>states in relation to the power stage:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FAULT<\/strong>: An error occurred and the system is waiting for its acknowledgment. All PWM outputs are blocked similarly to the BLOCKED state.<\/li>\n\n\n\n<li><strong>BLOCKED<\/strong>: The controller is operating normally but all PWM outputs are inhibited. The CPU control task is hence running (including all the contained control algorithms and communication functions), but the power stage remains blocked.<\/li>\n\n\n\n<li><strong>OPERATING<\/strong>: The controller is operating normally and all PWM outputs are normally produced. The power stage is actively driven.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1620\" height=\"974\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/FSM.png\" alt=\"Operating FSM of imperix controllers\" class=\"wp-image-46173\" style=\"aspect-ratio:1.66332023380998;width:581px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/FSM.png 1620w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/FSM-300x180.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/FSM-1024x616.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/FSM-768x462.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/FSM-1536x923.png 1536w\" sizes=\"auto, (max-width: 1620px) 100vw, 1620px\" \/><figcaption class=\"wp-element-caption\">Operating FSM of imperix controllers<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The illustration below shows the sequence of events associated to an over-current. This is detailed in <a href=\"https:\/\/imperix.com\/doc\/help\/hardware-protections-on-imperix-controllers\" type=\"link\" id=\"https:\/\/imperix.com\/doc\/help\/software-independent-protections-on-imperix-controllers\">PN263<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"417\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/protections-1024x417.png\" alt=\"Over-value protections on imperix controllers\" class=\"wp-image-46172\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/protections-1024x417.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/protections-300x122.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/protections-768x313.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/protections.png 1311w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<p class=\"wp-block-paragraph\"><strong>Legend:<\/strong><\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Threshold exceeded<\/li>\n\n\n\n<li>All PWMs blocked<\/li>\n\n\n\n<li>User acknowledgement<\/li>\n\n\n\n<li>Operation resumed<\/li>\n<\/ol>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Importantly, the <em>core <\/em>states shall not be confused with application-level operating states, i.e., those corresponding to the whole power converter. For instance, operating states such as CHARGING, SYNCHRONIZING, DICHARGING (or similar) all require the converter to be actually switching. As such, they are typically &#8220;contained&#8221; within the OPERATING core state and managed by a secondary, application-level, state machine instead.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">State transitions<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">PWM enable<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This transition, from BLOCKED to OPERATING, is generally triggered manually in Cockpit, by clicking the associated button, available for each project. Alternatively, PWM outputs can also be enabled programmatically thanks to the <a href=\"https:\/\/imperix.com\/doc\/software\/enable-outputs\"><u>enable PWM outputs<\/u><\/a> block or using the CoreStart() function.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-ef1a3d04 wp-block-columns-is-layout-flex\" style=\"margin-top:-5px;margin-bottom:-5px;padding-top:0;padding-bottom:0\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"alignright size-full\" style=\"margin-top:0;margin-bottom:0\"><img loading=\"lazy\" decoding=\"async\" width=\"281\" height=\"85\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/image.png\" alt=\"\" class=\"wp-image-46260\"\/><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"328\" height=\"59\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/image-1.png\" alt=\"\" class=\"wp-image-46261\" style=\"width:253px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/image-1.png 328w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/image-1-300x54.png 300w\" sizes=\"auto, (max-width: 328px) 100vw, 328px\" \/><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">PWM disable<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Reciprocally, the transition from OPERATING to BLOCKED, disabling all PWM outputs, can be triggered by clicking the same button in Cockpit, or by forcing the <a href=\"https:\/\/imperix.com\/doc\/software\/enable-outputs\"><u>enable PWM outputs<\/u><\/a> block to zero. For C\/C++ users, the CoreStop() function is also achieving this result.<\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-warning\" role=\"alert\">It is important to keep in mind here that <strong>disabling all PWMs doesn\u2019t automatically de-energize the application<\/strong>. A DC bus may remain charged, for instance. A careful implementation of an active discharge sequence may be required.<\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Protection trip<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Various fault types (detailed in <a href=\"https:\/\/imperix.com\/doc\/help\/hardware-protections-on-imperix-controllers\" type=\"link\" id=\"https:\/\/imperix.com\/doc\/help\/software-independent-protections-on-imperix-controllers\">PN263<\/a>) are supported. When a fault is triggered, hardware protections instantly block all PWM modules and set the CORE state to FAULT. A message is then displayed in Cockpit to indicate the trip source and guide the subsequent troubleshooting steps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Importantly, upon entering the FAULT state, PWM channels are automatically disabled, but GPO channels normally maintain their operation. This is the main difference between these two output types. To automatically force a GPO pin to &#8216;0&#8217; during a fault (e.g., to open a relay), a special check box must be ticked in the GPO block mask (ACG) or a special configuration function must be called during initialization (CPP). More details are given in <a href=\"https:\/\/imperix.com\/doc\/software\/general-purpose-outputs\">PN006<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Trip acknowledgement<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In power electronics, a protection trip often indicates a critical underlying issue or insufficient control stability. In such cases, restarting the operation immediately without investigation may cause catastrophic damage. Therefore, imperix controllers require an explicit trip acknowledgment step for analog overvalues (e.g. over-current or over-voltage). Other fault types clear immediately once the faulty condition disappears (auto-acknowledgement), some don\u2019t. The complete list of fault types is given in <a href=\"https:\/\/imperix.com\/doc\/help\/hardware-protections-on-imperix-controllers\" type=\"link\" id=\"https:\/\/imperix.com\/doc\/help\/software-independent-protections-on-imperix-controllers\">PN263<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Visual representations of the <em>core <\/em>state<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The core state can be witnessed through the core\/sys front panel LED, the LCD screen (on B-Boxes), or Cockpit.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Core state<\/th><th class=\"has-text-align-center\" data-align=\"center\">No code running<\/th><th class=\"has-text-align-center\" data-align=\"center\">BLOCKED<\/th><th class=\"has-text-align-center\" data-align=\"center\">OPERATING<\/th><th class=\"has-text-align-center\" data-align=\"center\">FAULT<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Cockpit<\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"95\" class=\"wp-image-46178\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cockpit_stopped.png\" alt=\"Cockpit - code stopped\"><br><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"45\" class=\"wp-image-46179\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cockpit_blocked.png\" alt=\"Cockpit - Blocked\"><br><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"45\" class=\"wp-image-46180\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cockpit_operating.png\" alt=\"Cockpit - Operating\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"108\" class=\"wp-image-46181\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/cockpit_fault.png\" alt=\"Cockpit - Fault\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">B-Box 4<\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"51\" class=\"wp-image-46183\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_stopped.png\" alt=\"BB4 - Stopped\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_stopped.png 462w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_stopped-300x103.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"10\" class=\"wp-image-46233\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_hor_gray.png\" alt=\"sys_hor_gray\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"51\" class=\"wp-image-46184\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_blocked.png\" alt=\"BB4 - Blocked\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_blocked.png 462w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_blocked-300x103.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"10\" class=\"wp-image-46234\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_hor_orange.png\" alt=\"sys_hor_orange\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"51\" class=\"wp-image-46185\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_operating.png\" alt=\"BB4 - Operating\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_operating.png 462w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_operating-300x103.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"10\" class=\"wp-image-46235\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_hor_green.png\" alt=\"sys_hor_green\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"51\" class=\"wp-image-46182\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_fault.png\" alt=\"BB4 - Fault\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_fault.png 462w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb4_fault-300x103.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"10\" class=\"wp-image-46236\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_hor_red.png\" alt=\"sys_hor_red\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">B-Box 3 (RCP)<\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"36\" class=\"wp-image-46186\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_stopped.png\" alt=\"BB3 - Stopped\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_stopped.png 374w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_stopped-300x72.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"24\" height=\"19\" class=\"wp-image-46229\" style=\"width: 24px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/core_gray.png\" alt=\"core_gray\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"36\" class=\"wp-image-46187\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_blocked.png\" alt=\"BB3 - Blocked\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_blocked.png 374w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_blocked-300x72.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"24\" height=\"19\" class=\"wp-image-46230\" style=\"width: 24px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/core_orange.png\" alt=\"core_orange\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"36\" class=\"wp-image-46188\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_operating.png\" alt=\"BB3 - Operating\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_operating.png 374w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_operating-300x72.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"24\" height=\"19\" class=\"wp-image-46231\" style=\"width: 24px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/core_green.png\" alt=\"core_green\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"36\" class=\"wp-image-46189\" style=\"width: 150px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_fault.png\" alt=\"BB3 - Fault\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_fault.png 374w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bb3_fault-300x72.png 300w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><br><img loading=\"lazy\" decoding=\"async\" width=\"24\" height=\"19\" class=\"wp-image-46232\" style=\"width: 24px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/core_red.png\" alt=\"core_red\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">B-Board PRO<\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"43\" class=\"wp-image-46220\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bboard_stopped.png\" alt=\"BBoard - Stopped\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"43\" class=\"wp-image-46222\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bboard_blocked.png\" alt=\"BBoard - Blocked\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"43\" class=\"wp-image-46223\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bboard_operating.png\" alt=\"BBoard - Operating\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"30\" height=\"43\" class=\"wp-image-46224\" style=\"width: 30px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/bboard_fault.png\" alt=\"BBoard - Fault\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">TPI8032<\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"15\" height=\"20\" class=\"wp-image-46225\" style=\"width: 15px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_ver_gray.png\" alt=\"sys_ver_gray\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"15\" height=\"20\" class=\"wp-image-46226\" style=\"width: 15px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_ver_orange.png\" alt=\"sys_ver_orange\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"15\" height=\"20\" class=\"wp-image-46227\" style=\"width: 15px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_ver_green.png\" alt=\"sys_ver_green\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><img loading=\"lazy\" decoding=\"async\" width=\"15\" height=\"20\" class=\"wp-image-46228\" style=\"width: 15px;\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/sys_ver_red.png\" alt=\"sys_ver_red\"><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">B-Box Micro<\/td><td class=\"has-text-align-center\" data-align=\"center\">N\/A<\/td><td class=\"has-text-align-center\" data-align=\"center\">N\/A<\/td><td class=\"has-text-align-center\" data-align=\"center\">N\/A<\/td><td class=\"has-text-align-center\" data-align=\"center\">N\/A<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"To-go-further\"><\/span>To go further<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When seeking to understand how imperix controllers operate, the following articles may provide valuable insight:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/architecture-of-imperix-controllers\" type=\"link\" id=\"https:\/\/imperix.com\/doc\/help\/architecture-of-imperix-controllers\">PN253<\/a> presents the architecture of imperix controllers, which is even further detailed in PNxxx for the acquisition side, and PNxxx for the modulation side.<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/hardware-protections-on-imperix-controllers\">PN263<\/a> explains how hardware protections operate. Practical advise regarding the configuration of the protection thresholds is rather addressed in <a href=\"https:\/\/imperix.com\/doc\/help\/over-current-and-over-voltage-protection\">PN257<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/doc\/help\/multi-controller-operation\" type=\"link\" id=\"https:\/\/imperix.com\/doc\/help\/multi-controller-operation\">PN264<\/a> is somewhat an extension of this page, specific to multi-controller systems (stacked operation).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">When seeking to get started with imperix controllers, the following articles might help:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The installation of the SDKs is addressed in <a href=\"https:\/\/imperix.com\/doc\/help\/installation-guide-acg-sdk\">PN133<\/a> (ACG SDK) and <a href=\"https:\/\/imperix.com\/doc\/help\/getting-started-with-acg-sdk\">PN134<\/a> ( CPP SDK).<\/li>\n\n\n\n<li>Guidance for generating an executable and programming imperix controllers is given in <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">PN138<\/a>.<\/li>\n\n\n\n<li>Tips and ticks for running relevant simulations are given in <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-simulink\">PN135<\/a> (for Simulink) and <a href=\"https:\/\/imperix.com\/doc\/help\/simulation-essentials-plecs\">PN137<\/a> (for PLECS).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>While highly intuitive to use, imperix controllers in fact rely on an internal architecture and operation that sometimes differs significantly from traditional DSPs, MCUs, and&#8230;<\/p>\n","protected":false},"author":3,"featured_media":46193,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[3],"tags":[],"software-environments":[],"provided-results":[],"related-products":[50,31,32,92,166,51,110],"guidedreadings":[],"tutorials":[],"user-manuals":[],"coauthors":[69,72],"class_list":["post-46163","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-help","related-products-acg-sdk","related-products-b-board-pro","related-products-b-box-rcp","related-products-b-box-micro","related-products-b-box-rcp-3-0","related-products-cpp-sdk","related-products-tpi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Operating principles of imperix controllers - imperix<\/title>\n<meta name=\"description\" content=\"Explore the main particularities of imperix controllers and present their fundamental operating principles.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Operating principles of imperix controllers - imperix\" \/>\n<meta property=\"og:description\" content=\"Explore the main particularities of imperix controllers and present their fundamental operating principles.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-07T14:15:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-07T14:16:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PN261_featured_image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"334\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nicolas Cherix, Shu Wang\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nicolas Cherix, Shu Wang\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers\"},\"author\":{\"name\":\"Nicolas Cherix\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/44e7187157f1379207dce2b570f63f86\"},\"headline\":\"Operating principles of imperix controllers\",\"datePublished\":\"2026-07-07T14:15:02+00:00\",\"dateModified\":\"2026-07-07T14:16:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers\"},\"wordCount\":3296,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/PN261_featured_image.png\",\"articleSection\":[\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers\",\"name\":\"Operating principles of imperix controllers - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/PN261_featured_image.png\",\"datePublished\":\"2026-07-07T14:15:02+00:00\",\"dateModified\":\"2026-07-07T14:16:19+00:00\",\"description\":\"Explore the main particularities of imperix controllers and present their fundamental operating principles.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/PN261_featured_image.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/PN261_featured_image.png\",\"width\":500,\"height\":334,\"caption\":\"PN261 featured image\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/operating-principles-of-imperix-controllers#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Knowledge base\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Product notes\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/category\\\/help\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Operating principles of imperix controllers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"name\":\"imperix\",\"description\":\"power electronics\",\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/imperix.com\\\/doc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\",\"name\":\"imperix\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"width\":350,\"height\":120,\"caption\":\"imperix\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/44e7187157f1379207dce2b570f63f86\",\"name\":\"Nicolas Cherix\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=gaafd9afe469fe587a71b66de1b538283\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g\",\"caption\":\"Nicolas Cherix\"},\"description\":\"Nicolas is the chief engineer and product director at imperix. On the knowledge base, he is the author, co-author, or reviewer of numerous notes.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/nicolas-cherix-268a2b83\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/cherix\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Operating principles of imperix controllers - imperix","description":"Explore the main particularities of imperix controllers and present their fundamental operating principles.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers","og_locale":"en_US","og_type":"article","og_title":"Operating principles of imperix controllers - imperix","og_description":"Explore the main particularities of imperix controllers and present their fundamental operating principles.","og_url":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers","og_site_name":"imperix","article_published_time":"2026-07-07T14:15:02+00:00","article_modified_time":"2026-07-07T14:16:19+00:00","og_image":[{"width":500,"height":334,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PN261_featured_image.png","type":"image\/png"}],"author":"Nicolas Cherix, Shu Wang","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nicolas Cherix, Shu Wang","Est. reading time":"23 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers"},"author":{"name":"Nicolas Cherix","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/44e7187157f1379207dce2b570f63f86"},"headline":"Operating principles of imperix controllers","datePublished":"2026-07-07T14:15:02+00:00","dateModified":"2026-07-07T14:16:19+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers"},"wordCount":3296,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PN261_featured_image.png","articleSection":["Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers","url":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers","name":"Operating principles of imperix controllers - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PN261_featured_image.png","datePublished":"2026-07-07T14:15:02+00:00","dateModified":"2026-07-07T14:16:19+00:00","description":"Explore the main particularities of imperix controllers and present their fundamental operating principles.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PN261_featured_image.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PN261_featured_image.png","width":500,"height":334,"caption":"PN261 featured image"},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Knowledge base","item":"https:\/\/imperix.com\/doc\/"},{"@type":"ListItem","position":2,"name":"Product notes","item":"https:\/\/imperix.com\/doc\/category\/help"},{"@type":"ListItem","position":3,"name":"Operating principles of imperix controllers"}]},{"@type":"WebSite","@id":"https:\/\/imperix.com\/doc\/#website","url":"https:\/\/imperix.com\/doc\/","name":"imperix","description":"power electronics","publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imperix.com\/doc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/imperix.com\/doc\/#organization","name":"imperix","url":"https:\/\/imperix.com\/doc\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","width":350,"height":120,"caption":"imperix"},"image":{"@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/44e7187157f1379207dce2b570f63f86","name":"Nicolas Cherix","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=gaafd9afe469fe587a71b66de1b538283","url":"https:\/\/secure.gravatar.com\/avatar\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g","caption":"Nicolas Cherix"},"description":"Nicolas is the chief engineer and product director at imperix. On the knowledge base, he is the author, co-author, or reviewer of numerous notes.","sameAs":["https:\/\/www.linkedin.com\/in\/nicolas-cherix-268a2b83\/"],"url":"https:\/\/imperix.com\/doc\/author\/cherix"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/46163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=46163"}],"version-history":[{"count":18,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/46163\/revisions"}],"predecessor-version":[{"id":46390,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/46163\/revisions\/46390"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/46193"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=46163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=46163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=46163"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=46163"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=46163"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=46163"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=46163"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=46163"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=46163"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=46163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}