<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://modelleisenbahn.triskell.org/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>ModelleisenbahN</title>
	<link>https://modelleisenbahn.triskell.org/</link>
	<description>Modelleisenbahn traite de la construction de mon r&#233;seau &#171; Messingrohrstadt &#187;, r&#233;seau allemand de l'&#233;poque II. Des documents sur le th&#232;me de la SNCF et &#233;labor&#233;s par R&#233;my Fauvet sont &#233;galement h&#233;berg&#233;s.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://modelleisenbahn.triskell.org/spip.php?id_rubrique=19&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>ModelleisenbahN</title>
		<url>https://modelleisenbahn.triskell.org/local/cache-vignettes/L144xH144/siteon0-d64b7.png?1692197123</url>
		<link>https://modelleisenbahn.triskell.org/</link>
		<height>144</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>D&#233;coupeuse et graveuse laser</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article92</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article92</guid>
		<dc:date>2024-05-23T06:48:37Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>



		<description>
&lt;p&gt;Une d&#233;coupeuse et graveuse laser est probablement la machine-outil la plus int&#233;ressante pour le mod&#233;lisme ferroviaire. Elle permet de r&#233;aliser ses propre kits de b&#226;timent avec des mati&#232;res premi&#232;re tr&#232;s peu ch&#232;re et une mise en &#339;uvre plut&#244;t ais&#233;e. &lt;br class='autobr' /&gt; J'ai d&#233;couvert cette technologie dans un FabLab. On trouve habituellement install&#233;es dans les FabLabs des machines professionnelles d'une puissance &#233;lev&#233;es, de grand format, 1m2 ou plus, encombrantes et de co&#251;t non n&#233;gligeable ; On parle de (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique26" rel="directory"&gt;D&#233;coupe et gravure laser&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Une d&#233;coupeuse et graveuse laser est probablement la machine-outil la plus int&#233;ressante pour le mod&#233;lisme ferroviaire. Elle permet de r&#233;aliser ses propre kits de b&#226;timent avec des mati&#232;res premi&#232;re tr&#232;s peu ch&#232;re et une mise en &#339;uvre plut&#244;t ais&#233;e.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;J'ai d&#233;couvert cette technologie dans un FabLab. On trouve habituellement install&#233;es dans les FabLabs des machines professionnelles d'une puissance &#233;lev&#233;es, de grand format, 1m&lt;sup&gt;2&lt;/sup&gt; ou plus, encombrantes et de co&#251;t non n&#233;gligeable ; On parle de plusieurs milliers d'euros. Ces machines sont &#233;quip&#233;es d'un &lt;a href=&#034;https://fr.wikipedia.org/wiki/Laser_au_dioxyde_de_carbone&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;laser CO&lt;inf&gt;2&lt;/inf&gt;&lt;/a&gt; et permettent la d&#233;coupe de mat&#233;riaux &#233;pais. Un laser &#224; CO2 &#233;met de la lumi&#232;re &#224; environ 10&#181;m de longueur d'onde, c'est &#224; dire dans l'infrarouge pas si proche que &#231;a.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Les machines pour les particuliers&lt;/h2&gt;
&lt;p&gt;Les machines accessibles aux particuliers utilisent une technologie diff&#233;rente et moins ch&#232;re, la diode laser. Ici la longueur d'onde se situe entre 500 et 900 nm&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Du moins si j'en crois l'offre disponible chez TME.&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;, donc dans le visible ou le tr&#232;s proche infrarouge. Dans cette cat&#233;gorie on trouve des machines allant d'environ 150&#8364; &#224; 600-700&#8364; selon la puissance, la taille et le degr&#233; de sophistication et d'&#233;quipement. La puissance d&#233;marre &#224; 5W et monte &#224; 40W. Toutes ces machines ont des architectures similaires :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Un cadre en profil&#233; d'aluminium (axe Y) ;&lt;/li&gt;&lt;li&gt; Un portique en profil&#233; d'aluminum sur lequel se d&#233;place le laser (axe X) ;&lt;/li&gt;&lt;li&gt; Un laser r&#233;glable en hauteur pour que la focale soit centr&#233;e sur le mat&#233;riau &#224; d&#233;coup&#233; ;&lt;/li&gt;&lt;li&gt; Un moteur pas-&#224;-pas pour le d&#233;placement du portique le long de l'axe Y ;&lt;/li&gt;&lt;li&gt; Un moteur pas-&#224;-pas pour le d&#233;placement du laser sur le portique le long de l'axe X ;&lt;/li&gt;&lt;li&gt; Une carte de commande pilotant la puissance du laser et les deux moteurs pas-&#224;-pas et reli&#233;e &#224; un ordinateur.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;On peut aussi avoir quelques fonctions suppl&#233;mentaires comme le Wifi pour transf&#233;rer des fichiers sur la machine et d&#233;couper de mani&#232;re autonome.&lt;/p&gt;
&lt;p&gt;Contrairement aux machines professionnelles, rien n'est pr&#233;vu de base pour l'extraction des fum&#233;es et il faudra se d&#233;brouiller pour concevoir et fabriquer un syst&#232;me d'extraction. La figure ci-dessous montre la machine que j'ai choisie, une Longer Ray5 10W.&lt;/p&gt;
&lt;div class='spip_document_434 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;39&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH347/longerray5-92e04.jpg?1716416302' width='500' height='347' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-434 '&gt;&lt;strong&gt;D&#233;coupeuse/graveuse laser Longer Ray5
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Cette machine a une surface de d&#233;coupe de 400x400mm mais j'ai &#233;galement achet&#233; l'extension de l'axe Y qui porte cette dimension &#224; 850mm.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le martyr&lt;/h2&gt;
&lt;p&gt;Comme on ne va pas d&#233;couper directement sur la table, il faut pr&#233;voir un support adapt&#233;. Placer sous les pi&#232;ces &#224; d&#233;couper une planche de bois n'est pas la meilleure id&#233;e car le dessous de la pi&#232;ces sera brul&#233;. Le mieux est d'acheter un support en aluminium en nid d'abeille pr&#233;vu pour la d&#233;coupe laser, un &lt;i&gt;LaserBed&lt;/i&gt;. Des supports de grande taille sont plus rares mais la soci&#233;t&#233; MECPOW vend un nid d'abeille de 400x800mm de surface utile. Tant pis pour les 50mm perdus sur l'axe Y. Dans le kit, on a &#233;galement une plaque en inox qui se place sous le nid d'abeille.&lt;/p&gt;
&lt;div class='spip_document_435 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH363/laserbedmecpow-9c4b8.jpg?1716416302' width='500' height='363' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-435 '&gt;&lt;strong&gt;Le &lt;i&gt;LaserBed&lt;/i&gt; MECPOW 400x800mm
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;L'Air Assist&lt;/h2&gt;
&lt;p&gt;Lorsque le laser d&#233;coupe un mat&#233;riau, des gaz et des fum&#233;es s'en &#233;chappent. Les fum&#233;es vont venir diffracter le laser et baisser son efficacit&#233;. Les gaz ont tendance &#224; s'enflammer. Ce n'est pas r&#233;ellement dangereux tant que l'on ne respire pas les &#233;manations&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Malgr&#233; tout j'ai un extincteur de voiture de 1kg &#224; proximit&#233;.&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt; mais cela provoque des flashs de br&#251;lure sur la surface du mat&#233;riau. L'Air Assist est une pompe qui envoie un jet d'air dans l'axe du laser ; les gaz sont dispers&#233;s et la fum&#233;e est souffl&#233;e sous le mat&#233;riau et dans le &lt;i&gt;LaserBed&lt;/i&gt;. Le r&#233;sultat est une d&#233;coupe tr&#232;s propre et plus rapide. Cette option est indispensable pour le maquettiste.&lt;/p&gt;
&lt;div class='spip_document_436 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;32&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://modelleisenbahn.triskell.org/IMG/jpg/airassist.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH397/airassist-ed2a9.jpg?1716416302' width='500' height='397' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-436 '&gt;&lt;strong&gt;Air Assist pour la Longer Ray5
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;En pratique&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La pr&#233;paration des pi&#232;ces&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La production de pi&#232;ces d&#233;coup&#233;es au laser commence par le dessin de celles-ci. Un simple logiciel de dessin vectoriel 2D suffit. &lt;a href=&#034;https://inkscape.org&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Inkscape&lt;/a&gt; en est un mais on peut aussi utiliser un logiciel de CAO comme &lt;a href=&#034;https://www.freecad.org&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;FreeCAD&lt;/a&gt; pour des pi&#232;ces complexes qui seront plus difficiles, voire impossible, &#224; faire avec un logiciel de dessin 2D. Pour ma part, j'utilise &lt;a href=&#034;https://www.graphic.com/mac/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Graphic&lt;/a&gt; et FreeCAD. Une fois la pi&#232;ce dessin&#233;e, il faut l'exporter dans un format permettant de l'importer dans ...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le logiciel de d&#233;coupe&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ma d&#233;coupeuse laser n&#233;cessite la version GCode de &lt;a href=&#034;https://lightburnsoftware.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Lightburn&lt;/a&gt;. Lightburn permet l'importation du SVG, du PDF (incidemment car c'est le format d'Adobe Illustrator) et du DXF. Les diff&#233;rents trac&#233;s peuvent se voir affecter une couleur et &#224; chaque couleur, on fait correspondre un mode de d&#233;coupe/gravure : trait ou remplissage, une vitesse de d&#233;placement du laser et une puissance du laser.&lt;/p&gt;
&lt;p&gt;Le couple vitesse/puissance donne l'&#233;nergie associ&#233; &#224; la d&#233;coupe ou au remplissage. Plus on va vite et moins le mat&#233;riau est entam&#233;, Plus la puissance du laser est importante et plus le mat&#233;riau est entam&#233;. Lightburn propose un g&#233;n&#233;rateur d'essais qui trace ou remplit une matrice de carr&#233;s en faisant varier vitesse et puissance dans des intervalles.&lt;/p&gt;
&lt;p&gt;Les op&#233;rations sont effectu&#233;s dans l'ordre de classement des couleurs. Typiquement, si une pi&#232;ce comprend une partie de gravure par remplissage (couleur A) et une d&#233;coupe (couleur B), on fera d'abord la couleur A puis la couleur B afin que la gravure ne se fasse pas sur une pi&#232;ce d&#233;j&#224; d&#233;coup&#233;e et qui peut donc bouger.&lt;/p&gt;
&lt;p&gt;Pour les petites pi&#232;ces d&#233;coup&#233;es dans un mat&#233;riau fin, comme du bristol, Lightburn peut pour chaque couleur engendrer automatiquement des pattes de fixation afin d'&#233;viter que la pi&#232;ce ne s'envole ou ne tombe dans une maille du &lt;i&gt;LaserBed&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Il va sans dire que lors de la d&#233;coupe on doit constamment superviser la machine. Il ne s'agirait pas d'aller faire autre chose et de se retrouver avec la maison incendi&#233;e.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quels mat&#233;riaux&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les mat&#233;riaux privil&#233;gi&#233;s sont le bois et ses d&#233;riv&#233;s. Plus pr&#233;cis&#233;ment, pour le mod&#233;lisme ferroviaire, on trouve le MDF qui existe en diff&#233;rentes &#233;paisseurs mais aussi les diff&#233;rents papiers plus ou moins forts, plus ou moins textur&#233;s. Il est &#233;galement possible de d&#233;couper du plastique mais pas n'importe lequel. Certains se d&#233;coupent mal car ils fondent et forme un bourrelet disgracieux comme le polystyr&#232;ne ou l'ABS. D'autres, comme le PVC, diffusent des gaz nocifs comme le chlore lorsque le laser les br&#251;le. On ne pourra pas d&#233;couper un plastique transparent avec un laser &#224; diode car il est aussi transparent &#224; la longueur d'onde du laser. Ce n'est pas le cas pour un laser CO&lt;inf&gt;2&lt;/inf&gt;. On peut d&#233;couper pour nos usages de l'acrylique (ou PMMA ou Plexiglas).&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;D'autres questions restent bien entendu en suspens comme la mani&#232;re de combiner tous ces mat&#233;riaux pour r&#233;aliser un mod&#232;le, la finesse qu'il est possible d'atteindre ou encore la mani&#232;re de rendre un effet voulu sur un mod&#232;le ou encore l'utilisation de Lightburn. Ces questions seront prochainement abord&#233;es au fur et &#224; mesure sur mon blog.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Du moins si j'en crois l'offre disponible chez TME.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Malgr&#233; tout j'ai un extincteur de voiture de 1kg &#224; proximit&#233;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les LED WS2812B</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article90</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article90</guid>
		<dc:date>2014-06-02T18:54:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>



		<description>
&lt;p&gt;Ces composants ont &#233;t&#233; d&#233;j&#224; succinctement pr&#233;sent&#233;s dans trois articles : &#171; Test des LED RGB WS2812B &#187;, &#171; &#201;volution de l'architecture &#233;lectronique du TCO &#187; et &#171; Derni&#232;res r&#233;flexions avant la r&#233;alisation du TCO &#187;. Voici une pr&#233;sentation plus d&#233;taill&#233;e. &lt;br class='autobr' /&gt;
Ces LED sont tr&#232;s diff&#233;rentes des LED tricolores classiques. Une LED tricolore classique int&#232;gre 3 LED, une rouge, une verte et une bleue, et poss&#232;de donc 4 broches. Il existe deux organisations pour les 4 broches. Dans la premi&#232;re les LED (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Ces composants ont &#233;t&#233; d&#233;j&#224; succinctement pr&#233;sent&#233;s dans trois articles : &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article70' class=&#034;spip_in&#034;&gt;Test des LED RGB WS2812B&lt;/a&gt; &#187;, &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article81' class=&#034;spip_in&#034;&gt;&#201;volution de l'architecture &#233;lectronique du TCO&lt;/a&gt; &#187; et &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article87' class=&#034;spip_in&#034;&gt;Derni&#232;res r&#233;flexions avant la r&#233;alisation du TCO&lt;/a&gt; &#187;. Voici une pr&#233;sentation plus d&#233;taill&#233;e.&lt;/p&gt;
&lt;p&gt;Ces LED sont tr&#232;s diff&#233;rentes des LED tricolores classiques. Une LED tricolore classique int&#232;gre 3 LED, une rouge, une verte et une bleue, et poss&#232;de donc 4 broches. Il existe deux organisations pour les 4 broches. Dans la premi&#232;re les LED sont reli&#233;es entre elles par la cathode (1 broche) et les 3 autres broches correspondent aux anodes des 3 LED. Dans la seconde, les LED sont reli&#233;es entre elles par l'anode et les 3 autres broches correspondent aux cathodes des 3 LED. On pr&#233;f&#232;re g&#233;n&#233;ralement les LED &#224; cathode commune car le point commun est reli&#233; &#224; la masse.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Caract&#233;ristiques des LED WS2812B&lt;/h2&gt;
&lt;p&gt;Les WS2812B sont des composants en bo&#238;tier 5050, bo&#238;tier plat de 5mm de c&#244;t&#233; et destin&#233; &#224; &#234;tre soud&#233; en surface&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Un composant mont&#233; en surface est soud&#233; sur le cuivre sans que ses broches (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Elles int&#232;grent &#233;videmment 3 LED mais aussi un circuit int&#233;gr&#233; logique destin&#233; &#224; piloter les LED. Ce circuit int&#233;gr&#233; g&#232;re chacune des LED via une PWM&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Modulation de largeur d'impulsion.&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt; avec une r&#233;solution de 8 bits, soit 256 niveau par couleur, pour un total de 16 millions de couleur possibles. Sur le clich&#233; ci-dessous, on peut voir l'implantation des LED et du circuit de pilotage dans le composant.&lt;/p&gt;
&lt;div class='spip_document_426 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;183&#034; data-legende-lenx=&#034;xxx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH500/ws2812b-2-2-bea08.jpg?1692197123' width='500' height='500' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-426 '&gt;&lt;strong&gt;LED WS2812B en gros plan
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-426 '&gt;&#192; gauche le circuit de gestion des LED et de la communication. Superbe clich&#233; d'&lt;a href=&#034;http://www/adafruit.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Adafruit&lt;/a&gt; distribu&#233; sous &lt;a href=&#034;https://creativecommons.org/licenses/by-nc-sa/2.0/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;licence CC BY-NC-SA 2.0&lt;/a&gt;. &lt;a href=&#034;https://www.flickr.com/photos/adafruit/10091445414/sizes/o/in/pool-72222164@N00/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Acc&#233;der au clich&#233; original&lt;/a&gt;.
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le circuit de pilotage g&#232;re &#233;galement la communication. En effet, ces LED sont autonomes et disposent de deux broches de communication permettant de leur envoyer une valeur de PWM pour chacune des 3 couleurs, soit 24 bits de donn&#233;es. La premi&#232;re broche de communication est l'entr&#233;e DI (Data In) et la seconde DO (Data Out). Les LED sont con&#231;ues pour &#234;tre cha&#238;n&#233;es, le DO de la LED amont est connect&#233; au DI de la LED aval.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le mode op&#233;ratoire&lt;/h2&gt;
&lt;p&gt;&#192; l'&#233;tat de repos, c'est &#224; dire si aucune information ne doit &#234;tre envoy&#233;e &#224; la LED, le signal DI est maintenu &#224; l'&#233;tat bas. Le passage de DI &#224; l'&#233;tat haut indique &#224; la LED le d&#233;but d'une transmission d'une s&#233;rie de bits. Les bits sont transmis &#224; une fr&#233;quence de 800kHz, soit 1,25&#181;s par bit. Il n'y a pas de signal d'horloge s&#233;par&#233;, la LED se base sur le signal transportant les donn&#233;es pour se synchroniser.&lt;/p&gt;
&lt;p&gt;Un bit &#224; 0 est cod&#233; en laissant DI &#224; l'&#233;tat haut pendant 400ns puis &#224; l'&#233;tat bas pendant 850ns. Un bit &#224; 1 est cod&#233; en laissant DI &#224; l'&#233;tat haut pendant 800ns et &#224; l'&#233;tat bas pendant 450ns. Dans le chronogramme example ci-dessous, 4 bits sont transmis.&lt;/p&gt;
&lt;div class='spip_document_427 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;52&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://modelleisenbahn.triskell.org/IMG/png/transmission-WS2812B.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH182/transmission-WS2812B-92413.png?1692197123' width='500' height='182' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-427 '&gt;&lt;strong&gt;Example de transmission de 4 bits de donn&#233;es, 0110
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;La tol&#233;rance sur les dur&#233;es est de 150ns.&lt;/p&gt;
&lt;p&gt;Le micro-contr&#244;leur n'est connect&#233; qu'&#224; la premi&#232;re LED d'une cha&#238;ne. Le mode op&#233;ratoire consiste &#224; envoyer &#224; cette premi&#232;re LED autant de s&#233;ries de 24 bits qu'ils y a de LED dans la cha&#238;ne. Chaque LED prend pour elle les 24 premiers bits qu'elle re&#231;oit et transmet les suivants &#224; la LED suivante de la cha&#238;ne. De fil en aiguille chaque LED re&#231;oit les 24 bits qui lui sont destin&#233;s.&lt;/p&gt;
&lt;p&gt;Apr&#232;s la transmission, DI est maintenu &#224; l'&#233;tat bas pendant 50&#181;s afin de r&#233;initialiser le m&#233;canisme de transmission de l'information de LED en LED. De cette mani&#232;re, &#224; la prochaine transmission, l'&#233;chantillonnage des 24 premiers bits re&#231;us sera de nouveau effectu&#233; par chaque LED de la cha&#238;ne.&lt;/p&gt;
&lt;p&gt;24 bits demandent une temps de transmission de 1,25&#181;s x 24, soit 30&#181;s. L'envoi des donn&#233;es &#224; une cha&#238;ne de 100 LED demande donc 3ms.&lt;/p&gt;
&lt;div class='spip_document_428 spip_document spip_documents spip_document_file spip_document_avec_legende' data-legende-len=&#034;27&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://modelleisenbahn.triskell.org/IMG/pdf/WS2812B_preliminary.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 347 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1772797407' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-428 '&gt;&lt;strong&gt;Datasheet des LED WS2812B
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;La mise en &#339;uvre&lt;/h2&gt;
&lt;p&gt;Adafruit a publi&#233; plusieurs recommandations pour la mise en &#339;uvre de ces LED. On retiendra le fait de monter sur l'alimentation un condensateur de 1000&#181;F pour absorber les pics de tension &#224; la mise en route et l'ajout &#233;ventuel d'une r&#233;sistance d'environ 500&#937; en s&#233;rie entre le micro-contr&#244;leur et la LED de t&#234;te lorsque le fil est long pour emp&#234;cher le signal de se r&#233;fl&#233;chir et de perturber la transmission.&lt;/p&gt;
&lt;p&gt;Une r&#233;sistance de 10k&#937; entre DI et GND garantit &#233;galement que la LED de t&#234;te ne re&#231;oit pas un signal incoh&#233;rent alors que la broche du micro-contr&#244;leur n'a pas encore &#233;t&#233; programm&#233;e en sortie.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;La biblioth&#232;que NeoPixel d'Adafruit&lt;/h2&gt;
&lt;p&gt;Ecrire le programme de rafraichissement d'une cha&#238;ne de LED est un exercice assez difficile. En effet, il est n&#233;cessaire de garantir les caract&#233;ristiques temporelles du signal de mani&#232;re pr&#233;cise. Cette garantie ne peut &#234;tre atteinte qu'en connaissant la dur&#233;e de chaque instruction employ&#233;e dans le programme de rafra&#238;chissement et disqualifie donc le langage C. L'emploi de l'assembleur est de fait obligatoire.&lt;/p&gt;
&lt;p&gt;La biblioth&#232;que NeoPixel d'Adafruit tombe donc &#224; point nomm&#233; pour m'&#233;pargner cette t&#226;che. Elle offre une classe C++ repr&#233;sentant la cha&#238;ne de LED dans la m&#233;moire de l'Arduino, une s&#233;rie de m&#233;thode pour manipuler les couleurs et bien s&#251;r une m&#233;thode pour rafra&#238;chir la cha&#238;ne.&lt;/p&gt;
&lt;p&gt;Chaque LED occupe 3 octets en m&#233;moire SRAM. On peut donc piloter une ou plusieurs cha&#238;nes avec un Arduino Uno et de mani&#232;re g&#233;n&#233;rale tous les mod&#232;les &#233;quip&#233; d'un ATMega328&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;La taille de la SRAM de l'ATMega328 est de 2ko.&#034; id=&#034;nh3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt; &#224; condition que le nombre total de LED ne d&#233;passe pas 600&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;684 en fait mais il faut compter avec la m&#233;moire n&#233;cessaire aux autres (&#8230;)&#034; id=&#034;nh4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Une fois la biblioth&#232;que install&#233;e &#224; l'emplacement ad&#233;quat, elle est utilisable dans un croquis.&lt;/p&gt;
&lt;p&gt;&lt;code data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_inline language-cpp' dir='ltr'&gt;#include &lt;Adafruit_NeoPixel.h&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Il faut ensuite instancier un objet de type &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;Adafruit_NeoPixel&lt;/code&gt;. Comme ceci.&lt;/p&gt;
&lt;p&gt;&lt;code data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_inline language-cpp' dir='ltr'&gt;Adafruit_NeoPixel leds = Adafruit_NeoPixel(94, PIN, NEO_GRB + NEO_KHZ800);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;94, le premier argument, est le nombre de LED dans la cha&#238;ne. Ici 94 correspond au nombre de LED dans la cha&#238;ne de la gare de Messingrohrstadt. PIN est le num&#233;ro de broche d'entr&#233;e/sortie num&#233;rique o&#249; le DIN de la premi&#232;re LED de la cha&#238;ne est connect&#233;. Comme d'habitude, on &#233;vitera les broches 0 et 1 qui servent &#224; t&#233;l&#233;verser le programme sur l'Arduino et incidemment &#224; &#233;tablir une liaison s&#233;rie avec la console de l'IDE Arduino &#224; des fins de debug. On &#233;vitera &#233;galement la broche 13 sur laquelle est c&#226;bl&#233;e une LED pr&#233;sente sur la carte Arduino et dont la charge pourrait perturber la transmission.&lt;/p&gt;
&lt;p&gt;NEO_GRB + NEO_KHZ800 permet de sp&#233;cifier le mod&#232;le de LED employ&#233;. NEO_GRB indique l'ordre des couleurs dans les 24 bits transmis &#224; chaque LED. Pour les WS2812B, l'ordre est vert, rouge, bleu. NEO_KHZ800 fixe la fr&#233;quence de transmission soit 800kHz.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La m&#233;thode &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;begin()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une fois l'objet &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;leds&lt;/code&gt; instanci&#233;, on peut appeler ses m&#233;thodes. La premi&#232;re chose &#224; faire est d'activer la cha&#238;ne de LED en invoquant la m&#233;thode &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;begin()&lt;/code&gt; qui a pour effet de programmer la broche en sortie et de la mettre &#224; l'&#233;tat bas. L'appel &#224; &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;begin()&lt;/code&gt; sera fait dans &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setup()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les m&#233;thodes &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setPixelColor(...)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La seconde m&#233;thode importante est &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setPixelColor(...)&lt;/code&gt;. Elle permet de sp&#233;cifier la couleur d'une LED de la cha&#238;ne. Deux versions, o&#249; la couleur est indiqu&#233;e de mani&#232;re diff&#233;rente, sont disponibles. Quelque soit la version, le premier argument est le num&#233;ro de la LED concern&#233;e, de 0 au nombre de LED moins 1. Dans la premi&#232;re version, les composantes rouge, vert et bleu sont donn&#233;es s&#233;par&#233;ment et dans cet ordre. Par exemple :&lt;/p&gt;
&lt;p&gt;&lt;code data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_inline language-cpp' dir='ltr'&gt;leds.setPixelColor(10, 100, 150, 200);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;r&#233;glera la couleur de la LED 10 &#224; 100 (sur 255) pour le rouge, 150 pour le vert et 200 pour le bleu.&lt;/p&gt;
&lt;p&gt;Dans la seconde version, un seul argument, un entier 32 bits qui regroupe les 3 composantes. La m&#233;thode &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;Color(...)&lt;/code&gt; permet de construire un tel entier &#224; partir des composantes et peut &#234;tre employ&#233; directement dans &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setPixelColor(...)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_inline language-cpp' dir='ltr'&gt;leds.setPixelColor(10, leds.Color(100, 150, 200));&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&#192; quoi cela avance-t-il me direz vous ? &#192; stocker des couleurs pr&#233;d&#233;finies dans des entiers 32 bits au lieu de les disperser dans 3 octets chacune.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La m&#233;thode &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setBrightness(...)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La m&#233;thode &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setBrightness(...)&lt;/code&gt; permet de changer la luminosit&#233; des LED. Les composantes de chaque LED sont ajust&#233;es en m&#233;moire. Comme les calculs sont faits en nombre entiers, une augmentation de luminosit&#233; ne donne pas un r&#233;sultat exact. Notamment diminuer la luminosit&#233; et la remettre au niveau initial ne redonnera pas la m&#234;me couleur. Il est donc n&#233;cessaire, apr&#232;s un &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setBrightness(...)&lt;/code&gt; de mettre &#224; jour la couleur de la totalit&#233; des LED de la cha&#238;ne via &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setPixelColor(...)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La luminosit&#233; programm&#233;e est appliqu&#233;e lors du &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setPixelColor(...)&lt;/code&gt;. &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setBrightness(...)&lt;/code&gt; prend pour argument une valeur de 0 &#224; 255. 0 correspond &#224; l'extinction des LED et 255 &#224; la luminosit&#233; maximum qui est aussi la valeur par d&#233;faut &#224; l'initialisation.&lt;/p&gt;
&lt;p&gt;&lt;code data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_inline language-cpp' dir='ltr'&gt;leds.setBrightness(127); // luminosit&#233; moiti&#233;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La m&#233;thode &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;show()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Surnomm&#233;e aussi &#171; m&#233;thode que l'on oublie syst&#233;matiquement d'appeler &#187;, &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;show()&lt;/code&gt; op&#232;re un rafraichissement de la cha&#238;ne de LED en envoyant les couleurs stock&#233;es en m&#233;moire. Elle doit donc suivre les modification de couleur ou de luminosit&#233; effectu&#233;es par les fonctions vues pr&#233;c&#233;demment.&lt;/p&gt;
&lt;p&gt;&lt;code data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_inline language-cpp' dir='ltr'&gt;leds.show();&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;D'une tr&#232;s grande facilit&#233; de mise en &#339;uvre, offrant beaucoup de possibilit&#233;s graphiques et une grande souplesse d'emploi, ces LED sont extr&#234;mement int&#233;ressante pour la construction d'un TCO. Construction qui sera expos&#233;e dans un prochain article.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Un composant mont&#233; en surface est soud&#233; sur le cuivre sans que ses broches traversent le circuit imprim&#233;. Sur un CI simple face, il est donc mont&#233; c&#244;t&#233; cuivre. Un composant traversant a ses broches qui traversent le CI et qui sont donc soud&#233;es de l'autre c&#244;t&#233;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Modulation de largeur d'impulsion.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3&#034; class=&#034;spip_note&#034; title=&#034;Notes 3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;La taille de la SRAM de l'ATMega328 est de 2ko.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4&#034; class=&#034;spip_note&#034; title=&#034;Notes 4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;684 en fait mais il faut compter avec la m&#233;moire n&#233;cessaire aux autres variables et &#224; la pile.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Cartes de d&#233;veloppement pour PIC sur breadboard</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article85</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article85</guid>
		<dc:date>2014-03-22T10:50:36Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>



		<description>
&lt;p&gt;Inspir&#233; par les diverses cartes de d&#233;veloppement sur breadboard que l'on trouve dans le monde Arduino, comme ce produit d'Adafruit, j'ai d&#233;cid&#233; de concevoir 2 cartes de ce type pour faciliter les d&#233;veloppements. &lt;br class='autobr' /&gt;
Le principe est de rassembler sur une petite carte enfichable sur une breadboard l'ensemble minimum de composants n&#233;cessaires au fonctionnement du micro-contr&#244;leur ainsi que l'&#233;lectronique et le connecteur n&#233;cessaire pour programmer le micro-contr&#244;leur in-situ. De cette mani&#232;re le (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Inspir&#233; par les diverses cartes de d&#233;veloppement sur &lt;i&gt;breadboard&lt;/i&gt; que l'on trouve dans le monde Arduino, comme &lt;a href=&#034;http://www.adafruit.com/products/72&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ce produit d'Adafruit&lt;/a&gt;, j'ai d&#233;cid&#233; de concevoir 2 cartes de ce type pour faciliter les d&#233;veloppements.&lt;/p&gt;
&lt;div class='spip_document_412 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;38&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH198/in-situ-2187f.jpg?1692197124' width='500' height='198' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-412 '&gt;&lt;strong&gt;La carte pour PIC 18F46K80 en action
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le principe est de rassembler sur une petite carte enfichable sur une &lt;i&gt;breadboard&lt;/i&gt; l'ensemble minimum de composants n&#233;cessaires au fonctionnement du micro-contr&#244;leur ainsi que l'&#233;lectronique et le connecteur n&#233;cessaire pour programmer le micro-contr&#244;leur in-situ. De cette mani&#232;re le c&#226;blage sur la &lt;i&gt;breadboard&lt;/i&gt; est simplifi&#233; car les composants indispensables sont pr&#233;sents sur la carte et le d&#233;veloppement du logiciel est acc&#233;l&#233;r&#233; car il n'est plus n&#233;cessaire de retirer le micro-contr&#244;leur de la &lt;i&gt;breadboard&lt;/i&gt; pour t&#233;l&#233;verser un nouveau programme.&lt;/p&gt;
&lt;p&gt;Il suffit ensuite d'ajouter sur la &lt;i&gt;breadboard&lt;/i&gt; les composants sp&#233;cifiques &#224; la carte &#233;lectronique en cours de conception.&lt;/p&gt;
&lt;p&gt;En ce qui concerne les d&#233;veloppements de cartes &#233;lectroniques &#224; base de micro-contr&#244;leurs PIC que nous effectuons, l'ensemble de composants minimum inclut un &lt;i&gt;transceiver&lt;/i&gt; CAN.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Description des cartes&lt;/h2&gt;
&lt;p&gt;2 cartes semblables ont &#233;t&#233; con&#231;ues, la premi&#232;re permet de mettre en &#339;uvre un PIC 18F26K80 28 broches et la seconde un PIC 18F46K80 40 broches. Les deux platines comprennent :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une alimentation r&#233;gul&#233;e 5V ;&lt;/li&gt;&lt;li&gt; un strap (A) permettant d'isoler l'alimentation du reste de la carte ;&lt;/li&gt;&lt;li&gt; une diode t&#233;moin d'alimentation ;&lt;/li&gt;&lt;li&gt; un connecteur ICSP pour brancher un PIC-KIT 3 ;&lt;/li&gt;&lt;li&gt; un bouton &lt;i&gt;reset&lt;/i&gt; ;&lt;/li&gt;&lt;li&gt; un support DIP28 ou DIP40 pour le micro-contr&#244;leur ;&lt;/li&gt;&lt;li&gt; un strap (B) permettant de couper l'alimentation du g&#233;n&#233;rateur d'horloge et du &lt;i&gt;transceiver&lt;/i&gt; CAN ;&lt;/li&gt;&lt;li&gt; une paire de straps permettant de connecter le &lt;i&gt;transceiver&lt;/i&gt; aux broches 17 et 18 ou bien aux broches 23 et 24 sur le 18F26K80 et aux broches 25 et 26 ou bien aux broches 35 et 36 sur le 18F46K80 ;&lt;/li&gt;&lt;li&gt; un support DIP8 pour le g&#233;n&#233;rateur d'horloge ;&lt;/li&gt;&lt;li&gt; et enfin un support DIP8 pour le &lt;i&gt;transceiver&lt;/i&gt; CAN.&lt;/li&gt;&lt;/ul&gt;&lt;div class='spip_document_410 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;28&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://modelleisenbahn.triskell.org/IMG/jpg/platine28-txt.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH91/platine28-txt-4ef34.jpg?1692197124' width='500' height='91' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-410 '&gt;&lt;strong&gt;La carte pour PIC 18F26K80
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_411 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;28&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://modelleisenbahn.triskell.org/IMG/jpg/platine40-txt.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH100/platine40-txt-9e700.jpg?1692197124' width='500' height='100' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-411 '&gt;&lt;strong&gt;La carte pour PIC 18F46K80
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Voici le dossier complet d&#233;crivant les cartes, leur sch&#233;mas et les typons.&lt;/p&gt;
&lt;div class='spip_document_413 spip_document spip_documents spip_document_file spip_document_avec_legende' data-legende-len=&#034;35&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://modelleisenbahn.triskell.org/IMG/pdf/platines-dev-PIC-breadboard.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 2.4 Mio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1772797407' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-413 '&gt;&lt;strong&gt;Dossier de description des cartes
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>D&#233;tection du z&#233;ro du pont tournant</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article73</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article73</guid>
		<dc:date>2014-01-07T23:18:15Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>



		<description>
&lt;p&gt;Un moteur pas-&#224;-pas employ&#233; seul ne permet pas de conna&#238;tre sa position &#224; la mise sous tension du syst&#232;me. Nous allons examiner les solutions qui s'offrent &#224; nous pour conna&#238;tre la position du pont. Dans ce qui suit, le Z est le z&#233;ro du pont, ceci afin de ne pas la confondre avec la valeur 0. Quelques remarques pr&#233;liminaires sur les moteurs pas-&#224;-pas &lt;br class='autobr' /&gt;
Un moteur pas &#224; pas bipolaire, si on le pilote par pas entiers, accomplit sa rotation via l'application sur ses bobines d'un courant positif (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Un moteur pas-&#224;-pas employ&#233; seul ne permet pas de conna&#238;tre sa position &#224; la mise sous tension du syst&#232;me. Nous allons examiner les solutions qui s'offrent &#224; nous pour conna&#238;tre la position du pont. Dans ce qui suit, le Z est le z&#233;ro du pont, ceci afin de ne pas la confondre avec la valeur 0.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Quelques remarques pr&#233;liminaires sur les moteurs pas-&#224;-pas&lt;/h2&gt;
&lt;p&gt;Un moteur pas &#224; pas bipolaire, si on le pilote par pas entiers, accomplit sa rotation via l'application sur ses bobines d'un courant positif ou n&#233;gatif selon la s&#233;quence suivante (mode deux phases &#224; la fois) :&lt;/p&gt;
&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id5e1d_c0'&gt;&#201;tape&lt;/th&gt;&lt;th id='id5e1d_c1'&gt;Courant bobine A&lt;/th&gt;&lt;th id='id5e1d_c2'&gt;Courant bobine B&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td class='numeric ' headers='id5e1d_c0'&gt;0&lt;/td&gt;
&lt;td headers='id5e1d_c1'&gt;+&lt;/td&gt;
&lt;td headers='id5e1d_c2'&gt;+&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td class='numeric ' headers='id5e1d_c0'&gt;1&lt;/td&gt;
&lt;td headers='id5e1d_c1'&gt;+&lt;/td&gt;
&lt;td headers='id5e1d_c2'&gt;&#8211;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td class='numeric ' headers='id5e1d_c0'&gt;2&lt;/td&gt;
&lt;td headers='id5e1d_c1'&gt;&#8211;&lt;/td&gt;
&lt;td headers='id5e1d_c2'&gt;&#8211;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td class='numeric ' headers='id5e1d_c0'&gt;3&lt;/td&gt;
&lt;td headers='id5e1d_c1'&gt;&#8211;&lt;/td&gt;
&lt;td headers='id5e1d_c2'&gt;+&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Une fois &#224; l'&#233;tape 3, on recommence &#224; l'&#233;tape 0. Pour inverser le sens de rotation, on inverse la s&#233;quence. Au lieu de faire 0, 1, 2, 3, on fait 3, 2, 1, 0. &#192; chaque &#233;tape correspond le franchissement d'un pas.&lt;/p&gt;
&lt;p&gt;&#192; l'allumage du syst&#232;me, on doit d&#233;cider quelle est l'&#233;tape initiale. Par exemple l'&#233;tape 0. Par cons&#233;quent, bien que ne connaissant pas la position du moteur en g&#233;n&#233;ral, on conna&#238;t sa position au sein d'un groupe de 4 pas.&lt;/p&gt;
&lt;p&gt;Ceci reste vrai avec un fonctionnement par &#181;Pas. Que ce soit l'&lt;a href='https://modelleisenbahn.triskell.org/spip.php?article68' class=&#034;spip_in&#034;&gt;EasyDriver&lt;/a&gt; ou la &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article71' class=&#034;spip_in&#034;&gt;DRV8824&lt;/a&gt;, &#224; l'allumage et apr&#232;s un RESET, le courant dans les bobines est fix&#233; &#224; +70,71%, &#233;tat appel&#233; le &lt;i&gt;Home State&lt;/i&gt; et cet &#233;tat se retrouve bien entendu apr&#232;s avoir franchi 4 pas entiers ou 32&#181;Pas pour l'EasyDriver et 128 &#181;Pas pour la DRV8824.&lt;/p&gt;
&lt;p&gt;Donc, avec un moteur 400 pas par tour, il suffit d'&#234;tre capable de d&#233;tecter 100 positions ou bien d'en d&#233;tecter 1 sur 100 pour savoir o&#249; est le moteur.&lt;/p&gt;
&lt;p&gt;Cette caract&#233;ristique facilite &#233;norm&#233;ment la d&#233;tection du 0 du pont. En effet, dans le cas de la DRV8824, si il avait fallu d&#233;tecter la position au &#181;Pas pr&#232;s, il aurait fallu disposer d'un capteur capable de distinguer deux positions s&#233;par&#233;es de 0,028125&#176;, soit de 0,037mm en bout de pont pour un pont de 150mm de diam&#232;tre, ce qui n'est pas une mince affaire. En r&#233;alit&#233; le capteur doit &#234;tre capable de distinguer deux positions s&#233;par&#233;es de 128&#181;Pas, c'est &#224; dire 4,71mm en bout de pont, ce qui est tr&#232;s facile &#224; r&#233;aliser.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;La solution sans capteur&lt;/h2&gt;
&lt;p&gt;Voici une premi&#232;re solution qui m'a &#233;t&#233; sugg&#233;r&#233;e par Pierre59 sur le forum de Loco-Revue.&lt;/p&gt;
&lt;p&gt;Il s'agit de faire le Z &#224; la main une premi&#232;re fois. On allume l'&#233;lectronique de commande et le pont est positionn&#233;, au moyen de poussoirs ou un autre moyen d'interaction avec l'&#233;lectronique, sur un Z arbitraire qui correspond &#224; une des voies de sortie. Le &#181;Pas &#224; l'int&#233;rieur du bloc de 128 o&#249; se trouve le Z est m&#233;moris&#233; dans l'EEPROM du micro-contr&#244;leur (ce qui revient &#224; ne garder que les 7 bits de poids faible) sachant que la valeur 0 correspond au &lt;i&gt;Home State&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;&#192; chaque mouvement ult&#233;rieur du pont, le num&#233;ro de bloc de 4 pas courant est &#233;galement m&#233;moris&#233; en EEPROM afin de conserver de mani&#232;re non volatile la position courante du pont quand on arr&#234;te le syst&#232;me.&lt;/p&gt;
&lt;p&gt;En cas de coupure brutale de l'alimentation, il est n&#233;cessaire de garantir que le pont est dans un bloc de 4 pas connu. En effet si la coupure d'alimentation intervient &#224; l'instant de passage d'un bloc au suivant, il se peut que le programme estime &#234;tre dans le bloc suivant alors que l'arr&#234;t effectif s'est produit dans le bloc courant. L'inverse est aussi possible d'ailleurs. De plus l'&#233;criture en EEPROM alors que l'alimentation du micro-contr&#244;leur se coupe peut &#234;tre incertaine.&lt;/p&gt;
&lt;p&gt;Il est donc n&#233;cessaire de disposer d'une petite r&#233;serve d'&#233;nergie et d'une d&#233;tection de la coupure d'alimentation afin d'effectuer les op&#233;rations ultimes assurant que l'&#233;tat est stable au moment de l'extinction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avantage&lt;/strong&gt; pas de capteur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inconv&#233;nients&lt;/strong&gt; proc&#233;dure manuelle pour faire le Z, mat&#233;riel de gestion de la coupure d'alimentation, pas de possibilit&#233; de d&#233;tecter un mouvement manuel du pont lorsque le syst&#232;me est &#233;teint.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Solution avec un capteur de position Z&#233;ro&lt;/h2&gt;
&lt;p&gt;La seconde solution consiste &#224; assujettir &#224; l'axe du moteur un ergot dont on sera capable de d&#233;tecter la position en utilisant, par exemple, un capteur optique. Ce type de capteur est constitu&#233; d'une fourche entre les branches de laquelle un faisceau infrarouge est &#233;tabli. Il s'agit donc de d&#233;tecter la coupure du faisceau par l'ergot.&lt;/p&gt;
&lt;div class='spip_document_370 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;43&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L445xH318/capteurIR-2-38f3c.png?1692208670' width='445' height='318' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-370 '&gt;&lt;strong&gt;Capteur TCST2103 de Vishay Semiconductors
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Comme expliqu&#233; &#224; la fin du paragraphe sur les moteurs pas-&#224;-pas, la pr&#233;cision n'a pas &#224; &#234;tre extraordinaire. En pla&#231;ant l'ergot &#224; 40mm de l'axe du moteur, deux blocs successifs de 128&#181;Pas sont distants de 2,5mm.&lt;/p&gt;
&lt;p&gt;Afin d'exp&#233;rimenter cette solution, j'ai ajout&#233; &#224; mon banc d'essai un plateau sur lequel est fix&#233; le moteur et le capteur.&lt;/p&gt;
&lt;div class='spip_document_371 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH261/installCapteur-20db3.jpg?1692343797' width='500' height='261' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;La recherche du Z n'est pas tr&#232;s compliqu&#233;e. Il suffit de faire tourner le moteur dans un sens quelconque jusqu'&#224; ce que l'ergot soit d&#233;tect&#233;. Dans cette phase, il n'est pas n&#233;cessaire de respecter une vitesse de rotation r&#233;aliste. L'important est que le temps de recherche du z&#233;ro soit le plus court possible sans risquer de faire valdinguer une &#233;ventuelle locomotive stationn&#233;e sur le pont. Il faut aussi se pr&#233;munir d'un dysfonctionnement &#233;ventuel du capteur et n'effectuer qu'un tour complet.&lt;/p&gt;
&lt;p&gt;Il vient donc la fonction suivante :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;boolean chercheZero() { int microPas; int blocPas; boolean zTrouve = false; /* Allume la LED indiquant que la recherche est en cours */ digitalWrite(ledPin, LOW); /* * Boucle de recherche. On effectue un tour complet * (parcours de 100 blocs de 4 pas. Un bloc est constitu&#233; de * 128 micropas). Pour chaque bloc, on parcoure 128 micro-pas * &#224; raison de 1,1ms par micro-pas. Soit 14s pour le tour * complet * * zTrouve permet de savoir si on est sortit de la boucle en * trouvant Z ou non. */ for (blocPas = 0; blocPas &lt; 100; blocPas++) { if (digitalRead(sensorPin) == 0) { /* Z est trouv&#233; */ zTrouve = true; break; } /* Avance de 128 micro-pas */ for (microPas = 0; microPas &lt; 128; microPas++) { digitalWrite(stepPin, LOW); delayMicroseconds(100); digitalWrite(stepPin, HIGH); delay(1); } } /* Signale le fait que Z a &#233;t&#233; trouv&#233; ou non */ if (zTrouve) { /* Eteint la LED de recherche */ digitalWrite(ledPin,HIGH); } else { /* probl&#232;me, on fait clignoter rapidement la LED */ int i; for (i = 0; i &lt; 20; i++) { digitalWrite(ledPin,HIGH); delay(50); digitalWrite(ledPin,LOW); delay(50); } } /* * Si on a trouv&#233; Z, on met &#224; 0 la position actuelle */ positionActuelle = 0; /* retourne true si on a trouv&#233; Z */ return zTrouve; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette solution peut &#234;tre am&#233;lior&#233;e en stockant la position atteinte en EEPROM. En cas de coupure intempestive de l'alimentation, il sera n&#233;cessaire de refaire le Z. Ceci peut &#234;tre d&#233;tect&#233; automatiquement sans ajouter de mat&#233;riel. En effet, il suffit &#224; chaque mouvement du pont, de mettre un octet de l'EEPROM &#224; 0 au d&#233;but puis de le mettre &#224; 1 &#224; la fin. Si au d&#233;marrage du syst&#232;me cet octet est trouv&#233; &#224; 0, cela signifie que l'alimentation a &#233;t&#233; coup&#233;e alors que le pont &#233;tait en mouvement et que le logiciel n'avait pas encore &#233;crit sa nouvelle position en EEPROM. Il n'y a par contre pas de moyen de d&#233;tecter une rotation manuelle du pont alors que le syst&#232;mes est &#233;teint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avantage&lt;/strong&gt; Proc&#233;dure automatique pour trouver Z.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inconv&#233;nients&lt;/strong&gt; Proc&#233;dure disgracieuse pour trouvez Z.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Solution avec un codeur absolu&lt;/h2&gt;
&lt;p&gt;Cette derni&#232;re solution consiste &#224; mettre en &#339;uvre un codeur absolu. Il s'agit d'une roue codeuse divis&#233;e en autant de secteurs qu'il y a de positions. Sur chaque secteur, on dispose radialement des zones noires ou blanches. Une zone code un 0 ou un 1 binaire. Les N zones dispos&#233;es sur un secteur codent donc un nombre sur N bits.&lt;/p&gt;
&lt;p&gt;Dans notre cas, nous avons 100 positions pour le moteur et il faut donc 100 secteurs. Le nombre N de bits est de 7 car ils faut &#234;tre capables de coder au moins 100 valeurs diff&#233;rentes. Or 2&lt;sup&gt;7&lt;/sup&gt; = 128. La roue codeuse a donc cet aspect :&lt;/p&gt;
&lt;div class='spip_document_379 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;196&#034; data-legende-lenx=&#034;xxx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L313xH313/roueCodeuse-c636f.png?1692208670' width='313' height='313' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-379 '&gt;&lt;strong&gt;Roues codeuse absolue 100 positions.
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-379 '&gt;Le diam&#232;tre ext&#233;rieur est de 110mm. Le bit de poids fort est &#224; l'int&#233;rieur, celui de poids faible &#224; l'ext&#233;rieur. Une zone blanche est un 0 et une noire un 1.
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Cette roue est assujettie &#224; l'axe du moteur pas-&#224;-pas et 7 capteurs IR r&#233;flectifs sont employ&#233;s pour lire les 7 bits codant la position du moteur.&lt;/p&gt;
&lt;p&gt;Il faut que le capteur soit relativement petit pour que la roue codeuse tienne facilement sous un pont tournant &#224; l'&#233;chelle N. Mes investigations m'ont conduit &#224; examiner deux capteurs IR r&#233;flectifs : le &lt;a href=&#034;http://www.kingbright.com/attachments/file/psearch/000/00/00/KTIR0711S(Ver.13).pdf&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;KTIR0711S de Kingbright&lt;/a&gt; et l'&lt;a href=&#034;http://ecb.omron.com.sg/pdf/photomicrosensors/non-amplified/EE-SY193.pdf&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;EE-SY193 d'Omron&lt;/a&gt;. Dans les deux cas il s'agit de composants mont&#233;s en surface d'une dimension de 3,3mm sur 2,7mm. Apr&#232;s discussion avec mes camarades, mon choix s'est port&#233; sur le capteur d'Omron car il semble plus pr&#233;cis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avantage&lt;/strong&gt; Position du pont connue &#224; l'allumage sans proc&#233;dure y compris en cas de rotation manuelle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inconv&#233;nients&lt;/strong&gt; Capteurs plus compliqu&#233;s &#224; mettre en &#339;uvre.&lt;/p&gt;
&lt;p&gt;Cette solution a ma pr&#233;f&#233;rence car elle &#233;vite toute proc&#233;dure de d&#233;tection du Z, qu'elle soit automatique ou manuelle.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>L'algorithme de rotation du pont tournant</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article74</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article74</guid>
		<dc:date>2014-01-01T12:12:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>


		<dc:subject>Moteur pas-&#224;-pas</dc:subject>
		<dc:subject>Arduino</dc:subject>
		<dc:subject>Pont tournant</dc:subject>

		<description>
&lt;p&gt;Apr&#232;s avoir pr&#233;sent&#233; le mat&#233;riel n&#233;cessaire au pilotage du moteur pas-&#224;-pas par &#181;Pas et le choix de la DRV8824 de Pololu pour sa meilleure r&#233;solution et la fluidit&#233; de mouvement qui en r&#233;sulte, il est temps de se pencher sur l'algorithme qui permet de d&#233;cider du sens de rotation et de la d&#233;composition du mouvement en phase d'acc&#233;l&#233;ration, en r&#233;gime permanent et en phase de d&#233;c&#233;l&#233;ration. &lt;br class='autobr' /&gt;
Calcul du sens de rotation pour le plus court chemin &lt;br class='autobr' /&gt;
Le pont est bien &#233;videmment orient&#233;. C'est &#224; dire (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;

/ 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot7" rel="tag"&gt;Moteur pas-&#224;-pas&lt;/a&gt;, 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot10" rel="tag"&gt;Arduino&lt;/a&gt;, 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot11" rel="tag"&gt;Pont tournant&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Apr&#232;s avoir pr&#233;sent&#233; le mat&#233;riel n&#233;cessaire au pilotage du moteur pas-&#224;-pas par &#181;Pas et le choix de la &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article72' class=&#034;spip_in&#034;&gt;DRV8824 de Pololu&lt;/a&gt; pour sa meilleure r&#233;solution et la fluidit&#233; de mouvement qui en r&#233;sulte, il est temps de se pencher sur l'algorithme qui permet de d&#233;cider du sens de rotation et de la d&#233;composition du mouvement en phase d'acc&#233;l&#233;ration, en r&#233;gime permanent et en phase de d&#233;c&#233;l&#233;ration.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Calcul du sens de rotation pour le plus court chemin&lt;/h2&gt;
&lt;p&gt;Le pont est bien &#233;videmment orient&#233;. C'est &#224; dire que les positions &lt;i&gt;p&lt;/i&gt; et &lt;i&gt;p&lt;/i&gt;+180&#176; sont diff&#233;rentes. Avec la DRV8824, nous avons 12800 positions possibles que nous allons num&#233;roter de 0 &#224; 12799. Partant de la position courante, le pont devant aller dans une nouvelle position, il faut d&#233;cider dans quel sens tourner pour minimiser la distance parcourue. C'est &#224; dire que partant de la position courante 12799 et allant &#224; la position 0, il n'y a qu'un &#181;Pas &#224; effectuer et non 12799.&lt;/p&gt;
&lt;p&gt;On va distinguer deux cas :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; La position &#224; atteindre &#224; un num&#233;ro &gt; &#224; la position courante ;&lt;/li&gt;&lt;li&gt; La position &#224; atteindre &#224; un num&#233;ro &lt; &#224; la position courante.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Par convention, on va &#233;galement d&#233;cider qu'un d&#233;placement positif se fait dans le sens horaire et un d&#233;placement n&#233;gatif dans le sens trigonom&#233;trique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La position &#224; atteindre &#224; un num&#233;ro &lt;i&gt;sup&#233;rieur&lt;/i&gt; &#224; la position courante&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce cas correspond &#224; la figure ci-dessous :&lt;/p&gt;
&lt;div class='spip_document_375 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L469xH404/cheminsA-3-d7fd9.png?1692224381' width='469' height='404' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;chemin 1&lt;/i&gt; se calcule en soustrayant la position courante &#224; la position destination : &lt;i&gt;chemin 1&lt;/i&gt; = &lt;i&gt;position destination&lt;/i&gt; &#8212; &lt;i&gt;positition courante&lt;/i&gt;.&lt;br class='autobr' /&gt;
Il est bien positif, la rotation pour parcourir &lt;i&gt;chemin 1&lt;/i&gt; se fait dans le sens horaire.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;chemin 2&lt;/i&gt; doit &#234;tre n&#233;gatif puisque la rotation de fait dans le sens trigonom&#233;trique et il se d&#233;compose en deux : d'une part la portion entre la position courante et 0 et d'autre part la portion entre 12800 et la position destination.&lt;br/&gt;On a donc &lt;i&gt;chemin 2&lt;/i&gt; = &#8212; (&lt;i&gt;positition courante&lt;/i&gt; + 12800 &#8212; &lt;i&gt;position destination&lt;/i&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La position &#224; atteindre &#224; un num&#233;ro &lt;i&gt;inf&#233;rieur&lt;/i&gt; &#224; la position courante&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce cas correspond &#224; la figure ci-dessous :&lt;/p&gt;
&lt;div class='spip_document_376 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L433xH433/cheminsB-ea85d.png?1692224381' width='433' height='433' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;chemin 1&lt;/i&gt; se calcule &#233;galement en soustrayant la position courante &#224; la position destination : &lt;i&gt;chemin 1&lt;/i&gt; = &lt;i&gt;position destination&lt;/i&gt; &#8212; &lt;i&gt;positition courante&lt;/i&gt;.&lt;br class='autobr' /&gt;
Comme la position courante est plus grande que la position destination, il est bien n&#233;gatif, la rotation pour parcourir &lt;i&gt;chemin 1&lt;/i&gt; se fait dans le sens trigonom&#233;trique.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;chemin 2&lt;/i&gt; doit &#234;tre positif et se d&#233;compose en deux : d'une part la portion entre la position courante et 12800 et d'autre part la portion entre 0 et la position destination.&lt;br/&gt;On a donc &lt;i&gt;chemin 2&lt;/i&gt; = 12800 &#8212; &lt;i&gt;positition courante&lt;/i&gt; + &lt;i&gt;position destination&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Pour choisir le chemin, il suffit de comparer les valeurs absolues de &lt;i&gt;chemin 1&lt;/i&gt; et &lt;i&gt;chemin 2&lt;/i&gt; et de choisir le chemin ayant la plus petite. Le signe du chemin donne le sens de rotation.&lt;/p&gt;
&lt;p&gt;Le code correspondant est le suivant :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;int chemin1 = positionDestination - positionCourante; int chemin2; if (positionDestination &gt; positionCourante) chemin2 = - (positionCourante + 12800 - positionDestination); else chemin2 = 12800 - positionCourante + positionDestination; int chemin; int dir; if (abs(chemin1) &gt; abs(chemin2)) chemin = chemin2; else chemin = chemin1; /* Si chemin &lt; 0, la direction est mise &#224; 1 */ if (chemin &lt; 0) dir = HIGH; else dir = LOW;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le nombre de &#181;Pas &#224; parcourir sera mis dans une variable &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;distance&lt;/code&gt; calcul&#233;e comme suit : &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;distance = abs(chemin);&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Vitesse de rotation, acc&#233;l&#233;ration et d&#233;c&#233;l&#233;ration&lt;/h2&gt;
&lt;p&gt;La vitesse de rotation d'un pont tournant est assez faible. On peut par exemple voir dans cette vid&#233;o qu'il faut environ 2 minutes (entre 45&#034; et 2'45&#034;) pour que la 141TD 740 fasse son demi-tour, ce qui donne 4 minutes pour un tour.&lt;/p&gt;
&lt;div class=&#034;spip_document_377 spip_document spip_documents spip_document_video spip_document_avec_legende&#034; data-legende-len=&#034;65&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;div class=&#034;video-intrinsic-wrapper&#034; style='height:0;width:640px;max-width:100%;padding-bottom:75%;position:relative;'&gt; &lt;div class=&#034;video-wrapper&#034; style=&#034;position: absolute;top:0;left:0;width:100%;height:100%;&#034;&gt; &lt;video class=&#034;mejs mejs-377&#034; data-id=&#034;a5e1f03175df6ffab285f4851903f38f&#034; data-mejsoptions='{&#034;iconSprite&#034;: &#034;plugins-dist/medias/lib/mejs/mejs-controls.svg&#034;,&#034;alwaysShowControls&#034;: true,&#034;pluginPath&#034;:&#034;plugins-dist/medias/lib/mejs/&#034;,&#034;loop&#034;:false,&#034;videoWidth&#034;:&#034;100%&#034;,&#034;videoHeight&#034;:&#034;100%&#034;}' width=&#034;100%&#034; height=&#034;100%&#034; controls=&#034;controls&#034; preload=&#034;none&#034; &gt; &lt;source type=&#034;application/x-shockwave-flash&#034; src=&#034;http://www.youtube.com/v/CYeE9b1WWqw?hl=fr_FR&amp;version=3&amp;rel=0&#034; /&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/swf-d2c4d-75a7b.svg?1772798901' width='64' height='64' alt='Impossible de lire la video' /&gt; &lt;/video&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-377 '&gt;&lt;strong&gt;La 141TD 740 s'engage sur le pont tournant et fait un demi-tour
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;
&lt;div class=&#034;base64javascript48149994769e2778f365884.98283324&#034; title=&#034;PHNjcmlwdD4gdmFyIG1lanNwYXRoPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudC1hbmQtcGxheWVyLm1pbi5qcz8xNzcyNzk1ODQwJyxtZWpzY3NzPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudHBsYXllci5taW4uY3NzPzE3NzI3OTU4NDAnOwp2YXIgbWVqc2xvYWRlcjsKKGZ1bmN0aW9uKCl7dmFyIGE9bWVqc2xvYWRlcjsidW5kZWZpbmVkIj09dHlwZW9mIGEmJihtZWpzbG9hZGVyPWE9e2dzOm51bGwscGx1Zzp7fSxjc3M6e30saW5pdDpudWxsLGM6MCxjc3Nsb2FkOm51bGx9KTthLmluaXR8fChhLmNzc2xvYWQ9ZnVuY3Rpb24oYyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNzc1tjXSl7YS5jc3NbY109ITA7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2IuaHJlZj1jO2IucmVsPSJzdHlsZXNoZWV0IjtiLnR5cGU9InRleHQvY3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGIpfX0sYS5pbml0PWZ1bmN0aW9uKCl7ITA9PT1hLmdzJiZmdW5jdGlvbihjKXtqUXVlcnkoImF1ZGlvLm1lanMsdmlkZW8ubWVqcyIpLm5vdCgiLmRvbmUsLm1lanNfX3BsYXllciIpLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dmFyIGU9ITAsaDtmb3IoaCBpbiBkLmNzcylhLmNzc2xvYWQoZC5jc3NbaF0pO2Zvcih2YXIgZiBpbiBkLnBsdWdpbnMpInVuZGVmaW5lZCI9PQp0eXBlb2YgYS5wbHVnW2ZdPyhlPSExLGEucGx1Z1tmXT0hMSxqUXVlcnkuZ2V0U2NyaXB0KGQucGx1Z2luc1tmXSxmdW5jdGlvbigpe2EucGx1Z1tmXT0hMDtiKCl9KSk6MD09YS5wbHVnW2ZdJiYoZT0hMSk7ZSYmalF1ZXJ5KCIjIitjKS5tZWRpYWVsZW1lbnRwbGF5ZXIoalF1ZXJ5LmV4dGVuZChkLm9wdGlvbnMse3N1Y2Nlc3M6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBiKCl7dmFyIGI9alF1ZXJ5KGEpLmNsb3Nlc3QoIi5tZWpzX19pbm5lciIpO2EucGF1c2VkPyhiLmFkZENsYXNzKCJwYXVzaW5nIiksc2V0VGltZW91dChmdW5jdGlvbigpe2IuZmlsdGVyKCIucGF1c2luZyIpLnJlbW92ZUNsYXNzKCJwbGF5aW5nIikucmVtb3ZlQ2xhc3MoInBhdXNpbmciKS5hZGRDbGFzcygicGF1c2VkIil9LDEwMCkpOmIucmVtb3ZlQ2xhc3MoInBhdXNlZCIpLnJlbW92ZUNsYXNzKCJwYXVzaW5nIikuYWRkQ2xhc3MoInBsYXlpbmciKX1iKCk7YS5hZGRFdmVudExpc3RlbmVyKCJwbGF5IixiLCExKTsKYS5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIsYiwhMSk7Zy5hdHRyKCJhdXRvcGxheSIpJiZhLnBsYXkoKX19KSl9dmFyIGc9alF1ZXJ5KHRoaXMpLmFkZENsYXNzKCJkb25lIiksYzsoYz1nLmF0dHIoImlkIikpfHwoYz0ibWVqcy0iK2cuYXR0cigiZGF0YS1pZCIpKyItIithLmMrKyxnLmF0dHIoImlkIixjKSk7dmFyIGQ9e29wdGlvbnM6e30scGx1Z2luczp7fSxjc3M6W119LGUsaDtmb3IoZSBpbiBkKWlmKGg9Zy5hdHRyKCJkYXRhLW1lanMiK2UpKWRbZV09alF1ZXJ5LnBhcnNlSlNPTihoKTtiKCl9KX0oalF1ZXJ5KX0pO2EuZ3N8fCgidW5kZWZpbmVkIiE9PXR5cGVvZiBtZWpzY3NzJiZhLmNzc2xvYWQobWVqc2NzcyksYS5ncz1qUXVlcnkuZ2V0U2NyaXB0KG1lanNwYXRoLGZ1bmN0aW9uKCl7YS5ncz0hMDthLmluaXQoKTtqUXVlcnkoYS5pbml0KTtvbkFqYXhMb2FkKGEuaW5pdCl9KSl9KSgpOzwvc2NyaXB0Pg==&#034;&gt;&lt;/div&gt; &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Dans notre cas, il faut donc passer 12800 &#181;Pas en 4 minutes soit 240s, ce qui donne un d&#233;lai de 18 &#224; 19ms entre deux &#181;Pas. Pour clarifier le code, ce d&#233;lai va &#234;tre mis dans une variable &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;delaiInterMicropas&lt;/code&gt;, ce qui permettra aussi de changer la vitesse de rotation sans avoir &#224; modifier le code.&lt;/p&gt;
&lt;p&gt;Si on ne se soucie pas d'avoir des phases d'acc&#233;l&#233;ration et de d&#233;c&#233;l&#233;ration, le code est tr&#232;s simple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;for (microPas = 0; microPas &lt; distance; microPas++) { digitalWrite(stepPin, LOW); delay(1); digitalWrite(stepPin, HIGH); delay(delaiInterMicroPas - 1); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mais le mouvement a une allure artificielle. Il est donc pr&#233;f&#233;rable de simuler une petite phase d'acc&#233;l&#233;ration et de d&#233;c&#233;l&#233;ration.&lt;/p&gt;
&lt;p&gt;Les phases d'acc&#233;l&#233;ration vont &#234;tre r&#233;gl&#233;es en nombre de &#181;Pas pass&#233;s &#224; acc&#233;l&#233;rer et &#224; d&#233;c&#233;l&#233;rer. On va donc avoir 2 variables &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasAcceleration&lt;/code&gt; et &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasDeceleration&lt;/code&gt; pour r&#233;gler ces phases.&lt;/p&gt;
&lt;p&gt;Un mouvement d'une position courante &#224; une position de destination consiste donc &#224; parcourir &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasAcceleration&lt;/code&gt; &#181;Pas avec un d&#233;lai variable et d&#233;croissant puis &#224; parcourir &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;distance - microPasAcceleration - microPasDeceleration&lt;/code&gt; &#181;Pas avec un d&#233;lai &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;delaiInterMicropas&lt;/code&gt; et enfin parcourir &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasDeceleration&lt;/code&gt; &#181;Pas avec un d&#233;lai variable croissant.&lt;/p&gt;
&lt;p&gt;Bien entendu, il ne faut pas que &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasAcceleration + microPasDeceleration&lt;/code&gt; soit sup&#233;rieur &#224; &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;distance&lt;/code&gt;. En pratique les phases d'acc&#233;l&#233;ration et de d&#233;c&#233;l&#233;ration seront courte et la distance est sup&#233;rieur &#224; l'&#233;cartement de la voie utilis&#233;e. Par exemple pour un pont en N de 150mm de diam&#232;tre, les 9mm d'&#233;cartement correspondent &#224; 245 &#181;Pas.&lt;/p&gt;
&lt;p&gt;Le d&#233;lai initial de la phase d'acc&#233;l&#233;ration est calcul&#233; est ajoutant &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasAcceleration&lt;/code&gt; &#224; &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;delaiInterMicropas&lt;/code&gt;. On va ensuite boucler &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasAcceleration&lt;/code&gt; fois en diminuant le d&#233;lai de 1 &#224; chaque tour pour donc terminer sur un d&#233;lai &#233;gal &#224; &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;delaiInterMicropas&lt;/code&gt;. Comme ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;int delai = delaiInterMicroPas - 1 + microPasAcceleration; for (microPas = 0; microPas &lt; microPasAcceleration; microPas++) { digitalWrite(stepPin, LOW); delay(1); digitalWrite(stepPin, HIGH); delay(delai); delai-- ; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le mouvement a vitesse maximum est accompli par la boucle suivante :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;for (microPas = 0; microPas &lt; (distance - microPasAcceleration - microPasDeceleration); microPas++) { digitalWrite(stepPin, LOW); delay(1); digitalWrite(stepPin, HIGH); delay(delaiInterMicroPas - 1); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, la phase de d&#233;c&#233;l&#233;ration consiste &#224; boucler &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;microPasDeceleration&lt;/code&gt; fois en augmentant le d&#233;lai de 1 &#224; chaque tour, &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;delai&lt;/code&gt; est initialis&#233; &#224; la valeur &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;delaiInterMicropas&lt;/code&gt;. Comme ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;for (microPas = 0; microPas &lt; microPasDeceleration; microPas++) { digitalWrite(stepPin, LOW); delay(1); digitalWrite(stepPin, HIGH); delay(delai); delai ++; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tout cela est mis dans une fonction &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;allerAPosition(...)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Sketch de d&#233;monstration&lt;/h2&gt;
&lt;p&gt;Voici le c&#226;blage :&lt;/p&gt;
&lt;div class='spip_document_363 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://modelleisenbahn.triskell.org/IMG/png/sketchDRV8824_bb.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH238/sketchDRV8824_bb-c7c7d.png?1692224381' width='500' height='238' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Et le sketch de l'application de d&#233;monstration. Il contient la fonction &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;allerAPosition(...)&lt;/code&gt; et l'ex&#233;cution d'un sc&#233;nario de mouvement.&lt;/p&gt;
&lt;div class='spip_document_378 spip_document spip_documents spip_document_file spip_document_avec_legende' data-legende-len=&#034;42&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://modelleisenbahn.triskell.org/IMG/zip/pont_tournant_demo-2.zip' class=&#034; spip_doc_lien&#034; title='Zip - 1.3 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/zip-f045b.svg?1772799586' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-378 '&gt;&lt;strong&gt;Sketch de d&#233;monstration du pont tournant
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mise en &#339;uvre de la DRV8824 pour un pont tournant</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article72</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article72</guid>
		<dc:date>2013-12-24T10:05:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>


		<dc:subject>Moteur pas-&#224;-pas</dc:subject>
		<dc:subject>Pont tournant</dc:subject>

		<description>
&lt;p&gt;Pour les essais de la DRV8824, le moteur reste le m&#234;me que celui employ&#233; dans &#171; Mise en &#339;uvre de l'EasyDriver v4.4 pour un pont tournant &#187; avec 400 pas par tour. La latte de bois a &#233;t&#233; remplac&#233;e par un tasseau d'un longueur un peu plus faible dans le but de pouvoir charger le pont avec une masse &#233;quivalente &#224; celle d'une locomotive en H0 afin d'observer le comportement en charge. &lt;br class='autobr' /&gt;
Les possibilit&#233;s offertes par la DRV8824 &lt;br class='autobr' /&gt;
En combinant les 400 pas par tour du moteur et les 32&#181;Pas du Ti (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;

/ 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot7" rel="tag"&gt;Moteur pas-&#224;-pas&lt;/a&gt;, 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot11" rel="tag"&gt;Pont tournant&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Pour les essais de la DRV8824, le moteur reste le m&#234;me que celui employ&#233; dans &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article69' class=&#034;spip_in&#034;&gt;Mise en &#339;uvre de l'EasyDriver v4.4 pour un pont tournant&lt;/a&gt; &#187; avec 400 pas par tour. La latte de bois a &#233;t&#233; remplac&#233;e par un tasseau d'un longueur un peu plus faible dans le but de pouvoir charger le pont avec une masse &#233;quivalente &#224; celle d'une locomotive en H0&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Certes, je construis un r&#233;seau &#224; l'&#233;chelle N mais je pense aussi &#224; mes (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; afin d'observer le comportement en charge.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Les possibilit&#233;s offertes par la DRV8824&lt;/h2&gt;
&lt;p&gt;En combinant les 400 pas par tour du moteur et les 32&#181;Pas du &lt;i&gt;Ti DRV8824&lt;/i&gt;, on arrive &#224; 12800 &#181;Pas par tour ce qui est consid&#233;rable. Pour un pont tournant &#224; l'&#233;chelle H0, disons de 30cm de diam&#232;tre, cela donne un d&#233;placement de moins de 0,075mm par &#181;Pas en bout de pont. Avec un pont &#224; l'&#233;chelle N on tombe &#224; 0,037mm en bout de pont. Un d&#233;placement de moins d'1/10e de millim&#232;tre est imperceptible.&lt;/p&gt;
&lt;p&gt;La connexion de la DRV8824 est presque aussi simple que celle de l'EasyDriver, il y a juste quelques broches suppl&#233;mentaires &#224; connecter &#224; la masse ou au +5V car l'&#233;tat par d&#233;faut qu'elles adoptent lorsqu'elles sont en l'air ne convient pas.&lt;/p&gt;
&lt;p&gt;Il faut donc connecter les broches DIR et STEP comme pour l'EasyDriver mais en plus connecter la broche SLEEP &#224; 5V, la broche ENABLE &#224; 0V et les broches M0, M1 et M2 &#224; 5V pour disposer de 32 &#181;Pas. J'ai choisi de piloter la broche RESET avec la broche 4 de l'Arduino. En effet, &#224; l'allumage du syst&#232;me, les entr&#233;es/sorties num&#233;riques de l'Arduino &#233;tant en entr&#233;e, RESET est en l'air et, par cons&#233;quent, le &lt;i&gt;Ti DRV8824&lt;/i&gt; est maintenu dans l'&#233;tat RESET. Cela &#233;vite de faire faire au moteur des mouvements involontaires dus aux transitoires sur les entr&#233;es DIR et STEP. Lorsque le programme d&#233;marre, la broche 4 est mise en sortie et RESET est mis &#224; l'&#233;tat haut apr&#232;s que les &#233;tats de DIR et STEP aient &#233;t&#233; fix&#233;s. De cette mani&#232;re le moteur ne bronche pas &#224; la mise sous tension.&lt;/p&gt;
&lt;p&gt;Un autre point important est le condensateur chimique qui permet d'absorber les transitoires de la mise sous tension. Transitoires qui &lt;a href=&#034;http://www.pololu.com/docs/pdf/0J16/destructive_LC_voltage_spikes.pdf&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;pourraient d&#233;truire le composant&lt;/a&gt;. J'ai donc implant&#233; sur la &lt;i&gt;breadboard&lt;/i&gt; un condensateur de 470&#181;F 35V.&lt;/p&gt;
&lt;div class='spip_document_363 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://modelleisenbahn.triskell.org/IMG/png/sketchDRV8824_bb.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH238/sketchDRV8824_bb-c7c7d.png?1692224381' width='500' height='238' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;La tension moteur est fix&#233;e &#224; 12V. Les alimentations sont s&#233;par&#233;es comme pour le montage de l'EasyDriver.&lt;/p&gt;
&lt;div class='spip_document_364 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH353/montageDRV8824-1c45f.jpg?1692343797' width='500' height='353' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;R&#233;glages de la DRV8824&lt;/h2&gt;
&lt;p&gt;Le potentiom&#232;tre de montage sur la DRV8824 permet de r&#233;gler la tension &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; qui fixe le courant maximum. Comme &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; = &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; &#215;5&lt;i&gt;R&lt;sub&gt;s&lt;/sub&gt;&lt;/i&gt;, avec &lt;i&gt;R&lt;sub&gt;s&lt;/sub&gt;&lt;/i&gt; = 0,33&#937;, un &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; &#8804; 300mA donne un &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; &#8804; 0,5V. En t&#226;tonnant, une valeur de 0,47V donne le meilleur comportement&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Lorsque le Mixed Decay est s&#233;lectionn&#233;.&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Voici le r&#233;sultat obtenu avec ce r&#233;glage.&lt;/p&gt;
&lt;div class=&#034;spip_document_365 spip_document spip_documents spip_document_video&#034;&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;div class=&#034;video-intrinsic-wrapper&#034; style='height:0;width:640px;max-width:100%;padding-bottom:56.25%;position:relative;'&gt; &lt;div class=&#034;video-wrapper&#034; style=&#034;position: absolute;top:0;left:0;width:100%;height:100%;&#034;&gt; &lt;video class=&#034;mejs mejs-365&#034; data-id=&#034;bf578d0c063c51d6286a75ff18e96b18&#034; data-mejsoptions='{&#034;iconSprite&#034;: &#034;plugins-dist/medias/lib/mejs/mejs-controls.svg&#034;,&#034;alwaysShowControls&#034;: true,&#034;pluginPath&#034;:&#034;plugins-dist/medias/lib/mejs/&#034;,&#034;loop&#034;:false,&#034;videoWidth&#034;:&#034;100%&#034;,&#034;videoHeight&#034;:&#034;100%&#034;}' width=&#034;100%&#034; height=&#034;100%&#034; controls=&#034;controls&#034; preload=&#034;none&#034; &gt; &lt;source type=&#034;application/x-shockwave-flash&#034; src=&#034;http://www.youtube.com/v/opi2D4BsxPo?version=3&amp;hl=fr_FR&amp;rel=0&#034; /&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/swf-d2c4d-75a7b.svg?1772798901' width='64' height='64' alt='Impossible de lire la video' /&gt; &lt;/video&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#034;base64javascript3264576969bd099f137043.82523500&#034; title=&#034;PHNjcmlwdD4gdmFyIG1lanNwYXRoPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudC1hbmQtcGxheWVyLm1pbi5qcz8xNzcyNzk1ODQwJyxtZWpzY3NzPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudHBsYXllci5taW4uY3NzPzE3NzI3OTU4NDAnOwp2YXIgbWVqc2xvYWRlcjsKKGZ1bmN0aW9uKCl7dmFyIGE9bWVqc2xvYWRlcjsidW5kZWZpbmVkIj09dHlwZW9mIGEmJihtZWpzbG9hZGVyPWE9e2dzOm51bGwscGx1Zzp7fSxjc3M6e30saW5pdDpudWxsLGM6MCxjc3Nsb2FkOm51bGx9KTthLmluaXR8fChhLmNzc2xvYWQ9ZnVuY3Rpb24oYyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNzc1tjXSl7YS5jc3NbY109ITA7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2IuaHJlZj1jO2IucmVsPSJzdHlsZXNoZWV0IjtiLnR5cGU9InRleHQvY3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGIpfX0sYS5pbml0PWZ1bmN0aW9uKCl7ITA9PT1hLmdzJiZmdW5jdGlvbihjKXtqUXVlcnkoImF1ZGlvLm1lanMsdmlkZW8ubWVqcyIpLm5vdCgiLmRvbmUsLm1lanNfX3BsYXllciIpLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dmFyIGU9ITAsaDtmb3IoaCBpbiBkLmNzcylhLmNzc2xvYWQoZC5jc3NbaF0pO2Zvcih2YXIgZiBpbiBkLnBsdWdpbnMpInVuZGVmaW5lZCI9PQp0eXBlb2YgYS5wbHVnW2ZdPyhlPSExLGEucGx1Z1tmXT0hMSxqUXVlcnkuZ2V0U2NyaXB0KGQucGx1Z2luc1tmXSxmdW5jdGlvbigpe2EucGx1Z1tmXT0hMDtiKCl9KSk6MD09YS5wbHVnW2ZdJiYoZT0hMSk7ZSYmalF1ZXJ5KCIjIitjKS5tZWRpYWVsZW1lbnRwbGF5ZXIoalF1ZXJ5LmV4dGVuZChkLm9wdGlvbnMse3N1Y2Nlc3M6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBiKCl7dmFyIGI9alF1ZXJ5KGEpLmNsb3Nlc3QoIi5tZWpzX19pbm5lciIpO2EucGF1c2VkPyhiLmFkZENsYXNzKCJwYXVzaW5nIiksc2V0VGltZW91dChmdW5jdGlvbigpe2IuZmlsdGVyKCIucGF1c2luZyIpLnJlbW92ZUNsYXNzKCJwbGF5aW5nIikucmVtb3ZlQ2xhc3MoInBhdXNpbmciKS5hZGRDbGFzcygicGF1c2VkIil9LDEwMCkpOmIucmVtb3ZlQ2xhc3MoInBhdXNlZCIpLnJlbW92ZUNsYXNzKCJwYXVzaW5nIikuYWRkQ2xhc3MoInBsYXlpbmciKX1iKCk7YS5hZGRFdmVudExpc3RlbmVyKCJwbGF5IixiLCExKTsKYS5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIsYiwhMSk7Zy5hdHRyKCJhdXRvcGxheSIpJiZhLnBsYXkoKX19KSl9dmFyIGc9alF1ZXJ5KHRoaXMpLmFkZENsYXNzKCJkb25lIiksYzsoYz1nLmF0dHIoImlkIikpfHwoYz0ibWVqcy0iK2cuYXR0cigiZGF0YS1pZCIpKyItIithLmMrKyxnLmF0dHIoImlkIixjKSk7dmFyIGQ9e29wdGlvbnM6e30scGx1Z2luczp7fSxjc3M6W119LGUsaDtmb3IoZSBpbiBkKWlmKGg9Zy5hdHRyKCJkYXRhLW1lanMiK2UpKWRbZV09alF1ZXJ5LnBhcnNlSlNPTihoKTtiKCl9KX0oalF1ZXJ5KX0pO2EuZ3N8fCgidW5kZWZpbmVkIiE9PXR5cGVvZiBtZWpzY3NzJiZhLmNzc2xvYWQobWVqc2NzcyksYS5ncz1qUXVlcnkuZ2V0U2NyaXB0KG1lanNwYXRoLGZ1bmN0aW9uKCl7YS5ncz0hMDthLmluaXQoKTtqUXVlcnkoYS5pbml0KTtvbkFqYXhMb2FkKGEuaW5pdCl9KSl9KSgpOzwvc2NyaXB0Pg==&#034;&gt;&lt;/div&gt; &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;La plus haute r&#233;solution du &lt;i&gt;Ti DRV8824&lt;/i&gt; par rapport &#224; l'&lt;i&gt;Allegro A3967&lt;/i&gt; qui &#233;quipe l'EasyDriver donne un bien meilleur r&#233;sultat mais ce n'est pas encore parfait.&lt;/p&gt;
&lt;p&gt;Deux pistes d'am&#233;lioration existent. La premi&#232;re concerne le &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt;. En effet, la valeur de &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; n&#233;cessaire pour le moteur choisi est en de&#231;&#224; de ce qui est pr&#233;conis&#233; par &lt;i&gt;Texas Instruments&lt;/i&gt; mais augmenter &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; demanderait de remplacer les r&#233;sistance de capture de courant de 0,33&#937; pas des r&#233;sistances de 2,2&#937;. De cette mani&#232;re le &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; maximum de 3,3V correspondrait &#224; un courant maximum de 300mA.&lt;/p&gt;
&lt;p&gt;Se lancer dans cette modification est un peu risqu&#233; et une autre piste a &#233;t&#233; privil&#233;gi&#233;e : le changement du &lt;i&gt;DECAY&lt;/i&gt; car comme on avait pu le voir dans &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article69' class=&#034;spip_in&#034;&gt;Mise en &#339;uvre de l'EasyDriver v4.4 pour un pont tournant&lt;/a&gt; &#187;, son influence est importante. Malheureusement, comme on l'a vu dans &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article71' class=&#034;spip_in&#034;&gt;La DRV8824 de Pololu&lt;/a&gt; &#187;, le &lt;i&gt;DECAY&lt;/i&gt; n'est pas disponible sur les broches de la DRV8824. Il faut aller le chercher sur la broche 19 du &lt;i&gt;Ti DRV8824&lt;/i&gt;. En mettant cette broche &#224; la GND, on s&#233;lectionne le &lt;i&gt;Slow Decay&lt;/i&gt; et en la mettant &#224; +5V, on s&#233;lectionne le &lt;i&gt;Fast Decay&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;En &lt;i&gt;Slow Decay&lt;/i&gt; le comportement est moins bon avec un net pompage qui appara&#238;t.&lt;/p&gt;
&lt;p&gt;En &lt;i&gt;Fast Decay&lt;/i&gt; le comportement est bien meilleur. La vibration, pr&#233;sente quand le pont est charg&#233;, dispara&#238;t.&lt;/p&gt;
&lt;p&gt;Il se trouve que la broche 19 voisine avec la broche 18, FAULT, qui a l'&#233;norme avantage d'&#234;tre &#224; l'&#233;tat haut en temps normal&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Si FAULT passe &#224; l'&#233;tat bas, le composant est en erreur et la valeur &#224; (&#8230;)&#034; id=&#034;nh3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;. Il suffit donc de d&#233;poser une goutte de soudure pour r&#233;unir ces deux broches et s&#233;lectionne le &lt;i&gt;Fast Decay&lt;/i&gt;. Relier &lt;i&gt;DECAY&lt;/i&gt; &#224; GND aurait &#233;t&#233; beaucoup plus sportif car il aurait fallu souder un fil volant entre &lt;i&gt;DECAY&lt;/i&gt; et le GND qui se trouve &#224; une dizaine de mm de l&#224;.&lt;/p&gt;
&lt;div class='spip_document_366 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;113&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH352/decay-bd5bb.jpg?1692343797' width='500' height='352' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-366 '&gt;&lt;strong&gt;Modification de la DRV8824
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-366 '&gt;Soudage des broches DECAY et FAULT ensemble de mani&#232;re &#224; mettre DECAY &#224; l'&#233;tat haut.
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Il reste malgr&#233; tout un tr&#232;s l&#233;ger pompage qui est r&#233;solu par la diminution du &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; de mani&#232;re &#224; obtenir un courant entre 200mA (pont charg&#233; en H0) et 150mA (pont l&#232;ge en N). Le r&#233;sultat est excellent, m&#234;me dans les phases d'acc&#233;l&#233;ration et de d&#233;c&#233;l&#233;ration, comme en atteste la vid&#233;o ci-dessous.&lt;/p&gt;
&lt;div class=&#034;spip_document_368 spip_document spip_documents spip_document_video&#034;&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;div class=&#034;video-intrinsic-wrapper&#034; style='height:0;width:640px;max-width:100%;padding-bottom:56.25%;position:relative;'&gt; &lt;div class=&#034;video-wrapper&#034; style=&#034;position: absolute;top:0;left:0;width:100%;height:100%;&#034;&gt; &lt;video class=&#034;mejs mejs-368&#034; data-id=&#034;a6276171b700728649cec60dba235400&#034; data-mejsoptions='{&#034;iconSprite&#034;: &#034;plugins-dist/medias/lib/mejs/mejs-controls.svg&#034;,&#034;alwaysShowControls&#034;: true,&#034;pluginPath&#034;:&#034;plugins-dist/medias/lib/mejs/&#034;,&#034;loop&#034;:false,&#034;videoWidth&#034;:&#034;100%&#034;,&#034;videoHeight&#034;:&#034;100%&#034;}' width=&#034;100%&#034; height=&#034;100%&#034; controls=&#034;controls&#034; preload=&#034;none&#034; &gt; &lt;source type=&#034;application/x-shockwave-flash&#034; src=&#034;http://www.youtube.com/v/Qi1aWqdYrn8?hl=fr_FR&amp;version=3&amp;rel=0&#034; /&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/swf-d2c4d-75a7b.svg?1772798901' width='64' height='64' alt='Impossible de lire la video' /&gt; &lt;/video&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#034;base64javascript3264576969bd099f137043.82523500&#034; title=&#034;PHNjcmlwdD4gdmFyIG1lanNwYXRoPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudC1hbmQtcGxheWVyLm1pbi5qcz8xNzcyNzk1ODQwJyxtZWpzY3NzPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudHBsYXllci5taW4uY3NzPzE3NzI3OTU4NDAnOwp2YXIgbWVqc2xvYWRlcjsKKGZ1bmN0aW9uKCl7dmFyIGE9bWVqc2xvYWRlcjsidW5kZWZpbmVkIj09dHlwZW9mIGEmJihtZWpzbG9hZGVyPWE9e2dzOm51bGwscGx1Zzp7fSxjc3M6e30saW5pdDpudWxsLGM6MCxjc3Nsb2FkOm51bGx9KTthLmluaXR8fChhLmNzc2xvYWQ9ZnVuY3Rpb24oYyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNzc1tjXSl7YS5jc3NbY109ITA7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2IuaHJlZj1jO2IucmVsPSJzdHlsZXNoZWV0IjtiLnR5cGU9InRleHQvY3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGIpfX0sYS5pbml0PWZ1bmN0aW9uKCl7ITA9PT1hLmdzJiZmdW5jdGlvbihjKXtqUXVlcnkoImF1ZGlvLm1lanMsdmlkZW8ubWVqcyIpLm5vdCgiLmRvbmUsLm1lanNfX3BsYXllciIpLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dmFyIGU9ITAsaDtmb3IoaCBpbiBkLmNzcylhLmNzc2xvYWQoZC5jc3NbaF0pO2Zvcih2YXIgZiBpbiBkLnBsdWdpbnMpInVuZGVmaW5lZCI9PQp0eXBlb2YgYS5wbHVnW2ZdPyhlPSExLGEucGx1Z1tmXT0hMSxqUXVlcnkuZ2V0U2NyaXB0KGQucGx1Z2luc1tmXSxmdW5jdGlvbigpe2EucGx1Z1tmXT0hMDtiKCl9KSk6MD09YS5wbHVnW2ZdJiYoZT0hMSk7ZSYmalF1ZXJ5KCIjIitjKS5tZWRpYWVsZW1lbnRwbGF5ZXIoalF1ZXJ5LmV4dGVuZChkLm9wdGlvbnMse3N1Y2Nlc3M6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBiKCl7dmFyIGI9alF1ZXJ5KGEpLmNsb3Nlc3QoIi5tZWpzX19pbm5lciIpO2EucGF1c2VkPyhiLmFkZENsYXNzKCJwYXVzaW5nIiksc2V0VGltZW91dChmdW5jdGlvbigpe2IuZmlsdGVyKCIucGF1c2luZyIpLnJlbW92ZUNsYXNzKCJwbGF5aW5nIikucmVtb3ZlQ2xhc3MoInBhdXNpbmciKS5hZGRDbGFzcygicGF1c2VkIil9LDEwMCkpOmIucmVtb3ZlQ2xhc3MoInBhdXNlZCIpLnJlbW92ZUNsYXNzKCJwYXVzaW5nIikuYWRkQ2xhc3MoInBsYXlpbmciKX1iKCk7YS5hZGRFdmVudExpc3RlbmVyKCJwbGF5IixiLCExKTsKYS5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIsYiwhMSk7Zy5hdHRyKCJhdXRvcGxheSIpJiZhLnBsYXkoKX19KSl9dmFyIGc9alF1ZXJ5KHRoaXMpLmFkZENsYXNzKCJkb25lIiksYzsoYz1nLmF0dHIoImlkIikpfHwoYz0ibWVqcy0iK2cuYXR0cigiZGF0YS1pZCIpKyItIithLmMrKyxnLmF0dHIoImlkIixjKSk7dmFyIGQ9e29wdGlvbnM6e30scGx1Z2luczp7fSxjc3M6W119LGUsaDtmb3IoZSBpbiBkKWlmKGg9Zy5hdHRyKCJkYXRhLW1lanMiK2UpKWRbZV09alF1ZXJ5LnBhcnNlSlNPTihoKTtiKCl9KX0oalF1ZXJ5KX0pO2EuZ3N8fCgidW5kZWZpbmVkIiE9PXR5cGVvZiBtZWpzY3NzJiZhLmNzc2xvYWQobWVqc2NzcyksYS5ncz1qUXVlcnkuZ2V0U2NyaXB0KG1lanNwYXRoLGZ1bmN0aW9uKCl7YS5ncz0hMDthLmluaXQoKTtqUXVlcnkoYS5pbml0KTtvbkFqYXhMb2FkKGEuaW5pdCl9KSl9KSgpOzwvc2NyaXB0Pg==&#034;&gt;&lt;/div&gt; &lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Le logiciel&lt;/h2&gt;
&lt;p&gt;La commande de la DRV8824 &#233;tant identique &#224; celle de l'EasyDriver le logiciel reste, dans les grandes lignes, identique &#224; celui d&#233;crit dans &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article69' class=&#034;spip_in&#034;&gt;Mise en &#339;uvre de l'EasyDriver v4.4 pour un pont tournant&lt;/a&gt; &#187;. Evidemment, comme il y a 4 fois plus de micro-pas il faut diminuer le d&#233;lai entre le passage de 2 micro-pas. Sur l'EasyDriver, le d&#233;lai avait &#233;t&#233; fix&#233; &#224; 37ms. Ici il est fix&#233; &#224; 16ms. Un tour est donc accompli en 12800 &#215; 16ms = 3 minutes et 25 secondes environ, ce qui est presque conforme &#224; la r&#233;alit&#233;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dur&#233;e du &lt;i&gt;STEP&lt;/i&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le &lt;i&gt;Ti DRV8824&lt;/i&gt; est moins tol&#233;rant que l'&lt;i&gt;Allegro A3967&lt;/i&gt;. &lt;i&gt;STEP&lt;/i&gt; doit rest&#233; au m&#234;me &#233;tat au moins 1,9&#181;s alors que sur le &lt;i&gt;A3967&lt;/i&gt; nous avions 1&#181;s. Si comme pr&#233;c&#233;demment, on &#233;crit :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;void loop() { digitalWrite(pinMicroPas, LOW); digitalWrite(pinMicroPas, HIGH); delay(16); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On risque de na pas satisfaire cette condition entre les deux &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;digitalWrite(...)&lt;/code&gt;. Les 16ms sont par exemple r&#233;partis comme ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;void loop() { digitalWrite(pinMicroPas, LOW); delay(8); digitalWrite(pinMicroPas, HIGH); delay(8); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;La DRV8824 de Pololu est donc retenue pour la mise en &#339;uvre du pont tournant. Le prochain article portera sur l'algorithme du choix du plus court chemin.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Certes, je construis un r&#233;seau &#224; l'&#233;chelle N mais je pense aussi &#224; mes petits camarades H0istes.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Lorsque le &lt;i&gt;Mixed Decay&lt;/i&gt; est s&#233;lectionn&#233;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3&#034; class=&#034;spip_note&#034; title=&#034;Notes 3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Si &lt;i&gt;FAULT&lt;/i&gt; passe &#224; l'&#233;tat bas, le composant est en erreur et la valeur &#224; laquelle &lt;i&gt;DECAY&lt;/i&gt; est mis n'a pas d'importance.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>La DRV8824 de Pololu</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article71</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article71</guid>
		<dc:date>2013-12-16T21:49:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>



		<description>
&lt;p&gt;Les essais avec l'EasyDriver v4.4 n'ont pas donn&#233; enti&#232;re satisfaction. En effet, 8 micros-pas par pas ne semblent pas suffisants pour un mouvement fluide &#224; tr&#232;s faible vitesse. Nous examinons aujourd'hui une seconde breakout board qui donnera peut-&#234;tre de meilleurs r&#233;sultats. Pr&#233;sentation de la DRV8824 de Pololu &lt;br class='autobr' /&gt;
La DRV8824 de Pololu est une autre candidate pour le pilotage des moteurs pas-&#224;-pas par micro-pas. Cette Breakout Board int&#232;gre un circuit int&#233;gr&#233; Texas Instruments DRV8824 ainsi (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Les &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article69' class=&#034;spip_in&#034;&gt;essais avec l'EasyDriver v4.4&lt;/a&gt; n'ont pas donn&#233; enti&#232;re satisfaction. En effet, 8 micros-pas par pas ne semblent pas suffisants pour un mouvement fluide &#224; tr&#232;s faible vitesse. Nous examinons aujourd'hui une seconde &lt;i&gt;breakout board&lt;/i&gt; qui donnera peut-&#234;tre de meilleurs r&#233;sultats.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;sentation de la DRV8824 de Pololu&lt;/h2&gt;
&lt;p&gt;La &lt;a href=&#034;http://www.pololu.com/product/2131&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;DRV8824 de Pololu&lt;/a&gt; est une autre candidate pour le pilotage des moteurs pas-&#224;-pas par micro-pas. Cette &lt;i&gt;Breakout Board&lt;/i&gt; int&#232;gre un circuit int&#233;gr&#233; &lt;i&gt;Texas Instruments&lt;/i&gt; DRV8824 ainsi que les composants permettant de le mettre en &#339;uvre. Voici la &lt;a href=&#034;http://www.ti.com/lit/ds/symlink/drv8824.pdf&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;datasheet du DRV8824&lt;/a&gt;. Cette &lt;i&gt;Breakout Board&lt;/i&gt; porte donc le m&#234;me nom que le composant qu'elle int&#232;gre ce qui ne va pas me faciliter la description. Dans la suite je vais donc utiliser DRV8824 quand il s'agit de la &lt;i&gt;Breakout Board&lt;/i&gt; et &lt;i&gt;Ti DRV8824&lt;/i&gt; quand il s'agit du composant de &lt;i&gt;Texas Instruments&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Le &lt;i&gt;Ti DRV8824&lt;/i&gt; permet 32 &#181;Pas au maximum l&#224; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article68' class=&#034;spip_in&#034;&gt;o&#249; l'&lt;i&gt;Allegro A3967&lt;/i&gt; n'en permettait que 8&lt;/a&gt;. Cette meilleure r&#233;solution devrait permettre une plus grande fluidit&#233; de mouvement. Comme on va le voir le principe d'utilisation est quasiment identique entre les deux circuits.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pololu recommande &#233;galement de ne jamais d&#233;brancher le moteur en laissant la DRV8824 sous tension, il pourrait en r&#233;sulter la destruction du &lt;i&gt;Ti DRV8824&lt;/i&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La DRV8824 est une carte beaucoup plus petite que l'&lt;i&gt;EasyDriver&lt;/i&gt;. Elle ne mesure que 20,5mm sur 15,5mm. On peut la voir comme un composant 16 broches avec deux lignes de 8 broches au pas de 2,54mm &#233;cart&#233;es de 12,7mm. On la trouve pour une douzaine d'Euros. Elle se pr&#233;sente comme ceci :&lt;/p&gt;
&lt;div class='spip_document_357 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH261/DRV8824-d0a39.jpg?1692343797' width='500' height='261' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; Le &lt;i&gt;Ti DRV8824&lt;/i&gt; est aussi plus petit avec des broches au pas de 0,65mm. Contrairement &#224; l'EasyDriver, il n'y a pas de r&#233;gulateur de tension car il est inutile. En effet, le &lt;i&gt;Ti DRV8824&lt;/i&gt; int&#232;gre son propre r&#233;gulateur de tension pour g&#233;n&#233;rer le 3,3V n&#233;cessaire &#224; partir de la tension du moteur.&lt;/p&gt;
&lt;p&gt;Il n'y a pas non plus de condensateur chimique de filtrage. Par cons&#233;quent, il est n&#233;cessaire d'en pr&#233;voir un en externe sur l'alimentation du moteur. Ce condensateur dont la valeur doit &#234;tre au moins de 47&#181;F est indispensable pour filtrer les transitoires &#224; l'allumage qui risqueraient d'endommager le &lt;i&gt;Ti DRV8824&lt;/i&gt;. &lt;a href=&#034;http://www.pololu.com/docs/0J16/all&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Pololu met en garde &#224; ce sujet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comme sur l'EasyDriver, nous retrouvons un potentiom&#232;tre de r&#233;glage du courant maximum. La valeur de ce courant est &#233;galement fix&#233;e par la tension de r&#233;f&#233;rence &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; au point de mesure et la r&#233;sistance de capture de courant &lt;i&gt;R&lt;sub&gt;s&lt;/sub&gt;&lt;/i&gt;. Le courant maximum &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; est donn&#233; par la formule : &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; = &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; / 5&lt;i&gt;R&lt;sub&gt;s&lt;/sub&gt;&lt;/i&gt;. Contrairement &#224; l'EasyDriver la valeur minimum de &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; n'est pas de 1V mais de 0V, ce qui th&#233;oriquement permet de descendre plus bas. En pratique, la documentation du &lt;i&gt;Ti DRV8824&lt;/i&gt; indique que les performances sont moindres si &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; est en dessous de 1V.&lt;/p&gt;
&lt;p&gt;Le r&#244;le des 16 broches est indiqu&#233; au verso de la carte.&lt;/p&gt;
&lt;div class='spip_document_358 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH331/DRV8824face-13c1e.jpg?1692343798' width='500' height='331' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le moteur pas-&#224;-pas est connect&#233; via les A1 et A2 pour la premi&#232;re bobine et B1 et B2 pour la seconde. ;&lt;/li&gt;&lt;li&gt; L'alimentation du moteur est connect&#233;e sur les deux broches VMOT et GND (entre 8,2V et 45V). Il est &#233;galement possible d'alimenter le moteur avec une tension plus &#233;lev&#233;e que celle qu'il supporte &lt;strong&gt;&#224; condition de r&#233;gler le courant &#224; une valeur inf&#233;rieure ou &#233;gale au courant support&#233; par le moteur&lt;/strong&gt; ;&lt;/li&gt;&lt;li&gt; Les deux masses sont reli&#233;es entre elles et l'une au moins devra &#234;tre connect&#233;e &#224; la masse de la carte microcontr&#244;leur employ&#233;e (Arduino ou autre) ;&lt;/li&gt;&lt;li&gt; RESET, ENABLE et SLP (pour SLEEP) permettent respectivement de faire une r&#233;initialisation du &lt;i&gt;Ti DRV8824&lt;/i&gt;, de l'activer ou de le mettre en veille ;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; RESET doit &#234;tre amen&#233; &#224; 0 puis &#224; 1 pour r&#233;initialiser le &lt;i&gt;Ti DRV8824&lt;/i&gt;. Les deux bobines sont aliment&#233;es &#224; 70,71% et le rotor se place sur un demi-pas. Le &lt;i&gt;Ti DRV8824&lt;/i&gt; tire RESET &#224; 0 via une r&#233;sistance interne de 100k&#937;. Il est donc n&#233;cessaire de connecter RESET au 5V pour que que le RESET ne soit pas actif.&lt;/li&gt;&lt;li&gt; ENABLE doit &#234;tre constamment &#224; l'&#233;tat 0 (bas) pour que le &lt;i&gt;Ti DRV8824&lt;/i&gt; pilote les bobines du moteur et que &#231;a logique soit op&#233;rationnelle. Cette entr&#233;e est tir&#233;e &#224; 0V via une r&#233;sistance interne de 100k&#937;. On donc peut laisser cette broche en l'air ;&lt;/li&gt;&lt;li&gt; Enfin SLP peut &#234;tre mise &#224; l'&#233;tat bas pour mettre le &lt;i&gt;Ti DRV8824&lt;/i&gt; en veille. Cette entr&#233;e est tir&#233;e &#224; 0V via une r&#233;sistance interne de 1M&#937;. Il faut donc raccorder cette broche au 5V pour que le pilote reste actif.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; M0, M1 et M2 permettent de fixer le nombre de micro-pas entre 2 pas selon la table suivante. Le &lt;i&gt;Ti DRV8824&lt;/i&gt; tire ces broches 0V via des r&#233;sistances internes de 100k&#937; avec pour cons&#233;quence un mouvement par pas entiers si ces elles sont laiss&#233;es en l'air. Il est donc n&#233;cessaire de les relier conform&#233;ment &#224; la table ;&lt;/li&gt;&lt;/ul&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;M2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;M1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;M0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mode&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Pas entiers&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1/2 pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;8 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;16 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;32 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;32 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;32 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; DIR fixe le sens de rotation du moteur ;&lt;/li&gt;&lt;li&gt; STEP permet de faire avancer le moteur au micro-pas suivant. Une transition de 0 &#224; 1 provoque cette avance.&lt;/li&gt;&lt;li&gt; Enfin le &lt;i&gt;Ti DRV8824&lt;/i&gt; met FAULT &#224; 0 si un courant excessif ou une temp&#233;rature trop &#233;lev&#233;e est d&#233;tect&#233;e.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Par rapport &#224; l'EasyDriver, la broche permettant de s&#233;lectionner la mani&#232;re dont le courant d&#233;cro&#238;t est manquante. Elle est bien pr&#233;sente sur le &lt;i&gt;Ti DRV8824&lt;/i&gt;, il s'agit de la broche 19 : DECAY, mais n'est pas disponible sur le DRV8824 et est laiss&#233;e en l'air. Cette configuration fixe la d&#233;croissance du courant &#224; &lt;i&gt;mixed&lt;/i&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Soudage des broches et carte de montage&lt;/h2&gt;
&lt;p&gt;Le DRV8824 est livr&#233; avec une barrette &#224; broches que j'ai soud&#233;e sous la carte. Il n'y a absolument pas la place de l'&#233;quiper des m&#234;mes connecteurs que ceux que j'ai utilis&#233;s pour l'EasyDriver.&lt;/p&gt;
&lt;div class='spip_document_359 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH304/DRV8824broches-0a96b.jpg?1692343798' width='500' height='304' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Afin de pouvoir r&#233;utiliser ma connectique, j'ai bricol&#233; une petite carte accueillant le DRV8824 et mon connecteur pour le moteur et s'enfichant dans la &lt;i&gt;breadboard&lt;/i&gt;.&lt;/p&gt;
&lt;div class='spip_document_360 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH373/DRV8824carterecto-12880.jpg?1692343798' width='500' height='373' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_361 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH373/DRV8824carteverso-3b506.jpg?1692343798' width='500' height='373' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le connecteur d'alimentation sera plant&#233; s&#233;par&#233;ment sur la &lt;i&gt;breadboard&lt;/i&gt; pour pouvoir ajouter le condensateur de filtrage pr&#233;conis&#233; par Pololu.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mise en &#339;uvre de l'EasyDriver v4.4 pour un pont tournant</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article69</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article69</guid>
		<dc:date>2013-12-09T12:33:38Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>


		<dc:subject>Moteur pas-&#224;-pas</dc:subject>
		<dc:subject>Arduino</dc:subject>
		<dc:subject>Pont tournant</dc:subject>

		<description>
&lt;p&gt;Voici le compte rendu de quelques essais de mise en &#339;uvre avec l'objectif de motoriser un pont tournant. &lt;br class='autobr' /&gt;
Le mat&#233;riel &lt;br class='autobr' /&gt;
Afin d'avoir la meilleure r&#233;solution possible, le moteur pas-&#224;-pas bipolaire choisi est un moteur 400 pas par tour vendu par Selectronic. Il s'agit de ce mod&#232;le. &lt;br class='autobr' /&gt;
Ce moteur est pr&#233;vu pour &#234;tre aliment&#233; en 12V. Les bobines ont une r&#233;sistance de 40&#937; et par cons&#233;quent chaque bobine consomme 300mA. Le couple de maintien est de 3,5 kg/cm. &lt;br class='autobr' /&gt;
J'ai fix&#233; sur l'arbre une latte en (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;

/ 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot7" rel="tag"&gt;Moteur pas-&#224;-pas&lt;/a&gt;, 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot10" rel="tag"&gt;Arduino&lt;/a&gt;, 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot11" rel="tag"&gt;Pont tournant&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Voici le compte rendu de quelques essais de mise en &#339;uvre avec l'objectif de motoriser un pont tournant.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le mat&#233;riel&lt;/h2&gt;
&lt;p&gt;Afin d'avoir la meilleure r&#233;solution possible, le moteur pas-&#224;-pas bipolaire choisi est un moteur 400 pas par tour vendu par Selectronic. Il s'agit de &lt;a href=&#034;http://www.selectronic.fr/moteur-pas-a-pas-modele-pap-2.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ce mod&#232;le&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ce moteur est pr&#233;vu pour &#234;tre aliment&#233; en 12V. Les bobines ont une r&#233;sistance de 40&#937; et par cons&#233;quent chaque bobine consomme 300mA. Le couple de maintien est de 3,5 kg/cm.&lt;/p&gt;
&lt;p&gt;J'ai fix&#233; sur l'arbre une latte en bois de 40 cm de longueur et donc un rayon de 20cm. Cette longueur est de 30% sup&#233;rieure &#224; la longueur d'un pont tournant en H0 et plus de 2 fois plus long qu'un pont tournant en N. Cela permet de visualiser la rotation et plus particuli&#232;rement les d&#233;fauts.&lt;/p&gt;
&lt;div class='spip_document_348 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;37&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH171/moteur_pap-b4e87.jpg?1692224381' width='500' height='171' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-348 '&gt;&lt;strong&gt;Montage d'essai du moteur pas-&#224;-pas
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;En combinant les 400 pas par tour du moteur et les 8 &#181;pas de l'EasyDriver, on arrive &#224; 3200 positions sur le cercle. Avec un diam&#232;tre de 30cm, typiquement un pont tournant en H0, cela nous donne un pas d'environ 0,3mm en bout de pont. Avec un diam&#232;tre de 15cm qui correspond au pont tournant PECO en N, cela nous donne un pas de 0,15mm en bout de pont.&lt;/p&gt;
&lt;p&gt;La connexion de l'Arduino &#224; l'EasyDriver est particuli&#232;rement simple. Comme on la vu dans &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article68' class=&#034;spip_in&#034;&gt;L'Easydriver v4.4&lt;/a&gt; &#187;, la plupart des broches de l'EasyDriver ont la configuration ad&#233;quate quand on les laisse tout simplement non connect&#233;es.&lt;/p&gt;
&lt;div class='spip_document_362 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH238/easydriver-c2cbd.png?1692224382' width='500' height='238' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Les sorties num&#233;riques 2 et 3 de l'Arduino sont employ&#233;es pour piloter le moteur. On garde les alimentations s&#233;par&#233;es. L'EasyDriver est aliment&#233; en 12V continu et, pour les essais, l'Arduino reste aliment&#233; via l'USB.&lt;/p&gt;
&lt;div class='spip_document_349 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;39&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH373/arduino_et_easy-6707b.jpg?1692224382' width='500' height='373' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-349 '&gt;&lt;strong&gt;Connexion de l'Arduino &#224; l'EasyDriver
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Influence de la limitation de courant&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Plus le courant maximum &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt;, c'est &#224; dire le courant correspondant &#224; 100% d'alimentation d'une bobine, est &#233;lev&#233; et plus le passage d'un &#181;Pas au suivant est rapide et franc. Comme on veut le passage le plus doux possible, il faut r&#233;gler le courant maximum &#224; la valeur la plus basse possible.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
&lt;strong&gt;Les indications de sens de rotation du potentiom&#232;tre sur l'EasyDriver 4.4 sont fausses.&lt;/strong&gt; La valeur minimum correspond en fait &#224; une rotation dans le sens trigonom&#233;trique (&#224; gauche) et la valeur maximum &#224; une rotation dans le sens horaire (&#224; droite).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;D'apr&#232;s &lt;a href=&#034;http://www.schmalzhaus.com/EasyDriver/EasyDriver_v44/EasyDriver_v44_sch.pdf&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la sch&#233;matique&lt;/a&gt;, le &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; minimum possible est de 166mA pour &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; = 1V, ce qui correspond &#224; la valeur minimum que l'on trouve dans la &lt;a href=&#034;http://www.allegromicro.com/~/media/Files/Datasheets/A3967-Datasheet.ashx&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation de l'&lt;i&gt;Allegro A3967&lt;/i&gt;&lt;/a&gt;. En r&#233;alit&#233;, le &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; minimum mesur&#233; est de 1,59V au lieu des 1V annonc&#233;s. Par ailleurs, j'ai mesur&#233; une valeur de 1,2&#937; pour les r&#233;sistances de capture de courant au lieu des 0,75&#937; annonc&#233;s dans la sch&#233;matique. Le rapport &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; / &lt;i&gt;R&lt;sub&gt;s&lt;/sub&gt;&lt;/i&gt; est quasiment le m&#234;me et le &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; pour &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; = 1,59V est donc bien de 166mA.&lt;/p&gt;
&lt;p&gt;Voici une vid&#233;o montrant l'influence de la limitation de courant sur la fluidit&#233; de la rotation pour les valeurs suivantes de &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; : 280mA (&lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; = 2,69V), 224mA (&lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; = 2,15V) et 166mA (&lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; = 1,59V). La vitesse de rotation est de 1 tour en 2 minutes.&lt;/p&gt;
&lt;div class=&#034;spip_document_352 spip_document spip_documents spip_document_video&#034;&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;div class=&#034;video-intrinsic-wrapper&#034; style='height:0;width:640px;max-width:100%;padding-bottom:56.25%;position:relative;'&gt; &lt;div class=&#034;video-wrapper&#034; style=&#034;position: absolute;top:0;left:0;width:100%;height:100%;&#034;&gt; &lt;video class=&#034;mejs mejs-352&#034; data-id=&#034;085b2ed9e754ac8b976180f80f056099&#034; data-mejsoptions='{&#034;iconSprite&#034;: &#034;plugins-dist/medias/lib/mejs/mejs-controls.svg&#034;,&#034;alwaysShowControls&#034;: true,&#034;pluginPath&#034;:&#034;plugins-dist/medias/lib/mejs/&#034;,&#034;loop&#034;:false,&#034;videoWidth&#034;:&#034;100%&#034;,&#034;videoHeight&#034;:&#034;100%&#034;}' width=&#034;100%&#034; height=&#034;100%&#034; controls=&#034;controls&#034; preload=&#034;none&#034; &gt; &lt;source type=&#034;application/x-shockwave-flash&#034; src=&#034;http://www.youtube.com/v/ZFFToe1mCec?version=3&amp;hl=fr_FR&amp;rel=0&#034; /&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/swf-d2c4d-75a7b.svg?1772798901' width='64' height='64' alt='Impossible de lire la video' /&gt; &lt;/video&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#034;base64javascript48149994769e2778f365884.98283324&#034; title=&#034;PHNjcmlwdD4gdmFyIG1lanNwYXRoPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudC1hbmQtcGxheWVyLm1pbi5qcz8xNzcyNzk1ODQwJyxtZWpzY3NzPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudHBsYXllci5taW4uY3NzPzE3NzI3OTU4NDAnOwp2YXIgbWVqc2xvYWRlcjsKKGZ1bmN0aW9uKCl7dmFyIGE9bWVqc2xvYWRlcjsidW5kZWZpbmVkIj09dHlwZW9mIGEmJihtZWpzbG9hZGVyPWE9e2dzOm51bGwscGx1Zzp7fSxjc3M6e30saW5pdDpudWxsLGM6MCxjc3Nsb2FkOm51bGx9KTthLmluaXR8fChhLmNzc2xvYWQ9ZnVuY3Rpb24oYyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNzc1tjXSl7YS5jc3NbY109ITA7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2IuaHJlZj1jO2IucmVsPSJzdHlsZXNoZWV0IjtiLnR5cGU9InRleHQvY3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGIpfX0sYS5pbml0PWZ1bmN0aW9uKCl7ITA9PT1hLmdzJiZmdW5jdGlvbihjKXtqUXVlcnkoImF1ZGlvLm1lanMsdmlkZW8ubWVqcyIpLm5vdCgiLmRvbmUsLm1lanNfX3BsYXllciIpLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dmFyIGU9ITAsaDtmb3IoaCBpbiBkLmNzcylhLmNzc2xvYWQoZC5jc3NbaF0pO2Zvcih2YXIgZiBpbiBkLnBsdWdpbnMpInVuZGVmaW5lZCI9PQp0eXBlb2YgYS5wbHVnW2ZdPyhlPSExLGEucGx1Z1tmXT0hMSxqUXVlcnkuZ2V0U2NyaXB0KGQucGx1Z2luc1tmXSxmdW5jdGlvbigpe2EucGx1Z1tmXT0hMDtiKCl9KSk6MD09YS5wbHVnW2ZdJiYoZT0hMSk7ZSYmalF1ZXJ5KCIjIitjKS5tZWRpYWVsZW1lbnRwbGF5ZXIoalF1ZXJ5LmV4dGVuZChkLm9wdGlvbnMse3N1Y2Nlc3M6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBiKCl7dmFyIGI9alF1ZXJ5KGEpLmNsb3Nlc3QoIi5tZWpzX19pbm5lciIpO2EucGF1c2VkPyhiLmFkZENsYXNzKCJwYXVzaW5nIiksc2V0VGltZW91dChmdW5jdGlvbigpe2IuZmlsdGVyKCIucGF1c2luZyIpLnJlbW92ZUNsYXNzKCJwbGF5aW5nIikucmVtb3ZlQ2xhc3MoInBhdXNpbmciKS5hZGRDbGFzcygicGF1c2VkIil9LDEwMCkpOmIucmVtb3ZlQ2xhc3MoInBhdXNlZCIpLnJlbW92ZUNsYXNzKCJwYXVzaW5nIikuYWRkQ2xhc3MoInBsYXlpbmciKX1iKCk7YS5hZGRFdmVudExpc3RlbmVyKCJwbGF5IixiLCExKTsKYS5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIsYiwhMSk7Zy5hdHRyKCJhdXRvcGxheSIpJiZhLnBsYXkoKX19KSl9dmFyIGc9alF1ZXJ5KHRoaXMpLmFkZENsYXNzKCJkb25lIiksYzsoYz1nLmF0dHIoImlkIikpfHwoYz0ibWVqcy0iK2cuYXR0cigiZGF0YS1pZCIpKyItIithLmMrKyxnLmF0dHIoImlkIixjKSk7dmFyIGQ9e29wdGlvbnM6e30scGx1Z2luczp7fSxjc3M6W119LGUsaDtmb3IoZSBpbiBkKWlmKGg9Zy5hdHRyKCJkYXRhLW1lanMiK2UpKWRbZV09alF1ZXJ5LnBhcnNlSlNPTihoKTtiKCl9KX0oalF1ZXJ5KX0pO2EuZ3N8fCgidW5kZWZpbmVkIiE9PXR5cGVvZiBtZWpzY3NzJiZhLmNzc2xvYWQobWVqc2NzcyksYS5ncz1qUXVlcnkuZ2V0U2NyaXB0KG1lanNwYXRoLGZ1bmN0aW9uKCl7YS5ncz0hMDthLmluaXQoKTtqUXVlcnkoYS5pbml0KTtvbkFqYXhMb2FkKGEuaW5pdCl9KSl9KSgpOzwvc2NyaXB0Pg==&#034;&gt;&lt;/div&gt; &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;On voit effectivement que le r&#233;glage &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; au minimum donne le meilleur r&#233;sultat en terme de fluidit&#233; de mouvement m&#234;me si la vid&#233;o gomme les petites vibrations qui sont observables &#224; des &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; plus &#233;lev&#233;s. Le couple reste largement suffisant.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le logiciel&lt;/h2&gt;
&lt;p&gt;La pilotage du moteur pas-&#224;-pas est tr&#232;s facile. La broche 2 de l'Arduino connect&#233;e &#224; l'entr&#233;e DIR de l'EasyDriver permet de fixer le sens de rotation et la broche 3 connect&#233;e &#224; l'entr&#233;e STEP de l'EasyDriver permet d'avancer d'un &#181;Pas. Ces deux broches sont donc mises en sortie dans &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;setup()&lt;/code&gt; comme ceci.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;const int pinSens = 2; const int pinMicroPas = 3; void setup() { pinMode(pinSens, OUTPUT); pinMode(pinMicroPas, OUTPUT); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le jeu consiste ensuite &#224; choisir un sens de rotation en mettant &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;pinSens&lt;/code&gt; &#224; HIGH ou LOW puis &#224; encha&#238;ner &#224; une certaine cadence des HIGH et des LOW sur &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;pinMicroPas&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La cadence est d&#233;termin&#233;e par le d&#233;lai d'attente entre deux bagottages sur &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;pinMicroPas&lt;/code&gt;. Par exemple, si l'on veut que le pont accomplisse un tour complet en 2 minutes, soit 120 s, on calcule ce temps d'attente de la mani&#232;re suivante : 3200 &#181;Pas en 120 s donne un d&#233;lai de 120/3200 = 37,5 ms &#8771; 37 ms.&lt;/p&gt;
&lt;p&gt;Ainsi le programme le plus simple possible consiste &#224; faire tourner le moteur en permanence dans &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;loop()&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;void loop() { digitalWrite(pinMicroPas, LOW); digitalWrite(pinMicroPas, HIGH); delay(37); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Voici une vid&#233;o qui montre l'ex&#233;cution d'une s&#233;quence de d&#233;placement : positionnement en 100, puis 300, puis 200, puis 800, puis 1600, puis 1000 et enfin 2400. Dans la premi&#232;re partie, un d&#233;lai de 36ms entre deux &#181;Pas est utilis&#233;. Les &#181;Pas ne sont pas visibles. Dans la seconde on passe &#224; un d&#233;lai de 99ms, les &#181;Pas deviennent visibles. Enfin dans la 3e partie, le mouvement d'une position &#224; l'autre a une phase d'acc&#233;l&#233;ration pendant 0,5s en passant d'un d&#233;lai de 78ms &#224; 36ms par d&#233;cr&#233;ment de 3ms et une phase de d&#233;c&#233;l&#233;ration pendant 0,75s en passant d'un d&#233;lai de 36ms &#224; 99ms par incr&#233;ment de 3. Les phases d'acc&#233;l&#233;ration et de d&#233;c&#233;l&#233;ration sont l&#233;g&#232;rement hach&#233;es.&lt;/p&gt;
&lt;div class=&#034;spip_document_353 spip_document spip_documents spip_document_video&#034;&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;div class=&#034;video-intrinsic-wrapper&#034; style='height:0;width:640px;max-width:100%;padding-bottom:56.25%;position:relative;'&gt; &lt;div class=&#034;video-wrapper&#034; style=&#034;position: absolute;top:0;left:0;width:100%;height:100%;&#034;&gt; &lt;video class=&#034;mejs mejs-353&#034; data-id=&#034;d110361da115dd72f52c38af0431f1aa&#034; data-mejsoptions='{&#034;iconSprite&#034;: &#034;plugins-dist/medias/lib/mejs/mejs-controls.svg&#034;,&#034;alwaysShowControls&#034;: true,&#034;pluginPath&#034;:&#034;plugins-dist/medias/lib/mejs/&#034;,&#034;loop&#034;:false,&#034;videoWidth&#034;:&#034;100%&#034;,&#034;videoHeight&#034;:&#034;100%&#034;}' width=&#034;100%&#034; height=&#034;100%&#034; controls=&#034;controls&#034; preload=&#034;none&#034; &gt; &lt;source type=&#034;application/x-shockwave-flash&#034; src=&#034;http://www.youtube.com/v/XXFy7AJD_TA?version=3&amp;hl=fr_FR&amp;rel=0&#034; /&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/swf-d2c4d-75a7b.svg?1772798901' width='64' height='64' alt='Impossible de lire la video' /&gt; &lt;/video&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#034;base64javascript48149994769e2778f365884.98283324&#034; title=&#034;PHNjcmlwdD4gdmFyIG1lanNwYXRoPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudC1hbmQtcGxheWVyLm1pbi5qcz8xNzcyNzk1ODQwJyxtZWpzY3NzPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudHBsYXllci5taW4uY3NzPzE3NzI3OTU4NDAnOwp2YXIgbWVqc2xvYWRlcjsKKGZ1bmN0aW9uKCl7dmFyIGE9bWVqc2xvYWRlcjsidW5kZWZpbmVkIj09dHlwZW9mIGEmJihtZWpzbG9hZGVyPWE9e2dzOm51bGwscGx1Zzp7fSxjc3M6e30saW5pdDpudWxsLGM6MCxjc3Nsb2FkOm51bGx9KTthLmluaXR8fChhLmNzc2xvYWQ9ZnVuY3Rpb24oYyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNzc1tjXSl7YS5jc3NbY109ITA7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2IuaHJlZj1jO2IucmVsPSJzdHlsZXNoZWV0IjtiLnR5cGU9InRleHQvY3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGIpfX0sYS5pbml0PWZ1bmN0aW9uKCl7ITA9PT1hLmdzJiZmdW5jdGlvbihjKXtqUXVlcnkoImF1ZGlvLm1lanMsdmlkZW8ubWVqcyIpLm5vdCgiLmRvbmUsLm1lanNfX3BsYXllciIpLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dmFyIGU9ITAsaDtmb3IoaCBpbiBkLmNzcylhLmNzc2xvYWQoZC5jc3NbaF0pO2Zvcih2YXIgZiBpbiBkLnBsdWdpbnMpInVuZGVmaW5lZCI9PQp0eXBlb2YgYS5wbHVnW2ZdPyhlPSExLGEucGx1Z1tmXT0hMSxqUXVlcnkuZ2V0U2NyaXB0KGQucGx1Z2luc1tmXSxmdW5jdGlvbigpe2EucGx1Z1tmXT0hMDtiKCl9KSk6MD09YS5wbHVnW2ZdJiYoZT0hMSk7ZSYmalF1ZXJ5KCIjIitjKS5tZWRpYWVsZW1lbnRwbGF5ZXIoalF1ZXJ5LmV4dGVuZChkLm9wdGlvbnMse3N1Y2Nlc3M6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBiKCl7dmFyIGI9alF1ZXJ5KGEpLmNsb3Nlc3QoIi5tZWpzX19pbm5lciIpO2EucGF1c2VkPyhiLmFkZENsYXNzKCJwYXVzaW5nIiksc2V0VGltZW91dChmdW5jdGlvbigpe2IuZmlsdGVyKCIucGF1c2luZyIpLnJlbW92ZUNsYXNzKCJwbGF5aW5nIikucmVtb3ZlQ2xhc3MoInBhdXNpbmciKS5hZGRDbGFzcygicGF1c2VkIil9LDEwMCkpOmIucmVtb3ZlQ2xhc3MoInBhdXNlZCIpLnJlbW92ZUNsYXNzKCJwYXVzaW5nIikuYWRkQ2xhc3MoInBsYXlpbmciKX1iKCk7YS5hZGRFdmVudExpc3RlbmVyKCJwbGF5IixiLCExKTsKYS5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIsYiwhMSk7Zy5hdHRyKCJhdXRvcGxheSIpJiZhLnBsYXkoKX19KSl9dmFyIGc9alF1ZXJ5KHRoaXMpLmFkZENsYXNzKCJkb25lIiksYzsoYz1nLmF0dHIoImlkIikpfHwoYz0ibWVqcy0iK2cuYXR0cigiZGF0YS1pZCIpKyItIithLmMrKyxnLmF0dHIoImlkIixjKSk7dmFyIGQ9e29wdGlvbnM6e30scGx1Z2luczp7fSxjc3M6W119LGUsaDtmb3IoZSBpbiBkKWlmKGg9Zy5hdHRyKCJkYXRhLW1lanMiK2UpKWRbZV09alF1ZXJ5LnBhcnNlSlNPTihoKTtiKCl9KX0oalF1ZXJ5KX0pO2EuZ3N8fCgidW5kZWZpbmVkIiE9PXR5cGVvZiBtZWpzY3NzJiZhLmNzc2xvYWQobWVqc2NzcyksYS5ncz1qUXVlcnkuZ2V0U2NyaXB0KG1lanNwYXRoLGZ1bmN0aW9uKCl7YS5ncz0hMDthLmluaXQoKTtqUXVlcnkoYS5pbml0KTtvbkFqYXhMb2FkKGEuaW5pdCl9KSl9KSgpOzwvc2NyaXB0Pg==&#034;&gt;&lt;/div&gt; &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;L'EasyDriver remplit son office mais montre quelques limites pour les tr&#232;s faibles vitesses qui sont utilis&#233;es dans les phases d'acc&#233;l&#233;ration et de d&#233;c&#233;l&#233;ration. D'autres &lt;i&gt;breakout boards&lt;/i&gt; existent et la prochaine fois, nous verrons celle d&#233;velopp&#233;e par &lt;a href=&#034;http://www.pololu.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Pololu&lt;/a&gt; qui utilise un &lt;i&gt;Texas Instruments&lt;/i&gt; DRV8824 permettant 32 &#181;Pas.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>L'Easydriver v4.4</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article68</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article68</guid>
		<dc:date>2013-12-07T15:25:42Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>


		<dc:subject>Moteur pas-&#224;-pas</dc:subject>
		<dc:subject>Pont tournant</dc:subject>

		<description>
&lt;p&gt;Cet article fait suite &#224; mes premiers essais de pilotage des moteurs pas-&#224;-pas pour construire un point tournant qui n'avaient pas &#233;t&#233; couronn&#233;s de succ&#232;s. &lt;br class='autobr' /&gt;
Pour rappel, l'objectif est de mettre en &#339;uvre la motorisation d'un pont tournant avec un moteur pas-&#224;-pas bipolaire sans r&#233;duction m&#233;canique. On trouve dans le commerce des moteurs pas-&#224;-pas &#224; 200 pas ou 400 pas par tour. Vous trouverez les informations de base dans l'article Wikip&#233;dia mais surtout dans cet excellent article de Nicolas (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique19" rel="directory"&gt;La technologie&lt;/a&gt;

/ 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot7" rel="tag"&gt;Moteur pas-&#224;-pas&lt;/a&gt;, 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot11" rel="tag"&gt;Pont tournant&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Cet article fait suite &#224; mes &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article39' class=&#034;spip_in&#034;&gt;premiers essais de pilotage des moteurs pas-&#224;-pas pour construire un point tournant&lt;/a&gt; qui n'avaient pas &#233;t&#233; couronn&#233;s de succ&#232;s.&lt;/p&gt;
&lt;p&gt;Pour rappel, l'objectif est de mettre en &#339;uvre la motorisation d'un pont tournant avec un moteur pas-&#224;-pas bipolaire &lt;strong&gt;sans r&#233;duction m&#233;canique&lt;/strong&gt;. On trouve dans le commerce des moteurs pas-&#224;-pas &#224; 200 pas ou 400 pas par tour. Vous trouverez les informations de base dans l'&lt;a href=&#034;http://fr.wikipedia.org/wiki/Moteur_pas_&#224;_pas&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;article Wikip&#233;dia&lt;/a&gt; mais surtout &lt;a href=&#034;http://nicolas.marchildon.net/les-moteurs-pas-a-pas/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;dans cet excellent article de Nicolas Marchildon&lt;/a&gt; que je trouve particuli&#232;rement didactique. le pilotage de tels moteurs n'est pas compliqu&#233; &#224; condition de disposer d'un carte &#224; microcontr&#244;leur. En effet, passer d'un pas au suivant est r&#233;alis&#233; en envoyant une s&#233;quence de tensions sur les deux bobines du moteur. Plus les s&#233;quences sont rapides et plus le moteur tourne vite.&lt;/p&gt;
&lt;p&gt;Dans &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article39' class=&#034;spip_in&#034;&gt;Moteur pas-&#224;-pas et pont tournant&lt;/a&gt; &#187;, j'avais essay&#233; de piloter le moteur par micro-pas en pilotant chaque bobine par une PWM &#224; 20KHz, dont la rapport cyclique &#233;voluait en sinus, les deux PWM &#233;tant d&#233;cal&#233;es de &#8719;/2. L'exp&#233;rience avait eu un succ&#232;s mitig&#233;. En effet, les micro-pas sont d&#233;finis par le courant dans chaque bobine du moteur pas-&#224;-pas et en pilotant via une PWM, on pilote le courant en aveugle sans aucune garantie que lui m&#234;me &#233;volue en sinus.&lt;/p&gt;
&lt;p&gt;Or, des circuits int&#233;gr&#233;s qui pilotent directement le courant, en le mesurant et en le r&#233;gulant afin de permettre un mouvement par micro-pas pr&#233;cis, existent. L'un des sp&#233;cialistes est &lt;i&gt;Allegro Microsystems&lt;/i&gt; qui propose &lt;a href=&#034;http://www.allegromicro.com/en/Products/Motor-Driver-And-Interface-ICs/Bipolar-Stepper-Motor-Drivers.aspx&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;toute une gamme de circuits d&#233;di&#233;s au moteurs pas-&#224;-pas bipolaires&lt;/a&gt; avec un nombre de micro-pas pouvant aller jusqu'&#224; 16. Un deuxi&#232;me acteur majeur est &lt;i&gt;Texas Instruments&lt;/i&gt; avec la &lt;a href=&#034;http://www.ti.com/lsds/ti/amplifiers-linear/stepper-driver-products.page&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;gamme de circuits DRV88xx&lt;/a&gt; avec un nombre de micro-pas pouvant aller jusqu'&#224; 32. Enfin, &lt;i&gt;Toshiba&lt;/i&gt; propose &#233;galement des &lt;a href=&#034;http://www.toshiba.com/taec/Catalog/Line.do?familyid=15&amp;subfamilyid=7273&amp;lineid=382&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;composants dans la s&#233;rie TD65xx&lt;/a&gt; dont certains montent &#224; 32 micro-pas.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;sentation de l'EasyDriver v4.4&lt;/h2&gt;
&lt;p&gt;L'EasyDriver v4.4 est une &lt;i&gt;breakout board&lt;/i&gt; en OpenHardware con&#231;ue en coop&#233;ration entre &lt;a href=&#034;https://www.sparkfun.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;SparkFun&lt;/a&gt; et &lt;a href=&#034;http://www.schmalzhaus.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Brian Schmalz&lt;/a&gt;. Une &lt;i&gt;breakout board&lt;/i&gt; est une carte minimaliste dont le but est de faciliter l'int&#233;gration d'un composant : alimentation, r&#233;sistances, condensateurs indispensables au fonctionnement et boches au pas de 2,54mm pour pouvoir la mettre en &#339;uvre sur une &lt;i&gt;breadboard&lt;/i&gt;. Elle est donc peu ch&#232;re, une dizaine d'Euros en France.&lt;/p&gt;
&lt;p&gt;Le composant central est un &lt;i&gt;Allegro A3967&lt;/i&gt;, dont &lt;a href=&#034;http://www.allegromicro.com/~/media/Files/Datasheets/A3967-Datasheet.ashx&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;voici la datasheet&lt;/a&gt;, qui permet 8 micro-pas. Ce n'est pas ce qui se fait de mieux et les essais montreront si, oui ou non, 8 micro-pas suffisent. Deux choses qu'il faut savoir :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Lorsque l'ensemble est sous tension, le moteur est aliment&#233; et sa position est fermement tenue ;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Il ne faut en aucun cas d&#233;brancher le moteur en laissant l'EasyDriver sous tension, il pourrait en r&#233;sulter la destruction de l'Allegro&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La carte mesure 49 mm sur 21 mm et se pr&#233;sente comme ceci :&lt;/p&gt;
&lt;div class='spip_document_343 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH356/easydriverv44_2-31b75.jpg?1692343798' width='500' height='356' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le r&#233;gulateur 5V fournit le 5V &#224; la logique de l'&lt;i&gt;Allegro&lt;/i&gt; &#224; partir de la tension d'alimentation du moteur ;&lt;/li&gt;&lt;li&gt; Le potentiom&#232;tre permet de r&#233;gler le courant maximum. Plus le courant est &#233;lev&#233; et plus le moteur a de couple mais moins le mouvement d'un micro-pas au suivant sera doux ;&lt;/li&gt;&lt;li&gt; Pour conna&#238;tre la valeur de ce courant, il suffit de mesurer la tension de r&#233;f&#233;rence &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; au point de mesure d'une part, et la r&#233;sistance de capture de courant &lt;i&gt;R&lt;sub&gt;s&lt;/sub&gt;&lt;/i&gt; d'autre part. Le courant maximum &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; est donn&#233; par la formule : &lt;i&gt;I&lt;sub&gt;max&lt;/sub&gt;&lt;/i&gt; = &lt;i&gt;V&lt;sub&gt;ref&lt;/sub&gt;&lt;/i&gt; / 8&lt;i&gt;R&lt;sub&gt;s&lt;/sub&gt;&lt;/i&gt; ;&lt;/li&gt;&lt;li&gt; Enfin la carte est munie d'un condensateur de filtrage de 47&#181;F qui prot&#232;ge l'&lt;i&gt;Allegro&lt;/i&gt; des transitoires lors de la mise sous tension.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La carte est pr&#233;vue pour s'enficher sur une carte m&#232;re o&#249; sur une &lt;i&gt;breadboard&lt;/i&gt;. Elle poss&#232;de 17 connexions dont le r&#244;le est donn&#233; &#224; la figure ci-dessous.&lt;/p&gt;
&lt;div class='spip_document_339 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH375/easydriverv44_1-2-fa88b.jpg?1692343798' width='500' height='375' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le moteur pas-&#224;-pas est connect&#233; via les 4 broches en haut &#224; gauche ;&lt;/li&gt;&lt;li&gt; L'alimentation du moteur est connect&#233;e sur les deux broches en haut &#224; droite (entre 7V et 30V). Il est possible d'alimenter le moteur avec une tension plus &#233;lev&#233;e que celle qu'il supporte &lt;strong&gt;&#224; condition de r&#233;gler le courant &#224; une valeur inf&#233;rieure ou &#233;gale au courant support&#233; par le moteur&lt;/strong&gt; ;&lt;/li&gt;&lt;li&gt; Les diff&#233;rentes masses sont reli&#233;es entre elles et l'une au moins devra &#234;tre connect&#233;e &#224; la masse de la carte microcontr&#244;leur employ&#233;e (Arduino ou autre) ;&lt;/li&gt;&lt;li&gt; RESET, ENABLE et SLP (pour SLEEP) permettent respectivement de faire une r&#233;initialisation de l'&lt;i&gt;Allegro&lt;/i&gt;, de l'activer ou de le mettre en veille ;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; RESET doit &#234;tre amen&#233; &#224; 0 puis &#224; 1 pour r&#233;initialiser l'&lt;i&gt;Allegro&lt;/i&gt;. Les deux bobines sont aliment&#233;es &#224; 70,71% et le rotor se place sur un demi-pas. L'EasyDriver tire le RESET &#224; 5V via une r&#233;sistance de 10k&#937;. On peut donc laisser cette broche en l'air sans soucis ;&lt;/li&gt;&lt;li&gt; ENABLE doit &#234;tre constamment &#224; l'&#233;tat 0 (bas) pour que l'&lt;i&gt;Allegro&lt;/i&gt; pilote les bobines du moteur. L'EasyDriver tire ENABLE &#224; 0V via une r&#233;sistance de 10k&#937;. On peut donc aussi laisser cette broche en l'air sans soucis ;&lt;/li&gt;&lt;li&gt; Enfin SLP peut &#234;tre mise &#224; l'&#233;tat bas pour d&#233;sactiver la majeure partie de la circuiterie interne de l'&lt;i&gt;Allegro&lt;/i&gt;. Ici encore, l'EasyDriver tire SLP &#224; 5V via une r&#233;sistance de 10k&#937;. On peut &#233;galement laisser cette broche en l'air sans soucis.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; MS1 et MS2 permettent de fixer le nombre de micro-pas entre 2 pas selon la table suivante. Ici aussi l'EasyDriver tire MS1 et MS2 &#224; 5V par l'interm&#233;diaire de r&#233;istances de 10k&#937;. Par cons&#233;quent, en laissant ces broches en l'air, la r&#233;solution de 8 micro-pas par pas est s&#233;lectionn&#233;e ;&lt;/li&gt;&lt;/ul&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;MS2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;MS1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mode&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Pas entiers&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1/2 pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;4 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;8 micro-pas&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; PFD r&#232;gle la vitesse &#224; laquelle le courant est r&#233;duit. Par d&#233;faut cette r&#233;duction est lente (slow decay). &#192; priori ce r&#233;glage convient aux vitesses lentes et d'apr&#232;s le sch&#233;ma du EasyDriver, il n'est n&#233;cessaire de s'en occuper que pour augmenter les performances dans le cas d'une vitesse de rotation &#233;lev&#233;e ;&lt;/li&gt;&lt;li&gt; DIR fixe le sens de rotation du moteur. Nous allons donc piloter cette broche pour notre application ;&lt;/li&gt;&lt;li&gt; STEP permet de faire avancer le moteur au micro-pas suivant. Une transition de 0 &#224; 1 provoque cette avance. Cette broche sera &#233;galement pilot&#233;e.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;&#201;quipons l'engin&lt;/h2&gt;
&lt;p&gt;L'EasyDriver arrive nu, il faut donc le munir de connecteurs pour l'utiliser. J'ai choisi des connecteurs avec d&#233;trompeurs et verrouillage pour le moteur et l'alimentation du moteur et des barrettes de broches pour les autres. Le tout au pas de 2,54mm. Utiliser un connecteur digne de ce nom pour la connexion vers le moteur garantit qu'il n'y aura pas de d&#233;connexion intempestive par arrachage de fil et donc pas de destruction de l'&lt;i&gt;Allegro&lt;/i&gt;.&lt;/p&gt;
&lt;div class='spip_document_344 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH301/connecteurs-fe848.jpg?1692343798' width='500' height='301' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_345 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH277/connecteurs2-04e79.jpg?1692343798' width='500' height='277' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_347 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH360/connecteurs3-3b4f0.jpg?1692343798' width='500' height='360' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Il reste maintenant &#224; connecter tout cela &#224; un moteur et &#224; un Arduino pour faire quelques essais.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>T&#233;moins de positions : la mise en &#339;uvre</title>
		<link>https://modelleisenbahn.triskell.org/spip.php?article66</link>
		<guid isPermaLink="true">https://modelleisenbahn.triskell.org/spip.php?article66</guid>
		<dc:date>2013-12-03T19:28:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Jean-Luc</dc:creator>


		<dc:subject>LED</dc:subject>
		<dc:subject>Arduino</dc:subject>

		<description>
&lt;p&gt;Nous avons vu la technique du Charlieplexing dans &#171; T&#233;moins de positions : le Charlieplexing &#187;, nous allons maintenant l'appliquer &#224; un syst&#232;me &#224; 5 broches de pilotage et 16 LED puis l'int&#233;grer dans notre application. Charlieplexing des 16 LED t&#233;moins [1] &lt;br class='autobr' /&gt;
Le sch&#233;ma pour allumer 16 LED est le suivant. &lt;br class='autobr' /&gt;
On peut noter que le sch&#233;ma est incomplet. En effet, avec 5 broches, il est possible de piloter 20 LED. Ici les couples de broches 0-3 et 1-4 sont manquants et nous n'allons donc pas les (&#8230;)&lt;/p&gt;


-
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?rubrique22" rel="directory"&gt;Man&#339;uvre des aiguilles avec des servo-moteurs&lt;/a&gt;

/ 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot9" rel="tag"&gt;LED&lt;/a&gt;, 
&lt;a href="https://modelleisenbahn.triskell.org/spip.php?mot10" rel="tag"&gt;Arduino&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Nous avons vu la technique du Charlieplexing dans &#171; &lt;a href='https://modelleisenbahn.triskell.org/spip.php?article64' class=&#034;spip_in&#034;&gt;T&#233;moins de positions : le Charlieplexing&lt;/a&gt; &#187;, nous allons maintenant l'appliquer &#224; un syst&#232;me &#224; 5 broches de pilotage et 16 LED puis l'int&#233;grer dans notre application.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Charlieplexing des 16 LED t&#233;moins&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;On peut noter que plus le nombre de LED est important, plus le temps (&#8230;)&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Le sch&#233;ma pour allumer 16 LED est le suivant.&lt;/p&gt;
&lt;div class='spip_document_329 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;41&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH328/charlie5-6e473.png?1692224382' width='500' height='328' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-329 '&gt;&lt;strong&gt;Charlieplexing avec 5 broches et 16 LED
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;On peut noter que le sch&#233;ma est incomplet. En effet, avec 5 broches, il est possible de piloter 20 LED. Ici les couples de broches 0-3 et 1-4 sont manquants et nous n'allons donc pas les placer dans notre table d'&#233;tat des broches.&lt;/p&gt;
&lt;p&gt;Voici donc la table d'&#233;tat des broches pour chaque LED&lt;/p&gt;
&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;&lt;strong&gt;broche 0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;broche 1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;broche 2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;broche 3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;broche 4&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D10&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D11&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D12&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D13&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;strong&gt;D14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;strong&gt;D15&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;Z&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nous allons donc construire cette table en C comme nous l'avons fait pour la Charlieplexing avec 3 broches de commande.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;const byte etatSortiePourLED[16][5] = { { OUT0, OUT1, INZ, INZ, INZ }, /* D0 */ { OUT1, OUT0, INZ, INZ, INZ }, /* D1 */ { INZ, OUT0, OUT1, INZ, INZ }, /* D2 */ { INZ, OUT1, OUT0, INZ, INZ }, /* D3 */ { INZ, INZ, OUT0, OUT1, INZ }, /* D4 */ { INZ, INZ, OUT1, OUT0, INZ }, /* D5 */ { INZ, INZ, INZ, OUT0, OUT1 }, /* D6 */ { INZ, INZ, INZ, OUT1, OUT0 }, /* D7 */ { OUT0, INZ, OUT1, INZ, INZ }, /* D8 */ { OUT1, INZ, OUT0, INZ, INZ }, /* D9 */ { INZ, INZ, OUT0, INZ, OUT1 }, /* D10 */ { INZ, INZ, OUT1, INZ, OUT0 }, /* D11 */ { INZ, OUT0, INZ, OUT1, INZ }, /* D12 */ { INZ, OUT1, INZ, OUT0, INZ }, /* D13 */ { OUT0, INZ, INZ, INZ, OUT1 }, /* D14 */ { OUT1, INZ, INZ, INZ, OUT0 } /* D15 */ };&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La fonction &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;programmeBroche(...)&lt;/code&gt; reste la m&#234;me par contre la fonction &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;gereLED(...)&lt;/code&gt; doit &#234;tre modifi&#233;e puisque l'on passe de 3 &#224; 5 broches de commande.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;C&#034; class='spip_code spip_code_block language-C' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;void gereLED(int num) { if (etatLED[num] == ALLUME) { programmeBroche(8,etatSortiePourLED[num][0]); programmeBroche(9,etatSortiePourLED[num][1]); programmeBroche(10,etatSortiePourLED[num][2]); programmeBroche(11,etatSortiePourLED[num][3]); programmeBroche(12,etatSortiePourLED[num][4]); } else { programmeBroche(8,INZ); programmeBroche(9,INZ); programmeBroche(10,INZ); programmeBroche(11,INZ); programmeBroche(12,INZ); } }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et le tableau &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;etatLED&lt;/code&gt; doit &#234;tre agrandi pour contenir 16 &#233;l&#233;ments.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Int&#233;gration dans l'application&lt;/h2&gt;
&lt;p&gt;Pour int&#233;grer l'allumage des t&#233;moins dans l'application il faut tout d'abord ins&#233;rer l'appel &#224; &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;gereLED()&lt;/code&gt; dans &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;loop()&lt;/code&gt;. Nous faisons face &#224; un premier probl&#232;me. Pour que les servomoteurs pivotent suffisamment lentement, l'attente est de 5ms. Cela conduit &#224; un balayage des 16 LED en 80ms ce qui est trop lent pour que la persistance r&#233;tinienne op&#232;re. Il faudrait balayer au moins 4 fois plus souvent. Par cons&#233;quent, le d&#233;lai dans &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;loop()&lt;/code&gt; va &#234;tre r&#233;duit &#224; 1ms et la gestion des poussoirs et des servomoteurs sera appel&#233;e toutes les 5 fois alors que la gestion des LED sera appel&#233;e toutes les fois. Nous allons donc ajouter un compteur &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;compteurGestionServos&lt;/code&gt; initialis&#233; &#224; 0. Comme ceci.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_block language-cpp' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;void loop() { compteurGestionServos++; if (compteurGestionServos == 5) { compteurGestionServos = 0; ... /* code de gestion des servos et des poussoir &#224; l'identique */ ... } gereLED(numLED); numLED++; if (numLED == 16) numLED = 0; delay(1); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il suffit ensuite de changer l'&#233;tat des LED en ALLUME ou ETEINT dans le tableau &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;etatLED&lt;/code&gt; en fonction des &#233;v&#233;nements. Deux fonctions membre de la classe &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;DescripteurServo&lt;/code&gt; sont concern&#233;es : &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;evenementServo(...)&lt;/code&gt; o&#249; on va &#233;teindre la LED de la position que l'on quitte et &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;gereServo()&lt;/code&gt; o&#249; on va allumer la LED de la position que l'on atteint. Dans le tableau &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;etatLED&lt;/code&gt;, les LED sont alternativement rouges et vertes et par cons&#233;quent la paire de LED correspondant &#224; un servomoteur est &#224; la position &lt;i&gt;num&#233;ro de servo&lt;/i&gt; &#215; 2 (angle minimum) et &lt;i&gt;num&#233;ro de servo&lt;/i&gt; &#215; 2 + 1 (angle maximum).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_block language-cpp' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;void evenementServo() { cptArret = -1; switch (etatServo) { case SERVO_A_ANGLE_MIN: etatLED[numServo * 2] = ETEINT; objetServo.attach(pin); case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN: vitesse = 1; etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX; break; case SERVO_A_ANGLE_MAX: etatLED[numServo * 2 + 1] = ETEINT; objetServo.attach(pin); case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX: vitesse = -1; etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN; break; } }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans la fonction membre &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;gereServo()&lt;/code&gt;, la partie qui s'occupe du passage de la vitesse &#224; 0 quand les angles minimum ou maximum sont atteint est modifi&#233;e comme suit :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_block language-cpp' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;if (! reglageEnCours || etatServo == SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN || etatServo == SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX) { if (angle &gt; angleMax) { angle = angleMax; arreteServo(); etatServo = SERVO_A_ANGLE_MAX; etatLED[numServo * 2 + 1] = ALLUME; } else if (angle &lt; angleMin) { angle = angleMin; arreteServo(); etatServo = SERVO_A_ANGLE_MIN; etatLED[numServo * 2] = ALLUME; } }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il ne faut pas oublier d'allumer la LED correspondant &#224; l'angle minimum dans la fonction membre &lt;code data-raccourci=&#034;code&#034; class='spip_code spip_code_inline' dir='ltr'&gt;connecte(...)&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-raccourci=&#034;code&#034; data-language=&#034;cpp&#034; class='spip_code spip_code_block language-cpp' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;/* allume la LED correspondante */ etatLED[numServo * 2] = ALLUME;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous sommes parvenus au bout de ce d&#233;veloppement. Voici le sketch de l'application compl&#232;te &#224; t&#233;l&#233;charger.&lt;/p&gt;
&lt;div class='spip_document_337 spip_document spip_documents spip_document_file spip_document_avec_legende' data-legende-len=&#034;123&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://modelleisenbahn.triskell.org/IMG/zip/Huit_boutons_huit_servos_detach_reglage_eeprom_temoins_cpp-2.zip' class=&#034; spip_doc_lien&#034; title='Zip - 4.4 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/zip-f045b.svg?1772799586' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-337 '&gt;&lt;strong&gt;Sketch de l'application compl&#232;te
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-337 '&gt;mis &#224; jour en version 1.1. La position des servos est d&#233;sormais m&#233;moris&#233;e dans l'EEPROM.
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_341 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;214&#034; data-legende-lenx=&#034;xxx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://modelleisenbahn.triskell.org/IMG/png/schema_fritzing_8s8p-2.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L500xH454/schema_fritzing_8s8p-2-903fb.png?1692224382' width='500' height='454' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-341 '&gt;&lt;strong&gt;Dessin du montage complet
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-341 '&gt;&lt;strong&gt;Attention : le montage montre les 8 servomoteurs aliment&#233;s par l'Arduino. Ce n'est pas possible en pratique et il est n&#233;cessaire d'avoir une alimentation 5V s&#233;par&#233;e pour les servomoteurs&lt;/strong&gt;
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_342 spip_document spip_documents spip_document_file spip_document_avec_legende' data-legende-len=&#034;235&#034; data-legende-lenx=&#034;xxx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://modelleisenbahn.triskell.org/IMG/pdf/schema_fritzing_8s8p.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 2.4 Mio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1772797407' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-342 '&gt;&lt;strong&gt;Dessin du montage complet &#224; t&#233;l&#233;charger en PDF
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-342 '&gt;&lt;strong&gt;Attention : le montage montre les 8 servomoteurs aliment&#233;s par l'Arduino. Ce n'est pas possible en pratique et il est n&#233;cessaire d'avoir une alimentation 5V s&#233;par&#233;e pour les servomoteurs&lt;/strong&gt;
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Ainsi qu'une vid&#233;o de d&#233;monstration.&lt;/p&gt;
&lt;div class=&#034;spip_document_336 spip_document spip_documents spip_document_video spip_document_avec_legende&#034; data-legende-len=&#034;53&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;div class=&#034;video-intrinsic-wrapper&#034; style='height:0;width:640px;max-width:100%;padding-bottom:56.25%;position:relative;'&gt; &lt;div class=&#034;video-wrapper&#034; style=&#034;position: absolute;top:0;left:0;width:100%;height:100%;&#034;&gt; &lt;video class=&#034;mejs mejs-336&#034; data-id=&#034;232d689cc7c6fedb727a86ce65db3e91&#034; data-mejsoptions='{&#034;iconSprite&#034;: &#034;plugins-dist/medias/lib/mejs/mejs-controls.svg&#034;,&#034;alwaysShowControls&#034;: true,&#034;pluginPath&#034;:&#034;plugins-dist/medias/lib/mejs/&#034;,&#034;loop&#034;:false,&#034;videoWidth&#034;:&#034;100%&#034;,&#034;videoHeight&#034;:&#034;100%&#034;}' width=&#034;100%&#034; height=&#034;100%&#034; controls=&#034;controls&#034; preload=&#034;none&#034; &gt; &lt;source type=&#034;application/x-shockwave-flash&#034; src=&#034;http://www.youtube.com/v/bMmDTduT-N8?hl=fr_FR&amp;version=3&amp;rel=0&#034; /&gt; &lt;img src='https://modelleisenbahn.triskell.org/local/cache-vignettes/L64xH64/swf-d2c4d-75a7b.svg?1772798901' width='64' height='64' alt='Impossible de lire la video' /&gt; &lt;/video&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-336 '&gt;&lt;strong&gt;D&#233;monstration de l'application compl&#232;te et termin&#233;e
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;
&lt;div class=&#034;base64javascript48149994769e2778f365884.98283324&#034; title=&#034;PHNjcmlwdD4gdmFyIG1lanNwYXRoPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudC1hbmQtcGxheWVyLm1pbi5qcz8xNzcyNzk1ODQwJyxtZWpzY3NzPSdwbHVnaW5zLWRpc3QvbWVkaWFzL2xpYi9tZWpzL21lZGlhZWxlbWVudHBsYXllci5taW4uY3NzPzE3NzI3OTU4NDAnOwp2YXIgbWVqc2xvYWRlcjsKKGZ1bmN0aW9uKCl7dmFyIGE9bWVqc2xvYWRlcjsidW5kZWZpbmVkIj09dHlwZW9mIGEmJihtZWpzbG9hZGVyPWE9e2dzOm51bGwscGx1Zzp7fSxjc3M6e30saW5pdDpudWxsLGM6MCxjc3Nsb2FkOm51bGx9KTthLmluaXR8fChhLmNzc2xvYWQ9ZnVuY3Rpb24oYyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBhLmNzc1tjXSl7YS5jc3NbY109ITA7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2IuaHJlZj1jO2IucmVsPSJzdHlsZXNoZWV0IjtiLnR5cGU9InRleHQvY3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGIpfX0sYS5pbml0PWZ1bmN0aW9uKCl7ITA9PT1hLmdzJiZmdW5jdGlvbihjKXtqUXVlcnkoImF1ZGlvLm1lanMsdmlkZW8ubWVqcyIpLm5vdCgiLmRvbmUsLm1lanNfX3BsYXllciIpLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7dmFyIGU9ITAsaDtmb3IoaCBpbiBkLmNzcylhLmNzc2xvYWQoZC5jc3NbaF0pO2Zvcih2YXIgZiBpbiBkLnBsdWdpbnMpInVuZGVmaW5lZCI9PQp0eXBlb2YgYS5wbHVnW2ZdPyhlPSExLGEucGx1Z1tmXT0hMSxqUXVlcnkuZ2V0U2NyaXB0KGQucGx1Z2luc1tmXSxmdW5jdGlvbigpe2EucGx1Z1tmXT0hMDtiKCl9KSk6MD09YS5wbHVnW2ZdJiYoZT0hMSk7ZSYmalF1ZXJ5KCIjIitjKS5tZWRpYWVsZW1lbnRwbGF5ZXIoalF1ZXJ5LmV4dGVuZChkLm9wdGlvbnMse3N1Y2Nlc3M6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBiKCl7dmFyIGI9alF1ZXJ5KGEpLmNsb3Nlc3QoIi5tZWpzX19pbm5lciIpO2EucGF1c2VkPyhiLmFkZENsYXNzKCJwYXVzaW5nIiksc2V0VGltZW91dChmdW5jdGlvbigpe2IuZmlsdGVyKCIucGF1c2luZyIpLnJlbW92ZUNsYXNzKCJwbGF5aW5nIikucmVtb3ZlQ2xhc3MoInBhdXNpbmciKS5hZGRDbGFzcygicGF1c2VkIil9LDEwMCkpOmIucmVtb3ZlQ2xhc3MoInBhdXNlZCIpLnJlbW92ZUNsYXNzKCJwYXVzaW5nIikuYWRkQ2xhc3MoInBsYXlpbmciKX1iKCk7YS5hZGRFdmVudExpc3RlbmVyKCJwbGF5IixiLCExKTsKYS5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIixiLCExKTthLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlZCIsYiwhMSk7Zy5hdHRyKCJhdXRvcGxheSIpJiZhLnBsYXkoKX19KSl9dmFyIGc9alF1ZXJ5KHRoaXMpLmFkZENsYXNzKCJkb25lIiksYzsoYz1nLmF0dHIoImlkIikpfHwoYz0ibWVqcy0iK2cuYXR0cigiZGF0YS1pZCIpKyItIithLmMrKyxnLmF0dHIoImlkIixjKSk7dmFyIGQ9e29wdGlvbnM6e30scGx1Z2luczp7fSxjc3M6W119LGUsaDtmb3IoZSBpbiBkKWlmKGg9Zy5hdHRyKCJkYXRhLW1lanMiK2UpKWRbZV09alF1ZXJ5LnBhcnNlSlNPTihoKTtiKCl9KX0oalF1ZXJ5KX0pO2EuZ3N8fCgidW5kZWZpbmVkIiE9PXR5cGVvZiBtZWpzY3NzJiZhLmNzc2xvYWQobWVqc2NzcyksYS5ncz1qUXVlcnkuZ2V0U2NyaXB0KG1lanNwYXRoLGZ1bmN0aW9uKCl7YS5ncz0hMDthLmluaXQoKTtqUXVlcnkoYS5pbml0KTtvbkFqYXhMb2FkKGEuaW5pdCl9KSl9KSgpOzwvc2NyaXB0Pg==&#034;&gt;&lt;/div&gt; &lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb2-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;On peut noter que plus le nombre de LED est important, plus le temps d'allumage sur un cycle de balayage devient faible. En pratique, la luminosit&#233; n'est pas beaucoup plus faible avec 16 LED. Pour un plus grand nombre de LED, il peut &#234;tre n&#233;cessaire de diminuer la valeur des r&#233;sistances sans toutefois d&#233;passer les capacit&#233;s des entr&#233;es/sorties du micro-contr&#244;leur&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
