📄 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>AVR449: main.c File Reference</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.4.4 --><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>Motor control implementation. <p>This file contains the full implementation of the motor control, except the PID-controller.<p><dl compact><dt><b>Application note:</b></dt><dd>AVR449: Sinusoidal driving of three-phase permanent motor using ATtiny261/461/861.</dd></dl><dl compact><dt><b>Documentation</b></dt><dd>For comprehensive code documentation, supported compilers, compiler settings and supported devices see readme.html</dd></dl><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.5 </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/18 09:15:31 </dd></dl><br><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 "<a class="el" href="stdint_8h-source.html">stdint.h</a>"</code><br><code>#include "<a class="el" href="PMSM_8h-source.html">PMSM.h</a>"</code><br><code>#include "<a class="el" href="PMSM__tables_8h-source.html">PMSM_tables.h</a>"</code><br><code>#include "<a class="el" href="TinyX61__macros_8h-source.html">TinyX61_macros.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=""></center><map name="main.c_map"><area href="stdint_8h.html" shape="rect" coords="423,158,487,184" alt=""><area href="PMSM_8h.html" shape="rect" coords="300,158,372,184" alt=""><area href="PMSM__tables_8h.html" shape="rect" coords="127,208,242,235" alt=""><area href="TinyX61__macros_8h.html" shape="rect" coords="118,259,251,286" 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">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a23">ActualDirectionUpdate</a> (<a class="el" href="stdint_8h.html#a56">uint8_t</a> lastHall, const <a class="el" href="stdint_8h.html#a56">uint8_t</a> newHall)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Updates global actual direction flag based on the two latest hall values. <a href="#a23"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a12">ADCInit</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Sets up the ADC for speed reference input on PA7. <a href="#a12"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a25">AdjustSineTableIndex</a> (const <a class="el" href="stdint_8h.html#a58">uint16_t</a> increment)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Adjusts the sine table index according to the current increment. <a href="#a25"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a20">BlockCommutate</a> (const <a class="el" href="stdint_8h.html#a56">uint8_t</a> direction, const <a class="el" href="stdint_8h.html#a56">uint8_t</a> hall)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Performs block commutation according to running direction and hall sensor input. <a href="#a20"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a18">BlockCommutationSetDuty</a> (const <a class="el" href="stdint_8h.html#a58">uint16_t</a> compareValue)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Sets the duty cycle when operating in block commutation mode. <a href="#a18"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a29">CommutationTicksUpdate</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Updates the 'tick' counter and checks for stopped motor. <a href="#a29"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a22">DesiredDirectionUpdate</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Updates global desired direction flag. <a href="#a22"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a28">DisablePWMOutputs</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Disable PWM outputs by setting the port direction to input. <a href="#a28"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a27">EnablePWMOutputs</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Enable PWM outputs by setting the port direction to output. <a href="#a27"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a35">FaultProtectionISR</a> ()</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Hardware fault protection interrupt. <a href="#a35"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="stdint_8h.html#a56">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a19">GetDesiredDirection</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the desired direction. <a href="#a19"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="stdint_8h.html#a56">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a21">GetHall</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Reads the hall sensor inputs. <a href="#a21"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a33">HallChangeISR</a> ()</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Updates the PWM outputs according to the current position and amplitude.Hall sensor change interrupt service routine. <a href="#a33"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="stdint_8h.html#a56">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a31">IsMotorSynchronized</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Returns the motor synchronized flag. <a href="#a31"></a><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#a8">main</a> (void)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a30">MotorSynchronizedUpdate</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Updates the global motor synchronized flag. <a href="#a30"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a36">MultiplyUS15x8</a> (const <a class="el" href="stdint_8h.html#a58">uint16_t</a> m15, const <a class="el" href="stdint_8h.html#a56">uint8_t</a> m8)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Fast unsigned multiply of a 15 bit number with an 8 bit number with 15 bit result. <a href="#a36"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a13">PinChangeInit</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize Pin change interrupt for hall sensors. <a href="#a13"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a10">PLLInit</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize PLL. <a href="#a10"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a9">PortsInit</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize port pin directions and internal pull-ups. <a href="#a9"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a11">PWMInit</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize PWM on Timer/counter1. <a href="#a11"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a26">SetAdvanceCommutation</a> (const <a class="el" href="stdint_8h.html#a56">uint8_t</a> advanceCommutation)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Sets the advance commutation. <a href="#a26"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a32">SineOutputUpdate</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Get the sine table value from the small sine table.Updates the PWM outputs according to the current position and amplitude. <a href="#a32"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static <a class="el" href="stdint_8h.html#a58">uint16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a24">SineTableIncrementCalculate</a> (const <a class="el" href="stdint_8h.html#a58">uint16_t</a> ticks)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Calculates step size for sine table iteration. <a href="#a24"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a14">SpeedController</a> (<a class="el" href="stdint_8h.html#a58">uint16_t</a> speedReference)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Speed controller loop. <a href="#a14"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a34">Timer1OverflowISR</a> ()</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Timer/counter1 overflow interrupt service routine. <a href="#a34"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a16">TimerSetModeBlockCommutation</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Configures Timer/counter1 in block commutation mode. <a href="#a16"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a17">TimerSetModeBrake</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Configures Timer/Counter1 in braking mode. <a href="#a17"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a15">TimerSetModeSinusoidal</a> (void)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Configures Timer/Counter1 in Sinusoidal mode. <a href="#a15"></a><br></td></tr><tr><td colspan="2"><br><h2>Variables</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__no_init __regvar volatile <br><a class="el" href="stdint_8h.html#a56">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a5">advanceCommutationSteps</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">The advance commutation angle. <a href="#a5"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__no_init __regvar volatile <br><a class="el" href="stdint_8h.html#a58">uint16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a4">amplitude</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">The amplitude of the generated sine waves. <a href="#a4"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__no_init __regvar volatile <br><a class="el" href="stdint_8h.html#a58">uint16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a3">commutationTicks</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">The number of 'ticks' between two hall sensor changes. <a href="#a3"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__no_init __regvar volatile <br><a class="el" href="stdint_8h.html#a58">uint16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a1">sineTableIncrement</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Increment used for sine table iteration. <a href="#a1"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__no_init __regvar volatile <br><a class="el" href="stdint_8h.html#a58">uint16_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a2">sineTableIndex</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Index into sine table. <a href="#a2"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__no_init __regvar volatile <br><a class="el" href="stdint_8h.html#a56">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a6">sineTableNextSectorStart</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Index to the end of the current commutation sector. <a href="#a6"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__no_init __regvar volatile <br><a class="el" href="stdint_8h.html#a56">uint8_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a7">speedControllerTimer</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Time in ticks until the speed controller loop should be executed. <a href="#a7"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">volatile __io <a class="el" href="structPMSMflags.html">PMSMflags_t</a> <br>fastFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a0">x0a</a></td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Motor control flags placed in I/O space for fast access. <a href="#a0"></a><br></td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="a23"></a><!-- doxytag: member="main.c::ActualDirectionUpdate" ref="a23" args="(uint8_t lastHall, const uint8_t newHall)" --><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top">static void ActualDirectionUpdate </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top"><a class="el" href="stdint_8h.html#a56">uint8_t</a> </td> <td class="mdname" nowrap> <em>lastHall</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>const <a class="el" href="stdint_8h.html#a56">uint8_t</a> </td> <td class="mdname" nowrap> <em>newHall</em></td> </tr> <tr> <td class="md"></td> <td class="md">) </td> <td class="md" colspan="2"><code> [static]</code></td> </tr> </table> </td> </tr></table><table cellspacing="5" cellpadding="0" border="0"> <tr> <td> </td> <td><p>Updates global actual direction flag based on the two latest hall values. <p>Calling this function with the last two hall sensor values as parameters triggers an update of the global actualDirection flag.<p><dl compact><dt><b>Parameters:</b></dt><dd>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -