📄 main_8c-source.html
字号:
<a name="l00720"></a>00720 {<a name="l00721"></a>00721 <a class="code" href="main_8c.html#a2">sineTableIndex</a> -= (<a class="code" href="PMSM_8h.html#a3">SINE_TABLE_LENGTH</a> << 8);<a name="l00722"></a>00722 <a class="code" href="main_8c.html#a6">sineTableNextSectorStart</a> -= <a class="code" href="PMSM_8h.html#a3">SINE_TABLE_LENGTH</a>;<a name="l00723"></a>00723 }<a name="l00724"></a>00724 <a name="l00725"></a>00725 <span class="comment">//Make copy of sineNextSectorStart to specify order of volatile access.</span><a name="l00726"></a>00726 <a class="code" href="stdint_8h.html#a56">uint8_t</a> nextSectorStart = <a class="code" href="main_8c.html#a6">sineTableNextSectorStart</a>;<a name="l00727"></a>00727 <span class="keywordflow">if</span> ((<a class="code" href="main_8c.html#a2">sineTableIndex</a> >> 8) > nextSectorStart)<a name="l00728"></a>00728 {<a name="l00729"></a>00729 <a class="code" href="main_8c.html#a2">sineTableIndex</a> = (nextSectorStart << 8);<a name="l00730"></a>00730 }<a name="l00731"></a>00731 }<a name="l00732"></a>00732 <a name="l00733"></a>00733 <a name="l00745"></a>00745 <span class="preprocessor">#pragma inline=forced</span><a name="l00746"></a><a class="code" href="main_8c.html#a32">00746</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a32">SetAdvanceCommutation</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> advanceCommutation)<a name="l00747"></a>00747 {<a name="l00748"></a>00748 <a class="code" href="main_8c.html#a5">advanceCommutationSteps</a> = advanceCommutation;<a name="l00749"></a>00749 }<a name="l00750"></a>00750 <a name="l00751"></a>00751 <a name="l00763"></a>00763 <span class="preprocessor">#pragma inline=forced</span><a name="l00764"></a><a class="code" href="main_8c.html#a33">00764</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a33">TachoOutputUpdate</a>(<span class="keyword">const</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> hall)<a name="l00765"></a>00765 {<a name="l00766"></a>00766 <span class="preprocessor">#if (TACHO_OUTPUT_ENABLED)</span><a name="l00767"></a>00767 <span class="preprocessor"></span> <span class="keywordflow">if</span> ( (hall & (<a class="code" href="stdint_8h.html#a56">uint8_t</a>)(hall - 1)) != 0 )<a name="l00768"></a>00768 {<a name="l00769"></a>00769 PORTD &= ~(1 << <a class="code" href="PMSM_8h.html#a28">TACHO_OUTPUT_PIN</a>);<a name="l00770"></a>00770 }<a name="l00771"></a>00771 <span class="keywordflow">else</span><a name="l00772"></a>00772 {<a name="l00773"></a>00773 PORTD |= (1 << <a class="code" href="PMSM_8h.html#a28">TACHO_OUTPUT_PIN</a>);<a name="l00774"></a>00774 }<a name="l00775"></a>00775 <span class="preprocessor">#endif</span><a name="l00776"></a>00776 <span class="preprocessor"></span>}<a name="l00777"></a>00777 <a name="l00778"></a>00778 <a name="l00785"></a>00785 <span class="preprocessor">#pragma inline=forced</span><a name="l00786"></a><a class="code" href="main_8c.html#a34">00786</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a34">EnablePWMOutputs</a>(<span class="keywordtype">void</span>)<a name="l00787"></a>00787 {<a name="l00788"></a>00788 DDRB |= <a class="code" href="PMSM_8h.html#a5">PWM_PATTERN_PORTB</a>;<a name="l00789"></a>00789 DDRD |= <a class="code" href="PMSM_8h.html#a6">PWM_PATTERN_PORTD</a>;<a name="l00790"></a>00790 }<a name="l00791"></a>00791 <a name="l00792"></a>00792 <a name="l00799"></a>00799 <span class="preprocessor">#pragma inline=forced</span><a name="l00800"></a><a class="code" href="main_8c.html#a35">00800</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a35">DisablePWMOutputs</a>(<span class="keywordtype">void</span>)<a name="l00801"></a>00801 {<a name="l00802"></a>00802 DDRB &= ~<a class="code" href="PMSM_8h.html#a5">PWM_PATTERN_PORTB</a>;<a name="l00803"></a>00803 DDRD &= ~<a class="code" href="PMSM_8h.html#a6">PWM_PATTERN_PORTD</a>;<a name="l00804"></a>00804 }<a name="l00805"></a>00805 <a name="l00806"></a>00806 <a name="l00815"></a>00815 <span class="preprocessor">#pragma inline=forced</span><a name="l00816"></a><a class="code" href="main_8c.html#a36">00816</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a36">CommutationTicksUpdate</a>(<span class="keywordtype">void</span>)<a name="l00817"></a>00817 {<a name="l00818"></a>00818 <span class="keywordflow">if</span> (<a class="code" href="main_8c.html#a3">commutationTicks</a> < <a class="code" href="PMSM_8h.html#a34">COMMUTATION_TICKS_STOPPED</a>)<a name="l00819"></a>00819 {<a name="l00820"></a>00820 <a class="code" href="main_8c.html#a3">commutationTicks</a>++;<a name="l00821"></a>00821 }<a name="l00822"></a>00822 <span class="keywordflow">else</span><a name="l00823"></a>00823 {<a name="l00824"></a>00824 fastFlags.motorStopped = <a class="code" href="pid_8h.html#a5">TRUE</a>;<a name="l00825"></a>00825 fastFlags.motorSynchronized = <a class="code" href="pid_8h.html#a4">FALSE</a>;<a name="l00826"></a>00826 <span class="keywordflow">if</span> (fastFlags.driveWaveform != <a class="code" href="PMSM_8h.html#a30">WAVEFORM_BLOCK_COMMUTATION</a>)<a name="l00827"></a>00827 {<a name="l00828"></a>00828 <a class="code" href="main_8c.html#a18">TimersSetModeBlockCommutation</a>();<a name="l00829"></a>00829 <a class="code" href="main_8c.html#a24">BlockCommutate</a>(<a class="code" href="main_8c.html#a22">GetDesiredDirection</a>(), <a class="code" href="main_8c.html#a25">GetHall</a>());<a name="l00830"></a>00830 <a name="l00831"></a>00831 <span class="preprocessor">#if (SPEED_CONTROL_METHOD == SPEED_CONTROL_CLOSED_LOOP)</span><a name="l00832"></a>00832 <span class="preprocessor"></span> <a class="code" href="pid_8c.html#a2">PID_Reset_Integrator</a>(&pidParameters);<a name="l00833"></a>00833 <span class="preprocessor">#endif</span><a name="l00834"></a>00834 <span class="preprocessor"></span> }<a name="l00835"></a>00835 }<a name="l00836"></a>00836 }<a name="l00837"></a>00837 <a name="l00838"></a>00838 <a name="l00846"></a>00846 <span class="preprocessor">#pragma inline=forced</span><a name="l00847"></a><a class="code" href="main_8c.html#a37">00847</a> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a37">MotorSynchronizedUpdate</a>(<span class="keywordtype">void</span>)<a name="l00848"></a>00848 {<a name="l00849"></a>00849 <span class="keyword">static</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> synchCount = 0;<a name="l00850"></a>00850 <a name="l00851"></a>00851 <a class="code" href="structPMSMflags.html">PMSMflags_t</a> tempFlags;<a name="l00852"></a>00852 <a name="l00853"></a>00853 tempFlags = fastFlags;<a name="l00854"></a>00854 <a name="l00855"></a>00855 <span class="keywordflow">if</span> ((tempFlags.<a class="code" href="structPMSMflags.html#o1">desiredDirection</a> == tempFlags.<a class="code" href="structPMSMflags.html#o0">actualDirection</a>) &&<a name="l00856"></a>00856 (tempFlags.<a class="code" href="structPMSMflags.html#o3">motorStopped</a> == <a class="code" href="pid_8h.html#a4">FALSE</a>) && (tempFlags.<a class="code" href="structPMSMflags.html#o4">motorSynchronized</a> == <a class="code" href="pid_8h.html#a4">FALSE</a>))<a name="l00857"></a>00857 {<a name="l00858"></a>00858 synchCount++;<a name="l00859"></a>00859 <span class="keywordflow">if</span> (synchCount >= <a class="code" href="PMSM_8h.html#a41">SYNCHRONIZATION_COUNT</a>)<a name="l00860"></a>00860 {<a name="l00861"></a>00861 fastFlags.<a class="code" href="structPMSMflags.html#o4">motorSynchronized</a> = <a class="code" href="pid_8h.html#a5">TRUE</a>;<a name="l00862"></a>00862 }<a name="l00863"></a>00863 }<a name="l00864"></a>00864 <span class="keywordflow">else</span><a name="l00865"></a>00865 {<a name="l00866"></a>00866 fastFlags.motorSynchronized = <a class="code" href="pid_8h.html#a4">FALSE</a>;<a name="l00867"></a>00867 synchCount = 0;<a name="l00868"></a>00868 }<a name="l00869"></a>00869 }<a name="l00870"></a>00870 <a name="l00871"></a>00871 <a name="l00881"></a>00881 <span class="preprocessor">#pragma inline=forced</span><a name="l00882"></a><a class="code" href="main_8c.html#a38">00882</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#a38">IsMotorSynchronized</a>(<span class="keywordtype">void</span>)<a name="l00883"></a>00883 {<a name="l00884"></a>00884 <span class="keywordflow">return</span> (<a class="code" href="stdint_8h.html#a56">uint8_t</a>)(fastFlags.motorSynchronized);<a name="l00885"></a>00885 }<a name="l00886"></a>00886 <a name="l00887"></a>00887 <a name="l00900"></a>00900 <span class="preprocessor">#pragma vector=PCINT0_vect</span><a name="l00901"></a><a class="code" href="PMSM_8h.html#a81">00901</a> <span class="preprocessor"></span>__interrupt <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a39">EmergencyInterruptISR</a>(<span class="keywordtype">void</span>)<a name="l00902"></a>00902 {<a name="l00903"></a>00903 <a class="code" href="main_8c.html#a35">DisablePWMOutputs</a>();<a name="l00904"></a>00904 <span class="keywordflow">for</span> (;;)<a name="l00905"></a>00905 {<a name="l00906"></a>00906 <a name="l00907"></a>00907 }<a name="l00908"></a>00908 }<a name="l00909"></a>00909 <a name="l00910"></a>00910 <a name="l00929"></a>00929 <span class="preprocessor">#pragma vector=PCINT1_vect</span><a name="l00930"></a><a class="code" href="PMSM_8h.html#a82">00930</a> <span class="preprocessor"></span>__interrupt <span class="keywordtype">void</span> <a class="code" href="main_8c.html#a40">HallChangeISR</a>(<span class="keywordtype">void</span>)<a name="l00931"></a>00931 {<a name="l00932"></a>00932 <span class="keyword">static</span> <a class="code" href="stdint_8h.html#a56">uint8_t</a> lastHall = 0xff;<a name="l00933"></a>00933 <a class="code" href="stdint_8h.html#a56">uint8_t</a> hall;<a name="l00934"></a>00934 <a name="l00935"></a>00935 hall = <a class="code" href="main_8c.html#a25">GetHall</a>();<a name="l00936"></a>00936 <a name="l00937"></a>00937 <a class="code" href="main_8c.html#a37">MotorSynchronizedUpdate</a>();<a name="l00938"></a>00938 <a class="code" href="stdint_8h.html#a56">uint8_t</a> synch = <a class="code" href="main_8c.html#a38">IsMotorSynchronized</a>();<a name="l00939"></a>00939 <span class="keywordflow">if</span> ((fastFlags.driveWaveform != <a class="code" href="PMSM_8h.html#a31">WAVEFORM_SINUSOIDAL</a>) && (synch))<a name="l00940"></a>00940 {<a name="l00941"></a>00941 <a class="code" href="main_8c.html#a17">TimersSetModeSinusoidal</a>();<a name="l00942"></a>00942 }<a name="l00943"></a>00943 <a name="l00944"></a>00944 <span class="comment">//If sinusoidal driving is used, synchronize sine wave generation to the</span><a name="l00945"></a>00945 <span class="comment">//current hall sensor value. Advance commutation is also</span><a name="l00946"></a>00946 <span class="comment">//added in the process.</span><a name="l00947"></a>00947 <span class="keywordflow">if</span> (fastFlags.driveWaveform == <a class="code" href="PMSM_8h.html#a31">WAVEFORM_SINUSOIDAL</a>)<a name="l00948"></a>00948 {<a name="l00949"></a>00949 <a class="code" href="stdint_8h.html#a58">uint16_t</a> tempIndex;<a name="l00950"></a>00950 <span class="keywordflow">if</span> (<a class="code" href="main_8c.html#a22">GetDesiredDirection</a>() == <a class="code" href="PMSM_8h.html#a7">DIRECTION_FORWARD</a>)<a name="l00951"></a>00951 {<a name="l00952"></a>00952 tempIndex = (<a class="code" href="PMSMtables_8h.html#a6">CSOffsetsForward</a>[hall] + <a class="code" href="main_8c.html#a5">advanceCommutationSteps</a>) << 8;<a name="l00953"></a>00953 }<a name="l00954"></a>00954 <span class="keywordflow">else</span><a name="l00955"></a>00955 {<a name="l00956"></a>00956 tempIndex = (<a class="code" href="PMSMtables_8h.html#a7">CSOffsetsReverse</a>[hall] + <a class="code" href="main_8c.html#a5">advanceCommutationSteps</a>) << 8;<a name="l00957"></a>00957 }<a name="l00958"></a>00958 <a class="code" href="main_8c.html#a2">sineTableIndex</a> = tempIndex;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -