2

I am new in this forum, so I am sorry if I don't properly ask my "question".

I am a beginner in the making of circuits and Arduino programming. (first time using an H-bridge, first time doing Arduino).

I want to create a fake recoil in a toy gun pistol. To make this, I decided to attach a mass (undefined yet) to a solenoid, and make it move. It would be controlled by an Arduino.

The system is powered by a 12V BOSCH battery.

The solenoid in question is a Latch pull solenoid.

This type of solenoid needs an inversion of polarity to be unlocked/to pull. I don't know how much current it would use, so I chose this H-bridge: (https://www.digikey.ch/fr/products/detail/toshiba-semiconductor-and-storage/TB67H400ANG/8569401) because of the current it can handle in LARGE MODE (6 A).

To design my circuit, I used the datasheet of the solenoid, and an example of utilization, found on the TOSHIBA website: https://toshiba.semicon-storage.com/ap-en/semiconductor/product/motor-driver-ics/brushed-dc-motor-driver-ics/detail.TB67H400ANG.html (datasheet and application notes pdfs) Also I want to use it in LARGE MODE, so the pins INB and PWMB are connected to GND.

Here is my question:

I wanted to verify if my circuit (or even my code) is correct, especially if the capacitors and resistances values/types are good (I took values from the application example). I chose RSL to be 0.12 ohm to have a current of 5.5 A approximatively in the solenoid. There is a lot that I don't understand, especially the capacitors utility. ps. I would use the motor driver in LARGE MODE

My circut is composed of these elements:

  1. Arduino Nano clone
  2. LM2596 buck converter ( to have a stable current feeding the Arduino) https://www.3dfilstore.ch/shop/produkt/3v-spannungsregulator-2596s/
  3. some capacitors (ceramic and electrolytic) and some resistors
  4. motor driver TB67H400ANG (H-bridge) https://www.digikey.ch/fr/products/detail/toshiba-semiconductor-and-storage/TB67H400ANG/8569401
  5. 12V Bosch battery (2.5 Ah) https://www.batteries4pro.com/fr/outillage/outils-sans-fil/bosch/3,16490-batterie-bosch-12v-25ah-li-ion-pour-outils-sans-fil-1600a00h3d-3165140852623.html
  6. Latch pull solenoid: https://www.digikey.ch/fr/products/detail/sumida-america-inc/G0413A/668329
  7. On/off switch and push button
  8. One 10 A fuse in case

Here is my circuit:

my circuit

