📄 speed__cntr_8c.html
字号:
00132 OCR1A = 10;00133 <span class="comment">// Set Timer/Counter to divide clock by 8</span>00134 TCCR1B |= ((0<<CS12)|(1<<CS11)|(0<<CS10));00135 }00136 }</div></pre> </td> </tr></table><a class="anchor" name="a3" doxytag="speed_cntr.c::speed_cntr_TIMER1_COMPA_interrupt" ></a><p><table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> __interrupt void speed_cntr_TIMER1_COMPA_interrupt </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">void </td> <td class="mdname1" valign="top" nowrap> </td> <td class="md" valign="top"> ) </td> <td class="md" nowrap></td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>Timer/Counter1 Output Compare A Match Interrupt. <p>Timer/Counter1 Output Compare A Match Interrupt. Increments/decrements the position of the stepper motor exept after last position, when it stops. The step_delay defines the period of this interrupt and controls the speed of the stepper motor. A new step delay is calculated to follow wanted speed profile on basis of accel/decel parameters. <p>Definition at line <a class="el" href="speed__cntr_8c-source.html#l00164">164</a> of file <a class="el" href="speed__cntr_8c-source.html">speed_cntr.c</a>.<p>References <a class="el" href="speed__cntr_8h-source.html#l00081">ACCEL</a>, <a class="el" href="speed__cntr_8h-source.html#l00044">speedRampData::accel_count</a>, <a class="el" href="speed__cntr_8h-source.html#l00082">DECEL</a>, <a class="el" href="speed__cntr_8h-source.html#l00038">speedRampData::decel_start</a>, <a class="el" href="speed__cntr_8h-source.html#l00040">speedRampData::decel_val</a>, <a class="el" href="speed__cntr_8h-source.html#l00034">speedRampData::dir</a>, <a class="el" href="global_8h-source.html#l00025">FALSE</a>, <a class="el" href="speed__cntr_8h-source.html#l00042">speedRampData::min_delay</a>, <a class="el" href="speed__cntr_8h-source.html#l00083">RUN</a>, <a class="el" href="speed__cntr_8h-source.html#l00032">speedRampData::run_state</a>, <a class="el" href="global_8h-source.html#l00031">GLOBAL_FLAGS::running</a>, <a class="el" href="sm__driver_8c-source.html#l00066">sm_driver_StepCounter()</a>, <a class="el" href="speed__cntr_8c-source.html#l00031">srd</a>, <a class="el" href="main_8c-source.html#l00033">status</a>, <a class="el" href="speed__cntr_8h-source.html#l00036">speedRampData::step_delay</a>, and <a class="el" href="speed__cntr_8h-source.html#l00080">STOP</a>.<p><pre class="fragment"><div>00165 {00166 <span class="comment">// Holds next delay period.</span>00167 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> new_step_delay;00168 <span class="comment">// Remember the last step delay used when accelrating.</span>00169 <span class="keyword">static</span> <span class="keywordtype">int</span> last_accel_delay;00170 <span class="comment">// Counting steps when moving.</span>00171 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> step_count = 0;00172 <span class="comment">// Keep track of remainder from new_step-delay calculation to incrase accurancy</span>00173 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rest = 0;00174 00175 OCR1A = <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a>;00176 00177 <span class="keywordflow">switch</span>(<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o5">run_state</a>) {00178 <span class="keywordflow">case</span> <a class="code" href="speed__cntr_8h.html#a7">STOP</a>:00179 step_count = 0;00180 rest = 0;00181 <span class="comment">// Stop Timer/Counter 1.</span>00182 TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10));00183 <a class="code" href="main_8c.html#a0">status</a>.<a class="code" href="structGLOBAL__FLAGS.html#o2">running</a> = <a class="code" href="global_8h.html#a1">FALSE</a>;00184 <span class="keywordflow">break</span>;00185 00186 <span class="keywordflow">case</span> <a class="code" href="speed__cntr_8h.html#a8">ACCEL</a>:00187 <a class="code" href="sm__driver_8h.html#a11">sm_driver_StepCounter</a>(<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o3">dir</a>);00188 step_count++;00189 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a>++;00190 new_step_delay = <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a> - (((2 * (<span class="keywordtype">long</span>)<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a>) + rest)/(4 * <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a> + 1));00191 rest = ((2 * (<span class="keywordtype">long</span>)<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a>)+rest)%(4 * <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a> + 1);00192 <span class="comment">// Chech if we should start decelration.</span>00193 <span class="keywordflow">if</span>(step_count >= <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o1">decel_start</a>) {00194 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a> = <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o2">decel_val</a>;00195 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o5">run_state</a> = <a class="code" href="speed__cntr_8h.html#a9">DECEL</a>;00196 }00197 <span class="comment">// Chech if we hitted max speed.</span>00198 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(new_step_delay <= <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o4">min_delay</a>) {00199 last_accel_delay = new_step_delay;00200 new_step_delay = <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o4">min_delay</a>;00201 rest = 0;00202 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o5">run_state</a> = <a class="code" href="speed__cntr_8h.html#a10">RUN</a>;00203 }00204 <span class="keywordflow">break</span>;00205 00206 <span class="keywordflow">case</span> <a class="code" href="speed__cntr_8h.html#a10">RUN</a>:00207 <a class="code" href="sm__driver_8h.html#a11">sm_driver_StepCounter</a>(<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o3">dir</a>);00208 step_count++;00209 new_step_delay = <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o4">min_delay</a>;00210 <span class="comment">// Chech if we should start decelration.</span>00211 <span class="keywordflow">if</span>(step_count >= <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o1">decel_start</a>) {00212 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a> = <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o2">decel_val</a>;00213 <span class="comment">// Start decelration with same delay as accel ended with.</span>00214 new_step_delay = last_accel_delay;00215 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o5">run_state</a> = <a class="code" href="speed__cntr_8h.html#a9">DECEL</a>;00216 }00217 <span class="keywordflow">break</span>;00218 00219 <span class="keywordflow">case</span> <a class="code" href="speed__cntr_8h.html#a9">DECEL</a>:00220 <a class="code" href="sm__driver_8h.html#a11">sm_driver_StepCounter</a>(<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o3">dir</a>);00221 step_count++;00222 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a>++;00223 new_step_delay = <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a> - (((2 * (<span class="keywordtype">long</span>)<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a>) + rest)/(4 * <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a> + 1));00224 rest = ((2 * (<span class="keywordtype">long</span>)<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a>)+rest)%(4 * <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a> + 1);00225 <span class="comment">// Check if we at last step</span>00226 <span class="keywordflow">if</span>(<a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o0">accel_count</a> >= 0){00227 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o5">run_state</a> = <a class="code" href="speed__cntr_8h.html#a7">STOP</a>;00228 }00229 <span class="keywordflow">break</span>;00230 }00231 <a class="code" href="speed__cntr_8c.html#a0">srd</a>.<a class="code" href="structspeedRampData.html#o6">step_delay</a> = new_step_delay;00232 }</div></pre><p>Here is the call graph for this function:<p><center><img src="speed__cntr_8c_a3_cgraph.png" border="0" usemap="#speed__cntr_8c_a3_cgraph_map" alt=""></center><map name="speed__cntr_8c_a3_cgraph_map"><area href="sm__driver_8h.html#a11" shape="rect" coords="315,7,478,33" alt=""><area href="sm__driver_8h.html#a12" shape="rect" coords="527,7,684,33" alt=""></map> </td> </tr></table><hr><h2>Variable Documentation</h2><a class="anchor" name="a0" doxytag="speed_cntr.c::srd" ></a><p><table class="mdTable" width="100%" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top"> <a class="el" href="structspeedRampData.html">speedRampData</a> <a class="el" href="speed__cntr_8c.html#a0">srd</a> </td> </tr> </table> </td> </tr></table><table cellspacing=5 cellpadding=0 border=0> <tr> <td> </td> <td><p>Cointains data for timer interrupt. <p><p>Definition at line <a class="el" href="speed__cntr_8c-source.html#l00031">31</a> of file <a class="el" href="speed__cntr_8c-source.html">speed_cntr.c</a>.<p>Referenced by <a class="el" href="speed__cntr_8c-source.html#l00143">speed_cntr_Init_Timer1()</a>, <a class="el" href="speed__cntr_8c-source.html#l00046">speed_cntr_Move()</a>, and <a class="el" href="speed__cntr_8c-source.html#l00164">speed_cntr_TIMER1_COMPA_interrupt()</a>. </td> </tr></table><hr size="1"><address style="align: right;"><small>Generated on Mon May 8 15:05:04 2006 for AVR446 - Linear speed control of stepper motor by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.7 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -