{"id":49359,"date":"2026-09-14T14:58:59","date_gmt":"2026-09-14T14:58:59","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=49359"},"modified":"2026-09-14T12:00:00","modified_gmt":"2026-09-14T12:00:00","slug":"controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","title":{"rendered":"Controller tuning in the frequency domain"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 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\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Controller-tuning-procedure\" >Controller tuning procedure<\/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\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Derivation-of-necessary-parameters\" >Derivation of necessary parameters<\/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\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#PI-controller-tuning\" >PI controller tuning<\/a><\/li><\/ul><\/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\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Experimental-validation\" >Experimental validation<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Hardware-setup-description\" >Hardware setup description<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Validation-in-Cockpit\" >Validation in Cockpit<\/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\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Interpretation-of-the-results-and-fine-tuning-of-the-gains\" >Interpretation of the results and fine-tuning of the gains<\/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\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Conclusions\" >Conclusions<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">This note describes a simple frequency-domain PI controller tuning procedure using the imperix <a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">System Identification<\/a> toolbox, available starting from <a href=\"https:\/\/imperix.com\/software\/acg-sdk\/\">imperix ACG SDK<\/a> version 2026.3. The toolbox is a helpful companion in several relevant scenarios:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It provides the system&#8217;s frequency response, allowing validation of an analytical model or helping the user derive one;<\/li>\n\n\n\n<li>It helps in assessing compliance with the chosen control objectives when tuning the controller, such as closed-loop stability margins or regulation performance.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This article considers a <a href=\"https:\/\/imperix.com\/doc\/implementation\/step-down-buck-converter\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/implementation\/step-down-buck-converter\">buck converter<\/a> and describes the steps to tune the inductor current controller using the magnitude-optimum method, deriving all necessary parameters from system identification data and finally validating the design with the&nbsp;System Identification&nbsp;Toolbox.<\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">This note documents a beta feature, available with <a href=\"https:\/\/imperix.com\/downloads\/\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/downloads\/\">ACG SDK 2026.3<\/a>. The content of this note may be improved and is therefore to be considered provisional.<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Controller-tuning-procedure\"><\/span>Controller tuning procedure<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The goal of this section is to tune the <math data-latex=\"k_i\"><semantics><msub><mi>k<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_i<\/annotation><\/semantics><\/math> and <math data-latex=\"k_p\"><semantics><msub><mi>k<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_p<\/annotation><\/semantics><\/math> gains of the PI controller starting from the frequency response of the plant <math data-latex=\"G(s)\"><semantics><mrow><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">G(s)<\/annotation><\/semantics><\/math>. The following schematic shows the system under consideration:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"506\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck.png\" alt=\"Buck converter considered for the controller tuning procedure.\" class=\"wp-image-50356\" style=\"width:312px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck.png 624w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck-300x243.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><figcaption class=\"wp-element-caption\">Buck converter considered for the controller tuning procedure.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The plant <math data-latex=\"G(s)\"><semantics><mrow><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">G(s)<\/annotation><\/semantics><\/math> is the buck converter and includes the RL circuit, the power module, the sensors, and the PWM modulator (i.e., the system actuator). It corresponds to the grey area in the above schematic. The controller <math data-latex=\"C(s)\"><semantics><mrow><mi>C<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">C(s)<\/annotation><\/semantics><\/math> to be designed is implemented in an imperix controller, and its structure is a typical parallel PI controller:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>C<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mstyle displaystyle=\"true\" scriptlevel=\"0\"><mfrac><msub><mi>k<\/mi><mi>i<\/mi><\/msub><mi>s<\/mi><\/mfrac><\/mstyle><mo>+<\/mo><msub><mi>k<\/mi><mi>p<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">C(s) = \\dfrac{k_i}{s} + k_p<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually, the above picture corresponds to the following control scheme:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"464\" height=\"142\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/control_scheme.png\" alt=\"Equivalent block scheme considered for the controller tuning procedure.\" class=\"wp-image-50157\" style=\"width:232px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/control_scheme.png 464w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/control_scheme-300x92.png 300w\" sizes=\"auto, (max-width: 464px) 100vw, 464px\" \/><figcaption class=\"wp-element-caption\">Equivalent control block scheme.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The transfer function of interest for the controller-tuning procedure is from the duty cycle <math data-latex=\"d\"><semantics><mi>d<\/mi><annotation encoding=\"application\/x-tex\">d<\/annotation><\/semantics><\/math> to the inductor current <math data-latex=\"i_L\"><semantics><msub><mi>i<\/mi><mi>L<\/mi><\/msub><annotation encoding=\"application\/x-tex\">i_L<\/annotation><\/semantics><\/math>. Its frequency response is identified in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>, and it is obtained from a system with the following parameter values:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Description<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Symbol<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>Value<\/strong><\/td><\/tr><tr><td>DC input voltage<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"V_\\mathrm{dc}\"><semantics><msub><mi>V<\/mi><mrow><mtext><\/mtext><mi>dc<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">V_\\mathrm{dc}<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">200 V<\/td><\/tr><tr><td>Filter inductance<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"L\"><semantics><mi>L<\/mi><annotation encoding=\"application\/x-tex\">L<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">2.65 mH<\/td><\/tr><tr><td>Load resistance<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"R\"><semantics><mi>R<\/mi><annotation encoding=\"application\/x-tex\">R<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">11.9 \u03a9<\/td><\/tr><tr><td>Switching frequency<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"F_\\mathrm{sw}\"><semantics><msub><mi>F<\/mi><mrow><mtext><\/mtext><mi>sw<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">F_\\mathrm{sw}<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">50 kHz<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-warning\" role=\"alert\">The plant frequency response and the tuning outcome depend on these values. If the user values differ from those considered here, the frequency response should be measured again, following the procedure in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>.<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Derivation-of-necessary-parameters\"><\/span>Derivation of necessary parameters<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following Bode plot shows the frequency response resulting from the procedure in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>. By visual inspection, one notices the following characteristics:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flat response in the low-frequency domain;<\/li>\n\n\n\n<li>A roll-off of 20dB\/dec in the high-frequency region;<\/li>\n\n\n\n<li>The typical phase profile of a system with a delay, where the phase lag increases linearly with the 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=\"1375\" height=\"1094\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1.png\" alt=\"Identified frequency response of the plant used in the controller tuning example.\" class=\"wp-image-49581\" style=\"width:780px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1.png 1375w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1-300x239.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1-768x611.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1-1024x815.png 1024w\" sizes=\"auto, (max-width: 1375px) 100vw, 1375px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Therefore, a first-order system plus delay is a good candidate to model the system behavior:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mstyle displaystyle=\"true\" scriptlevel=\"0\"><mfrac><mi>K<\/mi><mrow><mn>1<\/mn><mo>+<\/mo><mi>s<\/mi><mi>\/<\/mi><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><\/mrow><\/mfrac><\/mstyle><mo>\u22c5<\/mo><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>s<\/mi><msub><mi>T<\/mi><mi>d<\/mi><\/msub><\/mrow><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">G(s) = \\dfrac{K}{1 + s\/\\omega_p}\\cdot e^{-sT_d}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The magnitude-optimum controller tuning procedure requires the knowledge of <math data-latex=\"K\"><semantics><mi>K<\/mi><annotation encoding=\"application\/x-tex\">K<\/annotation><\/semantics><\/math>, <math data-latex=\"\\omega_p\"><semantics><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\omega_p<\/annotation><\/semantics><\/math>, and <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> to derive the PI controller <math data-latex=\"k_i\"><semantics><msub><mi>k<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_i<\/annotation><\/semantics><\/math> and <math data-latex=\"k_p\"><semantics><msub><mi>k<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_p<\/annotation><\/semantics><\/math> gain values:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><math data-latex=\"K\"><semantics><mi>K<\/mi><annotation encoding=\"application\/x-tex\">K<\/annotation><\/semantics><\/math> corresponds to the static gain of the plant, that is <math data-latex=\"|G(0)|\"><semantics><mrow><mi>|<\/mi><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">|G(0)|<\/annotation><\/semantics><\/math>. The value at the lowest available frequency is a good approximation of that.<\/li>\n\n\n\n<li><math data-latex=\"\\omega_p\"><semantics><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\omega_p<\/annotation><\/semantics><\/math> is the frequency of the system pole (in rad\/s). For a first-order system like this, it is the frequency at which the plant&#8217;s magnitude is 3dB lower than <math data-latex=\"|G(0)|\"><semantics><mrow><mi>|<\/mi><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">|G(0)|<\/annotation><\/semantics><\/math>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, one can estimate <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> directly from the phase Bode plot, provided <math data-latex=\"\\omega_p\"><semantics><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\omega_p<\/annotation><\/semantics><\/math> is sufficiently far below the high-frequency region. As the delay provides a phase lag that grows linearly with the frequency, the following relation holds:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c6<\/mi><mo>=<\/mo><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c9<\/mi><mo>\u22c5<\/mo><msub><mi>T<\/mi><mi>d<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">\\Delta\\varphi = \\Delta\\omega\\cdot T_d<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">where <math data-latex=\"\\varphi\"><semantics><mi>\u03c6<\/mi><annotation encoding=\"application\/x-tex\">\\varphi<\/annotation><\/semantics><\/math> is in radians, <math data-latex=\"\\omega\"><semantics><mi>\u03c9<\/mi><annotation encoding=\"application\/x-tex\">\\omega<\/annotation><\/semantics><\/math> is in radians per second, and <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> is in seconds. Using the values available in the graphs yields the following parameters:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mtable displaystyle=\"true\" columnalign=\"right\" class=\"tml-jot\"><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mi>K<\/mi><mo>\u2248<\/mo><mn>24.5<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>dB<\/mi><\/mrow><mo>\u2248<\/mo><mn>16.8<\/mn><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><mo>\u2248<\/mo><mn>2<\/mn><mi>\u03c0<\/mi><mo>\u22c5<\/mo><mn>700<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>Hz<\/mi><\/mrow><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>T<\/mi><mi>d<\/mi><\/msub><mo>\u2248<\/mo><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c6<\/mi><mi>\/<\/mi><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c9<\/mi><mo>\u2248<\/mo><mn>29.5<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>\u03bcs<\/mi><\/mrow><\/mrow><\/mtd><\/mtr><\/mtable><annotation encoding=\"application\/x-tex\">\\begin{split}\nK \\approx 24.5\\,\\mathrm{dB}\\approx 16.8\\\\\\\\\n\\omega_p \\approx 2\\pi\\cdot 700\\,\\mathrm{Hz}\\\\\\\\\nT_d \\approx \\Delta\\varphi\/\\Delta\\omega \\approx 29.5\\,\\mathrm{\\mu s}\n\\end{split}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">It is also possible to compute the total delay <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> directly as described in <a href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\">PN142<\/a>. In such a system, the delay <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> is inherent to the controller and includes the analog acquisition delay, the control-algorithm computation delay, and the PWM modulator delay. With a switching frequency of 50kHz and&nbsp;synchronous averaging&nbsp;in the analog acquisition, the resulting delay is <math data-latex=\"T_d=30\\,\\mathrm{\\mu s}\"><semantics><mrow><msub><mi>T<\/mi><mi>d<\/mi><\/msub><mo>=<\/mo><mn>30<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>\u03bcs<\/mi><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">T_d=30\\,\\mathrm{\\mu s}<\/annotation><\/semantics><\/math>, which is&nbsp;close to the value estimated above.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><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 class=\"wp-block-paragraph\">Once the required parameters are determined, the magnitude-optimum design procedure is straightforward for a first-order system with delay. It merely consists of computing the gains directly from the formulas:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mtable displaystyle=\"true\" columnalign=\"right\" class=\"tml-jot\"><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>T<\/mi><mi>n<\/mi><\/msub><mo>=<\/mo><mn>1<\/mn><mi>\/<\/mi><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><mo separator=\"true\">;<\/mo><mspace width=\"1em\"><\/mspace><msub><mi>T<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><mn>2<\/mn><mi>K<\/mi><msub><mi>T<\/mi><mi>d<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>k<\/mi><mi>p<\/mi><\/msub><mo>=<\/mo><msub><mi>T<\/mi><mi>n<\/mi><\/msub><mi>\/<\/mi><msub><mi>T<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">;<\/mo><mspace width=\"1em\"><\/mspace><msub><mi>k<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><mn>1<\/mn><mi>\/<\/mi><msub><mi>T<\/mi><mi>i<\/mi><\/msub><\/mrow><\/mtd><\/mtr><\/mtable><annotation encoding=\"application\/x-tex\">\\begin{split}\nT_n = 1\/\\omega_p;\\quad\nT_i = 2KT_d\\\\\nk_p = T_n\/T_i;\\quad k_i = 1\/T_i\n\\end{split}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/imperix.com\/doc\/implementation\/pi-controller#PI-controller-tuning-strategies\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/implementation\/pi-controller#PI-controller-tuning-strategies\">TN105<\/a> describes the derivation of these formulas. The resulting values are <math data-latex=\"k_p \\approx 0.23\"><semantics><mrow><msub><mi>k<\/mi><mi>p<\/mi><\/msub><mo>\u2248<\/mo><mn>0.23<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">k_p \\approx 0.23<\/annotation><\/semantics><\/math> and <math data-latex=\"k_i \\approx 1011.5\"><semantics><mrow><msub><mi>k<\/mi><mi>i<\/mi><\/msub><mo>\u2248<\/mo><mn>1011.5<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">k_i \\approx 1011.5<\/annotation><\/semantics><\/math>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Experimental-validation\"><\/span>Experimental validation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To validate the control design, it&#8217;s possible to identify the frequency response of the closed-loop transfer function from the inductor current reference to the measured inductor current. For a magnitude-optimal controller, the expected response is maximally flat up to a certain frequency range (the system bandwidth). If the designed controller is optimal, different <math data-latex=\"k_i\"><semantics><msub><mi>k<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_i<\/annotation><\/semantics><\/math> or <math data-latex=\"k_p\"><semantics><msub><mi>k<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_p<\/annotation><\/semantics><\/math> values should lead to an overdamped or underdamped response.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1100\" height=\"566\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-2.png\" alt=\"\" class=\"wp-image-50462\" style=\"width:500px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-2.png 1100w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-2-300x154.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-2-768x395.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-2-1024x527.png 1024w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><figcaption class=\"wp-element-caption\">Example of a maximally flat frequency response magnitude (dB) vs frequency (logarithmic).<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The procedure to obtain the system closed-loop transfer function consists of perturbing the inductor current reference signal and then computing the <em>Empirical Transfer Function Estimation (ETFE)<\/em> by taking the ratio of the Fourier transforms of the output signal (the perturbed inductor current) over the input signal (the perturbed current reference). In this case, <code>i_Lref<\/code> is perturbed, and it is measured together with <code>i_L<\/code>. The following schematic clarifies the idea. The <a href=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\">System Identification toolbox<\/a> handles the perturbation injection and transfer-function&nbsp;computation.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"532\" height=\"158\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/control_scheme_prbs.png\" alt=\"\" class=\"wp-image-50159\" style=\"width:266px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/control_scheme_prbs.png 532w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/control_scheme_prbs-300x89.png 300w\" sizes=\"auto, (max-width: 532px) 100vw, 532px\" \/><figcaption class=\"wp-element-caption\">Scheme of the ETFE configuration.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">These Simulink and PLECS models are preconfigured to perform system identification on the closed-loop system. The <a href=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\">Sys. Id. Injector<\/a> block perturbs the system and then measures its response. The <em>numerator<\/em> signal is <code>i_L<\/code>, while the <em>denominator <\/em>is <code>i_Lref<\/code>.<\/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<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1354\" height=\"450\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1.png\" alt=\"Simulink model implementing the validation step of the controller tuning procedure.\" class=\"wp-image-49594\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1.png 1354w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1-300x100.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1-767x255.png 767w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1-1024x340.png 1024w\" sizes=\"auto, (max-width: 1354px) 100vw, 1354px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1193\" height=\"491\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs.png\" alt=\"PLECS model implementing the validation step of the controller tuning procedure.\" class=\"wp-image-49592\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs.png 1193w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs-300x123.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs-768x316.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs-1024x421.png 1024w\" sizes=\"auto, (max-width: 1193px) 100vw, 1193px\" \/><\/figure>\n<\/div>\n<\/div>\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<div class=\"wp-block-file\"><a id=\"wp-block-file--media-40689257-7cc5-4c4d-b723-f418acdc3557\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_Simulink.zip\">PN216_ctrl_tune_sysId_Simulink<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_Simulink.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-40689257-7cc5-4c4d-b723-f418acdc3557\">Download<\/a><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-2e650476-af70-4d86-9351-dec8a89ea68f\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_PLECS.zip\">PN216_ctrl_tune_sysId_PLECS<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_PLECS.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-2e650476-af70-4d86-9351-dec8a89ea68f\">Download<\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The models can be directly built and sent to an imperix controller by pressing <code>Ctrl + B<\/code> in Simulink or <code>Ctrl + Alt + B<\/code> in PLECS. More information on deploying the model to an imperix controller is available in <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">PN138<\/a>. After building the model, <a type=\"link\" href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide?currentThread=b-box-4\" id=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide?currentThread=b-box-4\">Cockpit<\/a> should automatically open. The user can also open it manually. It will also automatically detect the&nbsp;<a href=\"https:\/\/imperix.com\/doc\/help\/working-with-cockpit-projects\">Cockpit project<\/a>&nbsp;file (<code>.ixproj<\/code>) provided with the models. This pre-configures the project workspace by adding a&nbsp;<a href=\"https:\/\/imperix.com\/doc\/help\/scope-module\">Scope module<\/a>&nbsp;and a&nbsp;<a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">System Identification module<\/a>, and adds the&nbsp;<code>i_L<\/code>,&nbsp;<code>i_Lref<\/code>, and <code>d<\/code>&nbsp;variables to the Scope.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hardware-setup-description\"><\/span>Hardware setup description<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following list describes the elements used to build the buck converter:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <a href=\"https:\/\/imperix.com\/products\/power\/sic-mosfet-module\/\">phase leg module<\/a> (PEB-800-40, PEB8038, PEB8024, or PEB4050);<\/li>\n\n\n\n<li>A <a href=\"https:\/\/imperix.com\/products\/control\/rapid-prototyping-controller\/\">programmable controller<\/a> (B-Box 4, B-Box 3, or B-Box 3 Micro);<\/li>\n\n\n\n<li>A DC power supply;<\/li>\n\n\n\n<li>An inductor and a resistor;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The following schematic conceptually illustrates the setup for the buck topology considered. The setup uses the phase leg module&#8217;s internal output current and input voltage sensors to measure <math data-latex=\"i_L\"><semantics><msub><mi>i<\/mi><mi>L<\/mi><\/msub><annotation encoding=\"application\/x-tex\">i_L<\/annotation><\/semantics><\/math> and <math data-latex=\"V_\\mathrm{dc}\"><semantics><msub><mi>V<\/mi><mrow><mtext><\/mtext><mi>dc<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">V_\\mathrm{dc}<\/annotation><\/semantics><\/math>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"652\" height=\"347\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck_schematic-1.png\" alt=\"Schematic illustrating the hardware implementation of the buck converter considered in this controller tuning example.\" class=\"wp-image-50358\" style=\"width:652px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck_schematic-1.png 652w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck_schematic-1-300x160.png 300w\" sizes=\"auto, (max-width: 652px) 100vw, 652px\" \/><figcaption class=\"wp-element-caption\">Schematic illustrating the hardware implementation of the considered buck converter.<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Validation-in-Cockpit\"><\/span>Validation in Cockpit<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once Cockpit is open, it is possible to perform the identification by following these steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>For best results, the system should operate at the same operating conditions as during characterization. This corresponds to an input DC voltage of 200 V and an average duty cycle of 0.5, as described in the parametric identification example in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>.<\/li>\n\n\n\n<li>Turn on the DC voltage source and make sure the variable <code>V_dc<\/code> settles around the expected value. If not, check the sensor&#8217;s sensitivity and whether it is connected to the correct channel. The <code>PWM enable<\/code> switch should be off, so <code>i_L<\/code> should be zero.<\/li>\n\n\n\n<li>The tunable reference signals should bring the system to the desired operating point. As discussed in 2., in this specific example the duty cycle bias should be at 0.5. The corresponding <code>i_Lref<\/code> value can be computed from <math data-latex=\"d\\cdot|G(0)|\"><semantics><mrow><mi>d<\/mi><mo>\u22c5<\/mo><mi>|<\/mi><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">d\\cdot|G(0)|<\/annotation><\/semantics><\/math>. Alternatively, the user can set a low current level and increase it gradually, monitoring the value of <code>d<\/code>. In this example, <code>i_Lref<\/code>=8 A.<\/li>\n\n\n\n<li>Configure the injection parameter on the right panel, under <em>Sys. Id.<\/em>:\n<ul class=\"wp-block-list\">\n<li>As the injector perturbs the system outside the control loop, after a constant signal, <em>Injection mode<\/em> can be set either to open-loop or closed-loop, without any difference;<\/li>\n\n\n\n<li>The perturbation amplitude should yield a good&nbsp;signal-to-noise&nbsp;ratio without introducing harmonics that would reduce estimation accuracy&nbsp;(i.e., avoid <em>non-linear operation<\/em>). In this case, 0.5 is a good starting point.<\/li>\n\n\n\n<li>Leave the advanced parameters at their default values. The <a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">Sys. Id. module<\/a> documentation provides more information.<\/li>\n\n\n\n<li>The numerator and denominator signals should belong to the frequency response of interest; in this case, from the duty cycle to the inductor current. Then, <code>i_Lref<\/code> is the denominator and <code>i_L<\/code> is the numerator.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Enable the PWM and ensure the resulting current follows the reference.<\/li>\n\n\n\n<li>Press the start injection button, wait for the injection to end, and the Bode plot of the identified transfer function will appear on the <a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">Sys. Id. module<\/a>.<\/li>\n\n\n\n<li>The waveform can be exported (either as <code>.csv<\/code>&nbsp;or&nbsp;<code>.mat<\/code>) for later processing with the right-click menu. Alternatively,&nbsp;<a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide?currentThread=b-box-4#Snapshots\">snapshots<\/a>&nbsp;can help in comparing multiple acquisitions.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Interpretation-of-the-results-and-fine-tuning-of-the-gains\"><\/span>Interpretation of the results and fine-tuning of the gains<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In this case, the identification yields a closed-loop response presenting a small overshoot around 4 kHz, signaling a slightly underdamped closed-loop system. This is most likely due to under-modeling, as the first-order model neglects aspects such as parasitic elements or DC source output impedance.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1546\" height=\"780\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot.png\" alt=\"Resulting closed-loop system frequency response from the controller tuning procedure.\" class=\"wp-image-49875\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot.png 1546w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-300x151.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-767x387.png 767w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-1024x517.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-1536x775.png 1536w\" sizes=\"auto, (max-width: 1546px) 100vw, 1546px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">At this point, the overshoot is so small that the user might consider it acceptable and conclude the tuning procedure. Otherwise, it is possible to manually fine-tune the <code>k_p<\/code> and <code>k_i<\/code> gains to try improving the frequency response. For example, the user can slightly reduce the controller gains in case of an underdamped response, or slightly increase them otherwise. Cockpit&#8217;s <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide#Snapshots\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide#Snapshots\">snapshots<\/a> feature simplifies comparing multiple acquisitions with different parameters. Moreover, the <a href=\"https:\/\/imperix.com\/doc\/help\/scope-module#Transient-generator\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/scope-module#Transient-generator\">transient generator<\/a> feature allows you to easily obtain the system step response. The following picture shows some tests conducted by increasing or decreasing the controller gains by the amounts indicated in the legend. Empirically, reducing the parameter gains by 7% yields a response close to a maximally flat one, with an acceptable step-response profile.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1546\" height=\"801\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit.png\" alt=\"\" class=\"wp-image-50478\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit.png 1546w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit-300x155.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit-766x397.png 766w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit-1024x531.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit-1536x796.png 1536w\" sizes=\"auto, (max-width: 1546px) 100vw, 1546px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusions\"><\/span>Conclusions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This note presented a frequency-domain PI controller tuning procedure. Starting from the frequency response measured in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>, it showed how to derive all the necessary parameters from the Bode plot to apply the magnitude-optimum tuning criterion. The experimental validation yielded a slightly underdamped closed-loop frequency response, exposing the limitations of approximating this system as a first-order one. Finally, the procedure provided a simple way to manually adjust the controller gains and visually assess the response&#8217;s flatness, reducing the gap from the expected maximally flat response.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This note describes a simple frequency-domain PI controller tuning procedure using the imperix System Identification toolbox, available starting from imperix ACG SDK version 2026.3. The&#8230;<\/p>\n","protected":false},"author":34,"featured_media":49990,"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":[103,104],"provided-results":[108,107],"related-products":[50,31,32,92,166,110],"guidedreadings":[],"tutorials":[],"user-manuals":[],"coauthors":[181],"class_list":["post-49359","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-help","software-environments-matlab","software-environments-plecs","provided-results-experimental","provided-results-simulation","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-tpi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Controller tuning in the frequency domain - imperix<\/title>\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\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Controller tuning in the frequency domain - imperix\" \/>\n<meta property=\"og:description\" content=\"This note describes a simple frequency-domain PI controller tuning procedure using the imperix System Identification toolbox, available starting from imperix ACG SDK version 2026.3. The...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-14T14:58:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"671\" \/>\n\t<meta property=\"og:image:height\" content=\"449\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andrea Lauri\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrea Lauri\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\"},\"author\":{\"name\":\"Andrea Lauri\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/c0f18e14c67285ccc626d477bc2fc490\"},\"headline\":\"Controller tuning in the frequency domain\",\"datePublished\":\"2026-09-14T14:58:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\"},\"wordCount\":1888,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"articleSection\":[\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\",\"name\":\"Controller tuning in the frequency domain - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"datePublished\":\"2026-09-14T14:58:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"width\":671,\"height\":449},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#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\":\"Controller tuning in the frequency domain\"}]},{\"@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\\\/c0f18e14c67285ccc626d477bc2fc490\",\"name\":\"Andrea Lauri\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fc7e587d9137551741aaabe38fc3baa6502ecdf76fbb72d6e0dcd8cb329060fd?s=96&d=mm&r=g95c32eccb3f466de46e25cd9817becc5\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fc7e587d9137551741aaabe38fc3baa6502ecdf76fbb72d6e0dcd8cb329060fd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fc7e587d9137551741aaabe38fc3baa6502ecdf76fbb72d6e0dcd8cb329060fd?s=96&d=mm&r=g\",\"caption\":\"Andrea Lauri\"},\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/andrealauri\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Controller tuning in the frequency domain - imperix","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\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","og_locale":"en_US","og_type":"article","og_title":"Controller tuning in the frequency domain - imperix","og_description":"This note describes a simple frequency-domain PI controller tuning procedure using the imperix System Identification toolbox, available starting from imperix ACG SDK version 2026.3. The...","og_url":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","og_site_name":"imperix","article_published_time":"2026-09-14T14:58:59+00:00","og_image":[{"width":671,"height":449,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","type":"image\/png"}],"author":"Andrea Lauri","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Andrea Lauri","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox"},"author":{"name":"Andrea Lauri","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/c0f18e14c67285ccc626d477bc2fc490"},"headline":"Controller tuning in the frequency domain","datePublished":"2026-09-14T14:58:59+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox"},"wordCount":1888,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","articleSection":["Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","url":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","name":"Controller tuning in the frequency domain - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","datePublished":"2026-09-14T14:58:59+00:00","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","width":671,"height":449},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#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":"Controller tuning in the frequency domain"}]},{"@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\/c0f18e14c67285ccc626d477bc2fc490","name":"Andrea Lauri","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/fc7e587d9137551741aaabe38fc3baa6502ecdf76fbb72d6e0dcd8cb329060fd?s=96&d=mm&r=g95c32eccb3f466de46e25cd9817becc5","url":"https:\/\/secure.gravatar.com\/avatar\/fc7e587d9137551741aaabe38fc3baa6502ecdf76fbb72d6e0dcd8cb329060fd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fc7e587d9137551741aaabe38fc3baa6502ecdf76fbb72d6e0dcd8cb329060fd?s=96&d=mm&r=g","caption":"Andrea Lauri"},"url":"https:\/\/imperix.com\/doc\/author\/andrealauri"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/49359","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\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=49359"}],"version-history":[{"count":88,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/49359\/revisions"}],"predecessor-version":[{"id":50475,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/49359\/revisions\/50475"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/49990"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=49359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=49359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=49359"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=49359"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=49359"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=49359"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=49359"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=49359"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=49359"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=49359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}