Severson-Group / AMDC-Firmware

Embedded system code (C and Verilog) which runs the AMDC Hardware
http://docs.amdc.dev/firmware
BSD 3-Clause "New" or "Revised" License
31 stars 5 forks source link

Duty ratio projecting every PWM update event (Tsw) #122

Open npetersen2 opened 4 years ago

npetersen2 commented 4 years ago

It seems the nominal operation of the AMDC is with SiC power stacks which can switch much faster than the control rate of the C code (e.g. control rate 1/Ts = Fs = 10kHz, PWM switching freq 1/Tsw = Fsw = 100kHz).

Some applications can benefit from more fine-grained PWM duty ratio updates than Ts... ideally, every Tsw. We can give the user this option by extending the PWM IP in the FPGA! I have two ideas for implementing this:

  1. Use a "DMA" style approach where the user configures a memory buffer which contains PWM duty ratio commands. Every switching event, the FPGA reads the next entry in the buffer and uses it. This allows the user to forward project their voltage commands to account for machine rotation (very important at high speeds and/or fast electrical dynamics) and load them into the buffer each Ts.

  2. If the above approach is too hard, simply setting a register in the FPGA with a duty ratio delta might be enough. Then, the FPGA adds this delta to the current duty ratio before each PWM update event. Nominally, this is zero, but the user can use it if needed.

npetersen2 commented 4 years ago

After much more thinking, another idea for this (which supersedes the above ideas):

We could push the computation into the FPGA even more... We would tell the FPGA we want a voltage of specific magnitude, theta, and omega. It would then use this information to compute the stationary voltage command for each PWM update event... this would allow us to update PWM at Tsw, which is faster than Ts.

This would basically just be moving the DQ transform (inverse) into the FPGA so the FPGA can synchronize it to the PWM updates.

npetersen2 commented 4 years ago

Some recent interesting experimental results from implementing these ideas at BETA: Note that these are for a very low inductance machine with fast electrical dynamics... Waveforms below are at ~500Hz fundamental.

*With standard control updates to PWM at Ts and PWM at Tsw = ~6Ts (i.e. not implementing the above ideas):**

Notice the noisy, gross current waveforms on the left and large DC bus current ripple on the right.

image

When implementing the above ideas:

Notice the really clean current waveforms on the left and minimal DC bus current ripple on the right!!!

image

npetersen2 commented 1 year ago

I believe this control approach (open-loop rotation of voltage vector) can be studied/analyzed using the theory presented in this paper: https://ieeexplore.ieee.org/document/925591

This paper heavily relies on state-space modeling, matrices, etc, so might be rather difficult to understand :)