Electronics > Projects, Designs, and Technical Stuff
Questions: MPPT Controller Design / Dig. controllable BuckBoost Converter 60V 5A
Wi_Zeus:
I'm currently designing a MPPT-Controller that should be as universal as possible.
These converters will be used on a solar boat, a university project.
https://www.hs-emden-leer.de/fileadmin/user_upload/pm-Fotos/Bild_Solarbootregatta_1.jpg
Each panel will have it's own MPPT tracker in order to mitigate the effects of certain areas being shadowed.
I'd like to make this MPPT very flexible Vin <= Vout and vice versa and support output currents of 5A or even more.
The planned use-case is like this:
Input: up to 26 OCV @ 7A Short circuit, the output of each panel is isolated
Output: up to 60V, to be safe, the battery charge voltage is 50.4V, variable current output. All outputs will be connected in parallel and charge a LiPo battery.
One STM32 monitors multiple MPPT-channels and adjusts each channel's output voltage to get maximum power out of each panel.
No. of channels: TBD/expandable (let's say ~6)
All channels are connected to one common (opto-isolated) bus (I²C for example).
The user can append extra channels to the MPPT-Mainboard, as needed.
Each module has small DIP switches for configuration / addressing.
In order to make the device as flexible as possible, I'd like to implement one buck boost converter per channel. It would get pretty messy to control each channel directly from the STM32.
Not only would I have to route many control signals, the feedback would also need to "travel" quite a long way.
That's why I laid eyes on the LTC2992 https://www.mouser.de/datasheet/2/609/ltc2992-1504204.pdf to measure Vin, Iin, Vout and Iout.
This would give me pretty much all the data I need for the MPPT algorithm.
Unfortunately I wasn't able to find a suitable digitally controllable boost buck converter IC anywhere that would fulfill my requirements.
I found one that uses resistors as feedback and would otherwise be pretty good: LT8390 [url]https://www.analog.com/media/en/technical-documentation/data-sheets/8390fa.pdf]https://www.analog.com/media/en/technical-documentation/data-sheets/8390fa.pdf] [url]https://www.analog.com/media/en/technical-documentation/data-sheets/8390fa.pdf[/url]
Q: Would it be feasible / possible to control the output voltage using a digital pot? So far I only found ones that go up to 32V anyways.
But maybe I'm going in the wrong direction? Each channel would not only be pretty expensive, they'd be pretty complicated too...
Q: Does anyone have suggestions as to how I should design each channel? I really wouldn't want to use a microcontroller on each channel, to maintain one central control board.
This would make accessing telemetry data easier and I think that it would be a bit more elegant. :)
jhpadjustable:
Welcome aboard! Just random notes, hope this helps...
Wired-OR over a single long wire feels scary to me. A differentially-based single-line protocol like CAN or half-duplex RS-485 would be a little easier to isolate and to wire, and allow for a longer, more robust bus at more comfortable bit-rates. CAN's multi-master broadcast-centric design is especially suited to the use case of a virtual wiring harness, and, it's made in Germany :)
You can push down the voltage of any four-terminal regulator by injecting current into the feedback node, replacing some portion of current that would ordinarily flow through the upper resistor of the feedback divider.
As a cost-reducing alternative to the LTC2992, see the ACS70331 giant-magnetoresistive current sensor and discrete ADCs such as MCP3424.
I wouldn't too quickly dismiss the design direction of a microcontroller on each channel. STM32F0/F1 are cheap and can absorb much of the complexity of the analog and mixed chips you're using now, which might lower the channel cost by quite a lot. You could simply use the chip as a smart peripheral for periodically sending ADC values to the bus and accepting commands from the coordinator. Or you could go all the way to distributed computation and controlling the buck-boost switch(es) directly from a timer-counter, with the onboard op-amps detecting faults and instantly forcing the converter into a safe state. Or anywhere in between.
jbb:
I too think that deploying an STM32 per mode would be good. The local processors can think about local things, and connect to a multi drop bus (CAN or RS485) to receive ‘supervisory’ commands. Making the local nodes a bit smarter can enable nice things like protection at the module, easier monitoring of the panel behaviours, broken wire detection (practically guaranteed on such DIY projects) etc.
It would indeed be possible to run the main PWM control loop as software inside an STM32. That way, you mostly need to add voltage sensing (voltage dividers), current sensing (a Hall Effect sensor etc. is good, or you could use a shunt resistor and amplifier on the low side MOSFET) and gate driving.
The big upside of solar panels connected to a boost converter is that the solar panels are inherently current limiting, so if your controller locks up and leaves the bottom switch on, nothing goes bang.
For this power level, I suggest you consider synchronous rectification too.
OwO:
Yes, independent controllers per channel is a better approach. To actually do MPPT it suffices to just measure load current for each channel, even if the channel outputs are ultimately paralleled. There is no need for communications between the MCUs.
Don't use a digitally controllable buck/boost converter because these all take feedback from the output side and will NOT be stable with a CC/CV source like a solar panel. The moment the load power demand exceeds what the solar panel can deliver at MPP, the input voltage will collapse rapidly as the buck/boost regulator attempts to maintain output voltage by drawing more current. You need a buck/boost system where the feedback loop attempts to maintain a "constant" input voltage, not output voltage. Then you can vary the input voltage setpoint (say by injecting current into the feedback node) and monitor output current to implement the MPPT algorithm.
I've just recently implemented a micro-mppt system using an ordinary sot26 buck IC and a stm32f0. I used a one-transistor circuit to invert the feedback polarity (necessary when you move the feedback from output side to input side), and simple pwm to generate a bias signal to control voltage setpoint. I used the stm32's built-in ADC to sense load current directly from the current sense resistor (current sense amplifier was omitted to reduce cost, and dithering was added to be able to sense currents <50mA).
Personally I would first try to get rid of the buck-boost requirement and design the system in a way that either Vin > Vout or Vin < Vout, not both. For this power level I would either use a purpose built solar buck controller (e.g. CN3791) or generate the PWM signals on the stm32 and use a bridge driver IC (e.g. NCP81151, but be careful about the logic level, I can give more details if needed) with MOSFETs.
OwO:
Here are the schematics for the micro mppt controller:
There are a few minor errata so don't build from this schematic, but look at how the feedback is done.
Navigation
[0] Message Index
[#] Next page
Go to full version