📄 main_8c.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>AVR446 - Linear speed control of stepper motor: main.c File Reference</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.7 --><div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related Pages</a></div><h1>main.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>Demo of Linear speed ramp controller. <p>Demo of linear speed ramp controller. Control of stepper motor by the serial port. A menu gives the user status and shows the avaliable commands.<p><ul><li>File: <a class="el" href="main_8c.html">main.c</a></li><li>Compiler: IAR EWAAVR 4.11A</li><li>Supported devices: All devices with a 16 bit timer can be used. The example is written for ATmega48</li><li>AppNote: AVR446 - Linear speed control of stepper motor</li></ul><p><dl compact><dt><b>Author:</b></dt><dd>Atmel Corporation: <a href="http://www.atmel.com">http://www.atmel.com</a> <br> Support email: <a href="mailto:avr@atmel.com">avr@atmel.com</a></dd></dl><dl compact><dt><b>Name</b></dt><dd>RELEASE_1_0 </dd></dl><dl compact><dt><b>Revision</b></dt><dd>1.2 </dd></dl><dl compact><dt><b>RCSfile</b></dt><dd><a class="el" href="main_8c.html">main.c</a>,v </dd></dl><dl compact><dt><b>Date</b></dt><dd>2006/05/08 12:25:58 </dd></dl><p>Definition in file <a class="el" href="main_8c-source.html">main.c</a>.<p><code>#include <ioavr.h></code><br><code>#include <inavr.h></code><br><code>#include <stdlib.h></code><br><code>#include "<a class="el" href="global_8h-source.html">global.h</a>"</code><br><code>#include "<a class="el" href="uart_8h-source.html">uart.h</a>"</code><br><code>#include "<a class="el" href="sm__driver_8h-source.html">sm_driver.h</a>"</code><br><code>#include "<a class="el" href="speed__cntr_8h-source.html">speed_cntr.h</a>"</code><br><p>Include dependency graph for main.c:<p><center><img src="main_8c__incl.png" border="0" usemap="#main.c_map" alt="Include dependency graph"></center><map name="main.c_map"><area href="global_8h.html" shape="rect" coords="266,7,335,34" alt=""><area href="uart_8h.html" shape="rect" coords="359,7,415,34" alt=""><area href="sm__driver_8h.html" shape="rect" coords="439,7,530,34" alt=""><area href="speed__cntr_8h.html" shape="rect" coords="554,7,652,34" alt=""></map><p><a href="main_8c-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0><tr><td></td></tr><tr><td colspan=2><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="main_8c.html#a4">Init</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Init of peripheral devices. <a href="#a4"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="main_8c.html#a5">main</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Demo of linear speed controller. <a href="#a5"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="main_8c.html#a3">ShowData</a> (int position, int acceleration, int deceleration, int speed, int steps)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Sends out data. <a href="#a3"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>void </td><td class="memItemRight" valign=bottom><a class="el" href="main_8c.html#a2">ShowHelp</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Sends help message. <a href="#a2"></a><br><br></td></tr><tr><td colspan=2><br><h2>Variables</h2></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top>__flash char </td><td class="memItemRight" valign=bottom><a class="el" href="main_8c.html#a1">Help</a> [] = {"\n\r--------------------------------------------------------------\n\rAtmel AVR446 - Linear speed control of stepper motor\n\r\n\r? - Show help\n\ra [data] - Set acceleration (range: 71 - 32000)\n\rd [data] - Set deceleration (range: 71 - 32000)\n\rs [data] - Set speed (range: 12 - motor limit)\n\rm [data] - Move [data] steps (range: -64000 - 64000)\n\rmove [steps] [accel] [decel] [speed]\n\r - Move with all parameters given\n\r<enter> - Repeat last move\n\r\n\r acc/dec data given in 0.01*rad/sec^2 (100 = 1 rad/sec^2)\n\r speed data given in 0.01*rad/sec (100 = 1 rad/sec)\n\r--------------------------------------------------------------\n\r"}</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Help message. <a href="#a1"></a><br><br></td></tr><tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="structGLOBAL__FLAGS.html">GLOBAL_FLAGS</a> </td><td class="memItemRight" valign=bottom><a class="el" href="main_8c.html#a0">status</a> = {FALSE, FALSE, 0}</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Global status flags. <a href="#a0"></a><br><br></td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="a4" doxytag="main.c::Init" ></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"> void Init </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>Init of peripheral devices. <p>Setup IO, uart, stepper, timer and interrupt. <p>Definition at line <a class="el" href="main_8c-source.html#l00042">42</a> of file <a class="el" href="main_8c-source.html">main.c</a>.<p>References <a class="el" href="uart_8c-source.html#l00045">InitUART()</a>, <a class="el" href="sm__driver_8c-source.html#l00049">sm_driver_Init_IO()</a>, <a class="el" href="sm__driver_8c-source.html#l00108">sm_driver_StepOutput()</a>, and <a class="el" href="speed__cntr_8c-source.html#l00143">speed_cntr_Init_Timer1()</a>.<p>Referenced by <a class="el" href="main_8c-source.html#l00062">main()</a>.<p><pre class="fragment"><div>00043 {00044 <span class="comment">// Init of IO pins</span>00045 <a class="code" href="sm__driver_8c.html#a6">sm_driver_Init_IO</a>();00046 <span class="comment">// Init of uart</span>00047 <a class="code" href="uart_8c.html#a6">InitUART</a>();00048 00049 <span class="comment">// Set stepper motor driver output</span>00050 <a class="code" href="sm__driver_8h.html#a12">sm_driver_StepOutput</a>(0);00051 00052 <span class="comment">// Init of Timer/Counter1</span>00053 <a class="code" href="speed__cntr_8c.html#a2">speed_cntr_Init_Timer1</a>();00054 00055 __enable_interrupt();00056 }</div></pre><p>Here is the call graph for this function:<p><center><img src="main_8c_a4_cgraph.png" border="0" usemap="#main_8c_a4_cgraph_map" alt=""></center><map name="main_8c_a4_cgraph_map"><area href="uart_8c.html#a6" shape="rect" coords="139,7,213,33" alt=""><area href="sm__driver_8c.html#a6" shape="rect" coords="112,57,240,84" alt=""><area href="sm__driver_8h.html#a12" shape="rect" coords="97,108,255,135" alt=""><area href="speed__cntr_8c.html#a2" shape="rect" coords="95,159,257,185" alt=""></map> </td> </tr></table><a class="anchor" name="a5" doxytag="main.c::main" ></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"> void main </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>Demo of linear speed controller. <p>Serial interface frontend to test linear speed controller. <p>Definition at line <a class="el" href="main_8c-source.html#l00062">62</a> of file <a class="el" href="main_8c-source.html">main.c</a>.<p>References <a class="el" href="global_8h-source.html#l00033">GLOBAL_FLAGS::cmd</a>, <a class="el" href="global_8h-source.html#l00025">FALSE</a>, <a class="el" href="main_8c-source.html#l00042">Init()</a>, <a class="el" href="global_8h-source.html#l00031">GLOBAL_FLAGS::running</a>, <a class="el" href="main_8c-source.html#l00190">ShowData()</a>, <a class="el" href="main_8c-source.html#l00173">ShowHelp()</a>, <a class="el" href="speed__cntr_8c-source.html#l00046">speed_cntr_Move()</a>, <a class="el" href="main_8c-source.html#l00033">status</a>, <a class="el" href="sm__driver_8c-source.html#l00045">stepPosition</a>, <a class="el" href="global_8h-source.html#l00024">TRUE</a>, <a class="el" href="uart_8c-source.html#l00135">uart_FlushRxBuffer()</a>, <a class="el" href="uart_8c-source.html#l00027">UART_RxBuffer</a>, and <a class="el" href="uart_8c-source.html#l00097">uart_SendString()</a>.<p><pre class="fragment"><div>00063 {00064 <span class="comment">// Number of steps to move.</span>00065 <span class="keywordtype">int</span> steps = 1000;00066 <span class="comment">// Accelration to use.</span>00067 <span class="keywordtype">int</span> acceleration = 100;00068 <span class="comment">// Deceleration to use.</span>00069 <span class="keywordtype">int</span> deceleration = 100;00070 <span class="comment">// Speed to use.</span>00071 <span class="keywordtype">int</span> speed = 800;00072 <span class="comment">// Tells if the received string was a valid command.</span>00073 <span class="keywordtype">char</span> okCmd = <a class="code" href="global_8h.html#a1">FALSE</a>;00074 00075 <a class="code" href="main_8c.html#a4">Init</a>();00076 00077 <span class="comment">// Outputs help screen.</span>00078 <a class="code" href="uart_8h.html#a9">uart_SendString</a>(<span class="stringliteral">"\n\r"</span>);00079 <a class="code" href="main_8c.html#a2">ShowHelp</a>();00080 <a class="code" href="main_8c.html#a3">ShowData</a>(stepPosition, acceleration, deceleration, speed, steps);00081 00082 <span class="keywordflow">while</span>(1) {00083 <span class="comment">// If a command is received, check the command and act on it.</span>00084 <span class="keywordflow">if</span>(<a class="code" href="main_8c.html#a0">status</a>.<a class="code" href="structGLOBAL__FLAGS.html#o0">cmd</a> == <a class="code" href="global_8h.html#a0">TRUE</a>){00085 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[0] == <span class="charliteral">'m'</span>){00086 <span class="comment">// Move with...</span>00087 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[1] == <span class="charliteral">' '</span>){00088 <span class="comment">// ...number of steps given.</span>00089 steps = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+2);00090 <a class="code" href="speed__cntr_8h.html#a12">speed_cntr_Move</a>(steps, acceleration, deceleration, speed);00091 okCmd = <a class="code" href="global_8h.html#a0">TRUE</a>;00092 <a class="code" href="uart_8h.html#a9">uart_SendString</a>(<span class="stringliteral">"\n\r "</span>);00093 }00094 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[1] == <span class="charliteral">'o'</span>){00095 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[2] == <span class="charliteral">'v'</span>){00096 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[3] == <span class="charliteral">'e'</span>){00097 <span class="comment">// ...all parameters given</span>00098 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[4] == <span class="charliteral">' '</span>){00099 <span class="keywordtype">int</span> i = 6;00100 steps = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+5);00101 <span class="keywordflow">while</span>((<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[i] != <span class="charliteral">' '</span>) && (<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[i] != 13)) i++;00102 i++;00103 acceleration = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+i);00104 <span class="keywordflow">while</span>((<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[i] != <span class="charliteral">' '</span>) && (<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[i] != 13)) i++;00105 i++;00106 deceleration = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+i);00107 <span class="keywordflow">while</span>((<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[i] != <span class="charliteral">' '</span>) && (<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[i] != 13)) i++;00108 i++;00109 speed = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+i);00110 <a class="code" href="speed__cntr_8h.html#a12">speed_cntr_Move</a>(steps, acceleration, deceleration, speed);00111 okCmd = <a class="code" href="global_8h.html#a0">TRUE</a>;00112 <a class="code" href="uart_8h.html#a9">uart_SendString</a>(<span class="stringliteral">"\n\r "</span>);00113 }00114 }00115 }00116 }00117 }00118 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[0] == <span class="charliteral">'a'</span>){00119 <span class="comment">// Set acceleration.</span>00120 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[1] == <span class="charliteral">' '</span>){00121 acceleration = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+2);00122 okCmd = <a class="code" href="global_8h.html#a0">TRUE</a>;00123 }00124 }00125 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[0] == <span class="charliteral">'d'</span>){00126 <span class="comment">// Set deceleration.</span>00127 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[1] == <span class="charliteral">' '</span>){00128 deceleration = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+2);00129 okCmd = <a class="code" href="global_8h.html#a0">TRUE</a>;00130 }00131 }00132 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[0] == <span class="charliteral">'s'</span>){00133 <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[1] == <span class="charliteral">' '</span>){00134 speed = atoi((<span class="keywordtype">char</span> <span class="keyword">const</span> *)UART_RxBuffer+2);00135 okCmd = <a class="code" href="global_8h.html#a0">TRUE</a>;00136 }00137 }00138 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[0] == 13){00139 <a class="code" href="speed__cntr_8h.html#a12">speed_cntr_Move</a>(steps, acceleration, deceleration, speed);00140 okCmd = <a class="code" href="global_8h.html#a0">TRUE</a>;00141 }00142 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="uart_8c.html#a1">UART_RxBuffer</a>[0] == <span class="charliteral">'?'</span>){00143 <a class="code" href="main_8c.html#a2">ShowHelp</a>();00144 okCmd = <a class="code" href="global_8h.html#a0">TRUE</a>;00145 }00146 00147 <span class="comment">// Send help if invalid command is received.</span>00148 <span class="keywordflow">if</span>(okCmd != <a class="code" href="global_8h.html#a0">TRUE</a>)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -