Wiki source code of Dual H Bridge Motor Driver
Version 8.1 by Eric Nantel on 2023/02/02 14:02
Show last authors
1 | {{html wiki="false" clean="true"}} |
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> |
346 | {{/html}} |