<?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=8&amp;t=20938&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-07-04T07:58:52+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=20938&amp;mode</id>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2018-07-04T07:58:52+01:00</updated>
<published>2018-07-04T07:58:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209492#p209492</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209492#p209492"/>
<title type="html"><![CDATA[Re: Pomiar mocy przy regulacji fazowej - ASC712]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209492#p209492"><![CDATA[
<div class="quotetitle">Pixelxx napisał(a):</div><div class="quotecontent"><br />Jeżeli chodzi o pomiar mocy to bym musiał wykorzystać jakaś metodę całkowania numerycznego np: prostokątów?<br /></div><br /><br />1. Musisz mieć pomiar napięcia i prądu. Ewentualnie chociaż detektor przejścia przez zero żeby wiedzieć w którym punkcie sinusa jesteś. Zakładamy że amplituda napięcia sieciowego to 230V * sqrt(2)<br />2. Robisz próbki prądu dajmy na to co 500us a więc Twoje dt = 0.0005 będziesz miał 40 takich próbek na 1 okres sinusoidy.<br />3. Skoro wiesz w jakim momencie sinusa jesteś, bo masz synchronizacje, odczytujesz z tablicy wartość chwilową napięcia. Tak, nmusisz wcześniej stablicować sobie sinusa żeby nie liczyć go w locie bo to za wolne na AVR. nie będzie to dokładna wartość ale niestety nie masz pomiaru napięcia. Chyba że takowy dołożysz, wtedy jest bajeczka.<br />4. co te 500us mnożysz: u * i * dt i dodajesz do zmienej moc która pomieści takie wartości. Powiedzmy coś takiego:<br />[syntax=c]moc = moc + ( u * i * dt );[/syntax]<br />5. jak zrobisz to 40 razy, dzielisz:<br />[syntax=c]moc = moc / T;<br />//T to twój okres sinusoidy[/syntax]<br /><br />6. Nie używaj zmiennych zmiennoprzcinkowych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 4 lip 2018, o 07:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2018-07-03T21:06:01+01:00</updated>
<published>2018-07-03T21:06:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209489#p209489</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209489#p209489"/>
<title type="html"><![CDATA[Re: Pomiar mocy przy regulacji fazowej - ASC712]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209489#p209489"><![CDATA[
Tutaj  jest opisana funkcja millis(), możesz z tego skorzystać  <br /><a href="https://ucexperiment.wordpress.com/2012/03/16/examination-of-the-arduino-millis-function/"  class="postlink">https://ucexperiment.wordpress.com/2012/03/16/examination-of-the-arduino-millis-function/</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 3 lip 2018, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pixelxx]]></name></author>
<updated>2018-07-03T17:36:34+01:00</updated>
<published>2018-07-03T17:36:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209482#p209482</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209482#p209482"/>
<title type="html"><![CDATA[Re: Pomiar mocy przy regulacji fazowej - ASC712]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209482#p209482"><![CDATA[
No już trochę lepiej to rozumiem.<br /><br />Mam pytanie odnoście warunku <br />[syntax=c]if(milisekundy) milisekundy--[/syntax]<br /><br />Czyli jeżeli warunek jest prawdziwy czyli zmienna milisekundy==1 to zmniejszaj milisekundy--?<br /><br />Nie do końca bym chciał dawać jakieś dodatkowe while() w pętli głównej o ile dobrze rozumiem czyli wyglądało by to tak<br /><br />[syntax=c]/*<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &quot;uart.h&quot;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />unsigned long milisekundy;<br /><br />int main(void)<br />{<br /><br /><br />    TCCR0 |= (1&lt;&lt;WGM01);                    //ctc<br />    TCCR0 |= (1&lt;&lt;CS01)|(1&lt;&lt;CS00);           //cpreskaler 64<br />    OCR0 = 124;<br />    TIMSK |= (1&lt;&lt;OCIE0);<br /><br /><br />sei();<br /><br />    while(1)<br />    {<br /><br />        milisekundy = 1000;<br />        while(milisekundy){<br />        }<br /><br /><br />    }<br />}<br /><br /><br />    ISR(TIMER0_COMP_vect)<br />    {<br />            if(milisekundy) milisekundy--;<br />    }[/syntax]<br />           <br /> Chciałbym uzyskać taki efekt mieć funkcje jak w arduino millis() z tego co wiem to ona zlicza do 50dni i później się zeruje.<br /><!-- m --><a class="postlink" href="https://www.arduino.cc/reference/en/language/functions/time/millis/" >https://www.arduino.cc/reference/en/lan ... me/millis/</a><!-- m --><br /><br /><br />Jeżeli chodzi o pomiar mocy to bym musiał wykorzystać jakaś metodę całkowania numerycznego np: prostokątów?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19122">Pixelxx</a> — 3 lip 2018, o 17:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2018-07-03T07:00:23+01:00</updated>
<published>2018-07-03T07:00:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209474#p209474</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209474#p209474"/>
<title type="html"><![CDATA[Re: Pomiar mocy przy regulacji fazowej - ASC712]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209474#p209474"><![CDATA[
Z tym że jak masz regulacje fazową to Ci pomiar amplitudy nic nie da. Żeby wyliczyć rzeczywistą moc skuteczną musisz całkować iloczyn napięcia i prądu przez jakiś okres czasu a następnie tę wartść przez ów okres czasu podzielić. <br /><br />całkowanie numeryczne w Twoim przypadku to będzie suma iloczynów kolejnych próbek sygnału napięcia, prądu i czasu odstępu pomiędzy próbkami podzielona finalnie przez okres zbierania próbek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 3 lip 2018, o 07:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2018-07-02T22:16:37+01:00</updated>
<published>2018-07-02T22:16:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209473#p209473</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209473#p209473"/>
<title type="html"><![CDATA[Re: Pomiar mocy przy regulacji fazowej - ASC712]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209473#p209473"><![CDATA[
możesz zrobić inaczej np tak dla m32 ma 8 mhz<br /><br />[syntax=c]TCCR0 |= (1&lt;&lt;WGM01);//ctc<br />TCCR0 |= (1&lt;&lt;CS01)|(1&lt;&lt;CS00);/cpreskaler 64<br />OCR0 = 124;<br />TIMSK |= (1&lt;&lt;OCIE0);[/syntax]<br /><br />a w przerwaniu mozesz zmniejszac zmienna<br /><br />[syntax=c]ISR(TIMER0_COMP_vect){<br />if(milisekundy) milisekundy--<br />}[/syntax]<br /><br /><br />a w pętli głównej napełniać zmienną milisekundy = 1000 a następnie czekać sekundę<br /><br />[syntax=c]milisekundy = 1000;<br />while(milisekundy){<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 2 lip 2018, o 22:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pixelxx]]></name></author>
<updated>2018-07-02T21:17:51+01:00</updated>
<published>2018-07-02T21:17:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209470#p209470</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209470#p209470"/>
<title type="html"><![CDATA[Pomiar mocy przy regulacji fazowej - ASC712]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20938&amp;p=209470#p209470"><![CDATA[
Witam.<br /><br />Chciałbym mierzyć moc np: żarówki za pomocą czujnika z efektem Halla ASC712. Szukałem trochę po internecie i znalazłem przykładowe kody programów pod arduino i chciałbym to przełożyć na język C. Z prądem stałym nie było by problemu, ale z racji, że mam tu prąd przemienny to użyta została funkcja millis() i czy ktoś mógłbym powiedzieć jak zrealizować taką funkcję w języku C i przedstawić kod takiej funkcji?<br /><br />Kod pod arduino jaki znalazłem na stronie: <!-- m --><a class="postlink" href="http://www.theorycircuit.com/hall-effect-current-sensor-circuit/" >http://www.theorycircuit.com/hall-effec ... r-circuit/</a><!-- m --><br /><br />[syntax=c]#define CURRENT_SENSOR A0  // Define Analog input pin that sensor is attached<br /> <br />float amplitude_current;      // Float amplitude current<br />float effective_value;       // Float effective current<br /> <br />void setup()<br />{<br />    Serial.begin(9600);<br />    pins_init();<br />}<br />void loop()<br />{<br />    int sensor_max;<br />    sensor_max = getMaxValue();<br />    Serial.print(&quot;sensor_max = &quot;);<br />    Serial.println(sensor_max);<br />    <br />    //the VCC on the Arduino interface of the sensor is 5v<br />    <br />    amplitude_current=(float)(sensor_max-512)/1024*5/185*1000000; // for 5A mode,you need to modify this with 20 A and 30A mode;<br />    effective_value=amplitude_current/1.414;<br />    <br />    //for minimum current=1/1024*5/185*1000000/1.414=18.7(mA)<br />    //Only sinusoidal alternating current<br />    <br />    Serial.println(&quot;The amplitude of the current is(in mA)&quot;);<br />    Serial.println(amplitude_current,1);<br />    <br />    //Only one number after the decimal point<br />    <br />    Serial.println(&quot;The effective value of the current is(in mA)&quot;);<br />    Serial.println(effective_value,1);<br />}<br />void pins_init()<br />{<br />    pinMode(CURRENT_SENSOR, INPUT);<br />}<br />/*Function: Sample for 1000ms and get the maximum value from the S pin*/<br /> <br />int getMaxValue()<br />{<br />    int sensorValue;    //value read from the sensor<br />    int sensorMax = 0;<br />    uint32_t start_time = millis();<br />    while((millis()-start_time) &lt; 1000) //sample for 1000ms<br />    {<br />        sensorValue = analogRead(CURRENT_SENSOR);<br />        if (sensorValue &gt; sensorMax)<br />        {<br />            /*record the maximum sensor value*/<br />            <br />            sensorMax = sensorValue;<br />        }<br />    }<br />    return sensorMax;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19122">Pixelxx</a> — 2 lip 2018, o 21:17</p><hr />
]]></content>
</entry>
</feed>