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

📄 main_8c-source.html

📁 Atmel算法(pid)-步进电机驱动源码 HOWTO,不好用你找我,绝对ok!
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00460"></a>00460 <span class="preprocessor">#pragma inline=forced</span><a name="l00461"></a><a class="code" href="main_8c.html#a21">00461</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a21">BlockCommutationSetDuty</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> duty)<a name="l00462"></a>00462 {<a name="l00463"></a>00463   <span class="comment">// Set all compare registers to new duty cycle value.</span><a name="l00464"></a>00464   OCR0A = OCR0B = OCR1AL = OCR1BL = OCR2A = OCR2B = duty;<a name="l00465"></a>00465 }<a name="l00466"></a>00466 <a name="l00467"></a>00467 <a name="l00478"></a>00478 <span class="preprocessor">#pragma inline=forced</span><a name="l00479"></a><a class="code" href="main_8c.html#a22">00479</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#a22">GetDesiredDirection</a>(<span class="keywordtype">void</span>)<a name="l00480"></a>00480 {<a name="l00481"></a>00481   <span class="keywordflow">return</span> (<a class="code" href="stdint_8h.html#a56">uint8_t</a>)fastFlags.desiredDirection;<a name="l00482"></a>00482 }<a name="l00483"></a>00483 <a name="l00484"></a>00484 <a name="l00501"></a>00501 <span class="preprocessor">#pragma inline=forced</span><a name="l00502"></a><a class="code" href="main_8c.html#a23">00502</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#a23">GetActualDirection</a>(<span class="keywordtype">void</span>)<a name="l00503"></a>00503 {<a name="l00504"></a>00504   <span class="keywordflow">return</span> fastFlags.actualDirection;<a name="l00505"></a>00505 }<a name="l00506"></a>00506 <a name="l00507"></a>00507 <a name="l00519"></a>00519 <span class="preprocessor">#pragma inline=forced</span><a name="l00520"></a><a class="code" href="main_8c.html#a24">00520</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a24">BlockCommutate</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> direction, <a class="code" href="stdint_8h.html#a56">uint8_t</a> hall)<a name="l00521"></a>00521 {<a name="l00522"></a>00522   <a class="code" href="stdint_8h.html#a56">uint8_t</a> <span class="keyword">const</span> __flash *pattern;<a name="l00523"></a>00523 <a name="l00524"></a>00524   <span class="keywordflow">if</span> (direction == <a class="code" href="PMSM_8h.html#a7">DIRECTION_FORWARD</a>)<a name="l00525"></a>00525   {<a name="l00526"></a>00526     pattern = <a class="code" href="PMSMtables_8h.html#a2">blockCommutationTableForward</a>;<a name="l00527"></a>00527   }<a name="l00528"></a>00528   <span class="keywordflow">else</span><a name="l00529"></a>00529   {<a name="l00530"></a>00530     pattern = <a class="code" href="PMSMtables_8h.html#a3">blockCommutationTableReverse</a>;<a name="l00531"></a>00531   }<a name="l00532"></a>00532   pattern += (hall * 2);<a name="l00533"></a>00533 <a name="l00534"></a>00534   <a class="code" href="main_8c.html#a35">DisablePWMOutputs</a>();<a name="l00535"></a>00535   DDRB |= *pattern++;<a name="l00536"></a>00536   DDRD |= *pattern;<a name="l00537"></a>00537 }<a name="l00538"></a>00538 <a name="l00539"></a>00539 <a name="l00555"></a>00555 <span class="preprocessor">#pragma inline=forced</span><a name="l00556"></a><a class="code" href="main_8c.html#a25">00556</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#a25">GetHall</a>(<span class="keywordtype">void</span>)<a name="l00557"></a>00557 {<a name="l00558"></a>00558   <a class="code" href="stdint_8h.html#a56">uint8_t</a> hall;<a name="l00559"></a>00559 <a name="l00560"></a>00560   hall = PINC &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="l00561"></a>00561   hall &gt;&gt;= <a class="code" href="PMSM_8h.html#a12">H1_PIN</a>;<a name="l00562"></a>00562   <span class="keywordflow">return</span> hall;<a name="l00563"></a>00563 }<a name="l00564"></a>00564 <a name="l00565"></a>00565 <a name="l00571"></a>00571 <span class="preprocessor">#pragma inline=forced</span><a name="l00572"></a><a class="code" href="main_8c.html#a26">00572</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a26">DesiredDirectionUpdate</a>(<span class="keywordtype">void</span>)<a name="l00573"></a>00573 {<a name="l00574"></a>00574   <span class="keywordflow">if</span> ( (PIND &amp; (1 &lt;&lt; <a class="code" href="PMSM_8h.html#a26">DIRECTION_COMMAND_PIN</a>)) != 0 )<a name="l00575"></a>00575   {<a name="l00576"></a>00576     fastFlags.desiredDirection = <a class="code" href="PMSM_8h.html#a8">DIRECTION_REVERSE</a>;<a name="l00577"></a>00577   }<a name="l00578"></a>00578   <span class="keywordflow">else</span><a name="l00579"></a>00579   {<a name="l00580"></a>00580     fastFlags.desiredDirection = <a class="code" href="PMSM_8h.html#a7">DIRECTION_FORWARD</a>;<a name="l00581"></a>00581   }<a name="l00582"></a>00582 }<a name="l00583"></a>00583 <a name="l00584"></a>00584 <a name="l00593"></a>00593 <span class="preprocessor">#pragma inline=forced</span><a name="l00594"></a><a class="code" href="main_8c.html#a27">00594</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a27">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="l00595"></a>00595 {<a name="l00596"></a>00596   <span class="comment">//Make sure that lastHall is within bounds of table. If not, set to 0, which is</span><a name="l00597"></a>00597   <span class="comment">//also an illegal hall value, but legal table index.</span><a name="l00598"></a>00598   <span class="keywordflow">if</span> (lastHall &gt; 6)<a name="l00599"></a>00599   {<a name="l00600"></a>00600     lastHall = 0;<a name="l00601"></a>00601   }<a name="l00602"></a>00602   <span class="keywordflow">if</span> (<a class="code" href="PMSMtables_8h.html#a4">expectedHallSequenceForward</a>[lastHall] == newHall)<a name="l00603"></a>00603   {<a name="l00604"></a>00604     fastFlags.actualDirection = <a class="code" href="PMSM_8h.html#a7">DIRECTION_FORWARD</a>;<a name="l00605"></a>00605   }<a name="l00606"></a>00606   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="PMSMtables_8h.html#a5">expectedHallSequenceReverse</a>[lastHall] == newHall)<a name="l00607"></a>00607   {<a name="l00608"></a>00608    fastFlags.actualDirection = <a class="code" href="PMSM_8h.html#a8">DIRECTION_REVERSE</a>;<a name="l00609"></a>00609   }<a name="l00610"></a>00610   <span class="keywordflow">else</span><a name="l00611"></a>00611   {<a name="l00612"></a>00612     <a class="code" href="structPMSMflags.html">PMSMflags_t</a> tempFlags = fastFlags;<a name="l00613"></a>00613     tempFlags.<a class="code" href="structPMSMflags.html#o0">actualDirection</a> = <a class="code" href="PMSM_8h.html#a9">DIRECTION_UNKNOWN</a>;<a name="l00614"></a>00614     tempFlags.<a class="code" href="structPMSMflags.html#o4">motorSynchronized</a> = <a class="code" href="pid_8h.html#a4">FALSE</a>;<a name="l00615"></a>00615     fastFlags = tempFlags;<a name="l00616"></a>00616   }<a name="l00617"></a>00617 }<a name="l00618"></a>00618 <a name="l00619"></a>00619 <a name="l00632"></a>00632 <span class="preprocessor">#pragma inline=forced</span><a name="l00633"></a><a class="code" href="main_8c.html#a28">00633</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a28">ReverseRotationSignalUpdate</a>(<span class="keywordtype">void</span>)<a name="l00634"></a>00634 {<a name="l00635"></a>00635 <span class="preprocessor">#if (REVERSE_ROTATION_SIGNAL_ENABLE)</span><a name="l00636"></a>00636 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (<a class="code" href="main_8c.html#a23">GetActualDirection</a>() == <a class="code" href="main_8c.html#a22">GetDesiredDirection</a>())<a name="l00637"></a>00637   {<a name="l00638"></a>00638     PORTD &amp;= ~(1 &lt;&lt; <a class="code" href="PMSM_8h.html#a27">REV_ROTATION_PIN</a>);<a name="l00639"></a>00639   }<a name="l00640"></a>00640   <span class="keywordflow">else</span><a name="l00641"></a>00641   {<a name="l00642"></a>00642     PORTD |= (1 &lt;&lt; <a class="code" href="PMSM_8h.html#a27">REV_ROTATION_PIN</a>);<a name="l00643"></a>00643   }<a name="l00644"></a>00644 <span class="preprocessor">#endif</span><a name="l00645"></a>00645 <span class="preprocessor"></span>}<a name="l00646"></a>00646 <a name="l00647"></a>00647 <a name="l00660"></a>00660 <span class="preprocessor">#pragma inline=forced</span><a name="l00661"></a><a class="code" href="main_8c.html#a29">00661</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a29">InsertDeadband</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> compareValue, <a class="code" href="stdint_8h.html#a56">uint8_t</a> * compareHighPtr, <a class="code" href="stdint_8h.html#a56">uint8_t</a> * compareLowPtr)<a name="l00662"></a>00662 {<a name="l00663"></a>00663   <span class="keywordflow">if</span> (compareValue &lt;= <a class="code" href="PMSM_8h.html#a2">DEAD_TIME_HALF</a>)<a name="l00664"></a>00664   {<a name="l00665"></a>00665     *compareHighPtr = 0x00;<a name="l00666"></a>00666     *compareLowPtr = compareValue;<a name="l00667"></a>00667   }<a name="l00668"></a>00668   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (compareValue &gt;= (0xff - <a class="code" href="PMSM_8h.html#a2">DEAD_TIME_HALF</a>))<a name="l00669"></a>00669   {<a name="l00670"></a>00670     *compareHighPtr = 0xff - (2 * <a class="code" href="PMSM_8h.html#a2">DEAD_TIME_HALF</a>);<a name="l00671"></a>00671     *compareLowPtr = 0xff;<a name="l00672"></a>00672   }<a name="l00673"></a>00673   <span class="keywordflow">else</span><a name="l00674"></a>00674   {<a name="l00675"></a>00675     *compareHighPtr = compareValue - <a class="code" href="PMSM_8h.html#a2">DEAD_TIME_HALF</a>;<a name="l00676"></a>00676     *compareLowPtr = compareValue + DEAD_TIME_HALF;<a name="l00677"></a>00677   }<a name="l00678"></a>00678 }<a name="l00679"></a>00679 <a name="l00680"></a>00680 <a name="l00694"></a>00694 <span class="preprocessor">#pragma inline = forced</span><a name="l00695"></a><a class="code" href="main_8c.html#a30">00695</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#a30">SineTableIncrementCalculate</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a58">uint16_t</a> ticks)<a name="l00696"></a>00696 {<a name="l00697"></a>00697   <span class="keywordflow">if</span> (ticks &lt; 256)<a name="l00698"></a>00698   {<a name="l00699"></a>00699     <span class="keywordflow">return</span> <a class="code" href="PMSMtables_8h.html#a1">divisionTable</a>[(<a class="code" href="stdint_8h.html#a56">uint8_t</a>)ticks];<a name="l00700"></a>00700   }<a name="l00701"></a>00701   <span class="keywordflow">return</span> (<a class="code" href="stdint_8h.html#a58">uint16_t</a>)(((<a class="code" href="PMSM_8h.html#a3">SINE_TABLE_LENGTH</a> / 6) &lt;&lt; 8) / ticks);<a name="l00702"></a>00702 }<a name="l00703"></a>00703 <a name="l00704"></a>00704 <a name="l00712"></a>00712 <span class="preprocessor">#pragma inline=forced</span><a name="l00713"></a><a class="code" href="main_8c.html#a31">00713</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a31">AdjustSineTableIndex</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a58">uint16_t</a> increment)<a name="l00714"></a>00714 {<a name="l00715"></a>00715   <a class="code" href="main_8c.html#a2">sineTableIndex</a> += increment;<a name="l00716"></a>00716 <a name="l00717"></a>00717   <span class="comment">// If the table index is out of bounds, wrap the index around the table end</span><a name="l00718"></a>00718   <span class="comment">// to continue from the beginning. Also wrap the next sector start index.</span><a name="l00719"></a>00719   <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#a3">SINE_TABLE_LENGTH</a>)

⌨️ 快捷键说明

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