#include "MPC5604P.h" // Function prototypes void FOC_Init(void); void FOC_Update(void); void ADC_Handler(void); void PWM_Update(float Vα, float Vβ); // Global variables float Ia, Ib, Ic; float Iα, Iβ; float Id, Iq; float Vd, Vq; float Vα, Vβ; float theta; void main(void) { FOC_Init(); while (1) { FOC_Update(); } } void FOC_Init(void) { // Initialize ADC, PWM, timers, etc. } void FOC_Update(void) { // Sample currents ADC_Handler(); // Clarke Transform Iα = Ia; Iβ = (Ia + 2 * Ib) / sqrt(3); // Park Transform Id = Iα * cos(theta) + Iβ * sin(theta); Iq = -Iα * sin(theta) + Iβ * cos(theta); // PI Controllers for Id and Iq Vd = PI_Controller_Id(Id_ref - Id); Vq = PI_Controller_Iq(Iq_ref - Iq); // Inverse Park Transform Vα = Vd * cos(theta) - Vq * sin(theta); Vβ = Vd * sin(theta) + Vq * cos(theta); // Space Vector Modulation PWM_Update(Vα, Vβ); } void ADC_Handler(void) { // Read ADC values for Ia, Ib, Ic } void PWM_Update(float Vα, float Vβ) { // Update PWM registers based on Vα and Vβ }