diy solar

diy solar

I want to make my own BMS

Including the MOSFETs? if yes then be prepared to double that, at least. (or have a very high thermal load to take care of).

Yeah - I roughed in a BOM for bi-directional MOSFET 300A switch and to get the ESR to a tolerable place required quite a few expensive FET's.
The alternative, as you said, is to spend the money on a huge heat sink with a fan.

Personally, I want a fanless solution. Fans fail in the best of environments, BMS's are not usually in the best environments.
 
I think I got misunderstood again. I said that basic code for protection can be done in one day. There are already libraries for the component. A code that writes a register calling an already implemented funcition to change one parameter or calling a function to read a parameter and cast it through UART, if you have the expertise, does not take a long time. I do embedded programing every day. The whole system, taking only part of my free time, will take few months at least.

Understood ;) I thought you were talking about the whole BMS firmware.
 
Very good point.

In this application, I don't see the embedded MCU's doing much more than coordination with no strenuous performance requirements. That is a good place to add abstraction in the name of getting it done in a reasonable amount of time.

Almost all of my embedded work has been in C. The end result is very performant and reliable, but at the cost of time. C takes far longer to code than MicroPython. If you get into a performance bind, you can utilize inline C for the areas that need something very specific. It does not really fit all applications, but I have had really good success in situations like this where the MCU is not safety critical. The important stuff is being done on dedicated analog silicon.

Yes, but given the project and the time I would not sacrifice reliability for time, but that's a personal choice (which I highly recommend everyone to follow too BTW ?).

You might want speed for the over current detection. You'll still be far too slow to handle a short circuit with no damage but you can at least mitigate the damages by being as fast as you can ;)


Yeah - I roughed in a BOM for bi-directional MOSFET 300A switch and to get the ESR to a tolerable place required quite a few expensive FET's.
The alternative, as you said, is to spend the money on a huge heat sink with a fan.

Personally, I want a fanless solution. Fans fail in the best of environments, BMS's are not usually in the best environments.

Yep, exactly, fans are not a good idea here. And the losses would be very high for systems where we typically try to save as much energy as possible ^^

I know the BoM cost for a 48 V 300 A switch with passive cooling because I designed exactly that and I had to do high-end design for the thermal and current handling and sharing parts. 100 USD will barely cover the cost the switch (and that's without bells and whistles).

That's also why I fail to see how he'll handle that with a single sided PCB.

MCPCB are nice for the thermal part but that's to the detriment of the current handling part of the problem. And unless you use soldered busbars (good luck with the size needed here...) it's not really practical to put holes because then you'll have to isolate any fastener you put through (and you'll have to drill your heatsink with oversized holes too to have the clearance around your fasteners).

Also I've seen the dielectric layer fail with lower voltages than that in some MCPCB. It would be fine for a 24 V system but a 48 V one (who can go as high as almost 60 V) is pushing it. I guess you can always find better MCPCB with a higher rating but it'll be more expensive and increase the thermal resistance...
 
Last edited:
I am designing for 100A so requirements are lower. For 300A will be more expensive of course.
 
If the body diode indeed conducts during fault conditions, you could reduce power dissipation by connecting a few schottky diodes in parallel with fet body diode. Probably reduce power dissipation by 50%.

If 100A is the design parameter then you'll have to account for 100A going through the body diodes.
Pd = 100A * 1V = 100W

With schottky diodes, might be able to reduce it to:
Pd = 100A * 0.4V = 40W
 
If the body diode indeed conducts during fault conditions, you could reduce power dissipation by connecting a few schottky diodes in parallel with fet body diode. Probably reduce power dissipation by 50%.

If 100A is the design parameter then you'll have to account for 100A going through the body diodes.
Pd = 100A * 1V = 100W

With schottky diodes, might be able to reduce it to:
Pd = 100A * 0.4V = 40W
Thank you for the recommendation. In any case this will not be implemented in the first prototype as it is an additional feature, not a core one. I still need to evaluate how needed is this feature.

Thank you any way.
 
Last edited:
If the body diode indeed conducts during fault conditions, you could reduce power dissipation by connecting a few schottky diodes in parallel with fet body diode. Probably reduce power dissipation by 50%.

If 100A is the design parameter then you'll have to account for 100A going through the body diodes.
Pd = 100A * 1V = 100W

With schottky diodes, might be able to reduce it to:
Pd = 100A * 0.4V = 40W
In any case for the high current pcb design I will really appreciate the help from the forum as I have no experience in designing pcbs over 10A. I have only the theoretical knowledge of different projects schematic and dimensioning design but not the practice In this area. My field is embedded systems and mixed signals. Luckily I have some experience with pcb thermal simulations.
 
