This is an old video and I'm just realizing how happy it makes me to see somebody assemblying circuitry the way I always wanted to... in free-air. Now that I've been in the research/educational industry, it makes me very happy to know that this haphazard approach isn't so rare. I'm constantly opening old equipment to fix, or reverse engineer them and finding this type of assembly. Love it! Wish I wasn't so afraid when I was younger of making a mistake :)
Your videos never fail to pique curiosity in creating something new. And amazing thing is the project you choose are perfect in scope. Keep inspiring and leading the DIY world!
Good opportunity to get your sponsor involved - do a part B where you put the design into their online PCB software and order a PCB. Then build and show off how much tidier and easier the PCB option is.
Yeah. I thought same, but it would be premature. This is really only a very rough prototype. The theoretical power it MIGHT handle is never going to be seen because of thermal limitiations. He mentions 3amps at 6 volts is what it WILL do. So that's 3% of the theoretical potential. See my reply on its own.
Your video is fantastic! I'm impressed with your clarity, cadence and infectiously passionate delivery. I'm honored to be one of your million plus subscribers.
I really like your in depth insight on your tutorials, without dragging it on....straight up and to the point with excellent video editing, parts list, schematic, and links...truly professional work, and vast knowledge of electronics. Keep up the great work, and thank you for the videos, have enjoyed every one and will be building this tonight as I have all the components, plus always have nano's on hand, these days more and more hobbyists are incorporating them straight in the the schematic as above...awesome
Project idea: since you have already attempted to build a simple radio receiver, how about some kind of radio transmitter? The simple low power ones are pretty easy to build... This could be a great opportunity to show how AM and FM work in detail. Greetings from Gotha, Thuringia, Germany.
You can use a differential amplifier to not only drop the hall sensor output voltage at 0A to 0V but also amplify the output at max current to 5V giving you as much resolution as possible for the current sensing.
OMG I ACTUALLY UNDERSTAND THIS ONE! I've cooked plenty of 3D printer control boards by putting a big load on the MOSFET and overheating RAMPS Q3. Guess it's time to add Electronics Engineer to my resume. Thanks Scott!
This is great! I will build one. One suggestion: Add mAH discharging so I can discharge my batteries down to a specific capacity and add a discharge voltage cutoff mode: The Arduino will discharge at a set current until a specified voltage is reached
I just recreated your circuit today! it was Awesome! This is very useful diy constant current load, I like it, and I'm happy to say that this is my first time using Arduino, Awesome!
ADC in STM32F103 are also much faster and have DMA capability. You can get 1MS/s. and uC itself is faster, so you can get tighter regulation. But I think max voltage is 3.6V. Unfortunately even STM32F103 doesn't have DACs. Only timers, but they are 16-bit ones, which is nice.
It would have been great if you used an op amp to drive the MOSFET. But, whatever, Great job! Please use op amp in next version, that should get rid of the oscillation and would make it more precise.
You can use use STM32 in place of atmega328 for better ADC and PWM resolution. Or INA219 with a lower value shunt resistance can offer you higher current range and stable power measurement.
Really, Really like this build, thank you! Love the Arduino display programming, been trying to figure out how to do this. I might try to build it now. :-) Great Scott, I’d also like to put in a vote for a nice Class A Amplifier, I really think you are the man to take on the task. Stay super creative my friend, you have to take up all the slack I leave...
Hi, I think you have missed a few components in your order list: - case and frontpanel - banana plugs female / terminal - rotary encoder button - low pass filter components - cooling heat sink and fan? Can you add links in your video description? greetings from germany and thanks for your videos! This is exact the project i could use right now.
- case and frontpanel : I got it from a local store. So there is not link for it. - banana plugs female / terminal: I will add those to the list - rotary encoder button: the button is integrated in the rotary encoder - low pass filter components: just a resistor and capacitor. Look for the values in the schematic. I did not feel like including such a minor component in the list. - cooling heat sink and fan?: I salvaged my heatsink. So there is no link.
@GreatScott! How do you power it up? Do you use old ATX or something? Don't you think, that it* would be simpler solution for people who want to make own adjustable power supply. it*: www.aliexpress.com/item/LM2596-DC-DC-Step-down-Adjustable-CC-CV-Power-Supply-Module-Converter-LED-driver/32639718756.html?spm=a2g0s.9042311.0.0.27424c4dUcY3V6
I've been meaning to build one of these. I'm currently planning on building this to stress test 3∅ 30A connectors. Our Hubbell supplier in the US has been pushing spring-loaded clamp connectors instead of the standard screw-clamps. If they didn't come from Hubbell, I would've already said "No" to them but I want to be sure they won't fail under full load
Thanks for this Project. With it I learned how to build Menu for LCD screen. I didn't have a 16x2 LCD, but I did have a few Nokia 5110 LCDs, so I decided to adjust the code for that LCD. And guess what... It works :)
Thanks for the code on instructables I'm working on a lab power supply and I'm reverse engineering your code to build my menu without your code I'd be so lost thank you
You could have used an STM32 Bluepill for the project. Since you reviewed it, I think you still have one. That one has a 12 bit ADC, a much more precise PWM and it's cheaper too.
Also note that you cant connect the supply backwards (reverse polarity) as the voltage divider will send negative voltage to the arduino. Nevertheless, great build!
Solder the wires directly on the current sensor. Used those before, the copper traces aren't good enough and they heat up at around 10 amps plus that ic is very dependant on temperature.
Hi Scott, the current ADC should be suitable when increasing the sensor voltage range. the range in your setup is around 300mV. by amplifying (with a opamp) this signal and correcting the 2.5V, you can transform your 300mV sensor signal into 0 till 5V
Good video! Constant Load and Constant current is very useful!. I remember the mosfet work like resistor in linear (ohmic) region and it's use in switching mode in saturation region for increase efficency.
If you want to use a MOSFET as a switch, you use it in the omic region.That is the reason, why the RDS-on is stated in the datasheet as static on resistance. This is because, when the MOSFET switch is in the 'ON' state, it has a almost constant resistance, as opposed to a bipolar transistor. The confusion arises, because in a bipolar transistor the saturation region is where the Vbe is so high, that an increase in Vbe does not decrease Vce (Vce,sat is reached). On a MOSFET on the other hand, the saturation region is the region, where an increase in Vds does not increase Ids, that means, even though you apply more voltage across the MOSFET, the current does not increase. But if you increase Vgs in the saturation region, the current does increase. The terminology is really confusing, because in bipolar transistors you want to switch in the saturation region, but in MOSFETs, the saturation region is completely different.
It's the other way around, the typical mosfet Ids over Vds graphs, Vds is on the x axis and Ids on the y axis. So in the omic region an increase in Vds creates a proportional increase in Ids, but in the saturation region (line is almost flat) an increase in Vds does not increase Ids (or only very slightly)
Yes, i think he has it confused in this tutorial. I am making a similar device using IRFZ44N and by using the low pass filter, the mosfets keep getting cooked since they are in linear mode. Using a PWM signal at the mosfet gate is less stable, but it also allows the mosfet to function without breaking and shorting out after a few seconds/minutes with any real power dissipation.
3:05 When the transistor is saturated it has the lowest resistance. So little loss on the transistor If the transistor is in the non-saturated area, it works like a resistor. Ohmic range.
One possible issue with this type of load is the control loop which is run by the microcontroller. That would make it quite slow which could possible create oscillation under the right conditions or even worse it could react very slow to a rapid change in current.
Im a bit concerned about your way of regulating the output. The slow increase and decrease can make the whole system unstable and it might go into oscillations. The usual solution is to use a PI-controller instead.
3:00 I think you mixed up the linear region with the saturation region of the MOSFET. The MOSFET has a lot of losses in the linear region and that is why you want to switch as fast as possible without transient spikes in power electronics. When the MOSFET is fully on (saturation region), your losses decrease by a lot and only the conduction losses remain. I have succesfully built a large DRSSTC using IGBT-Bricks and it is the same with those.
Keep in mind this and most MOSFETs are not specified for high-power linear operation, and will thermally runaway and die when pushed too hard (e.g., SOA shows no longer than 10 ms).
There is some confusion with "saturation" positioning. It is effect, witch can be seen on "Gate-to-source" graph, not "Drain-to-source", and it can be archived by increasing gate voltage above some "threshold".
Those ACS sensors seem like a good alternative to a current sense resistor...got myself some and I plan to use them on some motors to stop them when the current gets too high.
For the current reading on my PWM charge controller using the same current sensor I used a loop which runs for a full second counting the current values, then dividing by the number of loops it did to get an average. I found this gave me a much more stable value. However, if you're using it to control current that wouldn't work so you'd need both the instantaneous value and an averaged one. Instantaneous used in your control loop but the averaged value shown on the screen.
As an improvement suggestion it would be nice to have a self diagnostic feature in the software that can shut down system in case if a current greater than the set value is detected for a pre defined time interval in order to protect the load in case if the transistor shorts out due to a fault.
You should add a constant resistance mode as well, measurements (Ah, Wh...) and programming capabilities. That are just simple firmware changes. I could do it and upload the code to Github. And there's another problem: the tolerance of the Hall effect current sensor is ± 1.5 %, which is pretty bad. You should use a shunt resistor with a lower tolerance. Plus, you should amplify the signal from the current sensor so that it uses the full dynamic range of the ADC and maybe oversample it. That way you'll get rid of such bad oscillations.
You could add an automatic Lithium Ion/lithium polymer Battery Test function, by measuring the Current/Time while drawing a constant current like 500mA.
I think IGBT are better suited for this task since they consist transistors for driving output.. and they are inefficient and they can handle more power then MOSFET... Correct me if I am wrong .. :-)
The problem with IGBTs is that they have almost linear losses across the CE-Path. A MOSFET on the other hand has more losses because the the losses square with the current which is wanted in such an application. So i think that a MOSFET is better suited than an IGBT for this task.
Hi, I'm nearly finished building this project and the output voltage (measured with a multimeter) of my setup doesn't change when I set an output via the interface. I'm using Scott's code and the same components that were recommended. The only difference is that I'm using an Arduino pro mini. I'm using a 20V 6A power supply to supply any load and a buck converter to supply power to the equipment. I lost my 5 volt regulators and I had a spare buck converter. Regardless of the value I change the either the current or load values to, I always get a 2.4V output. The voltage drops to 0 when I 'stop' the output but it seems as though the duty cycle of the PWM signal doesn't change. I tied pin 9 directly the gate of the mosfet and the my output voltage was 2.1V and didn't change when I varied any values in settings. My mosfet is fine, I tried 2 of them, and bot were adjustable with a 50k pot. Can anyone help me here?
I have been wanting to get familiar with electronics like this strictly because I think it would be handy for playing with my car lol. Have a couple ideas but no skill in making them happen!
Instead of "don't touch it" for the undervoltage pot, I learned how to tune it so that it's least likely to cause problems: I accidentally fried my LTC3780, and I did a lot of probing and I noticed that the under voltage regulation caused some problems when set to 0. The fried LTC3780 could only tune from 0.8v to 2.5v (fault light on above that) and had no current limiting. So here's what I learned: If you set the under-voltage pot to as low as it goes, then the full supply voltage will pass to the LM358 to an opamp input while the supply voltage is at a regulated 5v. Even though it's supposed to only produce 5v out, it started to fail for me and will go up to near the supply voltage which feeds the run pin of the LTC3780. The LM358 still worked if the trimmer was set closer to the supply voltage though, so clearly it puts more stress on the LM358 to pass much higher voltages to the inputs than the 5v regulated voltage. If the undervoltage pot is tuned closer to the supply voltage this creates a voltage divider that will make the input voltage to the LM358 closer to the regulated voltage. Any voltage above about 6v to the LTC3780 on the run pin will destroy it. So, my advice is turn the undervoltage regulator all the way up, so that you get the fault light and the output goes to 0, and then turn it down until the fault light turns off, and overshoot a little (but don't set it to the minimum). As long as you're using a constant supply voltage it'll continue to run, and this will reduce risk of frying the LM358 which will fry the LTC3780 (The IC is same cost as the whole board really, so you don't want to have to replace it).
An updated version of this could make use of a more modern mcu. I would suggest looking at the Seeeduino XIAO which has an on-board DAC which removes the need for filtering to drive the MOSFET and has 12-bit resolution on its ADCs. All of the voltages are only 3.3V maximum so you'd need a logic-level MOSFET but those are readily available.
In 2022 it seems the TC4220 is both obsolete and impossible to locate, is their a suitable replacement part that would be a drop in fit? I am not an engineer just a tinker hobbyist so could use some advice? Thanks
In order to make programs fast, you have to use as many constants as possible, and make computations only when needed, once. For example, you used correctly the ++ operator, but did not use --. You had also going a lot of 1
hey bro. Love your videos. Just a tip, you should use a DeEsser on before compressing your vocal recording. Don't try to get rid of the hissing with EQ. Cheers.
You could have used a shunt resistor (or transformer based on for over 50A), analog multiplier (could be one quadrant multiplier even), Norton opamp, normal opam, and single high res DAC, with multiplier in the feedback loop, to create constant power load without micro control. That would be beneficial for very quickly changes voltages, i.e. these generated by some SMPSs. But micro is good for testing batteries, where reaction speed is not that super important. Also micro allows you do simulate inefficiencies of load (i.e. ~constant power, but depending on input voltage, the import power could vary), just like most SMPSs are not really constant power, as they vary (by about 10%) their input power (for the same output power!), depending on a voltage. What you could do in your current setup, which is relatively simple, and requires just code update, is pulsed loads. I.e. every second a 1W or 100mA pulse for 10ms. Or something like this. Useful for various applications.
Very helpful, I made a test constant current load using a couple of op amps and some mosfets salvaged from an old UPS which worked for testing 12V SLA batteries but the FETS blew when testing (lithium) 24V batteries. I think the FET's were unsuitable and / or I had over engineered it somewhat making a mistake in the circuit design somewhere. You design is much simpler so I'll give it a try.
The FETs probably were only designed for a maximum Vds of 20V or 16V, that are typical values. Would work fine at 12V, but they let out the magic smoke at too high voltages. Always google for a Datasheet before using any mosfet with higher voltage than the original device!
Yeah I think that was the problem. I was gonna re-visit that CC load tester later but may look at integrating Great Scott's solution into a battery tester. Perhaps change the LCD for a 4 line and add display for time elapsed and calculated Ah rating. Also feature to disconnect the battery when it reaches it's fully discharged state.
Hello, Scott is it possible to get a variable DC Voltage on the Gate of the MOSFET without the TC4420? A simple low pass filter on the PWM PIN should be good enough or not? What do you mean? Thank you for the short and informative Video ;)
I love the idea of building one of these so I can use it for logging discharge curves and testing my batteries. I would need much better precision though, so here are some thoughts on this. The interface between the digital electronics and the analog electronics is the biggest limitation in precision here. Both the reading of current and voltage, and the control of the power MOSFET are noisy because of the limited resolution of the ADC and PWM. I was thinking of using a SPI controlled 16-bit variable potentiometer and an opamp to assist with driving the MOSFET. By using the feedback of the current sensor and the variable potentiometer connected to an opamp, would it not be possible to very precisely control the driving of the MOSFET? When reading the current and voltage values, of course using a more precise DAC would be simplest as you have mentioned. But if I wanted to experiment with getting more precision with the 10 bit ADC we have already have, How does this scheme sound: Read the voltage from the voltage divider with the ADC (10 bit). Output the read value via SPI to a variable potentiometer . Using an opamp, we can connect the digital pot and the voltage we want to measure, and the opamp will amplify the difference in voltage so we can read that error difference with another ADC on the Arduino. The second ADC read would be a measure of how far off our originally read value is from the actual value, which we could calibrate against. We have more precision in the digital potentiometer than our ADC, so we would just nudge up or down the output value of the digital pot until the error feedback on the second ADC goes as close to zero as possible. Then we know based on what value we write to the digital pot what the actual voltage must be. Let's walk through an example; it might make this more clear. Say we want to measure a current coming from the current sensor. It is outputting 2.954265v, which obviously our ADC can't even come close to in precision. Our 10 bit ADC can only read in steps of 0.00488 mv, so the value is going to be 605 or 606, giving us a reading somewhere around 2.951 to 2.956 volts. We spilt the difference and output 2.9535v to the digital pot. If the digital pot is 16 bits, that would be a value of 38711d, giving an output value of somewhere between 2.9534v to 2.9535v. The opamp magnifies the error difference between our actual 2.954265v and our pots output by say, 500x the voltage difference. We set it up so that the opamp output range is 0 to 5 volts, and a center voltage of 2.5v means no difference between the digital pot and the actual voltage from the current sensor, and it amplifies any difference in the two inputs by 500x the voltage difference. In this example, our voltage difference woudl be around 0.000765v, so let's say the opamp is actually putting out 2.1175v now, which our second ADC reads as 433 or 434, giving us a reading of 2.11v to 2.12v. We split the difference to 2.115. Now we have to adjust the digital pot output by some value to see how much closer we get. We calculate it like this. Subtract 2.5 from the new reading to find out how far off we are from center (-0.385v), divide by 500 (to scale it down by the amplified value of the opamp), which gives us -0.00077v. We now know we are reading higher on the ADC than we should be, so we adjust out output up. (or the other way around if we get a positive value instead of negative, of course). We subtract this calculated value from the value we last wrote the digital pot, giving us 2.95427v, which we write to the digital pot as 38721. Our new output is 2.954222v to 2.954299v. Do the whole feedback read again, and we get a much smaller error reading from the opamp. Every time we nudge up or down slightly in this way, we in theory get closer to the real world value. Since we are reading with a 10 bit DAC, 9 bits of which we consider significant figures we magnify the error by 500 (512 would sound better, but I'm approximating), then reading again, we can probably get closer to 14 significant bits of precision. Of course, every time our most significant bits (first ADC read) change by more than 3 or so up or down, we have to start over in our calculations, but it should only take 2 or 3 cycles to gain enough precision again to be confident. The ADC takes like 1/10,000th of a second to read a value. So, I figure we can read at least 400-500 times a second. with calculations and re-reads, every 5-10 ms we should be able to get a very accurate read. We use the 10 bit course read for fast responses, and the higher precision reads for accurate adjusting of our MOSFET. Before, we were limited to 0.00448mv resolution in the ADC. We might be able to achieve an effective resolution of 0.0003v this way (that's about 14 bits). That's enough for millivolt measurements anyway. Most times, such short durations of time are not going to result in very much change in readings, and therefore we will spend most of our time in precision calculation, giving us very good accuracy. How plausible does this sound? Worth putting the time into building to test out, or a waste of time and never going to work out correctly? I know this is bonkers over the top complicated compared to just getting a better ADC and calling it good, but I like the idea of something like this if it can be done.
That fet will runaway and die shorted just around the 40-50W mark. I ran some tests with those exact fets a while ago - they fail fairly consistently. Best bet is to use some beefy linear mosfets from IXYS, although they are expensive.
Nice project. Another important factor of the load is its impedance. For example, when you draw a 2 A current from 2V source with Saturated FET or BJT, you differential impedance is almost ro where as when you use a one ohm resistor to do this your differential impedance is 1 Ohm. Now, for example, if you are trying to measure the noise of the supply or a DC or AC generator, this makes huge difference if you have your differential output impedance is 1 ohm or ro. So how can you get low differential output impedance? I can think of two ways. 1st: you have several say 1K Ohm parallel resistors which can be switched in and out of circuit by small MOSFETs in series with each resistor. ( ie. If you put 1000 1KOhm resistors in parallel you get 1 Ohm , and even if you use 1/4 watt resistors you can dissipate 250W without heat sink). Here to control the gate of the MOSFETs you need a Binary to Thermometer code converter. Then you can generate the binary code with something like Arduino. 2nd: You can cascode several MOSFET transistors, so each MOSFET stays in saturated region.
Very inspirational stuff. Why do you use mosfet drivers instead an op-amp (like lm358) in a negative feedback configuration? What are the drawbacks of the latter? Thanks for answer, I am waiting for next week video.
I have to agree with Trust me, I'm an engineer! on this one. For a switch, I want the lowest possible Rds value (on-resistance), which is achieved when the transistor is operating in its saturation region
Putkimies92 I thought so as well but after some research it turns out that GreatScott! is right. The saturation has different meanings. For BJTs it's a relation between Base-current and Collector-Emitter voltage. It is the region where the Vce cannot be lowered no matter how much you increase base current, meaning the Vce is saturated. This state means the BJT is dropping as little power as possible. For MOSFETs it's a relation between the Drain-Source voltage and the Drain-Source current. It is the region where increasing Vds doesn't increase Ids and therfore Ids is saturated. MOSFET saturation is not related to Rds-on and in fact the Rds-on value is only true in the linear region where the MOSFET is operating as a resistor (but a very low value one).
I also agree with Trust me, I'm an engineer. I am also an engineer. When you use a MOSFET as a switch you want to use it in the saturation region, turned on as hard as possible, to get the lowest power dissipation in the MOSFET. The "ohmic region" is called that because it has a higher resistance in that region, and therefore much higher power dissipation.
Good video, interesting use of digital control loop. For more resolution you could use, instead of digitizing the current value, an analog control loop (a simple opamp) comparing voltage over sense resistor vs input set by a pwm (there are many techniques to improve resolution of arduino pwm, specially because you don't need it to be fast here). Another good goal to pursue is having a load that can be controlled externally (e.g a pulse, or a step) to analyze response of circuits under transient load changes.
This is an old video and I'm just realizing how happy it makes me to see somebody assemblying circuitry the way I always wanted to... in free-air. Now that I've been in the research/educational industry, it makes me very happy to know that this haphazard approach isn't so rare. I'm constantly opening old equipment to fix, or reverse engineer them and finding this type of assembly. Love it! Wish I wasn't so afraid when I was younger of making a mistake :)
I always get excited for a GreatScott notification!
Glad to hear that :-)
Me too
Me I am getting sweat (not wet because language) IRL
A GreatScott notification... or a Great Scott notification. Either one works!
@@greatscottlab can you make a 12Vdc to 220Vac inverter please?
I like the old school way that you pitch a product in your videos - it makes a connection to the things you try to teach, thanks.
Your videos never fail to pique curiosity in creating something new. And amazing thing is the project you choose are perfect in scope. Keep inspiring and leading the DIY world!
Good opportunity to get your sponsor involved - do a part B where you put the design into their online PCB software and order a PCB. Then build and show off how much tidier and easier the PCB option is.
Yeah.
I thought same, but it would be premature.
This is really only a very rough prototype.
The theoretical power it MIGHT handle is never going to be seen because of thermal limitiations.
He mentions 3amps at 6 volts is what it WILL do.
So that's 3% of the theoretical potential.
See my reply on its own.
Your video is fantastic! I'm impressed with your clarity, cadence and infectiously passionate delivery. I'm honored to be one of your million plus subscribers.
I really like your in depth insight on your tutorials, without dragging it on....straight up and to the point with excellent video editing, parts list, schematic, and links...truly professional work, and vast knowledge of electronics. Keep up the great work, and thank you for the videos, have enjoyed every one and will be building this tonight as I have all the components, plus always have nano's on hand, these days more and more hobbyists are incorporating them straight in the the schematic as above...awesome
Project idea: since you have already attempted to build a simple radio receiver, how about some kind of radio transmitter? The simple low power ones are pretty easy to build...
This could be a great opportunity to show how AM and FM work in detail.
Greetings from Gotha, Thuringia, Germany.
yeees, or maybe an DIY radio transmitter for old cars (with aux input)
After watching this man, I realize my knowledge of electronics
is that of a tiny child. Always impressed by him.
Hey! Don’t be ashamed of yourself, you will eventually be better than him if you try hard enough!
You can use a differential amplifier to not only drop the hall sensor output voltage at 0A to 0V but also amplify the output at max current to 5V giving you as much resolution as possible for the current sensing.
Happiness is suddenly watching the notification of new video from great scott!!
OMG I ACTUALLY UNDERSTAND THIS ONE! I've cooked plenty of 3D printer control boards by putting a big load on the MOSFET and overheating RAMPS Q3. Guess it's time to add Electronics Engineer to my resume. Thanks Scott!
This is great! I will build one.
One suggestion:
Add mAH discharging so I can discharge my batteries down to a specific capacity and add a discharge voltage cutoff mode:
The Arduino will discharge at a set current until a specified voltage is reached
I just recreated your circuit today! it was Awesome! This is very useful diy constant current load, I like it, and I'm happy to say that this is my first time using Arduino, Awesome!
The STM32F103 would be nice, with its 12 bit ADC, and higher resolution timers. But a great tool for the workbench. Nice job!
ADC in STM32F103 are also much faster and have DMA capability. You can get 1MS/s. and uC itself is faster, so you can get tighter regulation. But I think max voltage is 3.6V. Unfortunately even STM32F103 doesn't have DACs. Only timers, but they are 16-bit ones, which is nice.
@@movax20h no DAC on STM32F103RB ? Oo
It would have been great if you used an op amp to drive the MOSFET. But, whatever, Great job!
Please use op amp in next version, that should get rid of the oscillation and would make it more precise.
9:07 You can do small improvement by not subtracting OCR1A when curcurrent = current to prevent oscillations.
Great scott is amazing. The king of electronic projects
This could have been a Diy vs Buy episode. You could compare it to the commercial available ones and tell which option is better
You can use use STM32 in place of atmega328 for better ADC and PWM resolution. Or INA219 with a lower value shunt resistance can offer you higher current range and stable power measurement.
Halogen Lightbulbs make an Awesome, Cheap power resistor for such a project!
Really, Really like this build, thank you! Love the Arduino display programming, been trying to figure out how to do this. I might try to build it now. :-) Great Scott, I’d also like to put in a vote for a nice Class A Amplifier, I really think you are the man to take on the task. Stay super creative my friend, you have to take up all the slack I leave...
Hey, did you ever build this project? I'm working on it now and having some trouble.
I would actually love a tour of your work space, seems like its completely decked out!
I watch you from Sénégal in Africa
love the way you make circuit boards. Dead bug wiring taken to the point of art
I literally just looked for videos like this yesterday.
Hi, I think you have missed a few components in your order list:
- case and frontpanel
- banana plugs female / terminal
- rotary encoder button
- low pass filter components
- cooling heat sink and fan?
Can you add links in your video description?
greetings from germany and thanks for your videos! This is exact the project i could use right now.
- case and frontpanel : I got it from a local store. So there is not link for it.
- banana plugs female / terminal: I will add those to the list
- rotary encoder button: the button is integrated in the rotary encoder
- low pass filter components: just a resistor and capacitor. Look for the values in the schematic. I did not feel like including such a minor component in the list.
- cooling heat sink and fan?: I salvaged my heatsink. So there is no link.
@GreatScott!
How do you power it up? Do you use old ATX or something?
Don't you think, that it* would be simpler solution for people who want to make own adjustable power supply.
it*: www.aliexpress.com/item/LM2596-DC-DC-Step-down-Adjustable-CC-CV-Power-Supply-Module-Converter-LED-driver/32639718756.html?spm=a2g0s.9042311.0.0.27424c4dUcY3V6
But it's NOT an adjustable powersupply...
#facepalm
Now you know how it looks when you like watching videos about electronics, but are still learning English :D
Haha, no worries mate, I have been there.
I've been meaning to build one of these. I'm currently planning on building this to stress test 3∅ 30A connectors.
Our Hubbell supplier in the US has been pushing spring-loaded clamp connectors instead of the standard screw-clamps. If they didn't come from Hubbell, I would've already said "No" to them but I want to be sure they won't fail under full load
Thanks for this Project.
With it I learned how to build Menu for LCD screen.
I didn't have a 16x2 LCD, but I did have a few Nokia 5110 LCDs, so I decided to adjust the code for that LCD.
And guess what... It works :)
Thanks for the code on instructables I'm working on a lab power supply and I'm reverse engineering your code to build my menu without your code I'd be so lost thank you
You could have used an STM32 Bluepill for the project. Since you reviewed it, I think you still have one. That one has a 12 bit ADC, a much more precise PWM and it's cheaper too.
STM32 Adc is very likely to be noisy if you dont take extra care
Also note that you cant connect the supply backwards (reverse polarity) as the voltage divider will send negative voltage to the arduino. Nevertheless, great build!
I love your video, every week I am waiting for your video online.
Thank you
I don't get anything from your videos.
But I like watching them.
Me too
It's greatscott day!!! This is awesome!
Solder the wires directly on the current sensor. Used those before, the copper traces aren't good enough and they heat up at around 10 amps plus that ic is very dependant on temperature.
Good to know
Hi Scott, the current ADC should be suitable when increasing the sensor voltage range. the range in your setup is around 300mV. by amplifying (with a opamp) this signal and correcting the 2.5V, you can transform your 300mV sensor signal into 0 till 5V
Good video! Constant Load and Constant current is very useful!. I remember the mosfet work like resistor in linear (ohmic) region and it's use in switching mode in saturation region for increase efficency.
If you want to use a MOSFET as a switch, you use it in the omic region.That is the reason, why the RDS-on is stated in the datasheet as static on resistance. This is because, when the MOSFET switch is in the 'ON' state, it has a almost constant resistance, as opposed to a bipolar transistor. The confusion arises, because in a bipolar transistor the saturation region is where the Vbe is so high, that an increase in Vbe does not decrease Vce (Vce,sat is reached). On a MOSFET on the other hand, the saturation region is the region, where an increase in Vds does not increase Ids, that means, even though you apply more voltage across the MOSFET, the current does not increase. But if you increase Vgs in the saturation region, the current does increase.
The terminology is really confusing, because in bipolar transistors you want to switch in the saturation region, but in MOSFETs, the saturation region is completely different.
It's the other way around, the typical mosfet Ids over Vds graphs, Vds is on the x axis and Ids on the y axis. So in the omic region an increase in Vds creates a proportional increase in Ids, but in the saturation region (line is almost flat) an increase in Vds does not increase Ids (or only very slightly)
Yes, i think he has it confused in this tutorial. I am making a similar device using IRFZ44N and by using the low pass filter, the mosfets keep getting cooked since they are in linear mode. Using a PWM signal at the mosfet gate is less stable, but it also allows the mosfet to function without breaking and shorting out after a few seconds/minutes with any real power dissipation.
3:05 When the transistor is saturated it has the lowest resistance. So little loss on the transistor
If the transistor is in the non-saturated area, it works like a resistor. Ohmic range.
One possible issue with this type of load is the control loop which is run by the microcontroller. That would make it quite slow which could possible create oscillation under the right conditions or even worse it could react very slow to a rapid change in current.
Im a bit concerned about your way of regulating the output. The slow increase and decrease can make the whole system unstable and it might go into oscillations. The usual solution is to use a PI-controller instead.
Perfect timing for this video, exactly what I need. Very good explanation, thanks.
3:00
I think you mixed up the linear region with the saturation region of the MOSFET. The MOSFET has a lot of losses in the linear region and that is why you want to switch as fast as possible without transient spikes in power electronics. When the MOSFET is fully on (saturation region), your losses decrease by a lot and only the conduction losses remain. I have succesfully built a large DRSSTC using IGBT-Bricks and it is the same with those.
The "see you next time" closing sentence is getting better and better each video...
Keep in mind this and most MOSFETs are not specified for high-power linear operation, and will thermally runaway and die when pushed too hard (e.g., SOA shows no longer than 10 ms).
Your videos are so informative and project inspiring. If only I were not so high right now I just might try this!
You lost me at the intro...so many leds and so many solder! Hahaha awsome vid. Love it.
There is some confusion with "saturation" positioning. It is effect, witch can be seen on "Gate-to-source" graph, not "Drain-to-source", and it can be archived by increasing gate voltage above some "threshold".
Those ACS sensors seem like a good alternative to a current sense resistor...got myself some and I plan to use them on some motors to stop them when the current gets too high.
For the current reading on my PWM charge controller using the same current sensor I used a loop which runs for a full second counting the current values, then dividing by the number of loops it did to get an average. I found this gave me a much more stable value. However, if you're using it to control current that wouldn't work so you'd need both the instantaneous value and an averaged one. Instantaneous used in your control loop but the averaged value shown on the screen.
Always came up with the best explanation Nice...............
What's the purpose of the MOSFET driver (instead of using the Arduino directly with RC filter) since it's only being supplied 5V?
As an improvement suggestion it would be nice to have a self diagnostic feature in the software that can shut down system in case if a current greater than the set value is detected for a pre defined time interval in order to protect the load in case if the transistor shorts out due to a fault.
100% building myself one of these !!!
You should add a constant resistance mode as well, measurements (Ah, Wh...) and programming capabilities. That are just simple firmware changes. I could do it and upload the code to Github. And there's another problem: the tolerance of the Hall effect current sensor is ± 1.5 %, which is pretty bad. You should use a shunt resistor with a lower tolerance. Plus, you should amplify the signal from the current sensor so that it uses the full dynamic range of the ADC and maybe oversample it. That way you'll get rid of such bad oscillations.
I built one but I'm horrible at writing code. If you wrote an updated firmware I'd love to try it out.
Great Scott ...Plz continue ESC project
You could add an automatic Lithium Ion/lithium polymer Battery Test function, by measuring the Current/Time while drawing a constant current like 500mA.
Nice penmanship!
I think IGBT are better suited for this task since they consist transistors for driving output.. and they are inefficient and they can handle more power then MOSFET... Correct me if I am wrong .. :-)
The problem with IGBTs is that they have almost linear losses across the CE-Path. A MOSFET on the other hand has more losses because the the losses square with the current which is wanted in such an application. So i think that a MOSFET is better suited than an IGBT for this task.
Hi, I'm nearly finished building this project and the output voltage (measured with a multimeter) of my setup doesn't change when I set an output via the interface. I'm using Scott's code and the same components that were recommended. The only difference is that I'm using an Arduino pro mini.
I'm using a 20V 6A power supply to supply any load and a buck converter to supply power to the equipment. I lost my 5 volt regulators and I had a spare buck converter.
Regardless of the value I change the either the current or load values to, I always get a 2.4V output. The voltage drops to 0 when I 'stop' the output but it seems as though the duty cycle of the PWM signal doesn't change. I tied pin 9 directly the gate of the mosfet and the my output voltage was 2.1V and didn't change when I varied any values in settings.
My mosfet is fine, I tried 2 of them, and bot were adjustable with a 50k pot.
Can anyone help me here?
I have been wanting to get familiar with electronics like this strictly because I think it would be handy for playing with my car lol.
Have a couple ideas but no skill in making them happen!
Great, Scott!
You are my favorite.
Adding a thermistor and a small fan would help you get bigger voltages and currents...or a CPU cooler. Those are good up to 150W constant or more.
Instead of "don't touch it" for the undervoltage pot, I learned how to tune it so that it's least likely to cause problems:
I accidentally fried my LTC3780, and I did a lot of probing and I noticed that the under voltage regulation caused some problems when set to 0.
The fried LTC3780 could only tune from 0.8v to 2.5v (fault light on above that) and had no current limiting.
So here's what I learned:
If you set the under-voltage pot to as low as it goes, then the full supply voltage will pass to the LM358 to an opamp input while the supply voltage is at a regulated 5v. Even though it's supposed to only produce 5v out, it started to fail for me and will go up to near the supply voltage which feeds the run pin of the LTC3780. The LM358 still worked if the trimmer was set closer to the supply voltage though, so clearly it puts more stress on the LM358 to pass much higher voltages to the inputs than the 5v regulated voltage. If the undervoltage pot is tuned closer to the supply voltage this creates a voltage divider that will make the input voltage to the LM358 closer to the regulated voltage.
Any voltage above about 6v to the LTC3780 on the run pin will destroy it.
So, my advice is turn the undervoltage regulator all the way up, so that you get the fault light and the output goes to 0, and then turn it down until the fault light turns off, and overshoot a little (but don't set it to the minimum). As long as you're using a constant supply voltage it'll continue to run, and this will reduce risk of frying the LM358 which will fry the LTC3780 (The IC is same cost as the whole board really, so you don't want to have to replace it).
Thanks, buddy!
An updated version of this could make use of a more modern mcu. I would suggest looking at the Seeeduino XIAO which has an on-board DAC which removes the need for filtering to drive the MOSFET and has 12-bit resolution on its ADCs. All of the voltages are only 3.3V maximum so you'd need a logic-level MOSFET but those are readily available.
I've been told to use masking tape to mark my holes/cut-outs.
It avoids our ugly marks on the finished product ;)
In 2022 it seems the TC4220 is both obsolete and impossible to locate, is their a suitable replacement part that would be a drop in fit? I am not an engineer just a tinker hobbyist so could use some advice? Thanks
In order to make programs fast, you have to use as many constants as possible, and make computations only when needed, once. For example, you used correctly the ++ operator, but did not use --. You had also going a lot of 1
using 1
hey bro. Love your videos. Just a tip, you should use a DeEsser on before compressing your vocal recording. Don't try to get rid of the hissing with EQ. Cheers.
You could have used a shunt resistor (or transformer based on for over 50A), analog multiplier (could be one quadrant multiplier even), Norton opamp, normal opam, and single high res DAC, with multiplier in the feedback loop, to create constant power load without micro control. That would be beneficial for very quickly changes voltages, i.e. these generated by some SMPSs. But micro is good for testing batteries, where reaction speed is not that super important. Also micro allows you do simulate inefficiencies of load (i.e. ~constant power, but depending on input voltage, the import power could vary), just like most SMPSs are not really constant power, as they vary (by about 10%) their input power (for the same output power!), depending on a voltage.
What you could do in your current setup, which is relatively simple, and requires just code update, is pulsed loads. I.e. every second a 1W or 100mA pulse for 10ms. Or something like this. Useful for various applications.
Very helpful, I made a test constant current load using a couple of op amps and some mosfets salvaged from an old UPS which worked for testing 12V SLA batteries but the FETS blew when testing (lithium) 24V batteries. I think the FET's were unsuitable and / or I had over engineered it somewhat making a mistake in the circuit design somewhere. You design is much simpler so I'll give it a try.
The FETs probably were only designed for a maximum Vds of 20V or 16V, that are typical values. Would work fine at 12V, but they let out the magic smoke at too high voltages. Always google for a Datasheet before using any mosfet with higher voltage than the original device!
Yeah I think that was the problem. I was gonna re-visit that CC load tester later but may look at integrating Great Scott's solution into a battery tester. Perhaps change the LCD for a 4 line and add display for time elapsed and calculated Ah rating. Also feature to disconnect the battery when it reaches it's fully discharged state.
Excellent project
Hello, Scott is it possible to get a variable DC Voltage on the Gate of the MOSFET without the TC4420? A simple low pass filter on the PWM PIN should be good enough or not? What do you mean?
Thank you for the short and informative Video ;)
Fantastic work, dude! Awesome!
your videos are very interesting and knowledge full
Great video, thank you.
another good one Scott, this is a good start point or as is project. thanks
I like your videos, very informative! Keep it up!
I love the idea of building one of these so I can use it for logging discharge curves and testing my batteries. I would need much better precision though, so here are some thoughts on this.
The interface between the digital electronics and the analog electronics is the biggest limitation in precision here. Both the reading of current and voltage, and the control of the power MOSFET are noisy because of the limited resolution of the ADC and PWM. I was thinking of using a SPI controlled 16-bit variable potentiometer and an opamp to assist with driving the MOSFET. By using the feedback of the current sensor and the variable potentiometer connected to an opamp, would it not be possible to very precisely control the driving of the MOSFET?
When reading the current and voltage values, of course using a more precise DAC would be simplest as you have mentioned. But if I wanted to experiment with getting more precision with the 10 bit ADC we have already have, How does this scheme sound: Read the voltage from the voltage divider with the ADC (10 bit). Output the read value via SPI to a variable potentiometer . Using an opamp, we can connect the digital pot and the voltage we want to measure, and the opamp will amplify the difference in voltage so we can read that error difference with another ADC on the Arduino. The second ADC read would be a measure of how far off our originally read value is from the actual value, which we could calibrate against. We have more precision in the digital potentiometer than our ADC, so we would just nudge up or down the output value of the digital pot until the error feedback on the second ADC goes as close to zero as possible. Then we know based on what value we write to the digital pot what the actual voltage must be.
Let's walk through an example; it might make this more clear. Say we want to measure a current coming from the current sensor. It is outputting 2.954265v, which obviously our ADC can't even come close to in precision. Our 10 bit ADC can only read in steps of 0.00488 mv, so the value is going to be 605 or 606, giving us a reading somewhere around 2.951 to 2.956 volts. We spilt the difference and output 2.9535v to the digital pot. If the digital pot is 16 bits, that would be a value of 38711d, giving an output value of somewhere between 2.9534v to 2.9535v. The opamp magnifies the error difference between our actual 2.954265v and our pots output by say, 500x the voltage difference. We set it up so that the opamp output range is 0 to 5 volts, and a center voltage of 2.5v means no difference between the digital pot and the actual voltage from the current sensor, and it amplifies any difference in the two inputs by 500x the voltage difference. In this example, our voltage difference woudl be around 0.000765v, so let's say the opamp is actually putting out 2.1175v now, which our second ADC reads as 433 or 434, giving us a reading of 2.11v to 2.12v. We split the difference to 2.115. Now we have to adjust the digital pot output by some value to see how much closer we get. We calculate it like this. Subtract 2.5 from the new reading to find out how far off we are from center (-0.385v), divide by 500 (to scale it down by the amplified value of the opamp), which gives us -0.00077v. We now know we are reading higher on the ADC than we should be, so we adjust out output up. (or the other way around if we get a positive value instead of negative, of course). We subtract this calculated value from the value we last wrote the digital pot, giving us 2.95427v, which we write to the digital pot as 38721. Our new output is 2.954222v to 2.954299v. Do the whole feedback read again, and we get a much smaller error reading from the opamp. Every time we nudge up or down slightly in this way, we in theory get closer to the real world value.
Since we are reading with a 10 bit DAC, 9 bits of which we consider significant figures we magnify the error by 500 (512 would sound better, but I'm approximating), then reading again, we can probably get closer to 14 significant bits of precision. Of course, every time our most significant bits (first ADC read) change by more than 3 or so up or down, we have to start over in our calculations, but it should only take 2 or 3 cycles to gain enough precision again to be confident. The ADC takes like 1/10,000th of a second to read a value. So, I figure we can read at least 400-500 times a second. with calculations and re-reads, every 5-10 ms we should be able to get a very accurate read. We use the 10 bit course read for fast responses, and the higher precision reads for accurate adjusting of our MOSFET. Before, we were limited to 0.00448mv resolution in the ADC. We might be able to achieve an effective resolution of 0.0003v this way (that's about 14 bits). That's enough for millivolt measurements anyway. Most times, such short durations of time are not going to result in very much change in readings, and therefore we will spend most of our time in precision calculation, giving us very good accuracy.
How plausible does this sound? Worth putting the time into building to test out, or a waste of time and never going to work out correctly? I know this is bonkers over the top complicated compared to just getting a better ADC and calling it good, but I like the idea of something like this if it can be done.
Very helpful! Thanks colleague:)
That fet will runaway and die shorted just around the 40-50W mark. I ran some tests with those exact fets a while ago - they fail fairly consistently. Best bet is to use some beefy linear mosfets from IXYS, although they are expensive.
Is it necessary to add TC4420 mosfet driver ic?
Nice project.
Another important factor of the load is its impedance. For example, when you draw a 2 A current from 2V source with Saturated FET or BJT, you differential impedance is almost ro where as when you use a one ohm resistor to do this your differential impedance is 1 Ohm. Now, for example, if you are trying to measure the noise of the supply or a DC or AC generator, this makes huge difference if you have your differential output impedance is 1 ohm or ro.
So how can you get low differential output impedance? I can think of two ways.
1st: you have several say 1K Ohm parallel resistors which can be switched in and out of circuit by small MOSFETs in series with each resistor. ( ie. If you put 1000 1KOhm resistors in parallel you get 1 Ohm , and even if you use 1/4 watt resistors you can dissipate 250W without heat sink). Here to control the gate of the MOSFETs you need a Binary to Thermometer code converter. Then you can generate the binary code with something like Arduino.
2nd: You can cascode several MOSFET transistors, so each MOSFET stays in saturated region.
This project is somthing new and interesting
Very inspirational stuff.
Why do you use mosfet drivers instead an op-amp (like lm358) in a negative feedback configuration? What are the drawbacks of the latter?
Thanks for answer, I am waiting for next week video.
Probably the MOSFET driver is easier and more convenient.
Excellent, as usually.
Hello. is it possible without the mosfet driver? could you suggest a replacement or another circuit?
tks!! :-)
Commenting to watch this video later.
great one but just 1 question for some reason i need 30A not 3A what should i change to be able achieve this?
I would like to see you building or launching an electronic product into the world market.
That sounds pretty cool huh
Thank you very much, this is what i am looking for
I wonder how Great Scott fights noisy rotary encoder? Is there any special trick to avoid noise while rotating a knob? Debouncing?
Yesterday I played the "Great Scott - UTILISE" drinking game. OMG, what a headache :D Great video, nevertheless, as always ;)
Did I get something wrong? I thought when I want to use a MOSFET as a switch I have to use satuation region too... no?
You want to use it in its ohmic/linear region. This can be a bit confusing because (I think) for BJT those region names are switched.
Hm could be. It always made sense to me to work not in ohmic region since the name suggest to have some resistence which I don't want in a swicht :D
I have to agree with Trust me, I'm an engineer! on this one. For a switch, I want the lowest possible Rds value (on-resistance), which is achieved when the transistor is operating in its saturation region
Putkimies92 I thought so as well but after some research it turns out that GreatScott! is right. The saturation has different meanings. For BJTs it's a relation between Base-current and Collector-Emitter voltage. It is the region where the Vce cannot be lowered no matter how much you increase base current, meaning the Vce is saturated. This state means the BJT is dropping as little power as possible. For MOSFETs it's a relation between the Drain-Source voltage and the Drain-Source current. It is the region where increasing Vds doesn't increase Ids and therfore Ids is saturated. MOSFET saturation is not related to Rds-on and in fact the Rds-on value is only true in the linear region where the MOSFET is operating as a resistor (but a very low value one).
I also agree with Trust me, I'm an engineer. I am also an engineer. When you use a MOSFET as a switch you want to use it in the saturation region, turned on as hard as possible, to get the lowest power dissipation in the MOSFET. The "ohmic region" is called that because it has a higher resistance in that region, and therefore much higher power dissipation.
Nice bro....
Thanks
Awesome as always!
any newer version of this?
This is posted on the Arduino website right now!
Good video, interesting use of digital control loop. For more resolution you could use, instead of digitizing the current value, an analog control loop (a simple opamp) comparing voltage over sense resistor vs input set by a pwm (there are many techniques to improve resolution of arduino pwm, specially because you don't need it to be fast here).
Another good goal to pursue is having a load that can be controlled externally (e.g a pulse, or a step) to analyze response of circuits under transient load changes.
Another good one would be a load that can be used for AC... :)