{"id":14834,"date":"2023-05-08T09:15:53","date_gmt":"2023-05-08T09:15:53","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=14834"},"modified":"2025-08-08T14:03:53","modified_gmt":"2025-08-08T14:03:53","slug":"pi-based-current-control","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control","title":{"rendered":"PI based current control"},"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\/implementation\/pi-based-current-control\/#Elementary-principles-of-current-control\" >Elementary principles of current control<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control\/#PI-controller-tuning\" >PI controller tuning<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control\/#Feed-forward-for-buck-converter-current-control\" >Feed-forward for buck converter current control<\/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\/implementation\/pi-based-current-control\/#Duty-cycle-computation\" >Duty cycle computation<\/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\/implementation\/pi-based-current-control\/#Academic-references\" >Academic references<\/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\/implementation\/pi-based-current-control\/#Practical-current-control-example-on-a-Buck\" >Practical current control example on a Buck<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control\/#Control-software\" >Control software<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control\/#Experimental-setup\" >Experimental setup<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control\/#Tracking-performance\" >Tracking performance<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p>This technical note presents a conventional PI controller-based current control strategy, using a buck converter as example. The developed example may be employed as an introduction to imperix&#8217;s toolset and as a reference model to perform first tests on new equipment.<\/p>\n\n\n\n<p>Many applications, such as motor drive, battery chargers and grid-connected inverters require current control, or regulation. This article will considers the current control of a buck converter operating in continuous conduction. Practical information on how to set-up such a system is available in<a href=\"https:\/\/imperix.com\/doc\/help\/how-to-build-a-buck-converter\"> PN119<\/a>. Details about the component sizing as a well as continuous vs. discontinuous conduction are also given in <a href=\"https:\/\/imperix.com\/doc\/help\/how-to-build-a-buck-converter\">TN100<\/a>.<\/p>\n\n\n\n<p>The simplified schematic of the considered system is presented below. \\(R_{b}\\) is the equivalent series resistance of the inductor, otherwise designated as \\(L\\). A passive load is considered, represented by \\(R_{L}\\).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"357\" height=\"170\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Buck_schem-2.png\" alt=\"Buck converter schematic\" class=\"wp-image-15124\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Buck_schem-2.png 357w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Buck_schem-2-300x143.png 300w\" sizes=\"auto, (max-width: 357px) 100vw, 357px\" \/><figcaption class=\"wp-element-caption\">Fig.1: Buck converter schematic<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-current-control\"><span class=\"ez-toc-section\" id=\"Elementary-principles-of-current-control\"><\/span>Elementary principles of current control<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Current control is generally implemented by leveraging the inductive energy stored inside an inductor. In other words, leveraging the fact that the current flowing through an inductor is a function of the voltage across its terminals:<\/p>\n\n\n\n<p>$$I= \\frac{1}{L}\\int_{}^{}(V_{1}-V_{2})dt$$<\/p>\n\n\n\n<p>In a buck converter, the output current is therefore controllable thanks to the difference between the converter voltage \\(V_{leg}\\) and the measured output voltage \\(V_{out}\\). In this case, \\(V_{L}=V_{leg}-V_{out}\\) is the input variable (the control variable), and \\(i_{b}\\) is the output variable.<\/p>\n\n\n\n<p>Translated into the Laplace domain this yields the first order transfer function below:<\/p>\n\n\n\n<p>$$\\cfrac{I_L(s)}{V_L(s)} = \\cfrac{1}{sL+R_{b}}$$<\/p>\n\n\n\n<p>Performing a simple substitution, the well-known expression of a first order system can be retrieved:<\/p>\n\n\n\n<p>$$P_1(s) = \\displaystyle\\frac{K_1}{1+s T_1} \\qquad \\text{with} \\qquad \\begin{cases}K_1 = 1\/R_b \\\\ T_1 = L_b\/R_b \\end{cases}$$<\/p>\n\n\n\n<p>The plant model transfer function being of the first order, it can then be controlled with a PI controller with zero steady-state error when tracking reference steps [2].<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"2379\" height=\"834\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Control_loop.png\" alt=\"Buck converter current control model\" class=\"wp-image-33468\" style=\"object-fit:cover;width:577px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Control_loop.png 2379w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Control_loop-300x105.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Control_loop-1024x359.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Control_loop-768x269.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Control_loop-1536x538.png 1536w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/Control_loop-2048x718.png 2048w\" sizes=\"auto, (max-width: 2379px) 100vw, 2379px\" \/><figcaption class=\"wp-element-caption\">Fig.2: Equivalent plant model<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-pi-tuning-for-current-control\"><span class=\"ez-toc-section\" id=\"PI-controller-tuning\"><\/span>PI controller tuning<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>In most cases, it is desired to tune current control for tracking performance rather than for perturbation rejection. In other words, bandwidth is preferred over stability or robustness. In this case, a common criteria for tuning the PI controller parameters is the so-called &#8220;magnitude optimum&#8221; criteria. This sets:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>$$\\begin{aligned}<br>&amp;T_n = T_1\\\\<br>&amp;T_i = 2 K_1 T_{d,tot}<br>\\end{aligned}$$<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>$$\\begin{aligned}<br>&amp;K_p = T_1 \/T_i \\\\<br>&amp;K_i = 1 \/ T_i<br>\\end{aligned}$$<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>More information on controller tuning is given in <a href=\"https:\/\/imperix.com\/doc\/implementation\/discrete-pi-controller\">TN105<\/a>.<\/p>\n\n\n\n<p>Considering the buck converter&#8217;s transfer function, this yields:<\/p>\n\n\n\n<p>$$K_p = \\cfrac{L}{2T_{d,tot}} \\quad \\quad K_i = \\cfrac{R_b}{2T_{d,tot}}$$<\/p>\n\n\n\n<p>Where \\(T_{d,tot}\\) represents the total control delay, which can be considered as the sum of two terms:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The control delay \\(T_{d,ctrl}\\), corresponding to the delay between the sampling instant and the instant, at which the duty-cycle is updated within the PWM modulator. This is mostly the algorithm computation time.<\/li>\n\n\n\n<li>The modulator delay \\(T_{d,\\text{PWM}}\\), corresponding to the average delay between the duty-cycle update (i.e. the moment at which it is latched by the modulator) and the resulting change at the output.<\/li>\n<\/ol>\n\n\n\n<p>In the present case, the sampling phase is set to&nbsp;\\(\\phi_s = 0.5\\) to ensure sampling in the middle of the current ripple (with a triangular carrier for PWM). The cycle delay is shorter than half a control period since the control algorithm is very light, leading to a control delay of \\(T_{d,ctrl}=T_s\/2\\). Finally, the triangular carrier with a single-rate update leads to a modulator delay of \\(T_{d,\\text{PWM}}=T_s\/2\\). In total, the delay is therefore one complete sampling period \\(T_{d,tot}=T_s\\).<\/p>\n\n\n\n<p>More information on these delay and how they can be identified is given in <a href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\">TN142<\/a>.<\/p>\n\n\n\n<p>Numerically, considering a inductor value of 2.2mH with 0.033\\(\\Omega\\) of series resistance (example from imperix&#8217;s <a href=\"https:\/\/imperix.com\/products\/power\/filter-box\/\">passive filter box<\/a>), the controller parameters become:<\/p>\n\n\n\n<p>$$K_p = \\cfrac{2.2\\,\\text{mH}}{2\\times 50\\,\\text{\u00b5s}}=22\\,\\Omega \\quad \\quad K_i = \\cfrac{0.033\\,\\Omega}{2\\times 50\\,\\text{\u00b5s}}=330 \\,\\Omega\\,\\text{s}^{-1}$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-feed-forward-control\"><span class=\"ez-toc-section\" id=\"Feed-forward-for-buck-converter-current-control\"><\/span>Feed-forward for buck converter current control<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>As described above, the current controller is therefore responsible for producing the necessary voltage across the inductor. Indeed, the considered plant is exclusively constituted by \\(L\\) and \\(R_{b}\\).<\/p>\n\n\n\n<p>Therefore, as shown in Fig.2, the voltage that must be produced by the buck converter (reference voltage \\(V^*_{leg}\\)) is constituted by the sum of the measured load voltage \\(V_{out}\\) and the current controller output. In other words:<\/p>\n\n\n\n<p>$$V^*_{leg} = V_{PI}+V_{out}$$<\/p>\n\n\n\n<p>In this case, \\(V_{out}\\) is said to be feedforwarded to the controller output.<\/p>\n\n\n\n<p>Interestingly, if \\(V_{out}\\) wasn&#8217;t used a a feed-forward term, the integral term of the current controller would naturally add up and compensate for that voltage. However, this integral action takes time and therefore cannot help reject rapid changes to the load conditions (e.g. load step). For this reason, feedforwarding the load-side voltage is generally favorable to current control performance. <\/p>\n\n\n\n<p>On the other hand, when this load-side voltage measurement is of poor quality (e.g. noisy, or presenting a sensitivity error), feedforwarding can be rather detrimental. In such a case, the feedfoward signal rather represents an additional perturbation, which the current control must reject. <\/p>\n\n\n\n<p>In the end, the benefits of voltage feedwording at the output of a current controller must therefore be evaluated on a case-by-case basis as a function of the quality of that feedforward signal. Filtering the signal before feedforwarding is also always possible, but with inevitable sacrifices on the corresponding bandwidth.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-duty-cycle-computation\"><span class=\"ez-toc-section\" id=\"Duty-cycle-computation\"><\/span>Duty cycle computation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Based on the computed reference voltage \\(V^*_{leg}\\), the duty cycle can be easily computed as the corresponding fraction of the available DC bus voltage \\(V^*_{dc}\\).<\/p>\n\n\n\n<p>Here again, some feedforward behavior is possible. Indeed, by using the actual value of the DC voltage, rejection of the corresponding variations or fluctuations is possible (if any). On the other hand, dividing by the setpoint (nominal value) or a filtered measurement may also be possible, although generally not recommended due to the impact on the closed-loop performance (stability) or on special regimes (e.g. startup\/shutdown, etc).<\/p>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"346\" height=\"156\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/08\/d_computation.png\" alt=\"Buck converter duty cycle computation\" class=\"wp-image-5213\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/08\/d_computation.png 346w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/08\/d_computation-300x135.png 300w\" sizes=\"auto, (max-width: 346px) 100vw, 346px\" \/><figcaption class=\"wp-element-caption\">Fig.3: Duty cycle computation<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-academic-references\"><span class=\"ez-toc-section\" id=\"Academic-references\"><\/span>Academic references<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>[1] Karl J. \u00c5str\u00f6m and Tore H\u00e4gglund; \u201cAdvanced PID Control\u201d; 1995<br>[2] Franklin, Powell and Emami-Naeini, &#8220;Feedback Control of Dynamic Systems&#8221;, Global Edition, 7th Edition, 2017.<br>[3] Visioli, A.; \u201cPractical PID Control\u201d; 2006<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-buck-converter-prototype\"><span class=\"ez-toc-section\" id=\"Practical-current-control-example-on-a-Buck\"><\/span>Practical current control example on a Buck<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-control-software\"><span class=\"ez-toc-section\" id=\"Control-software\"><\/span>Control software<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The following files contain the implementation of a current control algorithm for a buck converter in both Simulink and PLECS environments using the <a href=\"https:\/\/imperix.com\/software\/acg-sdk\/\">ACG SDK<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 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\" id=\"h-simulink\">Simulink:<\/h4>\n\n\n\n<p><em>Contains the Simulink model.<\/em><\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-1698f33c-04d6-493c-9588-5ab37889d402\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/TN109_PI_current_control_Simulink.zip\">TN109_PI_current_control_Simulink<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/TN109_PI_current_control_Simulink.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-1698f33c-04d6-493c-9588-5ab37889d402\">Download<\/a><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"633\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-11-1024x633.png\" alt=\"\" class=\"wp-image-34108\" style=\"width:377px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-11-1024x633.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-11-300x186.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-11-768x475.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-11.png 1140w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Control algorithm<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"633\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-12-1024x633.png\" alt=\"\" class=\"wp-image-34109\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-12-1024x633.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-12-300x186.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-12-768x475.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-12.png 1140w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Simulated plant<\/figcaption><\/figure>\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\" id=\"h-plecs\">PLECS:<\/h4>\n\n\n\n<p><em>Contains the PLECS model.<\/em><\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-65f1fc90-c168-42ea-ae66-b738b116912e\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/TN109_PI_current_control.plecs\">TN109_PI_current_control<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/TN109_PI_current_control.plecs\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-65f1fc90-c168-42ea-ae66-b738b116912e\">Download<\/a><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"896\" height=\"544\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-13.png\" alt=\"\" class=\"wp-image-34110\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-13.png 896w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-13-300x182.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-13-768x466.png 768w\" sizes=\"auto, (max-width: 896px) 100vw, 896px\" \/><figcaption class=\"wp-element-caption\">Control algorithm<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"875\" height=\"542\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-16.png\" alt=\"\" class=\"wp-image-34113\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-16.png 875w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-16-300x186.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/image-16-768x476.png 768w\" sizes=\"auto, (max-width: 875px) 100vw, 875px\" \/><figcaption class=\"wp-element-caption\">Simulated plant<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-experimental-setup\"><span class=\"ez-toc-section\" id=\"Experimental-setup\"><\/span>Experimental setup<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Detailed step-by-step instructions for building this setup are given in <a href=\"https:\/\/imperix.com\/doc\/help\/how-to-build-a-buck-converter\">PN119<\/a>. The converter contains the following main components:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>One&nbsp;<a href=\"https:\/\/imperix.com\/products\/control\/bbox\">B-Box RCP<\/a>&nbsp;controller with&nbsp;<a href=\"https:\/\/imperix.com\/software\/acg-sdk\">ACG SDK<\/a>&nbsp;software<\/li>\n\n\n\n<li>1x&nbsp;<a href=\"https:\/\/imperix.com\/products\/power\/peb\">PEB8038<\/a>&nbsp;half-bridge module (rated for 800V 38A)<\/li>\n\n\n\n<li>1x 2.2mH 32A inductor<\/li>\n\n\n\n<li>1x 8Ohms load resistor<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image is-resized is-style-default\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"524\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549-Converted-1024x524.png\" alt=\"\" class=\"wp-image-34275\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549-Converted-1024x524.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549-Converted-300x153.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549-Converted-768x393.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549-Converted-1536x786.png 1536w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549-Converted-2048x1048.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Typical experimental test bench<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-current-control-results\"><span class=\"ez-toc-section\" id=\"Tracking-performance\"><\/span>Tracking performance<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The graph below shows the step response of the current control to a reference change from 5 to 10 A. The closed-loop control algorithm clearly acts as intended and follows the reference.<\/p>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/08\/Current_step-3.png\" alt=\"Current control step response\" class=\"wp-image-5180\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/08\/Current_step-3.png 800w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/08\/Current_step-3-300x113.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/08\/Current_step-3-768x288.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Transient response to a reference step change from 5A to 10A.<\/figcaption><\/figure>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This technical note presents a conventional PI controller-based current control strategy, using a buck converter as example. The developed example may be employed as an&#8230;<\/p>\n","protected":false},"author":11,"featured_media":34278,"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":[4],"tags":[53,21],"software-environments":[103,104],"provided-results":[108,107],"related-products":[50,32,166,111],"guidedreadings":[],"tutorials":[126],"user-manuals":[],"coauthors":[64],"class_list":["post-14834","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-implementation","tag-current-control","tag-dc-dc-converters","software-environments-matlab","software-environments-plecs","provided-results-experimental","provided-results-simulation","related-products-acg-sdk","related-products-b-box-rcp","related-products-b-box-rcp-3-0","related-products-pm","tutorials-current-controlled-buck-converter"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PI based current control - imperix<\/title>\n<meta name=\"description\" content=\"This article presents the implementation of current control in a buck converter. Experimental results showcase the converter&#039;s performance.\" \/>\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\/implementation\/pi-based-current-control\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PI based current control - imperix\" \/>\n<meta property=\"og:description\" content=\"This article presents the implementation of current control in a buck converter. Experimental results showcase the converter&#039;s performance.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-08T09:15:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-08T14:03:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549_500x350-02-1024x717.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"717\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jessy An\u00e7ay\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jessy An\u00e7ay\" \/>\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\\\/implementation\\\/pi-based-current-control#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control\"},\"author\":{\"name\":\"Jessy An\u00e7ay\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/53bdc49b53b03a52afee023feef62ea4\"},\"headline\":\"PI based current control\",\"datePublished\":\"2023-05-08T09:15:53+00:00\",\"dateModified\":\"2025-08-08T14:03:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control\"},\"wordCount\":1258,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/DSC9549_500x350-02.png\",\"keywords\":[\"Current control\",\"DC\\\/DC converters\"],\"articleSection\":[\"Technical notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control\",\"name\":\"PI based current control - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/DSC9549_500x350-02.png\",\"datePublished\":\"2023-05-08T09:15:53+00:00\",\"dateModified\":\"2025-08-08T14:03:53+00:00\",\"description\":\"This article presents the implementation of current control in a buck converter. Experimental results showcase the converter's performance.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/DSC9549_500x350-02.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/DSC9549_500x350-02.png\",\"width\":2084,\"height\":1459},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/pi-based-current-control#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Knowledge base\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Technical notes\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/category\\\/implementation\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PI based current control\"}]},{\"@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\\\/53bdc49b53b03a52afee023feef62ea4\",\"name\":\"Jessy An\u00e7ay\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ee54f075f5969fcfd2bf6f348058cf40ca40d54a6472ac7c0a9855d036190d0a?s=96&d=mm&r=g3826f6cf12d7359812a917063d7db3c1\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ee54f075f5969fcfd2bf6f348058cf40ca40d54a6472ac7c0a9855d036190d0a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ee54f075f5969fcfd2bf6f348058cf40ca40d54a6472ac7c0a9855d036190d0a?s=96&d=mm&r=g\",\"caption\":\"Jessy An\u00e7ay\"},\"description\":\"Jessy is a power electronics engineer. At imperix, he is mostly involved with sales and project engineering. On the knowledge base, he is an active contributor to numerous notes and examples on a broad variety of topics.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jessy-ancay-a47615237\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/ancay\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PI based current control - imperix","description":"This article presents the implementation of current control in a buck converter. Experimental results showcase the converter's performance.","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\/implementation\/pi-based-current-control","og_locale":"en_US","og_type":"article","og_title":"PI based current control - imperix","og_description":"This article presents the implementation of current control in a buck converter. Experimental results showcase the converter's performance.","og_url":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control","og_site_name":"imperix","article_published_time":"2023-05-08T09:15:53+00:00","article_modified_time":"2025-08-08T14:03:53+00:00","og_image":[{"width":1024,"height":717,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549_500x350-02-1024x717.png","type":"image\/png"}],"author":"Jessy An\u00e7ay","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jessy An\u00e7ay","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control"},"author":{"name":"Jessy An\u00e7ay","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/53bdc49b53b03a52afee023feef62ea4"},"headline":"PI based current control","datePublished":"2023-05-08T09:15:53+00:00","dateModified":"2025-08-08T14:03:53+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control"},"wordCount":1258,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549_500x350-02.png","keywords":["Current control","DC\/DC converters"],"articleSection":["Technical notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control","url":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control","name":"PI based current control - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549_500x350-02.png","datePublished":"2023-05-08T09:15:53+00:00","dateModified":"2025-08-08T14:03:53+00:00","description":"This article presents the implementation of current control in a buck converter. Experimental results showcase the converter's performance.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549_500x350-02.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2023\/05\/DSC9549_500x350-02.png","width":2084,"height":1459},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/implementation\/pi-based-current-control#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Knowledge base","item":"https:\/\/imperix.com\/doc\/"},{"@type":"ListItem","position":2,"name":"Technical notes","item":"https:\/\/imperix.com\/doc\/category\/implementation"},{"@type":"ListItem","position":3,"name":"PI based current control"}]},{"@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\/53bdc49b53b03a52afee023feef62ea4","name":"Jessy An\u00e7ay","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ee54f075f5969fcfd2bf6f348058cf40ca40d54a6472ac7c0a9855d036190d0a?s=96&d=mm&r=g3826f6cf12d7359812a917063d7db3c1","url":"https:\/\/secure.gravatar.com\/avatar\/ee54f075f5969fcfd2bf6f348058cf40ca40d54a6472ac7c0a9855d036190d0a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ee54f075f5969fcfd2bf6f348058cf40ca40d54a6472ac7c0a9855d036190d0a?s=96&d=mm&r=g","caption":"Jessy An\u00e7ay"},"description":"Jessy is a power electronics engineer. At imperix, he is mostly involved with sales and project engineering. On the knowledge base, he is an active contributor to numerous notes and examples on a broad variety of topics.","sameAs":["https:\/\/www.linkedin.com\/in\/jessy-ancay-a47615237\/"],"url":"https:\/\/imperix.com\/doc\/author\/ancay"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/14834","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\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=14834"}],"version-history":[{"count":49,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/14834\/revisions"}],"predecessor-version":[{"id":34340,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/14834\/revisions\/34340"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/34278"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=14834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=14834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=14834"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=14834"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=14834"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=14834"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=14834"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=14834"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=14834"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=14834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}