<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Project Logs]]></title><description><![CDATA[An engineering journal exploring FPGA development, embedded systems, power electronics, robotics and hardware experiments. Documenting projects, discoveries, failures and engineering progress.]]></description><link>https://amaan-projects.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ae9335668e7ae6975de43a8/8c3f7f7e-7eec-4e24-87a5-a15c21d32faf.png</url><title>Project Logs</title><link>https://amaan-projects.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 10:30:47 GMT</lastBuildDate><atom:link href="https://amaan-projects.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[PROJ001 / BLOG01 / 3-ϕ Inverter SPWM]]></title><description><![CDATA[Exploring FPGA-based complementary PWM and dead-time control for a three-phase inverter using the Vicharak Shrike-Fi.]]></description><link>https://amaan-projects.hashnode.dev/proj001-blog01-3-inverter-spwm</link><guid isPermaLink="true">https://amaan-projects.hashnode.dev/proj001-blog01-3-inverter-spwm</guid><category><![CDATA[fpga]]></category><category><![CDATA[embedded systems]]></category><category><![CDATA[power electronics]]></category><category><![CDATA[SPWM]]></category><category><![CDATA[Electronics]]></category><dc:creator><![CDATA[Amaan Pathan]]></dc:creator><pubDate>Tue, 03 Nov 2026 02:49:02 GMT</pubDate><content:encoded><![CDATA[<h2>Can an FPGA Improve Gate Pulse Generation in a 3-ϕ SPWM Inverter? A Closer Look at Dead-Time Control and Switching Signals</h2>
<h2>Introduction</h2>
<p>Power electronics has always been an interesting area for me, particularly the design of inverters and their switching mechanisms.</p>
<p>For this project, I want to explore the design of a three-phase Sinusoidal Pulse Width Modulation (SPWM) inverter using a hybrid microcontroller–FPGA architecture.</p>
<p>The idea is to investigate how a microcontroller and programmable logic can work together to manage the control and switching requirements of an inverter.</p>
<p>Rather than immediately building the power stage, I am starting by understanding the architecture, exploring suitable electronic components, and identifying the requirements for a practical hardware design.</p>
<p>At this stage, I have not implemented the complete inverter or generated working SPWM gate signals. I am still in the initial research and component-selection phase, just before beginning the circuit schematic in KiCad.</p>
<h2>1. Why explore an FPGA-based approach?</h2>
<p>Microcontrollers are already capable of generating PWM signals. Advanced timer peripherals in devices such as STM32 microcontrollers can generate complementary PWM outputs and support hardware dead-time insertion.</p>
<p>So, why consider an FPGA?</p>
<p>An FPGA offers a different approach to digital hardware design. Instead of relying entirely on predefined peripheral functions, it allows custom digital logic to be configured for a particular application.</p>
<p>For an inverter controller, some of the functions worth exploring include:</p>
<ul>
<li>Complementary PWM signal generation.</li>
<li>Programmable dead-time insertion.</li>
<li>Synchronised switching signals.</li>
<li>Hardware interlocking between complementary outputs.</li>
<li>Fault-related signal blocking.</li>
<li>Deterministic handling of digital switching events.</li>
</ul>
<p>The objective is not to assume that an FPGA is automatically faster or better than a microcontroller. I want to investigate whether a hybrid architecture provides useful flexibility and predictable timing for this particular application.</p>
<p>A fair comparison would eventually require measuring timing resolution, jitter, PWM frequency, pulse-width resolution, synchronisation, and fault response.</p>
<h2>2. Understanding complementary switching</h2>
<p>A three-phase inverter generally consists of three half-bridge legs. Each leg has an upper and a lower power switch.</p>
<p>This means that a conventional three-phase, two-level inverter requires six switching control signals.</p>
<p>The upper and lower switches in each half-bridge operate complementarily. When one is commanded ON, the other must remain OFF.</p>
<p>However, switching devices do not turn off instantaneously. If the lower switch turns ON before the upper switch has completely stopped conducting, both switches may conduct simultaneously.</p>
<p>This condition is known as <strong>shoot-through</strong>. It can create a very large current through the DC bus and potentially damage the power devices.</p>
<p>This is why dead-time control is an important consideration in inverter design.</p>
<h3>What is dead time?</h3>
<p>Dead time is a short interval inserted between turning OFF one switch and turning ON its complementary switch.</p>
<p>During this interval, both switches are commanded OFF.</p>
<p>For example:</p>
<ul>
<li>The upper switch S1 turns OFF.</li>
<li>A short dead-time interval begins.</li>
<li>Both S1 and S2 remain commanded OFF.</li>
<li>After the dead-time interval, the lower switch S2 can turn ON.</li>
</ul>
<p>The same principle applies when switching in the opposite direction.</p>
<h3>Dead-time waveform</h3>
<p>The following waveform illustrates the concept of complementary switching signals with a dead-time interval.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae9335668e7ae6975de43a8/1238b949-ac2f-4584-b787-6f095c4353c4.png" alt="Dead-time waveform showing complementary switching signals S1 and S2 with dead-time interval td" style="display:block;margin:0 auto" />

<p><em>Figure 1 — Complementary switching signals showing the dead-time interval between S1 and S2.</em></p>
<p>Dead time must be selected carefully. Too little dead time can increase the risk of shoot-through, while excessive dead time can introduce output-voltage distortion and affect inverter performance.</p>
<p>The actual dead-time requirement depends on the selected power semiconductor devices and gate drivers. Their propagation delays, turn-off characteristics, and timing differences must be considered.</p>
<p>The FPGA digital output timing alone does not determine when a MOSFET or IGBT has physically stopped conducting.</p>
<p>For this project, I intend to investigate programmable dead-time generation as one of the functions of the proposed FPGA logic.</p>
<h2>3. Introducing the <a href="https://store.vicharak.in/us/products/shrike-fi">Vicharak Shrike-Fi</a></h2>
<p>For this experiment, I will be using the <strong>Vicharak Shrike-Fi development board</strong>.</p>
<p>I was interested in exploring a platform that combines the flexibility of a microcontroller with the configurability of programmable FPGA hardware.</p>
<p>Shrike-Fi brings these two elements together on a single development board:</p>
<ul>
<li><strong>ESP32-S3:</strong> The microcontroller responsible for higher-level system control, configuration, communication, and parameter management.</li>
<li><strong>Renesas ForgeFPGA SLG47910V:</strong> The programmable logic device that can be configured to implement custom digital hardware functions.</li>
</ul>
<p>The ForgeFPGA provides 1,120 five-input Look-Up Tables (LUTs), making it a compact programmable logic platform for experimenting with custom digital architectures.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae9335668e7ae6975de43a8/0702a198-2081-4b9c-8b46-53af6353e96f.png" alt="Vicharak Shrike-Fi development board showing its front and rear sides" style="display:block;margin:0 auto" />

<p><em>Figure 2 — Vicharak Shrike-Fi development board, showing its front and rear sides.</em></p>
<p>You can explore the platform through the following links:</p>
<ul>
<li><a href="https://store.vicharak.in/in/products/shrike-fi">Vicharak Shrike-Fi development board</a></li>
<li><a href="https://github.com/vicharak-in/shrike">Official Vicharak Shrike GitHub repository</a></li>
</ul>
<h2>4. Proposed MCU–FPGA division of responsibilities</h2>
<p>One of the main things I want to explore is how responsibilities can be divided between the ESP32-S3 and the ForgeFPGA.</p>
<p>The proposed architecture is:</p>
<p><strong>ESP32-S3 — System-level control</strong></p>
<p>The microcontroller could handle:</p>
<ul>
<li>Configuring operating parameters.</li>
<li>Managing system states.</li>
<li>Sending control and configuration information.</li>
<li>Communicating with a computer.</li>
<li>Monitoring system status and reporting faults.</li>
</ul>
<p><strong>ForgeFPGA — Digital switching logic</strong></p>
<p>The FPGA could be explored for:</p>
<ul>
<li>Generating complementary PWM signals.</li>
<li>Implementing programmable dead-time.</li>
<li>Managing switching interlocks.</li>
<li>Synchronising digital switching events.</li>
<li>Blocking switching signals during fault conditions.</li>
</ul>
<p>This division would allow the microcontroller to manage the overall system while the FPGA handles the custom digital logic.</p>
<p>These are proposed responsibilities, not implemented features at this stage.</p>
<h3>MCU–FPGA communication: The four-bit interface</h3>
<p>An important aspect of the Shrike-Fi architecture is its four-bit MCU–FPGA communication interface.</p>
<p>This is particularly relevant to the proposed division of responsibilities because the ESP32-S3 and ForgeFPGA need a way to exchange information.</p>
<p>I want to investigate how this four-bit interface can be used to transfer configuration data, control information, and status information between the two devices.</p>
<p>The exact communication protocol, signal direction, timing, and data format will need to be established from the board's hardware documentation and verified during implementation.</p>
<p>This interface will be an important part of understanding how the microcontroller can configure and coordinate the FPGA logic.</p>
<h2>5. FPGA GPIO voltage considerations</h2>
<p>Another important hardware consideration is the FPGA's GPIO voltage level.</p>
<p>The FPGA GPIO operates at <strong>3.3 V logic levels</strong>. This means that external components must be checked for electrical compatibility before connecting them directly to the FPGA.</p>
<p>For example, the selected gate-driver IC must have input thresholds compatible with the FPGA's output levels.</p>
<p>If an external interface requires different voltage levels or additional drive capability, suitable buffering or level-shifting circuitry may be required.</p>
<p>It is also important to distinguish between the digital control side and the power-switching side.</p>
<p>The FPGA will only generate low-voltage control signals. It will not directly drive the gates of the MOSFETs or IGBTs.</p>
<p>Dedicated gate-driver circuitry will be required between the digital controller and the inverter power stage. Depending on the selected topology and devices, isolation and appropriate gate-drive supplies may also be necessary.</p>
<p>These requirements will influence the components selected for the circuit design.</p>
<h2>6. Startup sequence and fault-safe operation</h2>
<p>Generating the correct PWM signals is only one part of designing an inverter controller.</p>
<p>The system must also behave predictably during power-up, shutdown, and fault conditions. This is particularly important in power electronics, where unintended switching can damage components.</p>
<p>Some of the behaviours I intend to consider in the design are:</p>
<p><strong>Safe startup</strong></p>
<p>All gate-control outputs should remain in their inactive state during power-up, FPGA configuration, and controller initialisation.</p>
<p><strong>Controlled PWM enable</strong></p>
<p>Switching should only be enabled after the controller and required hardware conditions have been checked.</p>
<p><strong>Fault shutdown</strong></p>
<p>Conditions such as overcurrent, undervoltage, or an emergency-stop input should disable the gate-control signals.</p>
<p><strong>Fault recovery</strong></p>
<p>The system should not automatically resume switching after a serious fault without an appropriate reset or recovery procedure.</p>
<p><strong>Hardware interlocking</strong></p>
<p>The design should prevent complementary switches in the same half-bridge from being commanded ON simultaneously.</p>
<p>These behaviours should be considered in both the digital logic and external hardware.</p>
<p>In particular, critical protection should not depend solely on a software command. Independent hardware protection and a suitable gate-driver shutdown mechanism will also need to be considered.</p>
<h2>7. Exploring the hardware components</h2>
<p>Before drawing the circuit schematic, I need to identify the major sections of the inverter and explore suitable components for each.</p>
<p>Some of the areas I am currently investigating include:</p>
<ul>
<li><strong>Power switches:</strong> Selecting suitable MOSFETs or IGBTs based on the intended DC bus voltage, current, switching frequency, and power requirements.</li>
<li><strong>Gate drivers:</strong> Finding suitable gate-driver ICs with appropriate input logic levels, gate-drive capability, and protection features.</li>
<li><strong>DC bus:</strong> Understanding the requirements for DC-link capacitors and bus-voltage handling.</li>
<li><strong>Power supplies:</strong> Planning the required regulated supplies for the controller, FPGA interface, and gate drivers.</li>
<li><strong>Voltage and current sensing:</strong> Exploring suitable sensing circuits for monitoring the inverter.</li>
<li><strong>Protection:</strong> Considering overcurrent, undervoltage, emergency shutdown, and other necessary protection mechanisms.</li>
<li><strong>Isolation and interfacing:</strong> Identifying where isolation, buffering, and level shifting may be required.</li>
</ul>
<p>The final component selection will depend on the intended operating conditions and the electrical specifications of the individual devices.</p>
<p>I do not want to select components independently without considering how they interact as a complete system.</p>
<h2>8. Current project stage and next steps</h2>
<p>At this point, the project is still in its initial research and hardware-planning phase.</p>
<p>So far, the focus has been on understanding the switching requirements, studying dead-time control, exploring the Shrike-Fi architecture, and identifying the hardware considerations that will influence the inverter design.</p>
<p>The next steps are:</p>
<ol>
<li>Finalise the system block diagram.</li>
<li>Decide the intended inverter specifications and operating conditions.</li>
<li>Select suitable MOSFETs or IGBTs and gate-driver ICs.</li>
<li>Identify the required power supplies, sensing, protection, and isolation circuits.</li>
<li>Design the circuit schematic in KiCad.</li>
<li>Review component compatibility and the overall schematic before proceeding to PCB design.</li>
</ol>
<p>Only after the hardware architecture and circuit design have been reviewed will I move towards implementation and testing.</p>
<h2>Conclusion</h2>
<p>This first blog entry is about understanding the problem before attempting to build the solution.</p>
<p>The combination of a microcontroller and a compact FPGA provides an interesting platform to explore custom digital switching logic for power electronics.</p>
<p>However, there are several things to consider beyond PWM generation itself: communication between the MCU and FPGA, GPIO voltage compatibility, gate-driver requirements, dead-time selection, startup behaviour, and fault protection.</p>
<p>The immediate goal is to turn these requirements into a practical circuit design in KiCad.</p>
<p>There is still a lot to explore, and this is only the beginning of the project.</p>
<hr />
<p><em>Project: PROJ001 / 3-ϕ Inverter SPWM</em><br /><em>Platform:</em> <a href="https://store.vicharak.in/us/products/shrike-fi"><em>Vicharak Shrike-Fi — ESP32-S3 + Renesas ForgeFPGA</em></a><br /><em>Engineering log: Project Logs</em></p>
]]></content:encoded></item></channel></rss>