And here is my Arduino code: (I precise that pin2 is an on/off switch, and pin3 is a PUSH button. The purpose is this one: if switch on pin2 is on, then when I push pin3 button, my solenoid have "positive" current, then "negative" current (corresponds to a round trip cycle of the solenoid).

const int GLISSIERE= 2;       //pin number of on/off switch
const int PUSH = 3;           //pin number of push button
const int SOLENOID = 4;       //pin number of solenoid in "positive current" 
const int LATCH = 5;          //pin number of solenoid in "negative current"
const int ACTIVATION = 6;     //pin number of the PWM control

const int Tsol=200;           //activation time of the solenoid in positive mode[ms] 
const int Tinter = 200;       //delay between positive and negative mode of solenoid
const int Tdelatch = 200;     //activation time of negative current
const int Tcadence=500;       //time between two cycles !!adds to REFRESH!![ms] 
const int Tpush=5;            //refresh time for lecture of push button
const int Tglissiere=5;       //refresh time for lecture of on/off switch

void setup() {
  pinMode(GLISSIERE,INPUT);         //on/off switch = input
  pinMode(PUSH,INPUT);              //push button  = input
  pinMode(SOLENOID,OUTPUT);         //solenoid = output
  pinMode(LATCH,OUTPUT);            //latch = output
  pinMode(ACTIVATION,OUTPUT);        //activation  = output

  digitalWrite(SOLENOID, LOW);       //security against floating pin
  digitalWrite(LATCH, LOW);
  digitalWrite(GLISSIERE, LOW);
  digitalWrite(PUSH, LOW);
}

void loop() {
  while (digitalRead(GLISSIERE)== HIGH) {     //when switch is on;
    if (digitalRead(PUSH)== HIGH){              //if push is on, then
      
      //////////activate solenoid in pull mode during Tsol
      digitalWrite(ACTIVATION,HIGH);              //activation solenoid
      digitalWrite(SOLENOID,HIGH);                //solenoid in pull mode 
      digitalWrite(LATCH,LOW);                    //security
      delay(Tsol);
      digitalWrite(SOLENOID,LOW);                 //solenoid at rest
      digitalWrite(ACTIVATION,LOW);               //deactivation solenoid
      delay(Tinter);                               

      /////negative current in the solenoid to unlosck latch ,during Tdelatch
      digitalWrite(ACTIVATION,HIGH);              //activation solenoid
      digitalWrite(LATCH,HIGH);                   //solenoide in negative current mode
      digitalWrite(SOLENOID,LOW);                 //security
      delay(Tdelatch);
      digitalWrite(LATCH,LOW);                    //solenoide at rest
      digitalWrite(ACTIVATION,LOW);               //deactivation solenoid
      
      delay(Tcadence);                            //limit before entering a new cycle                             
    }
    delay(Tpush);                             //time delay before reading PUSH button value
  }
  delay(Tglissiere);                          //time delay before reading switch button value
}////end of code

DISCLAIMER THIS IS MY FIRST TIME ASKING A QUESTION ON THIS FORUM, ALSO MY FIRST TIME MANIPULATING ELECTRONICS. I TRIED TO BE THE MOST CLEAR AND CONSICE AS POSSIBLE, BUT I AM NOT USED TO "ELECTRONIC VOCABULARY", SO I'M SORRY FOR ALL THE MISTAKES I MADE (ALSO ENGLISH MISTAKES). ALSO IT TOOK DAYS FOR ME TO UNDERSTAND THE BASICS OF THE H-BRIDGE, AND THERE IS A LOT I DON'T UNDERSTAND YET. I THANK YOU FOR ANY KIND OF HELP/ADVICE OR JUST EXPLANATIONS.

Also I did not purchase the motor driver yet, may be there is a best solution for what I want to make...

EDIT: answer to winny's comment decoupling

But there is capacitors built-in in the buck converter module, isn't sufficient? enter image description here

  • 1
    Welcome! _"12V Bosch battery (2.5Amps/h)"_ A/h makes no sense for a battery. Do you mean 2.5 Ah by any chance? Where are your decoupling capacitors in the schematic for both your Arduino and H-bridge? – winny May 03 '22 at 08:30
  • Yes of course, it is 2.5Ah, my bad. I didn't understand your second question, if the question is why there is no capacitor for the alimentation of the arduino, it is because I think the buck module is sufficient to feed the arduino with a stable current (even when the battery feeds the solenoid) – silvergoldengun May 03 '22 at 09:40
  • 1
    Unfortunately no, you are strongly recommended to use local decupling for every IC and switch. – winny May 03 '22 at 09:44
  • Thanks, so if I understand well, I have to put 2 capacitors like in the last image of my question post? (also how do I chose the values of these capacitors?) (sorry if I don't understand, I am a very new beginner, also don't hesitate to explain to me why should I do this, and what are the issues if I don't) – silvergoldengun May 03 '22 at 10:16
  • 1
    At least 100 nF on the input of every IC. For any DC/DC converter, make sure to check the datasheet. Some (most) come with significantly higher requirements on both input and output capacitance. – winny May 03 '22 at 10:36
  • ok, thank you very much for your help! – silvergoldengun May 03 '22 at 11:32
  • Furthermore, do you think the decoupling for my H-bridge (100uF and 0,1uF) is appropriate? ( I took this value from an example of application in "application note" page.13 here: https://toshiba.semicon-storage.com/ap-en/semiconductor/product/motor-driver-ics/brushed-dc-motor-driver-ics/detail.TB67H400ANG.html ) Also I am not sure I need more decouplings in the circuit than the mentionned ones, of if it is needed for the switches of the arduino. – silvergoldengun May 03 '22 at 11:36
  • Also as I edited at the end of my post, the built-in capacitors of the buck converter module are not sufficient for this application? – silvergoldengun May 03 '22 at 12:16
  • 1
    For output stability yes, but you still need decoupling in the receiving end unless it’s very close. – winny May 03 '22 at 21:17

0 Answers0