100 A on a single sided PCB is maybe manageable without solderable busbars. You definitely want to use a thick copper layer, minimum 70 µm, ideally 105 µm.

Then you'll need to calculate the width of the trace needed (don't try to put 100 A in traces calculators, put 10 or 20 A and multiply the width by 10 or 5). You can also do the opposite way and enter a width to have the temperature rise as a result.

Then you'll need to do a proper layout to share the current equally amongst all the MOSFETs. The diagonal method is pretty good and hard to beat, you can see an example here ;)
 
Yes, but given the project and the time I would not sacrifice reliability for time, but that's a personal choice (which I highly recommend everyone to follow too BTW ?).

You might want speed for the over current detection. You'll still be far too slow to handle a short circuit with no damage but you can at least mitigate the damages by being as fast as you can ;)

In my commercial designs, all of those things happen the analog domain and do not rely on the MCU - which gives me to take the easier route on code development. If it has a bug and freezes up, the analog protection is still perfectly functional. I have been using electronic fuses in my designs for many years - all the functionality is baked into the circuit. They just communicate status back to the MCU's.
 
100 A on a single sided PCB is maybe manageable without solderable busbars. You definitely want to use a thick copper layer, minimum 70 µm, ideally 105 µm.

Then you'll need to calculate the width of the trace needed (don't try to put 100 A in traces calculators, put 10 or 20 A and multiply the width by 10 or 5). You can also do the opposite way and enter a width to have the temperature rise as a result.

Then you'll need to do a proper layout to share the current equally amongst all the MOSFETs. The diagonal method is pretty good and hard to beat, you can see an example here ;)
I have done the solderable buss bars before. They really help reduce the need for special PCB fabs. Excellent to consider those for one-off's and hobby projects that special PCB fabs can get out of hand financially.
 
In my commercial designs, all of those things happen the analog domain and do not rely on the MCU - which gives me to take the easier route on code development. If it has a bug and freezes up, the analog protection is still perfectly functional. I have been using electronic fuses in my designs for many years - all the functionality is baked into the circuit. They just communicate status back to the MCU's.

You're preaching to the converted ?
 
Hi,

I have started with the implementation of phase 1 where I only have battery protection and with wireless connectivity for monitoring and parameter programming.

Just to remind, my system will be 24V 100A.

For this purpose I have set the following requirements (from the big picture):

- Over/undervoltage protection
- Over/undercurrent protection
- Over/undertemperature protection
- Battery disconect capability
- Current, voltage, temperature monitoring
- Wireless connectivity

Starting with the first 4 requirements I would really priorize hardware control loops where every protection mechanism is not related to a firmware in a microcontroller.

For monitoring my targets are

Cell voltage accuracy: +-5mV per cell. I think more than 2 decimals is more than enough for me.
Pack current: +-5mA. I do not feel useful measuring currents lower than 10mA.
Temperature: +-0.5C. I am not caring about temperature accuracy.

For the wireless connectivity my main candidate is Wi-fi. I feel that it is the most useful wireless comunication. It can be integrated in a home system. Functionalities like hosting a web server or dumping data to the cloud will be decided later. Bluetooth can be nice for configuring when you are close to the device but I think wifi can also cover that part generating a hotspot. The last nice to have connectivity could be GSM for places without wifi. In the beginning I am not planning to implement it.

Talking about battery disconeciton I will go with mosfets. Contactors are other option but there are tradeoffs. Mosfets are cheaper and smaller but have some voltage drop. Contactors are expensive, bulky but have nearly 0 drop. About reliability I think it is the same.

I have check most of the components in the market. Only the dedicated ones. I could implement ADCs with analog frontends but I do not see any advantadge.

As I have discussed before I think bq76952 is the best option for me. The reasons are:

- Voltage, current and temperature fault detection and protection firing is completely done by hardware. I do not want to have lines of protection in the code of my MCU. I want to be sure that whatever I do in firmware will not affect protection. I would not like to, by error, put a bug in protection code and only discover it when a catastrophic event occurs.
- It meets my accuracy targets (I am not talking about precision):
- Voltage: it is in the limit as accuracy is +-5mV and my target is +-5mV (I am talking about accuracy, resolution is 1mV)
- Current: (using a 100A/50mV shunt) target is +-5mA. Resolution of this device is 4mA. After calibration a accuracy is lower than resolution so I am fine. Temperature drift is also small. 0.015mA/C. Actually they claim that the best characteristic of this product is the current measurement.
- Temperature: I do not care

I will need to take a look for precision.

The device uses 2 delta sigma 16 bit ADCs. One is multiplexed for measuring the 16 cell voltages with a sample time of 3ms. The other one is only for current measurement with a sample time of 250ms.

I have evalated other options in the market. For example Linear Technologies does awesome monitors but all of the are only monitors. I need to implement software loops for protections. For this reason in the step of protection they are excluded.

If we talk about the fure where I will need very accurate/precise measurements maybe (I need to discover if really needed) I will need to add in paralell better monitors. Yes, in parallel. Many BMSs in the market they have 2 monitors. One for protection by hardware and another one for measuring. One current monitor that looks very nice is LTC2949 with a 20bit adc. Another option for a fully integrated fuel gauge that I have experience (I already developed a device) is BQ34Z100. As far as I know it is the fuel gauge used in pylontech.

For the MCU I will use ESP32. I do not like it, but it is handy. It includes wifi and bluetooth. In my opninion it consumes too much power.

If you want to know my progress, currently I am designing the schematic. BQ and ESP32 are fully implemented. The only part is missing is the mosfet switch. That is the reason I am here now. I have seen that many people talking about charging current when battery is discharged down to 2.5V/cell. Should I implement a precharge system to limit the charging current? is it really dangerous charging at high current in this circumnstance?

I know this is not a big deal compared to BMSs in the market. This is the platform for implementing the additional features like active balancing or fuel gauge. At this point a BMS with temperature protection that you can configure exactly every parameter for voltage and current and connect it though wifi without paying a fortune, is enough justification for me.
 
Last edited:
Should I implement a precharge system to limit the charging current? is it really dangerous charging at high current in this circumnstance?

Precharge usually means precharging the inverter capacitors to avoid a big current spike.

Charging at high current while being under the low voltage limit isn't really dangerous but it may reduce the cell lifetime.
 
Precharge usually means precharging the inverter capacitors to avoid a big current spike.

Charging at high current while being under the low voltage limit isn't really dangerous but it may reduce the cell lifetime.
I think the same as you but this chip calls precharge to charging a low voltage battery. Quoted from the datasheet:

The BQ76952 device includes precharge functionality, which can be used to reduce the charging current for an undervoltage battery by charging using a high-side PCHG PFET (driven from the PCHG pin) with series resistor until the battery reaches a programmable voltage level. When the minimum cell voltage is less than a programmable threshold, the PCHG FET will be used for charging.



I also need to evaluate the power dissipation of this feature.
 
Precharge usually means precharging the inverter capacitors to avoid a big current spike.

Charging at high current while being under the low voltage limit isn't really dangerous but it may reduce the cell lifetime.
I did some experiments with this where I had a pre-charge wire connected to the inverter that was current limited. Once it to less than a volt differential, a comparator would activate a FET that turned on the main switch.

I only did this with a small system for testing, have not tried in on my bigger Victron units. Seems like a great feature to have and it is easily implemented in the analog domain.


Talking about battery disconeciton I will go with mosfets. Contactors are other option but there are tradeoffs. Mosfets are cheaper and smaller but have some voltage drop. Contactors are expensive, bulky but have nearly 0 drop. About reliability I think it is the same.
Curious if anyone has datasheets on common DC contactors that are load-break rated. I would like to know the typical contact resistance.
My gut feeling tells me that modern N-CH MOSFETs will beat a mechanical contactor in resistance, but that is only a gut feeling.

The rest of the specs and device candidates sound totally reasonable.
 
I think the same as you but this chip calls precharge to charging a low voltage battery. Quoted from the datasheet:

The BQ76952 device includes precharge functionality, which can be used to reduce the charging current for an undervoltage battery by charging using a high-side PCHG PFET (driven from the PCHG pin) with series resistor until the battery reaches a programmable voltage level. When the minimum cell voltage is less than a programmable threshold, the PCHG FET will be used for charging.



I also need to evaluate the power dissipation of this feature.
This seems a bit crazy :unsure:

Perhaps some sort of SMPS current source that you can control at a modest level until the min cell voltage reaches your threshold? More complex, but a tiny fraction of the thermal challenge.
 
I did some experiments with this where I had a pre-charge wire connected to the inverter that was current limited. Once it to less than a volt differential, a comparator would activate a FET that turned on the main switch.

Only problem of that solution is that on a multi battery system the main switch will never close if this battery isn't at the same SoC than the others. Of course it's a nice safety feature if the voltage difference is high, but it's a problem if you only have a few volts difference.


This seems a bit crazy

Yes, it's borderline practical. I had to use 4 power resistors to limit to 2 A only. I'd like to limit to a higher current but the thermal dissipation gets too high. It's easier on a 24 V system tho, and very easy on a 12 V ;)
 
Back
Top