⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 speed__cntr_8c.html

📁 使用AVR单片机控制步进电机的软件代码
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00132     OCR1A = 10;00133     <span class="comment">// Set Timer/Counter to divide clock by 8</span>00134     TCCR1B |= ((0&lt;&lt;CS12)|(1&lt;&lt;CS11)|(0&lt;&lt;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">(&nbsp;</td>          <td class="md" nowrap valign="top">void&nbsp;</td>          <td class="mdname1" valign="top" nowrap>          </td>          <td class="md" valign="top">&nbsp;)&nbsp;</td>          <td class="md" nowrap></td>        </tr>      </table>    </td>  </tr></table><table cellspacing=5 cellpadding=0 border=0>  <tr>    <td>      &nbsp;    </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 &amp;= ~((1&lt;&lt;CS12)|(1&lt;&lt;CS11)|(1&lt;&lt;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 &gt;= <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 &lt;= <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 &gt;= <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> &gt;= 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>      &nbsp;    </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 + -