https://hades.mech.northwestern.edu//index.php?title=Robot_Snake&feed=atom&action=historyRobot Snake - Revision history2024-03-28T15:12:25ZRevision history for this page on the wikiMediaWiki 1.35.9https://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=14533&oldid=prevAndrew Long: /* Overview */2009-10-05T01:10:36Z<p><span dir="auto"><span class="autocomment">Overview</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 01:10, 5 October 2009</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 9:</td>
<td colspan="2" class="diff-lineno">Line 9:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>Featured on [http://blog.makezine.com/archive/2009/03/well_documented_robotic_snake.html<del class="diffchange diffchange-inline"> |</del> Makezine.com]</div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>Featured on [http://blog.makezine.com/archive/2009/03/well_documented_robotic_snake.html Makezine.com]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>==Team Members==</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>==Team Members==</div></td>
</tr>
</table>Andrew Longhttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=14532&oldid=prevAndrew Long: /* Overview */2009-10-05T01:10:16Z<p><span dir="auto"><span class="autocomment">Overview</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 01:10, 5 October 2009</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 9:</td>
<td colspan="2" class="diff-lineno">Line 9:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>Featured on[http://blog.makezine.com/archive/2009/03/well_documented_robotic_snake.html<del class="diffchange diffchange-inline">|</del>| Makezine.com]</div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>Featured on<ins class="diffchange diffchange-inline"> </ins>[http://blog.makezine.com/archive/2009/03/well_documented_robotic_snake.html<ins class="diffchange diffchange-inline"> </ins>| Makezine.com]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>==Team Members==</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>==Team Members==</div></td>
</tr>
</table>Andrew Longhttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=14531&oldid=prevAndrew Long: /* Overview */2009-10-05T01:09:36Z<p><span dir="auto"><span class="autocomment">Overview</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 01:09, 5 October 2009</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 8:</td>
<td colspan="2" class="diff-lineno">Line 8:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake with housing]</div></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><br /></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>Featured on[http://blog.makezine.com/archive/2009/03/well_documented_robotic_snake.html|| Makezine.com]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>==Team Members==</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>==Team Members==</div></td>
</tr>
</table>Andrew Longhttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=8567&oldid=prevAndrewLong: /* Overview */2008-03-21T06:10:32Z<p><span dir="auto"><span class="autocomment">Overview</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 06:10, 21 March 2008</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 5:</td>
<td colspan="2" class="diff-lineno">Line 5:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>In this project, we developed and built a robot to mimic serpentine motion of a snake. The robot is made up of several body segments and a head. Each body segment contains a RC servo, which is controlled by a PIC microntroller located in the head of the snake robot. This wiki page contains discussions of the motion of a snake, mechanical design, electronic design and PIC code. </div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>In this project, we developed and built a robot to mimic serpentine motion of a snake. The robot is made up of several body segments and a head. Each body segment contains a RC servo, which is controlled by a PIC microntroller located in the head of the snake robot. This wiki page contains discussions of the motion of a snake, mechanical design, electronic design and PIC code. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>[http://www.youtube.com/watch?v=Sb8WqaLX1Vo Video of the robot snake]</div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>[http://www.youtube.com/watch?v=Sb8WqaLX1Vo Video of the robot snake<ins class="diffchange diffchange-inline"> without housing</ins>]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake <del class="diffchange diffchange-inline">2</del>]</div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>[http://www.youtube.com/watch?v=r_GOOFLnI6w Video of the robot snake <ins class="diffchange diffchange-inline">with housing</ins>]</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>==Team Members==</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>==Team Members==</div></td>
</tr>
</table>AndrewLonghttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=8521&oldid=prevHwang: /* Servo Control Details */2008-03-21T04:40:40Z<p><span dir="auto"><span class="autocomment">Servo Control Details</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 04:40, 21 March 2008</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 198:</td>
<td colspan="2" class="diff-lineno">Line 198:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>====Servo Control Details====</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>====Servo Control Details====</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). See [[RC Servo Theory]] for a discussion of the control signal for an RC servo. <del class="diffchange diffchange-inline">In</del> <del class="diffchange diffchange-inline">this</del> <del class="diffchange diffchange-inline">project,</del> <del class="diffchange diffchange-inline">the</del> pulse <del class="diffchange diffchange-inline">period for the servo is</del> 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the <del class="diffchange diffchange-inline">variable</del> TMR1_20MS (defined as 15536), which will<del class="diffchange diffchange-inline"> restart the sequence:</del> cause Timer1 to overflow 20 ms later and re-trigger the interrupt. </div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). See [[RC Servo Theory]] for a discussion of the control signal for an RC servo. <ins class="diffchange diffchange-inline">The</ins> <ins class="diffchange diffchange-inline">RC</ins> <ins class="diffchange diffchange-inline">servo</ins> <ins class="diffchange diffchange-inline">expects a</ins> pulse <ins class="diffchange diffchange-inline">every</ins> 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the <ins class="diffchange diffchange-inline">constant</ins> <ins class="diffchange diffchange-inline"><tt></ins>TMR1_20MS<ins class="diffchange diffchange-inline"></tt></ins> (defined as <ins class="diffchange diffchange-inline"><tt></ins>15536<ins class="diffchange diffchange-inline"></tt></ins>), which will cause Timer1 to overflow 20 ms later and re-trigger the interrupt. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 <del class="diffchange diffchange-inline">is</del> polled for<del class="diffchange diffchange-inline"> only</del> 2.25 ms. TMR1_2point25MS is a <del class="diffchange diffchange-inline">variable</del> corresponding to the <del class="diffchange diffchange-inline">time</del> 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536<del class="diffchange diffchange-inline">.</del> 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and<ins class="diffchange diffchange-inline"> the corresponding timer value is</ins> stored in an array called <ins class="diffchange diffchange-inline"><tt></ins>RCservo<ins class="diffchange diffchange-inline"></tt></ins>. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, <ins class="diffchange diffchange-inline"><tt></ins>Timer1<ins class="diffchange diffchange-inline"></tt></ins> <ins class="diffchange diffchange-inline">only needs to be</ins> polled for 2.25 ms. <ins class="diffchange diffchange-inline"><tt></ins>TMR1_2point25MS<ins class="diffchange diffchange-inline"></tt></ins> is a <ins class="diffchange diffchange-inline">constant</ins> corresponding to the <ins class="diffchange diffchange-inline">value of <tt>Timer1</tt></ins> 2.25 ms after the interrupt begins and is defined as <ins class="diffchange diffchange-inline"><tt></ins>15536 + 6250<ins class="diffchange diffchange-inline"></tt></ins>. While <ins class="diffchange diffchange-inline"><tt></ins>Timer1<ins class="diffchange diffchange-inline"></tt></ins> is less than this variable, the counter is compared sequentially to the values in the <ins class="diffchange diffchange-inline"><tt></ins>RCservo<ins class="diffchange diffchange-inline"></tt></ins> array plus 15536 <ins class="diffchange diffchange-inline">(</ins>15536 must be added because the Timer1 started counting at 15536 instead of 0<ins class="diffchange diffchange-inline">)</ins>.<ins class="diffchange diffchange-inline"> </ins> Since the <ins class="diffchange diffchange-inline"><tt></ins>RCservo<ins class="diffchange diffchange-inline"></tt></ins> array corresponds to the pulse widths of the servos, when the value of <ins class="diffchange diffchange-inline"><tt></ins>Timer1<ins class="diffchange diffchange-inline"></tt></ins> is greater than a value in <ins class="diffchange diffchange-inline"><tt></ins>RCservo<ins class="diffchange diffchange-inline"></tt></ins> plus 15536, the corresponding pin is set low. After the sequence is complete, <ins class="diffchange diffchange-inline"><tt></ins>Timer1<ins class="diffchange diffchange-inline"></tt></ins> is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than <ins class="diffchange diffchange-inline"><tt></ins>TMR1_2point25MS<ins class="diffchange diffchange-inline"></tt></ins>. After all the servo signals have been sent, the values in the <ins class="diffchange diffchange-inline"><tt></ins>RCservo<ins class="diffchange diffchange-inline"></tt></ins> array are updated to prepare for the next 20ms interrupt. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project.</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project.</div></td>
</tr>
</table>Hwanghttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=8513&oldid=prevAndrewLong: /* Servo Control Details */2008-03-21T04:17:51Z<p><span dir="auto"><span class="autocomment">Servo Control Details</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 04:17, 21 March 2008</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 198:</td>
<td colspan="2" class="diff-lineno">Line 198:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>====Servo Control Details====</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>====Servo Control Details====</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). <del class="diffchange diffchange-inline">A discussion of</del> RC Servo Theory <del class="diffchange diffchange-inline">can</del> <del class="diffchange diffchange-inline">be</del> <del class="diffchange diffchange-inline">found</del> <del class="diffchange diffchange-inline">[[RC</del> <del class="diffchange diffchange-inline">Servo</del> <del class="diffchange diffchange-inline">Theory|here]]</del>.In this project, the pulse period for the servo is 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the variable TMR1_20MS (defined as 15536), which will restart the sequence: cause Timer1 to overflow 20 ms later and re-trigger the interrupt. </div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). <ins class="diffchange diffchange-inline">See</ins> <ins class="diffchange diffchange-inline">[[</ins>RC Servo Theory<ins class="diffchange diffchange-inline">]]</ins> <ins class="diffchange diffchange-inline">for</ins> <ins class="diffchange diffchange-inline">a</ins> <ins class="diffchange diffchange-inline">discussion</ins> <ins class="diffchange diffchange-inline">of</ins> <ins class="diffchange diffchange-inline">the</ins> <ins class="diffchange diffchange-inline">control signal for an RC servo</ins>.<ins class="diffchange diffchange-inline"> </ins>In this project, the pulse period for the servo is 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the variable TMR1_20MS (defined as 15536), which will restart the sequence: cause Timer1 to overflow 20 ms later and re-trigger the interrupt. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 is polled for only 2.25 ms. TMR1_2point25MS is a variable corresponding to the time 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536. 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 is polled for only 2.25 ms. TMR1_2point25MS is a variable corresponding to the time 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536. 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
</tr>
</table>AndrewLonghttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=8512&oldid=prevAndrewLong: /* Servo Control Details */2008-03-21T04:16:41Z<p><span dir="auto"><span class="autocomment">Servo Control Details</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 04:16, 21 March 2008</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 198:</td>
<td colspan="2" class="diff-lineno">Line 198:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>====Servo Control Details====</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>====Servo Control Details====</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). A discussion of RC Servo Theory can be found <del class="diffchange diffchange-inline"><here>.</del> In this project, the pulse period for the servo is 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the variable TMR1_20MS (defined as 15536), which will restart the sequence: cause Timer1 to overflow 20 ms later and re-trigger the interrupt. </div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>The main function of the PIC microcontroller is to control multiple RC servos (seven in our case). A discussion of RC Servo Theory can be found <ins class="diffchange diffchange-inline">[[RC</ins> <ins class="diffchange diffchange-inline">Servo</ins> <ins class="diffchange diffchange-inline">Theory|here]].</ins>In this project, the pulse period for the servo is 20ms, so a timer called Timer1 is set up to overflow every 20 ms and trigger an interrupt. When the interrupt is triggered, the counter for Timer1 is set to the value held by the variable TMR1_20MS (defined as 15536), which will restart the sequence: cause Timer1 to overflow 20 ms later and re-trigger the interrupt. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 is polled for only 2.25 ms. TMR1_2point25MS is a variable corresponding to the time 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536. 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 is polled for only 2.25 ms. TMR1_2point25MS is a variable corresponding to the time 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536. 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
</tr>
</table>AndrewLonghttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=8511&oldid=prevAndrewLong: /* Servo Control Details */2008-03-21T04:15:10Z<p><span dir="auto"><span class="autocomment">Servo Control Details</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 04:15, 21 March 2008</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 202:</td>
<td colspan="2" class="diff-lineno">Line 202:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 is polled for only 2.25 ms. TMR1_2point25MS is a variable corresponding to the time 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536. 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 is polled for only 2.25 ms. TMR1_2point25MS is a variable corresponding to the time 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536. 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project.<del class="diffchange diffchange-inline"> </del></div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project.</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><br /></td>
<td colspan="2" class="diff-empty diff-side-added"></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was good enough for this purpose.</div></td>
<td colspan="2" class="diff-empty diff-side-added"></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>====Serial Communication Details====</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>====Serial Communication Details====</div></td>
</tr>
</table>AndrewLonghttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=8508&oldid=prevAndrewLong: /* PIC Code */2008-03-21T04:14:26Z<p><span dir="auto"><span class="autocomment">PIC Code</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 04:14, 21 March 2008</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 198:</td>
<td colspan="2" class="diff-lineno">Line 198:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>====Servo Control Details====</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>====Servo Control Details====</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>The main function of the PIC microcontroller <del class="diffchange diffchange-inline">was</del> to control multiple servos (seven in our case). <del class="diffchange diffchange-inline">Timer1</del> <del class="diffchange diffchange-inline">is</del> <del class="diffchange diffchange-inline">set</del> <del class="diffchange diffchange-inline">to</del> <del class="diffchange diffchange-inline">overflow</del> <del class="diffchange diffchange-inline">every</del> <del class="diffchange diffchange-inline">20</del> <del class="diffchange diffchange-inline">milliseconds</del> <del class="diffchange diffchange-inline">and trigger an interrupt</del>. <del class="diffchange diffchange-inline">When</del> <del class="diffchange diffchange-inline">the</del> <del class="diffchange diffchange-inline">interrupt is triggered</del>, <del class="diffchange diffchange-inline">Timer1's</del> <del class="diffchange diffchange-inline">counter</del> <del class="diffchange diffchange-inline">is</del> <del class="diffchange diffchange-inline">set to</del> the <del class="diffchange diffchange-inline">value</del> <del class="diffchange diffchange-inline">held</del> <del class="diffchange diffchange-inline">by</del> <del class="diffchange diffchange-inline">TMR1_20MS</del> <del class="diffchange diffchange-inline">(defined</del> <del class="diffchange diffchange-inline">as</del> <del class="diffchange diffchange-inline">15536),</del> <del class="diffchange diffchange-inline">which</del> <del class="diffchange diffchange-inline">will</del> <del class="diffchange diffchange-inline">cause</del> <del class="diffchange diffchange-inline">Timer1</del> to overflow <del class="diffchange diffchange-inline">20ms</del> <del class="diffchange diffchange-inline">later</del> and <del class="diffchange diffchange-inline">re-</del>trigger <del class="diffchange diffchange-inline">the</del> interrupt. <del class="diffchange diffchange-inline"> At</del> the <del class="diffchange diffchange-inline">beginning</del> <del class="diffchange diffchange-inline">of</del> <del class="diffchange diffchange-inline">the interrupt</del>,<del class="diffchange diffchange-inline"> all</del> the <del class="diffchange diffchange-inline">pins</del> <del class="diffchange diffchange-inline">connected to the servos are set high. While</del> Timer1 is <del class="diffchange diffchange-inline">less</del> <del class="diffchange diffchange-inline">than</del> the value held by<del class="diffchange diffchange-inline"> TMR1_2point25MS (defined as 15536 + 6250), Timer1 is polled, and</del> the <del class="diffchange diffchange-inline">value</del> <del class="diffchange diffchange-inline">is compared sequentially to the values in the RCservo array plus 15536</del> (<del class="diffchange diffchange-inline">because</del> <del class="diffchange diffchange-inline">Timer1 started counting at</del> <del class="diffchange diffchange-inline">15536, not 0). If the value of Timer1 is greater than a value in (RCservo[x]+</del>15536), <del class="diffchange diffchange-inline">the</del> <del class="diffchange diffchange-inline">the corresponding pin is set low. After</del> <del class="diffchange diffchange-inline">all</del> the <del class="diffchange diffchange-inline">values</del> <del class="diffchange diffchange-inline">have been compared,</del> Timer1 <del class="diffchange diffchange-inline">is</del> <del class="diffchange diffchange-inline">polled</del> <del class="diffchange diffchange-inline">again and the process repeats until 2.25</del> ms <del class="diffchange diffchange-inline">have</del> <del class="diffchange diffchange-inline">elapsed</del> <del class="diffchange diffchange-inline">(when Timer1 > TMR1_2point25MS). After all</del> the<del class="diffchange diffchange-inline"> servos signals have been sent, the values in the RCServo array are updated to prepare it for the next 20ms</del> interrupt.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>The main function of the PIC microcontroller <ins class="diffchange diffchange-inline">is</ins> to control multiple<ins class="diffchange diffchange-inline"> RC</ins> servos (seven in our case). <ins class="diffchange diffchange-inline">A</ins> <ins class="diffchange diffchange-inline">discussion</ins> <ins class="diffchange diffchange-inline">of</ins> <ins class="diffchange diffchange-inline">RC</ins> <ins class="diffchange diffchange-inline">Servo</ins> <ins class="diffchange diffchange-inline">Theory</ins> <ins class="diffchange diffchange-inline">can</ins> <ins class="diffchange diffchange-inline">be</ins> <ins class="diffchange diffchange-inline">found</ins> <ins class="diffchange diffchange-inline"><here></ins>. <ins class="diffchange diffchange-inline">In</ins> <ins class="diffchange diffchange-inline">this</ins> <ins class="diffchange diffchange-inline">project</ins>, <ins class="diffchange diffchange-inline">the</ins> <ins class="diffchange diffchange-inline">pulse</ins> <ins class="diffchange diffchange-inline">period</ins> <ins class="diffchange diffchange-inline">for</ins> the <ins class="diffchange diffchange-inline">servo</ins> <ins class="diffchange diffchange-inline">is</ins> <ins class="diffchange diffchange-inline">20ms,</ins> <ins class="diffchange diffchange-inline">so</ins> <ins class="diffchange diffchange-inline">a</ins> <ins class="diffchange diffchange-inline">timer</ins> <ins class="diffchange diffchange-inline">called</ins> <ins class="diffchange diffchange-inline">Timer1</ins> <ins class="diffchange diffchange-inline">is</ins> <ins class="diffchange diffchange-inline">set</ins> <ins class="diffchange diffchange-inline">up</ins> to overflow <ins class="diffchange diffchange-inline">every</ins> <ins class="diffchange diffchange-inline">20 ms</ins> and trigger <ins class="diffchange diffchange-inline">an</ins> interrupt. <ins class="diffchange diffchange-inline">When</ins> the <ins class="diffchange diffchange-inline">interrupt</ins> <ins class="diffchange diffchange-inline">is</ins> <ins class="diffchange diffchange-inline">triggered</ins>, the <ins class="diffchange diffchange-inline">counter</ins> <ins class="diffchange diffchange-inline">for</ins> Timer1 is <ins class="diffchange diffchange-inline">set</ins> <ins class="diffchange diffchange-inline">to</ins> the value held by the <ins class="diffchange diffchange-inline">variable</ins> <ins class="diffchange diffchange-inline">TMR1_20MS</ins> (<ins class="diffchange diffchange-inline">defined</ins> <ins class="diffchange diffchange-inline">as</ins> 15536), <ins class="diffchange diffchange-inline">which</ins> <ins class="diffchange diffchange-inline">will</ins> <ins class="diffchange diffchange-inline">restart</ins> the <ins class="diffchange diffchange-inline">sequence:</ins> <ins class="diffchange diffchange-inline">cause</ins> Timer1 <ins class="diffchange diffchange-inline">to</ins> <ins class="diffchange diffchange-inline">overflow</ins> <ins class="diffchange diffchange-inline">20</ins> ms <ins class="diffchange diffchange-inline">later</ins> <ins class="diffchange diffchange-inline">and</ins> <ins class="diffchange diffchange-inline">re-trigger</ins> the interrupt.<ins class="diffchange diffchange-inline"> </ins></div></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><br /></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>As shown in the RC Servo Theory, the width of the high pulse determines the angle of the servo. As a result, the pulse width corresponding to the desired angle for each servo motor is calculated and stored in an array called RCservo. At the beginning of the interrupt, all the pins connected to the servos are set high. For the RC servos used in this project, the maximum pulse width can be 2.25 ms; therefore, Timer1 is polled for only 2.25 ms. TMR1_2point25MS is a variable corresponding to the time 2.25 ms after the interrupt begins and is defined as 15536 + 6250. While Timer1 is less than this variable, the counter is compared sequentially to the values in the RCservo array plus 15536. 15536 must be added because the Timer1 started counting at 15536 instead of 0. Since the RCservo array corresponds to the pulse widths of the servos, when the value of Timer1 is greater than a value in RCservo plus 15536, the corresponding pin is set low. After the sequence is complete, Timer1 is polled again and the process repeats until 2.25 ms have elapsed, which corresponds to when Timer1 is greater than TMR1_2point25MS. After all the servo signals have been sent, the values in the RCservo array are updated to prepare for the next 20ms interrupt. </div></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><br /></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was sufficient for this project. </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was good enough for this purpose.</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>Although polling the timer to control the length of a pulse has a lower resolution than using an interrupt (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and not have to decrease the frequency of the servo signal pulse train. With a 40MHz clock and seven servos, the resolution for the pulse was about 8us, which was good enough for this purpose.</div></td>
</tr>
</table>AndrewLonghttps://hades.mech.northwestern.edu//index.php?title=Robot_Snake&diff=8499&oldid=prevAndrewLong: /* High Torque Servos */2008-03-21T04:00:05Z<p><span dir="auto"><span class="autocomment">High Torque Servos</span></span></p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 04:00, 21 March 2008</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Line 485:</td>
<td colspan="2" class="diff-lineno">Line 485:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>====High Torque Servos====</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>====High Torque Servos====</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td class="diff-deletedline diff-side-deleted"><div>The servos in the snake have a large load but do not need to move very quickly, so high torque servos <del class="diffchange diffchange-inline">should</del> be used instead of standard servos. This would also prolong the battery life because the servos would be operating in a more efficient range.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td class="diff-addedline diff-side-added"><div>The servos in the snake have a large load but do not need to move very quickly, so high torque servos <ins class="diffchange diffchange-inline">could</ins> be used instead of standard servos. This would also prolong the battery life because the servos would be operating in a more efficient range.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><br /></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td class="diff-context diff-side-deleted"><div>== References ==</div></td>
<td class="diff-marker"></td>
<td class="diff-context diff-side-added"><div>== References ==</div></td>
</tr>
</table>AndrewLong