author

dcaditz

13
Inbox View Profile
4Instructables19,972Views17Comments

Tell us about yourself!

Achievements

10K+ Views Earned a bronze medal
  • Arduino LTC6804 BMS - Part 1: Main Board

    Hi zamikshahid. Thanks for your message. I cannot provide a complete soldered system. Can you tell me what issues you have with the PCB design? Also, what is the intended end use of your project? Thanks. -David

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Hi Fer2020 Thanks for your question. As you mentioned, page 67 of the datasheet discusses using the LTC6804 with fewer than 12 cells in series. The only issue with the Arduino code would be that a 0V reading in one or more channels would trigger an under-voltage fault. You would have to modify the code to ignore unused pins with 0V readings. You can certainly ditch the LEM, but again you would have to short the current sense pins together to not get random current readings. Or you could just comment out the current sensing section of the Arduino code. The BMS is powered by a separate 12v supply. This was due to the constraints for my particular application (basically the rules for the competition that the BMS was designed for). You could easily modify it to get power from the battery pac…

    see more »

    Hi Fer2020 Thanks for your question. As you mentioned, page 67 of the datasheet discusses using the LTC6804 with fewer than 12 cells in series. The only issue with the Arduino code would be that a 0V reading in one or more channels would trigger an under-voltage fault. You would have to modify the code to ignore unused pins with 0V readings. You can certainly ditch the LEM, but again you would have to short the current sense pins together to not get random current readings. Or you could just comment out the current sensing section of the Arduino code. The BMS is powered by a separate 12v supply. This was due to the constraints for my particular application (basically the rules for the competition that the BMS was designed for). You could easily modify it to get power from the battery pack itself. It would be safest to use an isolated DC-DC converter between the battery pack and the BMS.

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Hi Blueinkscience. Thanks for your comment and thanks for looking over the schematic so closely! Sometimes I label pins on the schematic and never use them. I think the Drive pin is not connected to anything and I never used it for any purpose. Same for the Arduino D2-D7 pins. They are just available on the shield in case you want to use them for something. Hope this helps.

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Thanks for our comment. The value of MIN_CELL_V sets the cutoff voltage. The discharge relay should open when any cell reaches this voltage.

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Hi NeilRG. Thanks for your question. I don't believe you would have to make any changes to the BMS to use 18650 batteries. Just make sure that you read the datasheet for your batteries and set MIN_CELL_V and MAX_CELL_V in the arduino code to the appropriate values. Also you might have to adjust the LEM_RANGE if you are using a different method to measure current that I used in the Instructable. Also make sure that your charger is set up correctly and does not exceed the max charge current from the battery datasheet.

    View Instructable »
  • 3D Printer Heated Build Plate Arduino Controller

    Hi Jody. Thanks for your question and thanks for pointing out that I didn' t specify the pins. Actually you can tell from the arduino code which pins connect to the switches. LED, etc. (and you can change them in the code if you wish.) HEre are the relevant lines:int startPin = 11; // turns heat on/offint tempPin = 12; // sets temp PLA or ABSint ledPin = 13;I'll update the Instructable to make that more clear. Thanks!

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Hi Jeff. If I understand the question I think you would be able to monitor all 8 with one of the BMS boards.

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Hi jliten. Thanks for your comment. You can adapt the project to use a 24 (or more) cell pack, but you will have to use 2 (or more) LTC6804 ICs. You will have to study the LTC6804 datasheet to see how it can be done. Note that the LTC6804-1 and LTC6804-2 ICs have different methods for dealing with more than 12 cells.

    View Instructable »
  • Arduino LTC6804 BMS - Part 2: Balance Board

    Thanks AjshsayW. They are not letting me upload gerbers or even zipped gerbers any more (or I can't figure out how to do it). If you send me your email address I'll send them to you.

    View Instructable »
  • 3D Printer Heated Build Plate Arduino Controller

    Thanks for your message! Looks like you are making progress. Regarding the code question, yes that fault detection snippet would go in the main loop. It is untested and only intended to give some guidance for those having trouble with the bed not heating.

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Absolutely, the following parameters (as well as some others) can be changed in lines 15 and 16 of the code:const float MIN_CELL_V = 2.20; const float MAX_CELL_V = 3.60;

    View Instructable »
  • Arduino LTC6804 BMS - Part 1: Main Board

    Hi AlperU. Thanks for your questions. I ended up using this transistor to drive the relays: ZXTN19020DGTA, 20V 9A. Also, I did not use any special ISOSPI conversion or isolator IC. It would be an improvement to add isolation to protect the Arduino and make the communication more noise resistant.

    View Instructable »
    • Arduino LTC6804 BMS - Part 3: Telemetry
      69 views
      0 favorites
      0 comments
  • 3D Printer Heated Build Plate Arduino Controller

    The behavior you describe seems to be consistent with a fault situation on the motor driver. If the motor driver thinks there is an unusual situation on their drive transistors they will shut down. See the data sheet (https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/10832.pdf) and specifically the fault status pins ENA/DIAGA, ENB/DIAGB described in Table 4 and page 20 of the data sheet. This could be caused by mis-wiring or by having a heat plate with different resistance than the one that I the system tested with.Another user reported similar behavior when the Arduino pwm got below a certain value (50 in his case). I suggested that he try modifying the arduino code to add a MINPWM value as follows:In the header:#define MINPWM 60 \\ minimum allowable PWMIn function heatup(…

    see more »

    The behavior you describe seems to be consistent with a fault situation on the motor driver. If the motor driver thinks there is an unusual situation on their drive transistors they will shut down. See the data sheet (https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/10832.pdf) and specifically the fault status pins ENA/DIAGA, ENB/DIAGB described in Table 4 and page 20 of the data sheet. This could be caused by mis-wiring or by having a heat plate with different resistance than the one that I the system tested with.Another user reported similar behavior when the Arduino pwm got below a certain value (50 in his case). I suggested that he try modifying the arduino code to add a MINPWM value as follows:In the header:#define MINPWM 60 \\ minimum allowable PWMIn function heatup():if (temperature > targetTemp ) { pwm = max(pwm - 1, MINPWM); } else { pwm = min(pwm + 1, MAXPWM); }See if this makes any difference.....

    A few users have mentioned that the heat bed stops heating up under some conditions. I believe this is due to the motor driver detecting what it thinks is a fault and latching off. This may be because the heating element some people are using has too little resistance. If a fault is detected, then pins 1 and/or 2 on the Moto Shield will be pulled low. You can check this with a volt meter. To reset the Moto Shield you need to pull the INA1, INA2 or INB1, INB2 momentarily low. You can add a reset function such as the following:void clearFault(uint8_t motor){ digitalWrite(inApin[motor], LOW); digitalWrite(inBpin[motor], LOW); delay(10) digitalWrite(inApin[motor], HIGH); digitalWrite(inMpin[motor], HIGH);}Call clearFault(i) if a fault is detected on drive i:if (digitalRead(enpin[i]) == …

    see more »

    A few users have mentioned that the heat bed stops heating up under some conditions. I believe this is due to the motor driver detecting what it thinks is a fault and latching off. This may be because the heating element some people are using has too little resistance. If a fault is detected, then pins 1 and/or 2 on the Moto Shield will be pulled low. You can check this with a volt meter. To reset the Moto Shield you need to pull the INA1, INA2 or INB1, INB2 momentarily low. You can add a reset function such as the following:void clearFault(uint8_t motor){ digitalWrite(inApin[motor], LOW); digitalWrite(inBpin[motor], LOW); delay(10) digitalWrite(inApin[motor], HIGH); digitalWrite(inMpin[motor], HIGH);}Call clearFault(i) if a fault is detected on drive i:if (digitalRead(enpin[i]) == LOW ) { clearFault(i);}This code is untested.

    View Instructable »
    • Arduino LTC6804 BMS Balance Board
      107 views
      1 favorites
      3 comments
    • Arduino LTC6804 Battery Management System
      95 views
      3 favorites
      0 comments
    • 3D Printer Heated Build Plate Arduino Controller
      423 views
      13 favorites
      1 comments