<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>H bridge Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/h-bridge/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/h-bridge/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Sun, 03 Jun 2018 13:45:09 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>H bridge Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/h-bridge/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Pilotare un motore DC tramite ponte ad H</title>
		<link>https://logicaprogrammabile.it/pilotare-motore-dc-tramite-ponte-h/</link>
					<comments>https://logicaprogrammabile.it/pilotare-motore-dc-tramite-ponte-h/#comments</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Mon, 20 Feb 2012 16:06:00 +0000</pubDate>
				<category><![CDATA[Tutorial Arduino]]></category>
		<category><![CDATA[H bridge]]></category>
		<category><![CDATA[Motore DC]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2532</guid>

					<description><![CDATA[<p>Come usare Arduino per gestire la rotazione di un piccolo motore DC Uno dei primi circuiti elettronici che realizzai fu un semplice driver che pilotava un piccolo motore DC, potevo gestire la rotazione a destra o a sinistra e anche la velocità di rotazione, usando...</p>
<p>The post <a href="https://logicaprogrammabile.it/pilotare-motore-dc-tramite-ponte-h/">Pilotare un motore DC tramite ponte ad H</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Come usare Arduino per gestire la rotazione di un piccolo motore DC</h1>
<p>Uno dei primi circuiti elettronici che realizzai fu un semplice driver che pilotava un piccolo motore DC, potevo gestire la rotazione a destra o a sinistra e anche la velocità di rotazione, usando un segnale <a href="http://it.wikipedia.org/wiki/PWM" target="_blank" rel="noopener noreferrer">PWM</a> generato dal <a href="http://it.wikipedia.org/wiki/NE555" target="_blank" rel="noopener noreferrer">mitico NE555</a>.<br />
A distanza di qualche anno ho deciso di riprendere il progetto iniziale utilizzando <strong>Arduino</strong> che permette in modo veloce, con un controllo completo, di ripercorrere quell&#8217;esperienza.</p>
<p>Come sapiamo bene le uscite di <strong>Arduino</strong> non possono fornire una corrente sufficiente da permettere la rotazione del motore, quindi è importante usare dei transistor (o dei circuiti integrati appositi, <a href="http://www.sparkfun.com/products/9479" target="_blank" rel="noopener noreferrer">vedi L298</a>) per fornire la corrente necessaria all&#8217;alimentazione del motore. Il circuito da realizzare deve anche permettere la rotazione del rotore sia in un senso che nell&#8217;altro. La soluzione più veloce è realizzare <a href="http://en.wikipedia.org/wiki/H_bridge" target="_blank" rel="noopener noreferrer">un ponte ad H</a> che sfrutta 4 transistors, due del tipo NPN e due del tipo PNP collegati come nella figura seguente:.</p>
<p><span id="more-2532"></span></p>
<p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-5503 size-full" title="Ponte ad H" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH.png" alt="Ponte H motore dc" width="441" height="347" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH.png 441w, https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH-300x236.png 300w" sizes="(max-width: 441px) 100vw, 441px" /></p>
<p>Il segnale di ingresso viene applicato al <strong>pinA</strong> e al <strong>pinB</strong> del ponte H. Quando A è alto e B è basso vanno in conduzione i transistor <strong>T4</strong> e <strong>T2</strong> provocando la rotazione a sinistra del motore:</p>
<p><img decoding="async" class="aligncenter wp-image-5506 size-full" title="PonteH_SX" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH_SX.png" alt="Rotazione a sinistra del rotore" width="486" height="349" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH_SX.png 486w, https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH_SX-300x215.png 300w" sizes="(max-width: 486px) 100vw, 486px" /></p>
<p>quando sul <strong>pinA</strong> il segnale è basso e sul <strong>pinB</strong> il segnale è alto i transistor che vanno in conduzione sono il <strong>T1</strong> e il <strong>T3</strong>, provocando la rotazione a destra del motore:</p>
<p><img decoding="async" class="aligncenter wp-image-5508 size-full" title="PonteH_DX" src="https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH_DX.png" alt="Rotazione a destra del rotore" width="487" height="329" srcset="https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH_DX.png 487w, https://logicaprogrammabile.it/wp-content/uploads/2012/02/PonteH_DX-300x203.png 300w" sizes="(max-width: 487px) 100vw, 487px" /></p>
<p>I transistors che ho usato in questo schema riescono a &#8220;sopportare&#8221;, se correttamente raffreddati, circa 8A ed una tensione di lavoro massima di 45 Vdc.</p>
<p>Testiamo il circuito usando la nostra board <strong>Arduino</strong>, collegando il <strong>pinA</strong> al pin digitale 5 e il <strong>pinB</strong> al pin digitale 6, in modo da utilizzare anche il segnale <strong>PWM</strong> disponibile su questi pin.<br />
Il codice di esempio seguente e si avvale del <span style="text-decoration: underline;">serial monitor</span> per decidere se far girare il motore a destra o a sinistra. Utilizziamo i pin5 e pin6 perché possono anche generare un segnale pwm, che utilizzerò successivamente per variare la velocità di rotazione.</p>
<pre class="lang:arduino decode:true ">//codice di esempio
void setup()
{
//pin5 e pin6 in uscita
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
//pin5 e pin6 bassi
digitalWrite(5, LOW);
digitalWrite(6, LOW);
//Serial monitor init
Serial.begin(9600);
}
void loop()
{
//attendi un comando dalla serial
if( Serial.available())
{
byte DataRX = Serial.read();
//carattere 1 avvia il motore a SX
if(DataRX == 49)
{
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
}
//carattere 2 avvia il motore a DX
if(DataRX == 50)
{
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
}
//Carattere 0 ferma il motore
if(DataRX == 48)
{
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
}
}</pre>
<p>&nbsp;</p>
<p>Il codice precedente permette di avviare il motore e di cambiarne il verso di rotazione in base al carattere che spediamo tramite il serial monitor.</p>
<p>Dato che i pin 5 e 6 di Arduino possono generare un segnale PWM, modifichiamo il codice come di seguito:</p>
<pre class="lang:arduino decode:true ">byte Velocita = 125;
byte DataRX = -1;
void setup()
{
//pin5 e pin6 in uscita
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
//pin5 e pin6 bassi
digitalWrite(5, LOW);
digitalWrite(6, LOW);
//Serial monitor init
Serial.begin(9600);
}
void loop()
{
//attendi un comando dalla serial
if( Serial.available())
{
DataRX = Serial.read();
Serial.println(Velocita);
//incrementa la velocita inviando il numero 5
if(DataRX == 53)
{
Velocita += 10;
if (Velocita &gt;= 255)
Velocita = 255;
}
//decrementa la velocita inviando il numero 6
if(DataRX == 54)
{
Velocita -= 10;
if (Velocita &lt;= 0)
Velocita = 0;
}
//carattere 1 avvia il motore a SX
if(DataRX == 49)
{
analogWrite(5, Velocita);
digitalWrite(6, LOW);
}
//carattere 2 avvia il motore a DX
if(DataRX == 50)
{
digitalWrite(5, LOW);
analogWrite(6, Velocita);
}
//Carattere 0 ferma il motore
if(DataRX == 48)
{
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
}
}</pre>
<p>Questo esempio permette di variare la velocità spedendo, tramite il serial monitor, il numero 5 (codice ASCII 53) per incrementare la velocità e il numero 6 (codice ASCII 54) per decrementarla. Dopo aver cambiato il valore della variabile Velocita, bisogna rispedire il carattere 1 o il carattere 2 per confermare il nuovo valore di pwm.</p>
<p>Naturalmente esistono dei circuiti integrati che svolgono egregiamente il pilotaggio di motori unipolari e bipolari, uno dei più utilizzati in campo hobbistico è  il driver L298 . Vedremo nei prossimi tutorial come utilizzarlo con un motore bipolare.</p>
<p>The post <a href="https://logicaprogrammabile.it/pilotare-motore-dc-tramite-ponte-h/">Pilotare un motore DC tramite ponte ad H</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/pilotare-motore-dc-tramite-ponte-h/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
