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

📄 main_8c.html

📁 一个用GCC做的atmel芯片控制的无刷无传感器的程序.包括各种参考文档!
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<!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>Sensorless control of 3-phase brushless DC motors: 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&nbsp;Page</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="globals.html">Globals</a></div><h1>main.c File Reference</h1><hr><a name="_details"></a><h2>Detailed Description</h2>Atmel Corporation<p><ul><li>File : <a class="el" href="main_8c.html">main.c</a></li><li>Compiler : IAR EWAAVR 2.28a/3.10c</li></ul><p><ul><li>Support mail : <a href="mailto:avr@atmel.com">avr@atmel.com</a></li></ul><p><ul><li>Supported devices : ATmega48/88/168</li></ul><p><ul><li>AppNote : AVR444 - Sensorless control of three-phase brushless DC motors with ATmega48.</li></ul><p><ul><li>Description : Example of how to use the ATmega48 for sensorless control of a three phase brushless DC motor.</li></ul><p><dl compact><dt><b>Revision</b></dt><dd>1.1 </dd></dl><dl compact><dt><b>Date</b></dt><dd>Monday, October 10, 2005 11:15:46 UTC </dd></dl><p>Definition in file <a class="el" href="main_8c-source.html">main.c</a>.<p><code>#include &quot;<a class="el" href="BLDC_8h-source.html">BLDC.h</a>&quot;</code><br><code>#include &lt;ioavr.h&gt;</code><br><code>#include &lt;inavr.h&gt;</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="BLDC_8h.html" shape="rect" coords="119,7,188,33" 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 unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a31">CalculateCurrent</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculates current consumption.  <a href="#a31"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static unsigned long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a29">CalculateSpeed</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculates the current speed in electrical RPM.  <a href="#a29"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static unsigned long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a30">CalculateSpeedSetpoint</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculates the speed set-point in electrical RPM.  <a href="#a30"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a22">Commutate</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Commutates and prepares for new zero-cross detection.  <a href="#a22"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a33">CurrentControl</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Current control loop.  <a href="#a33"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a24">CurrentMeasurementComplete</a> ()</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a23">EnableZCDetection</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables zero-cross detection.  <a href="#a23"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a16">InitADC</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes the AD-converter.  <a href="#a16"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a17">InitAnalogComparator</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes the analog comparator.  <a href="#a17"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a14">InitPorts</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes I/O ports.  <a href="#a14"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a15">InitTimers</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes timers (for commutation timing and PWM).  <a href="#a15"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a12">main</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Program entry point.  <a href="#a12"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a19">MakeTables</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes arrays for motor driving and AD channel selection.  <a href="#a19"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a21">MotorPWMBottom</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Timer/counter0 bottom overflow. Used for zero-cross detection.  <a href="#a21"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a26">OverCurrentISR</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Overcurrent interrupt.  <a href="#a26"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a28">PWMControl</a> (void)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a13">ResetHandler</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Examines the reset source and acts accordingly.  <a href="#a13"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static signed int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a32">SpeedControl</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Speed control loop.  <a href="#a32"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a20">StartMotor</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Executes the motor startup sequence.  <a href="#a20"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a27">StartupDelay</a> (unsigned int delay)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generates a delay used during startup.  <a href="#a27"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__interrupt void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a25">WatchdogISR</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Watchdog interrupt.  <a href="#a25"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a18">WatchdogTimerEnable</a> (void)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes the watchdog timer.  <a href="#a18"></a><br></td></tr><tr><td colspan="2"><br><h2>Variables</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a1">ADMUXTable</a> [6]</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Array of ADC channel selections for each commutation step.  <a href="#a1"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">volatile unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a11">currentUpdated</a> = FALSE</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Flag that specifies whether a new current measurement is available.  <a href="#a11"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a0">driveTable</a> [6]</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Array of power stage enable signals for each commutation step.  <a href="#a0"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__regvar __no_init volatile <br>unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a3">filteredTimeSinceCommutation</a></td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Filtered commutation timer variable and speed indicator. This value equals half the time of one commutation step. It is filtered through an IIR filter, so the value stored is not the most recent measuremnt. The variable is stored in registers R14-R15 for quicker access.  <a href="#a3"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__regvar __no_init volatile <br>unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a6">nextCommutationStep</a></td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The commutation step that starts at next commutation.  <a href="#a6"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__regvar __no_init volatile <br>unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a4">nextDrivePattern</a></td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The power stage enable signals that will be output to the motor drivers at next commutation.  <a href="#a4"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">volatile unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a9">referenceVoltageADC</a></td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADC reading of the known external reference voltage.  <a href="#a9"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">volatile unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a8">shuntVoltageADC</a> = 0</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADC reading of shunt voltage.  <a href="#a8"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">volatile unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a7">speedReferenceADC</a></td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ADC reading of external analog speed reference.  <a href="#a7"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">volatile unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a10">speedUpdated</a> = FALSE</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Flag that specifies whether a new external speed reference and a motor speed measurement is available.  <a href="#a10"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a2">startupDelays</a> [STARTUP_NUM_COMMUTATIONS]</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Array holding the intercommutation delays used during startup.  <a href="#a2"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">__regvar __no_init volatile <br>unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8c.html#a5">zcPolarity</a></td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Polarity of the expected zero crossing.  <a href="#a5"></a><br></td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="a31"></a><!-- doxytag: member="main.c::CalculateCurrent" ref="a31" args="()" --><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 unsigned int CalculateCurrent           </td>          <td class="md" valign="top">(&nbsp;</td>          <td class="mdname1" valign="top" nowrap>          </td>          <td class="md" valign="top">&nbsp;)&nbsp;</td>          <td class="md" nowrap><code> [static]</code></td>        </tr>      </table>    </td>  </tr></table><table cellspacing="5" cellpadding="0" border="0">  <tr>    <td>      &nbsp;    </td>    <td><p>Calculates current consumption. <p>This function calculates the current consumption in milliAmperes from the global variable <a class="el" href="main_8c.html#a8">shuntVoltageADC</a>. The external know reference voltage is used to compensate for varying AREF voltage.<p>Definition at line <a class="el" href="main_8c-source.html#l00719">719</a> of file <a class="el" href="main_8c-source.html">main.c</a>.<p>References <a class="el" href="BLDC_8h-source.html#l00228">EXTERNAL_REF_VOLTAGE</a>, <a class="el" href="main_8c-source.html#l00074">referenceVoltageADC</a>, <a class="el" href="BLDC_8h-source.html#l00231">SHUNT_RESISTANCE</a>, <a class="el" href="main_8c-source.html#l00071">shuntVoltageADC</a>, and <a class="el" href="BLDC_8h-source.html#l00042">UL</a>.<div class="fragment"><pre class="fragment"><a name="l00720"></a>00720 {<a name="l00721"></a>00721   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ADCref;<a name="l00722"></a>00722   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current;<a name="l00723"></a>00723 <a name="l00724"></a>00724   <span class="comment">// Calculate the voltage at AREF pin (scaled down motor supply voltage),</span><a name="l00725"></a>00725   <span class="comment">// using the known reference voltage. (In milliVolts)</span><a name="l00726"></a>00726   ADCref = <a class="code" href="BLDC_8h.html#a64">EXTERNAL_REF_VOLTAGE</a> * 256<a class="code" href="BLDC_8h.html#a5">UL</a> / <a class="code" href="main_8c.html#a9">referenceVoltageADC</a>;<a name="l00727"></a>00727 <a name="l00728"></a>00728   <span class="comment">// Calculate the current through the shunt. (In milliAmperes)</span><a name="l00729"></a>00729   current = (<span class="keywordtype">unsigned</span> int)((<a class="code" href="main_8c.html#a8">shuntVoltageADC</a> * ADCref * 1000<a class="code" href="BLDC_8h.html#a5">UL</a> / 256<a class="code" href="BLDC_8h.html#a5">UL</a>) / <a class="code" href="BLDC_8h.html#a65">SHUNT_RESISTANCE</a>);<a name="l00730"></a>00730 <a name="l00731"></a>00731   <span class="keywordflow">return</span> current;<a name="l00732"></a>00732 }</pre></div>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -