📄 main_8c-source.html
字号:
<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 & ((1 << <a class="code" href="PMSM_8h.html#a14">H3_PIN</a>) | (1 << <a class="code" href="PMSM_8h.html#a13">H2_PIN</a>) | (1 << <a class="code" href="PMSM_8h.html#a12">H1_PIN</a>));<a name="l00561"></a>00561 hall >>= <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 & (1 << <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 > 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 &= ~(1 << <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 << <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 <= <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 >= (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 < 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) << 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> >> 8) >= <a class="code" href="PMSM_8h.html#a3">SINE_TABLE_LENGTH</a>)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -