MPPT directly in VESC?

Support for creating custom user applications on the VESC.
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable
petertaylor
Posts: 3
Joined: 13 Aug 2017, 02:17
Location: San Francisco
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

MPPT directly in VESC?

Postby petertaylor » 13 Aug 2017, 02:43

Hey All,
just getting my feet wet with VESC, and liking the control a lot so far. Starting to test motors on a home-made inertia dyno with great success. Regardless...

I'm working on a Solar Boat project, and wondering if i might be able to run an MPPT algorithm directly in the VESC.

Basically, the issue with solar power directly to a load is that the load may not "drag" the voltage down to the point where the most power can be extracted from the solar panels. It's to do with the I-V curve of the panels.

https://jinkosolar.com/ftp/US-MKT-250P_v1.0_rev2013.pdf

For the solar panels in question (JKM240P), the open circuit voltage is 37.2v, the short circuit current is 8.56amps, and the stated voltage at maximum power/efficiency is 30v (delivering 8.01amps). However, this ideal voltage moves when the panels are warmer, colder, more clouds etc. Oftentimes people use dedicated MPPT controllers, but these are geared towards battery charging, which are not allowed in our races.
The VESC has extra processing power, and monitors voltage and current from the "battery".

So,
my first set of related question are:
If i increase the throttle on the VESC, will this drag the voltage down, pulling more current?
What's happening when i control the VESC in current mode? How is this current control being achieved electrically?


It sure seems like some simple control code could increase the current/throttle whilst constantly sampling the voltage, finding the sum of the two, and implementing a "hill climbing" algorithm. Move a touch to the left, see what the result is. If better than previous, keep it, if worse, move back. Now test the same way on the right side.

Anyone done this? I couldn't find a mention of MPPT on these forums yet... Is it as reasonable as it seems? Am i crazy?

Thanks in advance!
Peter

ps. I'm a reasonable programmer, but not really that well versed in electrical hardware; bear with me, i learn quickly...

rew
Posts: 943
Joined: 25 Mar 2016, 12:29
Location: Delft, Netherlands.
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

Re: MPPT directly in VESC?

Postby rew » 13 Aug 2017, 08:57

What you would want is a "custom app". Those are not too difficult to make. I've made an app that displays some of the measured parameters on a display. But doing some calculations and inserting "set-the-current" commands is not that difficult. (all the other apps actually DO something like setting a current setpoint).

When you increase the commanded current, you will ALWAYS drag the voltage down. On batteries there is the internal resistance of the batteries, the resistance of the wires.

The situation is indeed a bit worse with solar panels.

If you would command a current that put you past the maximum power point, the available power would drop and the VESC would keep on trying to drive the motor at the power-setpoint and the whole thing would become unstable. (voltage would drop really quickly to battery min voltage, and you'd get a fault).

I would think that using duty cycle setpoints is a lot better. When you DO pass the MPP, the voltage will drop, and so will the RPM of your screw. Things will be stable.

Then you can simply implement a slow MPPT algorithm in the "custom app". Every second you measure the used-energy (vesc already does that). Every odd second you increase duty cycle a bit. Every even second you decrease it a bit. If performance of the last second is WORSE than of the second before that, you do a double-sized-step. You'll end up oscillating around the MPPT. As the steps are small, this will have little influence on the power-draw.

Maybe a better way to explain the algorithm is to say: when the performance is BETTER than before, the next step in the opposite direction will be HALF the normal size. So when you normally step the duty cycle by 1%, if performance got better with the last step, your step in the opposite direction will only be 0.5%. That way you can effectively step 0.5% every 2 seconds. To get tot the MPP quicker you might additionally add something that adjusts the step even more dynamically: if steps are consistent, you can increase the stepsize.

Oh wait! it's even easier! Just step every second, if things got better, you step in the same direction, if things got worse, you reverse. This is quicker and easier to implement.

As you can see, I started writing before thinking this through.... :-)

petertaylor
Posts: 3
Joined: 13 Aug 2017, 02:17
Location: San Francisco
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

Re: MPPT directly in VESC?

Postby petertaylor » 14 Aug 2017, 02:05

Cool,
We're thinking about it in much the same way then.

I'll update this post when i find something more out about this, and have code to share.

Initially, i think i'll run stock VESC firmware, and a custom arduino sketch to do the logic, since i'm a little worried about bricking the VESC. I think there isn't really anything to fear, but baby-steps, you know? I've got plenty of arduino experience, and i'll port the code/algorithm over to the VESC once i'm sure i'm on the right path with this idea.

I'm very curious about the VESC load properties as it's presented to the solar array. I do think it'll yank the voltage down as i attempt to "pull" more amps, but i'm not really sure. How exactly does the VESC pull a specific current from the power source? Does its internal resistance change?

...

(did some googling, i guessed right?)
"A MOSFET may be thought of as a variable resistor, where the Gate-Source voltage difference can control the Drain-Source Resistance. When there is no applying voltage between the Gate-Source , the Drain-Source resistance is very high, which is almost like a open circuit, so no current may flow through the Drain-Source. When Gate-Source potential difference is applied, the Drain-Source resistance is reduced, and there will be current flowing through Drain-Source, which is now a closed circuit."
https://oscarliang.com/how-to-use-mosfe ... -tutorial/

...

With the idea that the VESC's resistance changes, one can assume that the solar panel voltage will indeed be pulled down, and that means this MPPT control will be pretty easy to implement, as expected.

rew, and other ideas to implement? Any good sources/examples for VESC custom apps that i should start with, other than Vedder's blog post here? (http://vedder.se/2015/08/vesc-writing-c ... lications/)

Thanks!

devin
Posts: 255
Joined: 08 May 2017, 01:55
Location: San Francisco, California, US
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

Re: MPPT directly in VESC?

Postby devin » 14 Aug 2017, 16:29


rew
Posts: 943
Joined: 25 Mar 2016, 12:29
Location: Delft, Netherlands.
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

Re: MPPT directly in VESC?

Postby rew » 15 Aug 2017, 06:29

First you have to understand the I-V curve of the solar cell.
IV-ISC.gif
IV-ISC.gif (7.44 KiB) Viewed 1363 times

If you start with the solar panel unloaded, you start at the point on the X axis on the right. You can then try to draw more and more current, and this results in the so called working point of the solar cell moving up the red line. If you go past the maximum power point, you start moving left along the top of the red line.

Now you have to know a thing or two about loads. You can have a resistive load. Basically the current increases once the voltage increases. For a real resistor, the relations is linear: there is a constant ratio between current and voltage. In an I-V graph such a relationship shows as a straight line through the origin. Such a line always crosses the IV curve of the panel exactly once. Connect them together and the ssytem will quickly converge on the crossing point of the two lines.

There are also "switching DCDC converters". These are like the powersupply in your computer. Independent of the input power they try to provide the computer with enough power to work, at the voltages that it needs. If we neglect losses, the input power equals the output power.

Now if we put some numbers to the graph I've given I can explain a bit better. Assume the V is about 10V. And I is about 10A. Suppose the computer needs 45W. The system starts at the V point on the X axis. The current rises to about 5A (halfway up) while the voltage drops a bit. Maybe to about 9V, so now we''re at 45W.

Suppose the computer needs a bit more power... So... the current increases a bit, the voltage drops a bit and the result is more power: Good. But once we reach the maximum power point somewhere in the top-right of the graph, trying to increase the current further will make the voltage drop A LOT, resulting in less power being available. So with less voltage, the module requires even more current. Once this happens the system quickly moves to the left across the red line to the "ISC" point. (at zero voltage there is no power available, -> computer has crashed due to too little power....)

Now when you command a certain current in the VESC, you have more or less told the system howmuch power you want. This is an unfortunate load for the solar panel. As long as the power curve crosses the solar panel curve on the right, things are fine. You'll be tempted to try to increase the current. The thing is that increasing the current will slowly increase the effective voltage on the motor and therefore, with stable current it will increase the power. So once you hit the maximum power point, things quickly come to a halt: The VESC will try to draw more current than the panel can deliver and you'll quickly move to less and less power along the top line in the curve.

But if you try to command dutycycle, things are inherently stable. You might be suboptimal, but at least the system will find a stable point somewhere. Now your arduino has the time to figure out what to do.

petertaylor
Posts: 3
Joined: 13 Aug 2017, 02:17
Location: San Francisco
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

Re: MPPT directly in VESC?

Postby petertaylor » 15 Aug 2017, 07:29

Yep, i know all about IV curves, and thus the talk of MPPT, and specific numbers for the panel in question
"For the solar panels in question (JKM240P), the open circuit voltage is 37.2v, the short circuit current is 8.56amps, and the stated voltage at maximum power/efficiency is 30v (delivering 8.01amps). However, this ideal voltage moves when the panels are warmer, colder, more clouds etc. Oftentimes people use dedicated MPPT controllers, but these are geared towards battery charging, which are not allowed in our races.
The VESC has extra processing power, and monitors voltage and current from the "battery". "


The real question, and i think it's been answered already (by you), is whether or not the VESC actually acts like a resistor on not (at least with the lens of the IV graph).

If i command 1% increase in duty cycle(/battery amps) every x milliseconds, and test each new setting for I and V, i'm confident i won't fall off the cliff on the right of the graph. If i command it to jump 10% increments in duty cycle(/battery amps), i've got serious problems. I think if i command the VESC to pull x battery amps instead of x duty cycle, it'll be safer, and will be more specific about what i want from the controller. Duty cycle might run away on me (i think).

Incidentally, when i said
"It sure seems like some simple control code could increase the current/throttle whilst constantly sampling the voltage, finding the sum of the two, and implementing a "hill climbing" algorithm. Move a touch to the left, see what the result is. If better than previous, keep it, if worse, move back. Now test the same way on the right side. "
the left/right i was talking about was the power on the IV curve.

I do appreciate this conversation though. Wondering more about the VESC specifics than the solar/motor stuff, which i have a decent grip on. The VESC stuff is a little more black-boxy to me right now. With some testing with real panels (not batteries which don't really have much of this MPP stuff going on) i'll get definitive answers, and post them here.

Peter

rew
Posts: 943
Joined: 25 Mar 2016, 12:29
Location: Delft, Netherlands.
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

Re: MPPT directly in VESC?

Postby rew » 15 Aug 2017, 14:57



[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable

Return to “Custom Applications”

Who is online

Users browsing this forum: No registered users and 1 guest