{"id":991,"date":"2021-03-29T12:11:19","date_gmt":"2021-03-29T12:11:19","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=991"},"modified":"2025-11-10T12:54:33","modified_gmt":"2025-11-10T12:54:33","slug":"discrete-control-delay","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay","title":{"rendered":"Discrete control delay identification"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 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\/discrete-control-delay\/#Context\" >Context<\/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\/discrete-control-delay\/#Definitions-of-the-various-delays\" >Definitions of the various delays<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\/#Cycle-delay\" >Cycle delay<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\/#Modulator-delay\" >Modulator delay<\/a><\/li><\/ul><\/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\/discrete-control-delay\/#Examples-of-delay-calculation\" >Examples of delay calculation<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\/#Single-rate-update\" >Single-rate update<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\/#Double-rate-update\" >Double-rate update<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\/#References\" >References<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>This product note explains how to compute the discrete control delay of a control algorithm running on an imperix controller.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-context\"><span class=\"ez-toc-section\" id=\"Context\"><\/span>Context<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The execution of a digital control algorithm inevitably introduces a delay along the control chain, which has an impact on the system response, and therefore on the achievable closed-loop control bandwidth.<\/p>\n\n\n\n<p>This delay is key in the computation of controller parameters, such as&nbsp;\\(K_p\\) and \\(K_i\\)&nbsp;in the case of a PI controller. This note presents the different delays involved in the total loop delay and gives numerical examples of controller tuning.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-definitions-of-the-various-delays\"><span class=\"ez-toc-section\" id=\"Definitions-of-the-various-delays\"><\/span>Definitions of the various delays<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The total loop delay is the sum of all the delays involved between the measurement of a state variable and the resulting action of the controller on the controlled plant. The different delays involved are defined below.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Delay<\/th><th>Symbol<\/th><th>Definition<\/th><\/tr><tr><td>Sensing delay<\/td><td>\\(T_{d,sens}\\)<\/td><td>Delay in the measured quantity, due to finite sensor and analog chain bandwidth, and possibly filtering delay<\/td><\/tr><tr><td>Control delay<\/td><td>\\(T_{d,ctrl}\\)<\/td><td>Delay between sampling instant and duty-cycle update instant in the PWM modulator (FPGA peripheral)<\/td><\/tr><tr><td>Modulator delay<\/td><td>\\(T_{d,PWM}\\)<\/td><td>Average delay between duty-cycle update in the PWM modulator and resulting change in modulator output (see dedicated section below)<\/td><\/tr><tr><td>Switching delay<\/td><td>\\(T_{d,tran}\\)<\/td><td>Delay between change in the modulator output to actual switching of the power device (can often be neglected)<\/td><\/tr><tr><td>Total loop delay<\/td><td>\\(T_{d,tot}\\)<\/td><td>Sum of the above delays, representing the total delay of the control system<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"274\" height=\"132\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-184.png\" alt=\"Delays along the control loop\" class=\"wp-image-993\" title=\"Product notes &gt; PN142: Identifying the discrete control delay &gt; delays_block_diagram.png\"\/><figcaption class=\"wp-element-caption\">Delays along the control loop<\/figcaption><\/figure>\n<\/div>\n\n\n<p>The control delay \\(T_{d,ctrl}\\) can be further divided into the following components (more information can be found in <a href=\"https:\/\/imperix.com\/doc\/help\/timing-info-tab\">Timing info tab<\/a>).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Delay<\/th><th>Symbol<\/th><th>Definition<\/th><\/tr><tr><td>Acquisition delay<\/td><td>\\(T_{acq}\\)<\/td><td>Delay between sampling and data availability in CPU.<br>= ADC conversion time (<em>ADC <\/em>in figure below) + FPGA-to-CPU transfer time (<em>Read<\/em>)<\/td><\/tr><tr><td>Processing delay<\/td><td>\\(T_{pr}\\)<\/td><td>CPU processing time (<em>Proc.<\/em>)<\/td><\/tr><tr><td>Write delay<\/td><td>\\(T_{wr}\\)<\/td><td>CPU-to-FPGA transfer time (<em>Write<\/em>)<\/td><\/tr><tr><td>Cycle delay<\/td><td>\\(T_{cy}\\)<\/td><td>Delay between sampling instant and newly computed data available in FPGA (\\(T_{cy}=T_{acq}+T_{pr}+T_{wr}\\), see dedicated section below)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>The figure below illustrates the different delays involved with a triangular PWM carrier and single-rate update of the duty-cycle (at the bottom of the carrier).&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"383\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-185.png\" alt=\"Definition of the various delays along the control chain\" class=\"wp-image-994\" title=\"Product notes &gt; PN142: Identifying the discrete control delay &gt; delay_definitions.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-185.png 558w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-185-300x206.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><figcaption class=\"wp-element-caption\">Definition of the various delays along the control chain<\/figcaption><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">The post-processing execution time does not impact the control delay, since it includes only tasks that are not directly involved in the control algorithm (datalogging execution, CAN communication, Simulink external mode execution,&#8230;).<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cycle-delay\"><span class=\"ez-toc-section\" id=\"Cycle-delay\"><\/span>Cycle delay<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The cycle delay comprises the acquisition, processing, and FPGA transfer delays. Its value is computed inside the FPGA and displayed in the <em>Target Info<\/em> pane of <a href=\"\/software\/cockpit\">imperix Cockpit<\/a>.<\/p>\n\n\n\n<p>Its value depends mainly on the complexity of the executed control algorithm and is thus application-dependent. For example, the control of the <a href=\"https:\/\/imperix.com\/doc\/example\/three-phase-pv-inverter\">PV boost and three-phase grid-tied inverter (AN006)<\/a> gives the following figures:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Acquisition delay \\(T_{acq}\\): 2.072 \u00b5s (includes 2 \u00b5s ADC delay in B-Box RCP)<\/li>\n\n\n\n<li>Processing delay \\(T_{pr}\\): 3.9 \u00b5s<\/li>\n\n\n\n<li>Write delay \\(T_{wr}\\): 0.1 \u00b5s<\/li>\n\n\n\n<li>Cycle delay (total) \\(T_{cy}\\): 6 \u00b5s<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-modulator-delay\"><span class=\"ez-toc-section\" id=\"Modulator-delay\"><\/span>Modulator delay<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Most of the delays defined previously have pretty obvious definitions and are hardware-dependent. The modulator delay, however, merits further clarifications, since it takes several different values, depending on the PWM peripheral parameters. In all cases, the modulator delay represents the delay between the instant a new duty-cycle is taken into account in the PWM modulator, and the instant that new duty-cycle is reflected into a PWM pulse.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-sawtooth-carrier\">Sawtooth carrier<\/h4>\n\n\n\n<p>It is quite straightforward that the sawtooth carrier introduces a delay that depends on the duty-cycle \\(d\\) and the switching period \\(T_{sw}\\). From the figure below, we can deduce that the delay is<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sawtooth carrier:\u00a0\\(T_{d,\\text{PWM}}=dT_{sw}\\)<\/li>\n\n\n\n<li>Inverted sawtooth carrier: \\(T_{d,\\text{PWM}}=(1-d)T_{sw}\\)<\/li>\n<\/ul>\n\n\n\n<p>For controller tuning, the average value \\(T_{d,\\text{PWM}}=0.5T_{sw}\\) is generally used, for both sawtooth carrier shapes.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"745\" height=\"181\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-186.png\" alt=\"Modulator delay for sawtooth and inverted sawtooth carriers\" class=\"wp-image-995\" title=\"Product notes &gt; PN142: Identifying the discrete control delay &gt; sawtooth_modulator_delay.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-186.png 745w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-186-300x73.png 300w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><figcaption class=\"wp-element-caption\">Modulator delay for (left) sawtooth and (right) inverted sawtooth carriers<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-triangular-carrier\">Triangular carrier<\/h4>\n\n\n\n<p>The modulator delay calculation is more tricky with a triangular carrier, since both rising and falling edges of the PWM signal are affected by the duty-cycle value.<\/p>\n\n\n\n<p>A small-signal approximation introduced in [1] and further developed in [2] shows that \\(T_{d,\\text{PWM}}=T_{sw}\/2\\) for single-rate update.<\/p>\n\n\n\n<p>Intuitively, the duty-cycle update has an effect on two PWM edges: before and after the half of the carrier, resulting, on average, in an effect after half a switching period&nbsp;[1]. This also means that the delay is identical for triangular and inverted triangular carriers.<\/p>\n\n\n\n<p>With double-rate update, the modulator delay is reduced to \\(T_{d,\\text{PWM}}=T_{sw}\/4\\)&nbsp;[1], providing that the sampling is also performed at double rate (double-rate sampling, \\(T_s=T_{sw}\/2\\)).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"745\" height=\"181\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-187.png\" alt=\"Modulator delay for triangular and inverted triangular carriers\" class=\"wp-image-996\" title=\"Product notes &gt; PN142: Identifying the discrete control delay &gt; triangular_modulator_delay.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-187.png 745w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-187-300x73.png 300w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><figcaption class=\"wp-element-caption\">Modulator delay for (left) triangular and (right) inverted triangular carriers<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-direct-output-pwm\">Direct output PWM<\/h4>\n\n\n\n<p>If no PWM modulator is used (e.g. when using the <a href=\"https:\/\/imperix.com\/doc\/software\/do-pwm-direct-output-pwm\">DO-PWM &#8211; Direct output PWM<\/a> peripheral), the modulator delay is obviously&nbsp;\\(T_{d,\\text{PWM}}=0\\). In this case, the firing signal is updated as soon as a new value is available at the FPGA level, meaning that \\(T_{d,ctrl}=T_{cy}\\).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-examples-of-delay-calculation\"><span class=\"ez-toc-section\" id=\"Examples-of-delay-calculation\"><\/span>Examples of delay calculation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-single-rate-update\"><span class=\"ez-toc-section\" id=\"Single-rate-update\"><\/span>Single-rate update<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Let us consider the following standard configuration:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The switching and sampling periods are the same \\(T_{sw}=T_{s}\\).<\/li>\n\n\n\n<li>The sampling phase is \\(\\phi_{s}=0.5\\) to ensure sampling in the middle of the current ripples.<\/li>\n\n\n\n<li>The PWM modulator uses a triangular carrier with a phase of zero and <strong>single-rate update <\/strong>(i.e. update at the bottom of the carrier).<\/li>\n\n\n\n<li>The current sensor bandwidth is 200 kHz.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-regular-control-algorithm\">Regular control algorithm<\/h4>\n\n\n\n<p>In this first case, we assume that the control algorithm can be executed fast enough, so that the cycle delay is shorter than half a control period (\\(T_{cy} &lt; 0.5T_s\\)). This is the case for most control implementations running on imperix controllers.<\/p>\n\n\n\n<p>In this case, the total loop delay is computed as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sensing delay: neglected (\\(\\approx 800\\,\\text{ns}\\))<\/li>\n\n\n\n<li>Control delay: \\(T_{d,ctrl} = 0.5T_s\\)<\/li>\n\n\n\n<li>Modulator delay: \\(T_{d,\\text{PWM}}=T_{sw}\/2\\) (triangular carrier)<\/li>\n\n\n\n<li>Switching delay: neglected, sub-microsecond<\/li>\n\n\n\n<li>Total loop delay: \\(T_{d,tot}=T_{d,ctrl}+T_{d,\\text{PWM}}=T_s\\)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"247\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-188.png\" alt=\"Example of delay calculation for a light control algorithm\" class=\"wp-image-997\" title=\"Product notes &gt; PN142: Identifying the discrete control delay &gt; single-rate_light_example.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-188.png 558w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-188-300x133.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><figcaption class=\"wp-element-caption\">Example of delay calculation for a <em>light <\/em>control algorithm<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-heavy-control-algorithm\">Heavy control algorithm<\/h4>\n\n\n\n<p>Now let&#8217;s assume that the control algorithm is heavy and the cycle delay is longer than half a control period (\\(T_{cy} \\geq 0.5T_s\\)).<\/p>\n\n\n\n<p>In this case, the total loop delay is computed as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sensing delay: neglected (\\(\\approx 800\\,\\text{ns}\\))<\/li>\n\n\n\n<li>Control delay: \\(T_{d,ctrl} = 1.5T_s\\)<\/li>\n\n\n\n<li>Modulator delay: \\(T_{d,\\text{PWM}}=T_{sw}\/2\\) (triangular carrier)<\/li>\n\n\n\n<li>Switching delay: neglected, sub-microsecond<\/li>\n\n\n\n<li>Total loop delay: \\(T_{d,tot}=T_{d,ctrl}+T_{d,\\text{PWM}}=2T_s\\)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"247\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-189.png\" alt=\"Example of delay calculation for a heavy control algorithm\" class=\"wp-image-1000\" title=\"Product notes &gt; PN142: Identifying the discrete control delay &gt; single-rate_example.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-189.png 558w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-189-300x133.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><figcaption class=\"wp-element-caption\">Example of delay calculation for a <em>heavy <\/em>control algorithm<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-general-case\">General case<\/h4>\n\n\n\n<p>With single-rate update and triangular carrier, the total loop delay can take two values:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If\u00a0\\(T_{cy} &lt; (1-\\phi_s)T_s\\), \\(T_{d,ctrl} = (1-\\phi_s)T_s\\) and \\(T_{d,tot}=(1.5-\\phi_s)T_s \\)<\/li>\n\n\n\n<li>If \\(T_{cy} \\geq (1-\\phi_s)T_s\\), \\(T_{d,ctrl} = (2-\\phi_s)T_s\\) and \\(T_{d,tot}=(2.5-\\phi_s)T_s\\)<\/li>\n<\/ul>\n\n\n\n<p>These results suggest that the smaller the sampling phase, the smaller the delay. However, the choice of the sampling phase should also rely on current ripple sampling considerations. Generally speaking, the choice of the sampling phase is a trade-off between control bandwidth and the accuracy of the control.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-double-rate-update\"><span class=\"ez-toc-section\" id=\"Double-rate-update\"><\/span>Double-rate update<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Now let us consider the following configuration:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The switching and sampling periods are \\(T_{sw}=2T_{s}\\) (<strong>double-rate sampling<\/strong>).<\/li>\n\n\n\n<li>The sampling phase is \\(\\phi_{s}=0\\).<\/li>\n\n\n\n<li>The PWM modulator uses a triangular carrier with a phase of zero and <strong>double-rate update<\/strong> (update at the top and bottom of the carrier).<\/li>\n\n\n\n<li>The current sensor bandwidth is 200 kHz.<\/li>\n<\/ul>\n\n\n\n<p>In this case, the total loop delay does not depend on the execution time of the algorithm, unlike with single-rate update. It is computed as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sensing delay: neglected<\/li>\n\n\n\n<li>Control delay:\u00a0\\(T_{d,ctrl}=T_s\\)<\/li>\n\n\n\n<li>Modulator delay: \\(T_{d,\\text{PWM}}=T_{sw}\/4=T_s\/2\\) (triangular carrier with double-rate update)<\/li>\n\n\n\n<li>Switching delay: neglected, sub-microsecond<\/li>\n\n\n\n<li>Total loop delay: \\(T_{d,tot}=T_{d,ctrl}+T_{d,\\text{PWM}}=1.5T_s\\)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"247\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/double-rate_example.png\" alt=\"Example of delay calculation with double-rate sampling and PWM update\" class=\"wp-image-33974\" title=\"Product notes &gt; PN142: Identifying the discrete control delay &gt; double-rate_example.png\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/double-rate_example.png 558w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/double-rate_example-300x133.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><figcaption class=\"wp-element-caption\">Example of delay calculation with double-rate sampling and PWM update<\/figcaption><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">With the ACG SDK library, double-rate sampling can be achieved by connecting the PWM modulator blocks to a clock (CLK) block with a frequency that is half of the CLOCK_0 frequency.<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-references\"><span class=\"ez-toc-section\" id=\"References\"><\/span>References<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>[1] D. M. Van de Sype, K. De Gusseme, A. P. Van den Bossche and J. A. Melkebeek, &#8220;Small-signal Laplace-domain analysis of uniformly-sampled pulse-width modulators,&#8221;&nbsp;<em>2004 IEEE 35th Annual Power Electronics Specialists Conference<\/em>, Aachen, Germany, 2004, pp.&nbsp;4292-4298&nbsp;Vol.6.<\/p>\n\n\n\n<p>[2] S. Buso and P. Mattavelli, \u201cDigital Control in Power Electronics\u201d, 2006.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This product note explains how to compute the discrete control delay of a control algorithm running on an imperix controller. Context The execution of a&#8230;<\/p>\n","protected":false},"author":2,"featured_media":3072,"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":[139,138,137,135,143],"coauthors":[63],"class_list":["post-991","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","user-manuals-b-board-pro","user-manuals-b-box-micro","user-manuals-b-box-rcp-3-0","user-manuals-going-further-with-acg-sdk","user-manuals-tpi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Discrete control delay identification - imperix<\/title>\n<meta name=\"description\" content=\"This note introduces the various delays involved in the total discrete control delay of a typical power electronics controller.\" \/>\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\/discrete-control-delay\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Discrete control delay identification - imperix\" \/>\n<meta property=\"og:description\" content=\"This note introduces the various delays involved in the total discrete control delay of a typical power electronics controller.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-29T12:11:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-10T12:54:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN142_2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Julien Orsinger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Orsinger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay\"},\"author\":{\"name\":\"Julien Orsinger\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/65ef663818eab76f53cc627ab80e0a51\"},\"headline\":\"Discrete control delay identification\",\"datePublished\":\"2021-03-29T12:11:19+00:00\",\"dateModified\":\"2025-11-10T12:54:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay\"},\"wordCount\":1509,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN142_2.png\",\"articleSection\":[\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay\",\"name\":\"Discrete control delay identification - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN142_2.png\",\"datePublished\":\"2021-03-29T12:11:19+00:00\",\"dateModified\":\"2025-11-10T12:54:33+00:00\",\"description\":\"This note introduces the various delays involved in the total discrete control delay of a typical power electronics controller.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN142_2.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_PN142_2.png\",\"width\":450,\"height\":300,\"caption\":\"Definition of the various delays along the control chain\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/discrete-control-delay#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\":\"Discrete control delay identification\"}]},{\"@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\\\/65ef663818eab76f53cc627ab80e0a51\",\"name\":\"Julien Orsinger\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g6545a7220411572e799ad58574cce259\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g\",\"caption\":\"Julien Orsinger\"},\"description\":\"Julien is a senior power electronics engineer. On the knowledge base, he is acting as the editorial manager and is therefore the co-author of numerous articles on a broad variety of topics.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/julien-orsinger-640ab2129\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/orsinger\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Discrete control delay identification - imperix","description":"This note introduces the various delays involved in the total discrete control delay of a typical power electronics controller.","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\/discrete-control-delay","og_locale":"en_US","og_type":"article","og_title":"Discrete control delay identification - imperix","og_description":"This note introduces the various delays involved in the total discrete control delay of a typical power electronics controller.","og_url":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay","og_site_name":"imperix","article_published_time":"2021-03-29T12:11:19+00:00","article_modified_time":"2025-11-10T12:54:33+00:00","og_image":[{"width":450,"height":300,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN142_2.png","type":"image\/png"}],"author":"Julien Orsinger","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julien Orsinger","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay"},"author":{"name":"Julien Orsinger","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/65ef663818eab76f53cc627ab80e0a51"},"headline":"Discrete control delay identification","datePublished":"2021-03-29T12:11:19+00:00","dateModified":"2025-11-10T12:54:33+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay"},"wordCount":1509,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN142_2.png","articleSection":["Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/discrete-control-delay#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay","url":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay","name":"Discrete control delay identification - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN142_2.png","datePublished":"2021-03-29T12:11:19+00:00","dateModified":"2025-11-10T12:54:33+00:00","description":"This note introduces the various delays involved in the total discrete control delay of a typical power electronics controller.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/discrete-control-delay"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN142_2.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_PN142_2.png","width":450,"height":300,"caption":"Definition of the various delays along the control chain"},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/discrete-control-delay#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":"Discrete control delay identification"}]},{"@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\/65ef663818eab76f53cc627ab80e0a51","name":"Julien Orsinger","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g6545a7220411572e799ad58574cce259","url":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0a0328b09c6abe61fa1e263a1066dcb26ea8f3b9e8b1d78056047620947bb388?s=96&d=mm&r=g","caption":"Julien Orsinger"},"description":"Julien is a senior power electronics engineer. On the knowledge base, he is acting as the editorial manager and is therefore the co-author of numerous articles on a broad variety of topics.","sameAs":["https:\/\/www.linkedin.com\/in\/julien-orsinger-640ab2129\/"],"url":"https:\/\/imperix.com\/doc\/author\/orsinger"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/991","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=991"}],"version-history":[{"count":30,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/991\/revisions"}],"predecessor-version":[{"id":33975,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/991\/revisions\/33975"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/3072"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=991"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=991"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=991"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=991"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=991"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=991"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=991"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}