<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=47&amp;t=8492&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-09-24T08:37:09+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=8492&amp;mode</id>
<entry>
<author><name><![CDATA[Ekstrapolator]]></name></author>
<updated>2014-09-24T08:37:09+01:00</updated>
<published>2014-09-24T08:37:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96534#p96534</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96534#p96534"/>
<title type="html"><![CDATA[Re: algorytm PID + ACS712 + LM723 + MCP4726]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96534#p96534"><![CDATA[
Bardzo fajny poradnik problem jest że ja nie używam LM317.<br /><br />Widzę na dzień dzisiejszy 3 wyjścia z sytuacji.<br /><br />1. Użycie wzmacniacza i podniesienie wyjścia z MCP4726 o 0,5V, następnie jako napięcie referencyjne do MCP4726 podłączenie 0,2V wtedy 0V na MCP4726 to na wyjściu wzmacniacza będzie 0,5V. Na MCP4726 0,2V na wyjscu wzmacniacza 0,7V.<br /><br />2. Dynamiczna zmiana współczynników Kp, Ki, Kd w zależności od wielkości uchybu. Spróbowałem wyniki poniżej.<br /><a href="http://forum.atnel.pl/_obrazki/o/2072/ad3cf8aa3a4ca157b39a2f4c9eacea65.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2072/ad3cf8aa3a4ca157b39a2f4c9eacea65.JPG" alt="Obrazek" /></a><br /><br />3. Po wykryciu uchybu większego niż X zabezpieczenie nad prądowe na MAX napięcie spada do 0V, a później powoli zatykam tranzystor aż do uzyskania ustawianego prądu. <br /><br />Skłaniam się do rozwiązania numer 3 będzie najszybsze co w zabezpieczeniu nad prądowym ma największe znaczenie, a poza tym jest najłatwiejsze w implementacji. Największym problemem jest tutaj krzywa pracy tranzystora.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/2072/d16d2e9ac20b3b59f49c2bbd17c3c9c6.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2072/d16d2e9ac20b3b59f49c2bbd17c3c9c6.JPG" alt="Obrazek" /></a><br />Źródło : Elektronika dla wszystkich 4/98<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2072">Ekstrapolator</a> — 24 wrz 2014, o 08:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pietszyk]]></name></author>
<updated>2014-09-22T06:49:39+01:00</updated>
<published>2014-09-22T06:49:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96308#p96308</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96308#p96308"/>
<title type="html"><![CDATA[Re: algorytm PID + ACS712 + LM723 + MCP4726]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96308#p96308"><![CDATA[
Polecam obejrzeć trzy odcinkowy poradnik o zasilaczach <!-- m --><a class="postlink" href="http://www.youtube.com/watch?v=CIGjActDeoM" >http://www.youtube.com/watch?v=CIGjActDeoM</a><!-- m -->. Świetnie wytłumaczona jest właśnie regulacja prądu którą można uniwersalnie stosować do regulatorów liniowych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2341">pietszyk</a> — 22 wrz 2014, o 06:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[oreja]]></name></author>
<updated>2014-09-21T13:03:50+01:00</updated>
<published>2014-09-21T13:03:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96243#p96243</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96243#p96243"/>
<title type="html"><![CDATA[Re: algorytm PID + ACS712 + LM723 + MCP4726]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=96243#p96243"><![CDATA[
Chcesz zmienić zakres sygnału z 0.5V-0.8V na 0-5V, nie da się inaczej tego zrobić jak z użyciem wzmacniacza (wzmacniacza napięcia). Potrzebujesz 16 krotnego wzmocnienia, do wzmacniacza jako uziemienie podłącz nie 0V ale 0.5V, wtedy wzmacniacz będzie widział sygnał 0.5-0.8 jako 0-0.3. Po wzmocnieniu 16 krotnym otrzymasz zakres 0-4.8V.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5895">oreja</a> — 21 wrz 2014, o 13:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ekstrapolator]]></name></author>
<updated>2014-09-12T14:09:31+01:00</updated>
<published>2014-09-12T14:09:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=95230#p95230</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=95230#p95230"/>
<title type="html"><![CDATA[algorytm PID + ACS712 + LM723 + MCP4726]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8492&amp;p=95230#p95230"><![CDATA[
Witam,<br /><br />Zrobiłem na stykówce zasilacz podobny do tego <a href="http://serwis.avt.pl/manuals/AVT5161.pdf"  class="postlink">LINK</a>, regulacja napięcia poprzez potencjometry.<br /><br />Chciałem sobie zrobić pseudo ogranicznik prądowy, nóżkę układu LM723 Currrent sens podpiołem do masy a do current limit do wyjscia układu DAC MCP4726 poprzez dzielnik napiecia tak ze 5V na dac to 0,8V na wyjściu z dzielnika.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/2072/2f22d0adda5b9b455d364377741f1d15.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2072/2f22d0adda5b9b455d364377741f1d15.JPG" alt="Obrazek" /></a><br /><br />Problem jest taki ze zakres pracy tego tranzystora to 0,5-0,7V pełne otwarcie. Co daje około 400 poziomów kwantyzacji z MCP4726 z 12 bitów (4065) trochę mało. Ciężko jakoś sensownie wyregulować PID bo przez długi czas nic się nie dzieje<br />(miedzy 0-0,5V MCP4726 [0-3200 p.k]) a później mała zmiana ma duży wpływ (0,5-0,7V MCP4726 [3200-3600 p.k]). Czyli z dostępnych 12 bitów wykorzystuje niespełna 5. Jak w miarę prosty sposób mieć regulacje w pełnym zakresie czyli na MCP4726 napięcie zmienia się 0-5V a do układu dostarczam 0,5-0,8V. Albo jak sprawić żeby charakterystyka tranzystora była bardziej liniowa.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/2072/6ce0288051a574ab527fb29b3fa33768.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2072/6ce0288051a574ab527fb29b3fa33768.JPG" alt="Obrazek" /></a><br />Regulacja Setpoint = 1A<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/2072/07951c2c0b58b77c20f03a3d0a7d029c.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2072/07951c2c0b58b77c20f03a3d0a7d029c.JPG" alt="Obrazek" /></a><br />Wartosci Kp, Ki, Kd, lewa oś odnosi się do Ki<br /><br />Algorytmu PID : <a href="http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/"  class="postlink">LINK</a><br /><br />Main<br /><br />[syntax=c]void setup() {<br />  // STOP INTEROUPTS FOR INITIALIZATION<br />  PID_Parameters(30,10,4);// zdefiniowanie Kp,Ki.Kd<br />  PID_MinMax(3200,3600);<br />  Wire.begin();  // start i2c jako master<br />  Serial.begin(9600); <br /><br />}<br /><br />void loop() {<br />  // put your main code here, to run repeatedly: <br />  AnalogRead();<br />  <br />  <br />  if (millis() - Timer02 &gt; UTd02){<br />  Timer02 = millis();<br />  PID_Compute();<br />  setVoltage(output_i);<br />  }<br /><br />  if (millis() - Timer01 &gt; UTd01){<br />  Timer01 = millis();<br />  Serial.print(Timer01);<br />  Serial.print(&quot; A: &quot;);<br />  Serial.print(A);<br />  Serial.print(&quot; V: &quot;);<br />  Serial.print(V);<br />  Serial.print(&quot; Set: &quot;);<br />  Serial.print(setpoint);<br />  Serial.print(&quot; Out: &quot;);<br />  Serial.print(output);<br />  Serial.print(&quot; Out_i: &quot;);<br />  Serial.print(output_i);<br />  Serial.print(&quot; Uchyb: &quot;);<br />  Serial.print(error);<br />  Serial.print(&quot; Kp: &quot;);<br />  Serial.print(Kp_P);<br />  Serial.print(&quot; Ki: &quot;);<br />  Serial.print(Ki_P);<br />  Serial.print(&quot; Kd: &quot;);<br />  Serial.println(Kd_P);<br /><br /> <br /><br />  }[/syntax]<br /><br />Funkcje<br /><br />[syntax=c]void PID_Parameters(float KpU, float KiU, float KdU) {<br /> Kp=KpU;<br />Ki=KiU;<br />Kd=KdU;<br />}<br /><br />void PID_MinMax(float Min, float Max) {<br />limitMAX = Max;<br />limitMIN = Min;<br />}<br /><br />void PID_Compute() {<br />error = -(setpoint - A); <br />ITerm += (Ki * error);<br />if (ITerm &gt; limitMAX) { ITerm = limitMAX;}<br />if (ITerm &lt; limitMIN) { ITerm = limitMIN;}<br />dErr = (error - lastErr);<br />        lastErr = error;<br />output = Kp * error + ITerm - Kd * dErr;  // czesc rozniczkowa moze byc z minusem<br />        Kp_P = Kp * error;<br />        Ki_P = ITerm;<br />        Kd_P = Kd * dErr;<br />if (output &gt; limitMAX) { output = limitMAX;}<br />if (output &lt; limitMIN) { output = limitMIN;}<br />        output_i = output;<br /><br />}<br />void setVoltage( uint16_t output){<br /><br />       Wire.beginTransmission(MCP_ADDR);<br />       Wire.write((uint8_t) ((output_i &gt;&gt; 8) &amp; 0x0F));   // MSB: (D11, D10, D9, D8) <br />       Wire.write((uint8_t) (output_i));  // LSB: (D7, D6, D5, D4, D3, D2, D1, D0)<br />       Wire.endTransmission();<br />  }<br /><br />void AnalogRead() {<br />       // srednia ruchoma<br />       odczyt_A0 = analogRead(PRAD);<br />       odczyt_A2 = analogRead(NAPIECIE);<br />   <br />       sred_A = ((sred_A * dt)+odczyt_A0)/(dt+1); // srednia kroczaca pradu<br />       A = ((sred_A-512)*0.05859375); // podmienic na rownanie po kalibracji<br />  <br />       sred_V = ((sred_V * dt)+odczyt_A2)/(dt+1); // srednia kroczaca napiecia<br />       V = (sred_V * 0.0048828125)/(0.167); // podmienic na rownanie po kalibracji<br />  }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2072">Ekstrapolator</a> — 12 wrz 2014, o 14:09</p><hr />
]]></content>
</entry>
</feed>