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

📄 main_8c-source.html

📁 Atmel算法(pid)-步进电机驱动源码 HOWTO,不好用你找我,绝对ok!
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<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> &lt;&lt; 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> &gt;&gt; 8) &gt; nextSectorStart)<a name="l00728"></a>00728   {<a name="l00729"></a>00729     <a class="code" href="main_8c.html#a2">sineTableIndex</a> = (nextSectorStart &lt;&lt; 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 &amp; (<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 &amp;= ~(1 &lt;&lt; <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 &lt;&lt; <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 &amp;= ~<a class="code" href="PMSM_8h.html#a5">PWM_PATTERN_PORTB</a>;<a name="l00803"></a>00803   DDRD &amp;= ~<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> &lt; <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>(&amp;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>) &amp;&amp;<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>) &amp;&amp; (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 &gt;= <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>) &amp;&amp; (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>) &lt;&lt; 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>) &lt;&lt; 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 + -