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

📄 main_8c-source.html

📁 ATtiny261 461 861 这份资料介绍了执行Attiny261 461 861微控制器系列正弦波驱动三相无刷直流电动机霍尔传感器。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00454"></a>00454 <span class="preprocessor">#pragma inline = forced</span><a name="l00455"></a><a class="code" href="main_8c.html#a20">00455</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a20">BlockCommutate</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> direction, <span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> hall)<a name="l00456"></a>00456 {<a name="l00457"></a>00457   <span class="keywordflow">if</span> (direction == <a class="code" href="PMSM_8h.html#a27">DIRECTION_FORWARD</a>)<a name="l00458"></a>00458   {<a name="l00459"></a>00459     TCCR1E = <a class="code" href="PMSM__tables_8h.html#a1">blockCommutationTableForward</a>[hall];<a name="l00460"></a>00460   }<a name="l00461"></a>00461   <span class="keywordflow">else</span><a name="l00462"></a>00462   {<a name="l00463"></a>00463     TCCR1E = <a class="code" href="PMSM__tables_8h.html#a2">blockCommutationTableReverse</a>[hall];<a name="l00464"></a>00464   }<a name="l00465"></a>00465 }<a name="l00466"></a>00466 <a name="l00467"></a>00467 <a name="l00483"></a>00483 <span class="preprocessor">#pragma inline = forced</span><a name="l00484"></a><a class="code" href="main_8c.html#a21">00484</a> <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> <a class="code" href="main_8c.html#a21">GetHall</a>(<span class="keywordtype">void</span>)<a name="l00485"></a>00485 {<a name="l00486"></a>00486   <a class="code" href="stdint_8h.html#a56">uint8_t</a> hall;<a name="l00487"></a>00487 <a name="l00488"></a>00488   hall = (PINA) &amp; ((1 &lt;&lt; <a class="code" href="PMSM_8h.html#a14">H3_PIN</a>) | (1 &lt;&lt; <a class="code" href="PMSM_8h.html#a13">H2_PIN</a>) | (1 &lt;&lt; <a class="code" href="PMSM_8h.html#a12">H1_PIN</a>));<a name="l00489"></a>00489   hall &gt;&gt;= <a class="code" href="PMSM_8h.html#a12">H1_PIN</a>;<a name="l00490"></a>00490   <span class="keywordflow">return</span> hall;<a name="l00491"></a>00491 }<a name="l00492"></a>00492 <a name="l00493"></a>00493 <a name="l00499"></a>00499 <span class="preprocessor">#pragma inline = forced</span><a name="l00500"></a><a class="code" href="main_8c.html#a22">00500</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a22">DesiredDirectionUpdate</a>(<span class="keywordtype">void</span>)<a name="l00501"></a>00501 {<a name="l00502"></a>00502   <span class="keywordflow">if</span> ( (PINA &amp; (1 &lt;&lt; <a class="code" href="PMSM_8h.html#a16">DIRECTION_PIN</a>)) != 0 )<a name="l00503"></a>00503   {<a name="l00504"></a>00504     fastFlags.desiredDirection = <a class="code" href="PMSM_8h.html#a28">DIRECTION_REVERSE</a>;<a name="l00505"></a>00505   }<a name="l00506"></a>00506   <span class="keywordflow">else</span><a name="l00507"></a>00507   {<a name="l00508"></a>00508     fastFlags.desiredDirection = <a class="code" href="PMSM_8h.html#a27">DIRECTION_FORWARD</a>;<a name="l00509"></a>00509   }<a name="l00510"></a>00510 }<a name="l00511"></a>00511 <a name="l00512"></a>00512 <a name="l00521"></a>00521 <span class="preprocessor">#pragma inline = forced</span><a name="l00522"></a><a class="code" href="main_8c.html#a23">00522</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a23">ActualDirectionUpdate</a>(<a class="code" href="stdint_8h.html#a56">uint8_t</a> lastHall, <span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> newHall)<a name="l00523"></a>00523 {<a name="l00524"></a>00524   <span class="comment">//Make sure that lastHall is within bounds of table. If not, set to an</span><a name="l00525"></a>00525   <span class="comment">//illegal hall value, but legal table index.</span><a name="l00526"></a>00526   <span class="keywordflow">if</span> (lastHall &gt; 7)<a name="l00527"></a>00527   {<a name="l00528"></a>00528     lastHall = 0;<a name="l00529"></a>00529   }<a name="l00530"></a>00530   <span class="keywordflow">if</span> (<a class="code" href="PMSM__tables_8h.html#a3">expectedHallSequenceForward</a>[lastHall] == newHall)<a name="l00531"></a>00531   {<a name="l00532"></a>00532     fastFlags.actualDirection = <a class="code" href="PMSM_8h.html#a27">DIRECTION_FORWARD</a>;<a name="l00533"></a>00533   }<a name="l00534"></a>00534   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="PMSM__tables_8h.html#a4">expectedHallSequenceReverse</a>[lastHall] == newHall)<a name="l00535"></a>00535   {<a name="l00536"></a>00536    fastFlags.actualDirection = <a class="code" href="PMSM_8h.html#a28">DIRECTION_REVERSE</a>;<a name="l00537"></a>00537   }<a name="l00538"></a>00538   <span class="keywordflow">else</span><a name="l00539"></a>00539   {<a name="l00540"></a>00540     <a class="code" href="structPMSMflags.html">PMSMflags_t</a> tempFlags = fastFlags;<a name="l00541"></a>00541     tempFlags.<a class="code" href="structPMSMflags.html#o0">actualDirection</a> = <a class="code" href="PMSM_8h.html#a29">DIRECTION_UNKNOWN</a>;<a name="l00542"></a>00542     tempFlags.<a class="code" href="structPMSMflags.html#o4">motorSynchronized</a> = <a class="code" href="pid_8h.html#a4">FALSE</a>;<a name="l00543"></a>00543     fastFlags = tempFlags;<a name="l00544"></a>00544   }<a name="l00545"></a>00545 }<a name="l00546"></a>00546 <a name="l00547"></a>00547 <a name="l00558"></a>00558 <span class="preprocessor">#pragma inline = forced</span><a name="l00559"></a><a class="code" href="main_8c.html#a24">00559</a> <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="stdint_8h.html#a58">uint16_t</a> <a class="code" href="main_8c.html#a24">SineTableIncrementCalculate</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a58">uint16_t</a> ticks)<a name="l00560"></a>00560 {<a name="l00561"></a>00561   <span class="keywordflow">return</span> (<a class="code" href="stdint_8h.html#a58">uint16_t</a>)(((<a class="code" href="PMSM_8h.html#a30">SINE_TABLE_LENGTH</a> / 6) &lt;&lt; 8) / ticks);<a name="l00562"></a>00562 }<a name="l00563"></a>00563 <a name="l00564"></a>00564 <a name="l00572"></a>00572 <span class="preprocessor">#pragma inline = forced</span><a name="l00573"></a><a class="code" href="main_8c.html#a25">00573</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a25">AdjustSineTableIndex</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a58">uint16_t</a> increment)<a name="l00574"></a>00574 {<a name="l00575"></a>00575   <a class="code" href="main_8c.html#a2">sineTableIndex</a> += increment;<a name="l00576"></a>00576 <a name="l00577"></a>00577   <span class="comment">// If the table index is out of bounds, wrap the index around the table end</span><a name="l00578"></a>00578   <span class="comment">// to continue from the beginning. Also wrap the next sector start index.</span><a name="l00579"></a>00579   <span class="keywordflow">if</span> ((<a class="code" href="main_8c.html#a2">sineTableIndex</a> &gt;&gt; 8) &gt;= <a class="code" href="PMSM_8h.html#a30">SINE_TABLE_LENGTH</a>)<a name="l00580"></a>00580   {<a name="l00581"></a>00581     <a class="code" href="main_8c.html#a2">sineTableIndex</a> -= (<a class="code" href="PMSM_8h.html#a30">SINE_TABLE_LENGTH</a> &lt;&lt; 8);<a name="l00582"></a>00582     <a class="code" href="main_8c.html#a6">sineTableNextSectorStart</a> -= <a class="code" href="PMSM_8h.html#a30">SINE_TABLE_LENGTH</a>;<a name="l00583"></a>00583   }<a name="l00584"></a>00584 <a name="l00585"></a>00585   <span class="comment">//Make copy of sineNextSectorStart to specify order of volatile access.</span><a name="l00586"></a>00586   <a class="code" href="stdint_8h.html#a56">uint8_t</a> nextSectorStart = <a class="code" href="main_8c.html#a6">sineTableNextSectorStart</a>;<a name="l00587"></a>00587   <span class="keywordflow">if</span> ((<a class="code" href="main_8c.html#a2">sineTableIndex</a> &gt;&gt; 8) &gt; nextSectorStart)<a name="l00588"></a>00588   {<a name="l00589"></a>00589     <a class="code" href="main_8c.html#a2">sineTableIndex</a> = (nextSectorStart &lt;&lt; 8);<a name="l00590"></a>00590   }<a name="l00591"></a>00591 }<a name="l00592"></a>00592 <a name="l00593"></a>00593 <a name="l00605"></a>00605 <span class="preprocessor">#pragma inline = forced</span><a name="l00606"></a><a class="code" href="main_8c.html#a26">00606</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a26">SetAdvanceCommutation</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> advanceCommutation)<a name="l00607"></a>00607 {<a name="l00608"></a>00608   <a class="code" href="main_8c.html#a5">advanceCommutationSteps</a> = advanceCommutation;<a name="l00609"></a>00609 }<a name="l00610"></a>00610 <a name="l00611"></a>00611 <a name="l00616"></a>00616 <span class="preprocessor">#pragma inline = forced</span><a name="l00617"></a><a class="code" href="main_8c.html#a27">00617</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a27">EnablePWMOutputs</a>(<span class="keywordtype">void</span>)<a name="l00618"></a>00618 {<a name="l00619"></a>00619   DDRB |= <a class="code" href="PMSM_8h.html#a11">PWM_PIN_MASK_PORTB</a>;<a name="l00620"></a>00620 }<a name="l00621"></a>00621 <a name="l00622"></a>00622 <a name="l00627"></a>00627 <span class="preprocessor">#pragma inline = forced</span><a name="l00628"></a><a class="code" href="main_8c.html#a28">00628</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a28">DisablePWMOutputs</a>(<span class="keywordtype">void</span>)<a name="l00629"></a>00629 {<a name="l00630"></a>00630   DDRB &amp;= (~<a class="code" href="PMSM_8h.html#a11">PWM_PIN_MASK_PORTB</a>);<a name="l00631"></a>00631 }<a name="l00632"></a>00632 <a name="l00633"></a>00633 <a name="l00642"></a>00642 <span class="preprocessor">#pragma inline = forced</span><a name="l00643"></a><a class="code" href="main_8c.html#a29">00643</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a29">CommutationTicksUpdate</a>(<span class="keywordtype">void</span>)<a name="l00644"></a>00644 {<a name="l00645"></a>00645   <span class="keywordflow">if</span> (<a class="code" href="main_8c.html#a3">commutationTicks</a> &lt; <a class="code" href="PMSM_8h.html#a36">COMMUTATION_TICKS_STOPPED</a>)<a name="l00646"></a>00646   {<a name="l00647"></a>00647     <a class="code" href="main_8c.html#a3">commutationTicks</a>++;<a name="l00648"></a>00648   }<a name="l00649"></a>00649   <span class="keywordflow">else</span><a name="l00650"></a>00650   {<a name="l00651"></a>00651     fastFlags.motorStopped = <a class="code" href="pid_8h.html#a5">TRUE</a>;<a name="l00652"></a>00652     fastFlags.motorSynchronized = <a class="code" href="pid_8h.html#a4">FALSE</a>;<a name="l00653"></a>00653     <a class="code" href="main_8c.html#a1">sineTableIncrement</a> = 0;<a name="l00654"></a>00654     <span class="keywordflow">if</span> (fastFlags.driveWaveform != <a class="code" href="PMSM_8h.html#a38">WAVEFORM_BLOCK_COMMUTATION</a>)<a name="l00655"></a>00655     {<a name="l00656"></a>00656       <a class="code" href="main_8c.html#a16">TimerSetModeBlockCommutation</a>();<a name="l00657"></a>00657       <a class="code" href="main_8c.html#a20">BlockCommutate</a>(<a class="code" href="main_8c.html#a19">GetDesiredDirection</a>(), <a class="code" href="main_8c.html#a21">GetHall</a>());<a name="l00658"></a>00658 <a name="l00659"></a>00659 <span class="preprocessor">#if (SPEED_CONTROL_METHOD == SPEED_CONTROL_CLOSED_LOOP)</span><a name="l00660"></a>00660 <span class="preprocessor"></span>      <a class="code" href="pid_8c.html#a2">pid_Reset_Integrator</a>(&amp;pidParameters);<a name="l00661"></a>00661 <span class="preprocessor">#endif</span><a name="l00662"></a>00662 <span class="preprocessor"></span>    }<a name="l00663"></a>00663   }<a name="l00664"></a>00664 }<a name="l00665"></a>00665 <a name="l00666"></a>00666 <a name="l00674"></a>00674 <span class="preprocessor">#pragma inline = forced</span><a name="l00675"></a><a class="code" href="main_8c.html#a30">00675</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a30">MotorSynchronizedUpdate</a>(<span class="keywordtype">void</span>)<a name="l00676"></a>00676 {<a name="l00677"></a>00677   <span class="keyword">static</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> synchCount = 0;<a name="l00678"></a>00678 <a name="l00679"></a>00679   <a class="code" href="structPMSMflags.html">PMSMflags_t</a> tempFlags;<a name="l00680"></a>00680 <a name="l00681"></a>00681   tempFlags = fastFlags;<a name="l00682"></a>00682 

⌨️ 快捷键说明

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