{"id":649,"date":"2021-03-25T14:15:18","date_gmt":"2021-03-25T14:15:18","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=649"},"modified":"2025-06-24T14:48:06","modified_gmt":"2025-06-24T14:48:06","slug":"maximum-power-point-tracking-mppt","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt","title":{"rendered":"Maximum Power Point Tracking (MPPT) algorithms"},"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\/maximum-power-point-tracking-mppt\/#Software-resources\" >Software resources<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt\/#Principles-of-operation\" >Principles of operation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt\/#Photovoltaic-solar-panel-example\" >Photovoltaic solar panel example<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt\/#Maximum-Power-Point-Tracking-algorithms\" >Maximum Power Point Tracking algorithms<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt\/#MPPT-example-for-solar-inverter\" >MPPT example for solar inverter<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt\/#P-O-MPPT-algorithm-basics\" >P&amp;O MPPT algorithm basics<\/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\/implementation\/maximum-power-point-tracking-mppt\/#Maximum-Power-Point-Tracking-with-Simulink\" >Maximum Power Point Tracking with Simulink<\/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\/maximum-power-point-tracking-mppt\/#MPPT-with-PLECS\" >MPPT with PLECS<\/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\/maximum-power-point-tracking-mppt\/#Maximum-Power-Point-Tracking-with-CC-code\" >Maximum Power Point Tracking with C\/C++ code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt\/#Academic-references\" >Academic references<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p>Maximum Power Point Tracking is a family of control algorithms that aims at optimizing the use of a power source that possesses a fluctuating power profile. <\/p>\n\n\n\n<p>Indeed, some power sources, like solar panels,  present power characteristics that strongly depend on the operating conditions. For instance, the cloud coverage significantly impacts the capability of a panel to deliver electricity. As such, maximizing the extracted power requires identifying &#8211; and tracking &#8211; the operating point that provides the highest power level as a function of the operating conditions. <\/p>\n\n\n\n<p>Therefore, Maximum Power Point Tracking (MPPT) is often applied in renewable energy systems &#8211; e.g. photovoltaic plants or wind turbines &#8211; as their power delivery capability varies significantly and in an unpredictable manner. Other special operating points may be interesting to track, such as the maximum efficiency point tracking (MEPT), or other optimum, e.g. related to operating costs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Software-resources\"><\/span>Software resources<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-e1d5647e-8ef8-49af-b42a-a673c3f4e8e8\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/MPPT.slx\">Maximum Power Point Tracking algorithm only (Simulink model)<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/MPPT.slx\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-e1d5647e-8ef8-49af-b42a-a673c3f4e8e8\">Download<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-46946751-9e80-4920-8697-fa560f524969\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/TN117_PV_inverter_Simulink.zip\">TN117_PV_inverter_Simulink<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2025\/06\/TN117_PV_inverter_Simulink.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-46946751-9e80-4920-8697-fa560f524969\">Download<\/a><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"TN117:MaximumPowerPointTracking(MPPT)-Principleofoperation\"><span class=\"ez-toc-section\" id=\"Principles-of-operation\"><\/span>Principles of operation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>For practically all real power sources, the power that can be extracted varies with the operating point. While electrical sources are related to the voltage\/current pair, the same principle also applies to force\/speed, flux\/surface, etc. <\/p>\n\n\n\n<p>In all cases, the inevitable internal resistance (or equivalent quantity) limits the maximum possible output power. Non-linear or more complex characteristics also exist, but with the same result: the maximum power point is not located at the [max. voltage \u00b7 max. current] point (or equivalent quantity). Therefore, the operating point that delivers the maximum power must be constantly tracked by searching for the best voltage \u00b7 current combination.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"TN117:MaximumPowerPointTracking(MPPT)-Forinstance,photovoltaicpanelspossessawell-knowoutputcharacteristic,featuringaninternalresistancethatquicklydecreasesclosetotheopen-circuitvoltage(assumingacurrentsourcemodel).\"><span class=\"ez-toc-section\" id=\"Photovoltaic-solar-panel-example\"><\/span>Photovoltaic solar panel example<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"TN117:MaximumPowerPointTracking(MPPT)-Forinstance,photovoltaicpanelspossessawell-knowoutputcharacteristic,featuringaninternalresistancethatquicklydecreasesclosetotheopen-circuitvoltage(assumingacurrentsourcemodel).\">For instance, photovoltaic panels (PV panels) possess a well-known output characteristic, featuring an internal resistance that quickly decreases close to the open-circuit voltage (assuming a current source model).<\/p>\n\n\n\n<p>This results in a bump-shaped power-voltage characteristic, whose top is typically located between 60-80% of the open-circuit voltage. This point is however not fixed but varies with the output current, which depends itself on the temperature and irradiance, i.e. the operating conditions of the PV cells themselves.<\/p>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"763\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-79.png\" alt=\"Typical IV-PV curves of a solar panel\" class=\"wp-image-652\" style=\"width:449px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-79.png 900w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-79-300x254.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-79-768x651.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><figcaption class=\"wp-element-caption\">Typical IV-PV curves of a solar panel<\/figcaption><\/figure>\n<\/div>\n\n\n<p>In some cases (such as, to some extent, photovoltaic systems), the output characteristics (here I-V) are relatively well-known and precise, such that they can be used to locate the maximum power point using look-up tables. This is however not the case for all systems, motivating the use of more empirical approaches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Maximum-Power-Point-Tracking-algorithms\"><\/span>Maximum Power Point Tracking algorithms<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>To date, numerous maximum power point tracking algorithms have been proposed, with various trade-offs between performance (tracking speed, accuracy) and complexity (need for sensors, mathematical modeling, computation burden, etc.). <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"MPPT-example-for-solar-inverter\"><\/span>MPPT example for solar inverter<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"P-O-MPPT-algorithm-basics\"><\/span>P&amp;O MPPT algorithm basics<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Among other possible algorithms, the <strong>Perturb and Observe<\/strong> (P&amp;O)&nbsp;tracking algorithm actively varies the current set-point &#8211; i.e. adds a small perturbation &#8211; and observes the corresponding impact on the output power. Depending on whether that perturbation tends to increase or decrease the output power, the current setpoint is respectively increased or decreased accordingly.<\/p>\n\n\n\n<p>In other words, if adding a small \u0394I to the current setpoint increases the resulting output power, then the subsequent current setpoint is further increased. Reciprocally, if a positive \u0394I tends to reduce the output power, then the subsequent current reference is reduced by \u0394I.<\/p>\n\n\n\n<p>The entirely empirical approach of the <em>Perturb and Observe<\/em> algorithm requires that:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The requested setpoint is correctly followed, meaning that the current control (if any) is not saturated and can reach steady state before the result is evaluated.<\/li>\n\n\n\n<li>There is only one global maximum power point.<\/li>\n<\/ul>\n\n\n\n<p>As such, this maximum power point tracking algorithm is designed for use as part of a discretized process that is&nbsp;slower&nbsp;than the current control dynamics. This can typically be implemented using a multi-rate technique, where the current control is executed within the main control interrupt (fast control loop) and the MPPT algorithm executed within a secondary control interrupt (slow control loop).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"287\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-81.png\" alt=\"Multi-rate execution of MPPT and current control\" class=\"wp-image-655\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-81.png 414w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-81-300x208.png 300w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><figcaption class=\"wp-element-caption\">Typical execution of a Pertub and Observe MPPT <\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Maximum-Power-Point-Tracking-with-Simulink\"><\/span>Maximum Power Point Tracking with Simulink<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The proposed maximum power point tracking algorithm can be implemented as shown below. It requires the introduction of a slower control rate for the MPPT itself. The management of multiple control rates within Simulink is further explained in&nbsp;<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-with-acg-sdk-on-simulink\">Multi-rate control with Simulink (PN145)<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1428\" height=\"606\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-82.png\" alt=\"Maximum power point tracking implementation overview\" class=\"wp-image-656\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-82.png 1428w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-82-300x127.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-82-1024x435.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-82-768x326.png 768w\" sizes=\"auto, (max-width: 1428px) 100vw, 1428px\" \/><figcaption class=\"wp-element-caption\">Maximum power point tracking implementation overview in Simulink<\/figcaption><\/figure>\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>The corresponding mask requires the following parameters:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Upper saturation threshold<\/code>: Maximum output value.<\/li>\n\n\n\n<li><code>Lower saturation threshold<\/code>: Minimum output value.<\/li>\n\n\n\n<li><code>Current reference step (delta)<\/code>: Current increment added (or subtracted) for the previous setpoint.<\/li>\n\n\n\n<li><code>Initial current reference<\/code>: Initial value at startup.<\/li>\n\n\n\n<li><code>MPP Tracking rate<\/code>: The control period used for the execution of the MPPT algorithm (here 10x slower than the main control interrupt rate).<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"406\" height=\"357\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-83.png\" alt=\"imperix P&amp;O MPPT configuration on Simulink\" class=\"wp-image-657\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-83.png 406w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-83-300x264.png 300w\" sizes=\"auto, (max-width: 406px) 100vw, 406px\" \/><figcaption class=\"wp-element-caption\">imperix P&amp;O MPPT configuration on Simulink<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"MPPT-with-PLECS\"><\/span>MPPT with PLECS<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>In PLECS, the proposed maximum power point tracking algorithm can be implemented as shown below. As in Simulink, it requires the introduction of a slower control rate for the MPPT itself. The management of multiple control rate within PLECS is further explained in&nbsp;<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-on-plecs-acg-sdk\">Multi-rate control with PLECS (PN155)<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"917\" height=\"301\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-84.png\" alt=\"Maximum power point tracking implementation overview\" class=\"wp-image-658\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-84.png 917w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-84-300x98.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-84-768x252.png 768w\" sizes=\"auto, (max-width: 917px) 100vw, 917px\" \/><figcaption class=\"wp-element-caption\">Maximum power point tracking implementation overview in PLECS<\/figcaption><\/figure>\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>The corresponding mask requires the following parameters:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Upper saturation threshold<\/code>: Maximum output value.<\/li>\n\n\n\n<li><code>Lower saturation threshold<\/code>: Minimum output value.<\/li>\n\n\n\n<li><code>Current reference step (delta)<\/code>: Current increment added (or subtracted) for the previous setpoint.<\/li>\n\n\n\n<li><code>Initial current reference<\/code>: Initial value at startup.<\/li>\n\n\n\n<li><code>MPP Tracking rate<\/code>: The control period used for the execution of the MPPT algorithm (here 10x slower than the main control interrupt rate).<\/li>\n\n\n\n<li><code>Low pass filter sample time<\/code>: The sample time used for the average of the PV voltage and current. It should be the interruption period.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"342\" height=\"424\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-85.png\" alt=\"Configuration of the maximum power point tracking algorithm in PLECS\" class=\"wp-image-659\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-85.png 342w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/image-85-242x300.png 242w\" sizes=\"auto, (max-width: 342px) 100vw, 342px\" \/><figcaption class=\"wp-element-caption\">imperix P&amp;O MPPT configuration in PLECS<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Maximum-Power-Point-Tracking-with-CC-code\"><\/span>Maximum Power Point Tracking with C\/C++ code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The imperix CPP SDK provides pre-written routines for maximum power point tracking. As for control-related routines, the MPPT is based on:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A pseudo-object&nbsp;<code>MPPTracker<\/code>, which contains pre-computed parameters as well as state variables.<\/li>\n\n\n\n<li>A configuration function, meant to be called during&nbsp;<code>UserInit()<\/code>, named&nbsp;<code>ConfigMPPTracker()<\/code>.<\/li>\n\n\n\n<li>A run-time function, meant to be called during a slow routine, such as&nbsp;<code>SlowSubTask()<\/code>, named&nbsp;<code>RunMPPTracker()<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Suitable C code for the implementation of the <em>Perturb and Observe<\/em> MPPT algorithm is given below. The necessary parameters are documented within the controller.h header file.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"C++\" data-shcb-language-slug=\"cpp\"><span><code class=\"hljs language-cpp\"><span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include<\/span> <span class=\"hljs-meta-string\">\"user.h\"<\/span><\/span>\n<span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include<\/span> <span class=\"hljs-meta-string\">\"..\/API\/controllers.h\"<\/span>         <span class=\"hljs-comment\">\/\/ Discrete-time controllers<\/span><\/span>\n \nMPPTracker string1_mppt, string2_mppt;  <span class=\"hljs-comment\">\/\/ Maximum Power Point Trackers<\/span>\nPIDController Ipv_reg;                  <span class=\"hljs-comment\">\/\/ Controller for the PV current<\/span>\n \n<span class=\"hljs-function\">tUserSafe <span class=\"hljs-title\">UserBackground<\/span><span class=\"hljs-params\">()<\/span><\/span>;\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SlowSubTask<\/span><span class=\"hljs-params\">()<\/span><\/span>;\n<span class=\"hljs-keyword\">float<\/span> SubTaskTimer = <span class=\"hljs-number\">0.0<\/span>;\n<span class=\"hljs-keyword\">bool<\/span> SubTaskFlag = <span class=\"hljs-literal\">false<\/span>;\n \n<span class=\"hljs-function\">USER_SAFE <span class=\"hljs-title\">UserInit<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">void<\/span>)<\/span>\n<\/span>{\n  <span class=\"hljs-comment\">\/\/ Configure the main timebases on CLOCK_0:<\/span>\n  Clock_SetPeriod(CLOCK_0, (<span class=\"hljs-keyword\">int<\/span>)(SWITCHING_FREQUENCY));\n \n  <span class=\"hljs-comment\">\/\/ Configure the interrupts:<\/span>\n  ConfigureMainInterrupt(UserInterrupt, CLOCK_0, <span class=\"hljs-number\">0.5<\/span>);\n  RegisterBackgroundCallback(UserBackground);\n \n  <span class=\"hljs-comment\">\/\/ Configure the PI controllers:<\/span>\n  ConfigPIDController(&amp;Ipv1_reg, <span class=\"hljs-number\">12.0<\/span>, <span class=\"hljs-number\">0.3<\/span>, <span class=\"hljs-number\">0.0<\/span>, <span class=\"hljs-number\">60<\/span>, <span class=\"hljs-number\">-60<\/span>, SAMPLING_PERIOD, <span class=\"hljs-number\">10<\/span>);\n \n  <span class=\"hljs-comment\">\/\/ Configure and initialize the MPP-trackers:<\/span>\n  <span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> increment 0.01<\/span>\n  ConfigMPPTracker(&amp;mymppt, increment, <span class=\"hljs-number\">7.0<\/span>, <span class=\"hljs-number\">16.0<\/span>, <span class=\"hljs-number\">1.5<\/span>, <span class=\"hljs-number\">0.01<\/span>);\n \n  <span class=\"hljs-keyword\">return<\/span> SAFE;\n}\n\n<span class=\"hljs-function\">tUserSafe <span class=\"hljs-title\">UserInterrupt<\/span><span class=\"hljs-params\">(<span class=\"hljs-keyword\">void<\/span>)<\/span>\n<\/span>{\n  <span class=\"hljs-comment\">\/\/ Measure all the necessary quantities:<\/span>\n  Upv = Adc_GetValue(<span class=\"hljs-number\">8<\/span>); <span class=\"hljs-comment\">\/\/ Voltage on the PV string<\/span>\n  Ipv = -Adc_GetValue(<span class=\"hljs-number\">0<\/span>); <span class=\"hljs-comment\">\/\/ PV current<\/span>\n     \n  <span class=\"hljs-comment\">\/\/ Execute the current controllers on the MPPT string:<\/span>\n  Epv = Upv - RunPIController(&amp;Ipv_reg, Ipv_ref - Ipv);\n  CbPwm_SetDutyCycle(PWM_CHANNEL_3, Epv\/Udc);\n \n  <span class=\"hljs-comment\">\/\/ Compute the power drawn from the PV panel:<\/span>\n  <span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> k_iir_lpf 0.05<\/span>\n  Ppv = k_iir_lpf* (Upv*Ipv) + (<span class=\"hljs-number\">1.0<\/span>-k_iir_lpf)* Ppv;\n     \n  SubTaskTimer += SWITCHING_PERIOD;\n  <span class=\"hljs-keyword\">if<\/span>(SubTaskTimer &gt;= MPPTPERIOD){\n    SubTaskTimer = SubTaskTimer - MPPTPERIOD;\n    SubTaskFlag  = <span class=\"hljs-literal\">true<\/span>;\n  }\n   \n  <span class=\"hljs-keyword\">return<\/span> SAFE;\n}\n\n<span class=\"hljs-function\">tUserSafe <span class=\"hljs-title\">UserBackground<\/span><span class=\"hljs-params\">()<\/span>\n<\/span>{\n  <span class=\"hljs-keyword\">if<\/span>(SubTaskFlag)\n  {\n    SlowSubTask();\n    SubTaskFlag = <span class=\"hljs-literal\">false<\/span>;\n  }\n  <span class=\"hljs-keyword\">return<\/span> SAFE;\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">SlowSubTask<\/span><span class=\"hljs-params\">()<\/span>\n<\/span>{\n  <span class=\"hljs-comment\">\/\/ When appropriate, execute the MPPT algorithm:<\/span>\n  <span class=\"hljs-keyword\">if<\/span> (enable_MPPT==<span class=\"hljs-number\">1<\/span>){\n    <span class=\"hljs-comment\">\/\/ Run the Maximum Power Point Tracking (MPPT) algorithm:<\/span>\n    Ipv_ref = RunMPPTracking(&amp;string_mppt, Ipv, Ppv);\n  }\n  <span class=\"hljs-keyword\">else<\/span>{\n    <span class=\"hljs-comment\">\/\/ Leave the setpoints unaltered<\/span>\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C++<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cpp<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id=\"TN117:MaximumPowerPointTracking(MPPT)-Academicreferences\"><span class=\"ez-toc-section\" id=\"Academic-references\"><\/span>Academic references<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>[1] T. Esram and P. L. Chapman, &#8220;Comparison of Photovoltaic Array Maximum Power Point Tracking Techniques,&#8221; in IEEE Transactions on Energy Conversion, June 2007.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Some power sources, like solar panels, present power characteristics that strongly depend on the operating conditions.  In such cases, Maximum Power Point Tracking (MPPT) is often applied to maximize the extracted power.<\/p>\n","protected":false},"author":3,"featured_media":3041,"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":[],"software-environments":[105,103,104],"provided-results":[],"related-products":[50,31,32,92,166,51,112,110],"guidedreadings":[],"tutorials":[],"user-manuals":[],"coauthors":[69],"class_list":["post-649","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-implementation","software-environments-c-plus-plus","software-environments-matlab","software-environments-plecs","related-products-acg-sdk","related-products-b-board-pro","related-products-b-box-rcp","related-products-b-box-micro","related-products-b-box-rcp-3-0","related-products-cpp-sdk","related-products-peb","related-products-tpi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Maximum Power Point Tracking (MPPT) algorithms - imperix<\/title>\n<meta name=\"description\" content=\"Maximum Power Point Tracking (MPPT) is a common algorithm applied to maximize the extracted power of a PV panel or a wind turbine.\" \/>\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\/maximum-power-point-tracking-mppt\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Maximum Power Point Tracking (MPPT) algorithms - imperix\" \/>\n<meta property=\"og:description\" content=\"Maximum Power Point Tracking (MPPT) is a common algorithm applied to maximize the extracted power of a PV panel or a wind turbine.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-25T14:15:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-24T14:48:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_TN117.png\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nicolas Cherix\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nicolas Cherix\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt\"},\"author\":{\"name\":\"Nicolas Cherix\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/44e7187157f1379207dce2b570f63f86\"},\"headline\":\"Maximum Power Point Tracking (MPPT) algorithms\",\"datePublished\":\"2021-03-25T14:15:18+00:00\",\"dateModified\":\"2025-06-24T14:48:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt\"},\"wordCount\":1043,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_TN117.png\",\"articleSection\":[\"Technical notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt\",\"name\":\"Maximum Power Point Tracking (MPPT) algorithms - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_TN117.png\",\"datePublished\":\"2021-03-25T14:15:18+00:00\",\"dateModified\":\"2025-06-24T14:48:06+00:00\",\"description\":\"Maximum Power Point Tracking (MPPT) is a common algorithm applied to maximize the extracted power of a PV panel or a wind turbine.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_TN117.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/3_2_ratio_TN117.png\",\"width\":450,\"height\":300,\"caption\":\"Typical IV-PV curves of a solar panel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/implementation\\\/maximum-power-point-tracking-mppt#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\":\"Maximum Power Point Tracking (MPPT) algorithms\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"name\":\"imperix\",\"description\":\"power electronics\",\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/imperix.com\\\/doc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\",\"name\":\"imperix\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"width\":350,\"height\":120,\"caption\":\"imperix\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/44e7187157f1379207dce2b570f63f86\",\"name\":\"Nicolas Cherix\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=gaafd9afe469fe587a71b66de1b538283\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g\",\"caption\":\"Nicolas Cherix\"},\"description\":\"Nicolas is the chief engineer and product director at imperix. On the knowledge base, he is the author, co-author, or reviewer of numerous notes.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/nicolas-cherix-268a2b83\\\/\"],\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/cherix\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Maximum Power Point Tracking (MPPT) algorithms - imperix","description":"Maximum Power Point Tracking (MPPT) is a common algorithm applied to maximize the extracted power of a PV panel or a wind turbine.","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\/maximum-power-point-tracking-mppt","og_locale":"en_US","og_type":"article","og_title":"Maximum Power Point Tracking (MPPT) algorithms - imperix","og_description":"Maximum Power Point Tracking (MPPT) is a common algorithm applied to maximize the extracted power of a PV panel or a wind turbine.","og_url":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt","og_site_name":"imperix","article_published_time":"2021-03-25T14:15:18+00:00","article_modified_time":"2025-06-24T14:48:06+00:00","og_image":[{"width":450,"height":300,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_TN117.png","type":"image\/png"}],"author":"Nicolas Cherix","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nicolas Cherix","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt"},"author":{"name":"Nicolas Cherix","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/44e7187157f1379207dce2b570f63f86"},"headline":"Maximum Power Point Tracking (MPPT) algorithms","datePublished":"2021-03-25T14:15:18+00:00","dateModified":"2025-06-24T14:48:06+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt"},"wordCount":1043,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_TN117.png","articleSection":["Technical notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt","url":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt","name":"Maximum Power Point Tracking (MPPT) algorithms - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_TN117.png","datePublished":"2021-03-25T14:15:18+00:00","dateModified":"2025-06-24T14:48:06+00:00","description":"Maximum Power Point Tracking (MPPT) is a common algorithm applied to maximize the extracted power of a PV panel or a wind turbine.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_TN117.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/3_2_ratio_TN117.png","width":450,"height":300,"caption":"Typical IV-PV curves of a solar panel"},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/implementation\/maximum-power-point-tracking-mppt#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":"Maximum Power Point Tracking (MPPT) algorithms"}]},{"@type":"WebSite","@id":"https:\/\/imperix.com\/doc\/#website","url":"https:\/\/imperix.com\/doc\/","name":"imperix","description":"power electronics","publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imperix.com\/doc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/imperix.com\/doc\/#organization","name":"imperix","url":"https:\/\/imperix.com\/doc\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","width":350,"height":120,"caption":"imperix"},"image":{"@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/44e7187157f1379207dce2b570f63f86","name":"Nicolas Cherix","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=gaafd9afe469fe587a71b66de1b538283","url":"https:\/\/secure.gravatar.com\/avatar\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/07fe58bb65e7c65d6f4c53854ee4045d0c6cb2eb7b2cd3f58f03c926fab246c7?s=96&d=mm&r=g","caption":"Nicolas Cherix"},"description":"Nicolas is the chief engineer and product director at imperix. On the knowledge base, he is the author, co-author, or reviewer of numerous notes.","sameAs":["https:\/\/www.linkedin.com\/in\/nicolas-cherix-268a2b83\/"],"url":"https:\/\/imperix.com\/doc\/author\/cherix"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=649"}],"version-history":[{"count":25,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/649\/revisions"}],"predecessor-version":[{"id":33705,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/649\/revisions\/33705"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/3041"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=649"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=649"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=649"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=649"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=649"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=649"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=649"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}