Wiki source code of Dual H-Bridge Motor Driver
Last modified by Eric Nantel on 2023/02/02 15:06
Hide last authors
![]() |
1.1 | 1 | {{html wiki="false" clean="true"}} |
![]() |
8.1 | 2 | <body><table border="0" cellpadding="0" cellspacing="0" > |
3 | <tbody><tr> | ||
4 | <td valign="top" ><font size="2" face="verdana"><strong>Dual | ||
5 | H Bridge Motor Driver.</strong></font><p><font size="2" face="verdana"><strong>01.22.04</strong></font></p> | ||
6 | <p><font size="2" face="verdana">This is a step-by-step procedure of | ||
7 | connecting a Lynxmotion Dual H-Bridge motor driver to the OOPic-R | ||
8 | microcontroller. These two products were designed at about the same | ||
9 | time, but a misunderstanding of the actual pinout for the connector | ||
10 | resulted in a mismatch. However it's not a difficult fix. Follow the | ||
11 | instructions below to get your project up and running quickly. </font></p> | ||
12 | </td> | ||
13 | <td align="center" valign="bottom" width="320"><img src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/wheeled-tracked/dual-h-bridge-motor-driver/WebHome/dhbmd01.jpg" border="2" hspace="10" ><br> | ||
14 | <font size="2" face="verdana"><strong>Finished Project</strong></font></td> | ||
15 | </tr> | ||
16 | <tr> | ||
17 | <td colspan="2" > </td> | ||
18 | </tr> | ||
19 | <tr> | ||
20 | <td valign="top" ><font size="2" face="verdana"><b>Step 1.</b> Plug | ||
21 | in the +5vdc / GND connector (red and black wires) as shown. If | ||
22 | you are already using the serial LCD port, then any I/O bus connector | ||
23 | with +5vdc available can be used. Take care not to install this | ||
24 | backwards.</font></td> | ||
25 | <td align="center" valign="bottom" ><img src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/wheeled-tracked/dual-h-bridge-motor-driver/WebHome/dhbmd05.jpg" border="2" hspace="10" ><br> | ||
26 | <font size="2" face="verdana">Figure 1-1.</font></td> | ||
27 | </tr> | ||
28 | <tr> | ||
29 | <td colspan="2" > </td> | ||
30 | </tr> | ||
31 | <tr> | ||
32 | <td valign="top" ><font size="2" face="verdana"><b>Step | ||
33 | 2.</b> You need to rearrange some of the wires, and to do so you must unplug | ||
34 | them from the black housings. Use a hobby knife and gently slide | ||
35 | it under the tab holding the wire in. Lift the tab and slide the wire | ||
36 | out. Don't bend it too far as damage could result. You will need to remove the following wires:<br> | ||
37 | </font> | ||
38 | <div align="center"> | ||
39 | <center> | ||
40 | <table border="1" bordercolor="#FFFFFF"> | ||
41 | <tbody><tr> | ||
42 | <td bordercolor="#FFFFFF" colspan="2" align="center"><font size="2" face="Verdana">4-wire | ||
43 | housing</font></td> | ||
44 | </tr> | ||
45 | <tr> | ||
46 | <td align="center" bordercolor="#808080" bgcolor="#C0C0C0"><font size="2" face="Verdana">Wire | ||
47 | Color</font></td> | ||
48 | <td align="center" bordercolor="#808080" bgcolor="#C0C0C0"><font size="2" face="Verdana">From | ||
49 | DHB</font></td> | ||
50 | </tr> | ||
51 | <tr> | ||
52 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">Brown</font></td> | ||
53 | <td bordercolor="#C0C0C0"><font size="2" face="verdana"> (A (-) in)</font></td> | ||
54 | </tr> | ||
55 | <tr> | ||
56 | <td bordercolor="#C0C0C0"><font size="2" face="verdana"> | ||
57 | Dark Blue</font></td> | ||
58 | <td bordercolor="#C0C0C0"><font size="2" face="verdana"> (B (+) in)</font></td> | ||
59 | </tr> | ||
60 | <tr> | ||
61 | <td bordercolor="#C0C0C0"><font size="2" face="verdana"> | ||
62 | Pink</font></td> | ||
63 | <td bordercolor="#C0C0C0"><font size="2" face="verdana"> (B (-) in)</font></td> | ||
64 | </tr> | ||
65 | <tr> | ||
66 | <td bordercolor="#FFFFFF" colspan="2" align="center"><font size="2" face="Verdana">2-wire | ||
67 | housing</font></td> | ||
68 | </tr> | ||
69 | <tr> | ||
70 | <td align="center" bordercolor="#808080" bgcolor="#C0C0C0"><font size="2" face="Verdana">Wire | ||
71 | Color</font></td> | ||
72 | <td align="center" bordercolor="#808080" bgcolor="#C0C0C0"><font size="2" face="Verdana">From | ||
73 | DHB</font></td> | ||
74 | </tr> | ||
75 | <tr> | ||
76 | <td bordercolor="#C0C0C0"><font size="2" face="verdana"> | ||
77 | Yellow</font></td> | ||
78 | <td bordercolor="#C0C0C0"><font size="2" face="verdana"> (A enable)</font></td> | ||
79 | </tr> | ||
80 | <tr> | ||
81 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">Light | ||
82 | Blue *</font></td> | ||
83 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">(B | ||
84 | enable)</font></td> | ||
85 | </tr> | ||
86 | <tr> | ||
87 | <td bordercolor="#FFFFFF" colspan="2" align="center"><font size="2" face="Verdana">Table | ||
88 | 2-1</font></td> | ||
89 | </tr> | ||
90 | </tbody></table> | ||
91 | </center> | ||
92 | </div> | ||
93 | <p><font size="2" face="verdana"> * The Light Blue (B | ||
94 | enable) wire can optionally be removed and repositioned so that the 2-wire connector will be facing the same way | ||
95 | as the 4-wire connector. It's purely an aesthetic choice.</font></p> | ||
96 | </td> | ||
97 | <td align="center" valign="top" ><img src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/wheeled-tracked/dual-h-bridge-motor-driver/WebHome/dhbmd02.jpg" border="2" hspace="10" ><br> | ||
98 | <font size="2" face="verdana">Figure 2-1.</font></td> | ||
99 | </tr> | ||
100 | <tr> | ||
101 | <td colspan="2"> </td> | ||
102 | </tr> | ||
103 | <tr> | ||
104 | <td valign="top" ><font size="2" face="verdana"><b>Step | ||
105 | 3.</b> Now you need to insert the wires into the black housings in a | ||
106 | different order. Look at the "Dual DC Motor I/O" section on | ||
107 | the OOPic-R board, and match the numbers by the pins to the correct | ||
108 | wire from the Dual H-Bridge board. Then simply slide the wires back into | ||
109 | the correct slot of the housing. If you make a mistake, just follow | ||
110 | Step 2 to get the wire out again.<br> | ||
111 | </font> | ||
112 | <div align="center"> | ||
113 | <center> | ||
114 | <table border="1" bordercolor="#FFFFFF"> | ||
115 | <tbody><tr> | ||
116 | <td colspan="3" bordercolor="#FFFFFF"> | ||
117 | <p align="center"><font face="Verdana" size="2">4-wire housing</font></p></td> | ||
118 | </tr> | ||
119 | <tr> | ||
120 | <td bordercolor="#808080" bgcolor="#C0C0C0"> | ||
121 | <p align="center"><font face="Verdana" size="2">OOPic-R | ||
122 | Pin Number</font></p> | ||
123 | </td> | ||
124 | <td bordercolor="#808080" bgcolor="#C0C0C0"> | ||
125 | <p align="center"><font face="Verdana" size="2">Wire Color</font></p></td> | ||
126 | <td bordercolor="#808080" bgcolor="#C0C0C0"> | ||
127 | <p align="center"><font face="Verdana" size="2">From | ||
128 | DHB</font></p> | ||
129 | </td> | ||
130 | </tr> | ||
131 | <tr> | ||
132 | <td bordercolor="#C0C0C0" align="center"><font size="2" face="Verdana">24</font></td> | ||
133 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">Purple</font></td> | ||
134 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">(A | ||
135 | (+) in)</font></td> | ||
136 | </tr> | ||
137 | <tr> | ||
138 | <td bordercolor="#C0C0C0" align="center"><font size="2" face="Verdana">17</font></td> | ||
139 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">Yellow</font></td> | ||
140 | <td bordercolor="#C0C0C0"><font size="2" face="verdana">(A | ||
141 | enable)</font></td> | ||
142 | </tr> | ||
143 | <tr> | ||
144 | <td bordercolor="#C0C0C0" align="center"><font size="2" face="Verdana">25</font></td> | ||
145 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">Brown</font></td> | ||
146 | <td bordercolor="#C0C0C0"><font size="2" face="verdana">(A | ||
147 | (-) in)</font></td> | ||
148 | </tr> | ||
149 | <tr> | ||
150 | <td bordercolor="#C0C0C0" align="center"><font size="2" face="Verdana">26</font></td> | ||
151 | <td bordercolor="#C0C0C0"><font size="2" face="Verdana">Dark | ||
152 | Blue</font></td> | ||
153 | <td bordercolor="#C0C0C0"><font size="2" face="verdana">(B | ||
154 | (+) in)</font></td> | ||
155 | </tr> | ||
156 | <tr> | ||
157 | <td colspan="3" bordercolor="#FFFFFF"> | ||
158 | <p align="center"><font face="Verdana" size="2">2-wire housing</font></p></td> | ||
159 | </tr> | ||
160 | <tr> | ||
161 | <td bordercolor="#808080" bgcolor="#C0C0C0"> | ||
162 | <p align="center"><font face="Verdana" size="2">OOPic-R | ||
163 | Pin Number</font></p> | ||
164 | </td> | ||
165 | <td bordercolor="#808080" bgcolor="#C0C0C0"> | ||
166 | <p align="center"><font face="Verdana" size="2">Wire | ||
167 | Color</font></p> | ||
168 | </td> | ||
169 | <td bordercolor="#808080" bgcolor="#C0C0C0"> | ||
170 | <p align="center"><font face="Verdana" size="2">From | ||
171 | DHB</font></p> | ||
172 | </td> | ||
173 | </tr> | ||
174 | <tr> | ||
175 | <td bordercolor="#C0C0C0" align="center"><font face="Verdana" size="2">18</font></td> | ||
176 | <td bordercolor="#C0C0C0"><font face="Verdana" size="2">Light | ||
177 | Blue</font></td> | ||
178 | <td bordercolor="#C0C0C0"><font size="2" face="verdana">(B | ||
179 | enable)</font></td> | ||
180 | </tr> | ||
181 | <tr> | ||
182 | <td bordercolor="#C0C0C0" align="center"><font face="Verdana" size="2">27</font></td> | ||
183 | <td bordercolor="#C0C0C0"><font face="Verdana" size="2">Pink</font></td> | ||
184 | <td bordercolor="#C0C0C0"><font size="2" face="verdana">(B | ||
185 | (-) in)</font></td> | ||
186 | </tr> | ||
187 | <tr> | ||
188 | <td bordercolor="#FFFFFF" align="center"> </td> | ||
189 | <td bordercolor="#FFFFFF"> | ||
190 | <p align="center"><font face="Verdana" size="2">Table 3-1</font></p></td> | ||
191 | <td bordercolor="#FFFFFF"> </td> | ||
192 | </tr> | ||
193 | </tbody></table> | ||
194 | </center> | ||
195 | </div> | ||
196 | | ||
197 | </td> | ||
198 | <td align="center" valign="top" ><img src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/wheeled-tracked/dual-h-bridge-motor-driver/WebHome/dhbmd03.jpg" border="2" hspace="10" ><br> | ||
199 | <font size="2" face="verdana">Figure 3-1.<br> | ||
200 | <br> | ||
201 | </font></td> | ||
202 | </tr> | ||
203 | <tr> | ||
204 | <td colspan="2"> </td> | ||
205 | </tr> | ||
206 | <tr> | ||
207 | <td valign="top" ><font size="2" face="verdana"><b>Step | ||
208 | 4.</b> Your wires should look like the picture when you are done. If they | ||
209 | are in the wrong order, then refer to Table 3-1 for the wire order.</font></td> | ||
210 | <td align="center" valign="bottom" ><img src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/wheeled-tracked/dual-h-bridge-motor-driver/WebHome/dhbmd04.jpg" border="2" hspace="10" ><br> | ||
211 | <font size="2" face="verdana">Figure 4-1.</font></td> | ||
212 | </tr> | ||
213 | <tr> | ||
214 | <td valign="top" colspan="2"> </td> | ||
215 | </tr> | ||
216 | <tr> | ||
217 | <td valign="top" ><font size="2" face="verdana"><b>Step 5.</b> On | ||
218 | the Dual H-Bridge, attach wires from the battery and the motors as the | ||
219 | diagram shows. Take care to observe polarity to prevent | ||
220 | problems. </font></td> | ||
221 | <td align="center" valign="bottom" ><img src="https://wiki.lynxmotion.com/info/wiki/lynxmotion/download/wheeled-tracked/dual-h-bridge-motor-driver/WebHome/dhbmd08.jpg" border="2" hspace="10" ><br> | ||
222 | <font size="2" face="verdana">Figure 5-1.</font></td> | ||
223 | </tr> | ||
224 | <tr> | ||
225 | <td valign="top" colspan="2"> </td> | ||
226 | </tr> | ||
227 | <tr> | ||
228 | <td valign="top" colspan="2"> | ||
229 | <p align="left"><font size="2" face="verdana"><b>Step 6.</b> This code will | ||
230 | give you a good start on making your bot move around and be able to | ||
231 | change direction with only two variables. By Jim | ||
232 | Babcock</a>.</font></p></td> | ||
233 | </tr> | ||
234 | <tr> | ||
235 | <td valign="top" colspan="2"> </td> | ||
236 | </tr> | ||
237 | <tr> | ||
238 | <td valign="top" colspan="2"> | ||
239 | <div align="center"> | ||
240 | <center> | ||
241 | <table border="1" bordercolor="#000000"> | ||
242 | <tbody><tr> | ||
243 | <td bordercolor="#FFFFFF"><font face="Courier New" size="2">' This | ||
244 | small program is designed to give you the basics to move your bot around<br> | ||
245 | ' and change direction with just 2 variables (speed and turn)<br> | ||
246 | <br> | ||
247 | ' Speed is a value between 127 and -128 with 0 being neutral Or | ||
248 | Stop<br> | ||
249 | ' When speed is set from 1 to 127 the bot will move forward and | ||
250 | faster As the value goes up<br> | ||
251 | ' When speed is set from -1 to -128 the bot will move backward | ||
252 | and faster As the value goes down<br> | ||
253 | <br> | ||
254 | ' Turn is a value between 127 and -128 with 0 being no turn at all<br> | ||
255 | ' When turn is set from 1 to 127 the bot will move to the left. As the value goes up the bot turns harder.<br> | ||
256 | ' When turn is set from -1 to -127 the bot will move to the right. As the value goes down the bot turns harder.<br> | ||
257 | <br> | ||
258 | ' It should be noted that since the objects Navcom, LeftMotor, | ||
259 | and RightMotor have been linked<br> | ||
260 | ' by Virtual Circuit that the main() program doesn't have to be | ||
261 | loop for the bot to keep moving since the VC is<br> | ||
262 | ' constantly running in the background. By the way VCs run about 5 | ||
263 | times faster the the other code.<br> | ||
264 | <br> | ||
265 | Dim RightMotor As New oDCMotor2 ' Right motor bank<br> | ||
266 | Dim LeftMotor As New oDCMotor2 ' Left motor bank<br> | ||
267 | Dim Turn As New oWord ' One number used to turn both left | ||
268 | and right using the object Navcon through VC<br> | ||
269 | Dim Speed As New oWord ' One number used to | ||
270 | command both forward and reverse using the object Navcon through VC<br> | ||
271 | Dim Nav As New oNavCon ' Object used to command your bot around using one speed value | ||
272 | and one turn value<br> | ||
273 | Sub main()<br> | ||
274 | <br> | ||
275 | Call motorsetup ' Sub program to set your | ||
276 | motors up to run. (Only used once)<br> | ||
277 | <br> | ||
278 | Speed.signed = 1 ' Sets up the value property | ||
279 | to use positive and negative numbers 127 to -128<br> | ||
280 | turn.signed = 1 ' Sets up the value property | ||
281 | to use positive and negative numbers 127 to -128<br> | ||
282 | <br> | ||
283 | Speed = 2 ' Change this variable to | ||
284 | control speed and direction in this small program<br> | ||
285 | Turn = 0 ' Change this variable to | ||
286 | control left Or right turning in this small program<br> | ||
287 | <br> | ||
288 | Nav.Input1.Link(Speed) ' Links the speed variable to the Navcon object<br> | ||
289 | Nav.Input2.Link(Turn) ' Links the turn variable to the Navcon object<br> | ||
290 | Nav.Output1.Link(LeftMotor) ' Links the first output of Navcon | ||
291 | to LeftMotor value using VC<br> | ||
292 | Nav.Output2.LInk(RightMotor) ' Links the second output of Navcon | ||
293 | to RightMotor value using VC<br> | ||
294 | Nav.Limit = cvTrue ' Limits the left and right motor values from 127 | ||
295 | to -128<br> | ||
296 | Nav.Operate = 1 ' Used to make this object active in the list | ||
297 | loop<br> | ||
298 | <br> | ||
299 | End Sub<br> | ||
300 | </font><font face="Courier New" size="2"><br> | ||
301 | '**************************************************************************<br> | ||
302 | '<br> | ||
303 | '**************************************************************************</font><font face="Courier New" size="2"><br> | ||
304 | <br> | ||
305 | Sub motorsetup ()<br> | ||
306 | <br> | ||
307 | LeftMotor.IOLineP = 17 'Enable line of motor control PWM is used IOLINE P<br> | ||
308 | leftMotor.InvertoutD=cvTrue 'Changes direction moves when | ||
309 | commanded forward<br> | ||
310 | leftMotor.prescale=2 'Used to step down the | ||
311 | frequ. of PWM<br> | ||
312 | leftMotor.period=255 'Used to set resalution of PWM (# of steps | ||
313 | for value)<br> | ||
314 | LeftMotor.IOLine1 = 24 'First control line for an L293 H-Bridge IOLINE 1<br> | ||
315 | LeftMotor.IOLine2 = 25 'Second control line for an L293 H-Bridge IOLINE 2<br> | ||
316 | LeftMotor.Operate = 1 'Used to make this object active in the list looop<br> | ||
317 | LeftMotor.Brake = cvOff 'Makes sure brake is set to | ||
318 | off<br> | ||
319 | LeftMotor.value = cvOff 'Makes sure motor value set | ||
320 | to 0<br> | ||
321 | <br> | ||
322 | RightMotor.IOLineP = 18 'Enable line of motor control PWM is used IOLINE P<br> | ||
323 | RightMotor.InvertoutD=cvTrue 'Changes direction moves when | ||
324 | commanded forward<br> | ||
325 | RightMotor.prescale=2 'Used to step down the | ||
326 | frequ. of PWM<br> | ||
327 | RightMotor.period=255 'Used to set resalution of PWM (# of steps | ||
328 | for value)<br> | ||
329 | RightMotor.IOLine1 = 26 'First control line for an L293 H-Bridge IOLINE 1<br> | ||
330 | RightMotor.IOLine2 = 27 'Second control line for an L293 H-Bridge IOLINE 2<br> | ||
331 | RightMotor.Operate = 1 'Used to make this object active<br> | ||
332 | RightMotor.Brake = cvOff 'Makes sure brake is set to | ||
333 | off<br> | ||
334 | RightMotor.value = cvOff 'Makes sure motor value set | ||
335 | to 0<br> | ||
336 | <br> | ||
337 | End Sub</font></td> | ||
338 | </tr> | ||
339 | </tbody></table> | ||
340 | </center> | ||
341 | </div> | ||
342 | <p> </p></td> | ||
343 | </tr> | ||
344 | </tbody></table> | ||
345 | <br></body> | ||
![]() |
1.1 | 346 | {{/html}} |