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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-06-22T08:43:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=18612&amp;mode</id>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2017-06-22T08:43:12+01:00</updated>
<published>2017-06-22T08:43:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=191063#p191063</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=191063#p191063"/>
<title type="html"><![CDATA[Re: Pomoc- ATmega32 a sterowanie przetwornicą DC/DC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=191063#p191063"><![CDATA[
Chcesz zrobić przetwornice, w dodatku na procku, i to jeszcze na stykówce i dziwisz się że nie działa? no cóż... <br /><br />Poczytaj tę notę aplikacyjną i zobacz podejście:<br /><br /><!-- m --><a class="postlink" href="http://ww1.microchip.com/downloads/cn/AppNotes/cn_00216a.pdf" >http://ww1.microchip.com/downloads/cn/A ... 00216a.pdf</a><!-- m --><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />ewentualnie to:<br /><!-- m --><a class="postlink" href="http://www.atmel.com/images/atmel-42183-design-a-buck-converter-with-xmega-e_ap-note_at04204.pdf" >http://www.atmel.com/images/atmel-42183 ... t04204.pdf</a><!-- m --><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 42 minutach ]</span></strong><br /><br />Popatrz na swój kod. Marnujesz w nim mnóstwo czasu na jakieś głupoty typu wyswietlanie czegoś przeliczanie itd. to tak nie zadziała. Masz PWM Na Twoim miejscu ADC dałbym we free-running mode. Wartość w rejestrze będzie się updateować sama i już nie bedziesz zajmował tym procka. Wywal z petli głównej to całe wyświetlanie i zostaw tylko inkrementowanie lub pomniejszaanie w zależności od wartości pomiaru.<br /><br />2 sprawa jest taka że kluczujesz te tranzystory z jakąś straszliwie niską częstotliwością! przemyślałeś/przeliczyłeś to w ogóle? zaraz Ci to pokaże w symulacji:<br /><br />1. Twój PWM czyli procek pedzony 8MHz, preskaler 8 czyli 3900Hz PWM, wypełnienie 50%:<br /> <br /> a) cewka pracuje w trybie DCM z dużym prądem szczytowym<br /> b) napięcie wyjściowe wygląda jak sieczka bo za duży masz current i voltage ripple<br /><br /><a href="https://obrazkiforum.atnel.pl/2500/737a813439314f7bcac4ee2c5b565536.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/2500/737a813439314f7bcac4ee2c5b565536.png" alt="Obrazek" /></a><br />2. Mój PWM: Procek pedzony 16MHz, preskaler na 1, czyli wychodzi f=16000000/256 = 62500<br /><br /> a) voltage ripple na poziomie dziesiątek miliwoltów, <br /> b) cewka pracuje w trybie CCM z prądem szczytowym 3 razy mniejszym niż poprzednio<br /><br /><a href="https://obrazkiforum.atnel.pl/2500/e041ad7a20633269bad6efe940abf69d.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/2500/e041ad7a20633269bad6efe940abf69d.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 22 cze 2017, o 08:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Szczepan]]></name></author>
<updated>2017-06-22T07:44:05+01:00</updated>
<published>2017-06-22T07:44:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=191057#p191057</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=191057#p191057"/>
<title type="html"><![CDATA[Re: Pomoc- ATmega32 a sterowanie przetwornicą DC/DC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=191057#p191057"><![CDATA[
Dzięki wielkie! Kod już poprawiłem, niestety układ po przeniesieniu na stykówkę nie funkcjonuje jak należy. Zapewne błędy leżą po mojej stronie w filtrowaniu bądź błędnie dobranych elementach układu. Postaram się dopracować niedociągnięcia.<br /><br />Taka ciekawostka: Po kilku błędnych pomiarach przetwornika doszedłem do wniosku że, Na płytce ATB 1.5a w wyposażeniu do pomiaru ADC (j33) trafił mi się raczej potencjometr montażowy 10k, a nie jak podaje instrukcja 20k.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16885">Szczepan</a> — 22 cze 2017, o 07:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-14T08:04:25+01:00</updated>
<published>2017-06-14T08:04:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=190661#p190661</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=190661#p190661"/>
<title type="html"><![CDATA[Re: Pomoc- ATmega32 a sterowanie przetwornicą DC/DC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=190661#p190661"><![CDATA[
Ja w podobny sposób na atiny13 stabilizowałem prąd z bardzo dobrym skutkiem przy zasilaniu led. Z napięciem może być nieco gorzej jeśli nie masz stałego obciążenia. Aha, masz tam zły warunek przy stabilizacji - MUSI być możliwość pracy bez ciągłej zmiany rejestru czyli zamiast warunku &gt;= użyj  tylko &gt;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 14 cze 2017, o 08:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Szczepan]]></name></author>
<updated>2017-06-14T06:55:25+01:00</updated>
<published>2017-06-14T06:55:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=190659#p190659</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=190659#p190659"/>
<title type="html"><![CDATA[Pomoc- ATmega32 a sterowanie przetwornicą DC/DC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18612&amp;p=190659#p190659"><![CDATA[
Serdecznie Witam wszystkich!<br />Oto mój problem.<br />Pracuję nad przetwornicą step-down dc/dc do prądnicy prądu przemiennego wzbudzanej magnesami stałymi, bez uzwojenia wzbudzenia.  Chciałbym wykonać tenże układ na uC z wykorzystaniem czegoś takiego jak tzw. feedback - aby bez względu na to jakie napięcie jest na wejściu na wyjściu otrzymywać zawsze stałą wartość z możliwością delikatnej regulacji 11-15 [V]. - tutaj za pomocą ADC<br />Przejdę do sedna, zadany regulator/przetwornica miała by stabilizować napięcie z układu unregulated DC 16-70[V] na DC 12-14.5[V] w celu ładowania akumulatora i zasilania odbiorników w motocyklu. Posiadam zestaw Andromeda 1.5a z uC Atmega32A i bluebook. Zawzięcie analizuję treści i poradniki lecz moja wiedza jest jeszcze dość mizerna i ciężko mi wykrzesać coś więcej niż zawarte prostsze przykłady Pana Mirka    <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" />  . Wymyśliłem sobie aby całość zrealizować po stronie wyprostowanego napięcia DC ponieważ ściemniacz(bluebook) pracował na sinusoidzie sieci sztywnej o stałej częstotliwości, a u mnie ulega ona zmianie wraz z obrotami prądnicy.<br />Stwierdziłem że zaciągnę do pracy pomiar napięcia wyjściowego ADC i PWM sprzęgając je jakoś razem i kluczując tym sposobem za pomocą driver'a bramką mosfeta typu n w układzie High Side z f=5kHz a dalej podając sygnał na dławik 140uH/15A z równolegle diodą zwrotną i kondensatorem do masy w standardowym układzie przetwornicy step down.<br />Wpadłem na pomysł aby użyć sprzętowego rejestru OCR2(PWM) i zwiekszać go lub zmniejszać gdy uzyskiwane napięcie na wyjściu przetwornicy przekracza lub nie wartość zadaną np. 13V która odpowiada przyrównywanej wartości ADC. np. taki warunek if (wynikADC&gt;13V) zwieksz OCR0...else...zmniejsz OCR0 bądź za pośrednictwem pętli while.<br /><br />Odnośnie przetwornika analogowo-cyfrowego:<br />Napięcie odniesienia wybrałem 2,56V. Dobrałem dzielnik rezystorowy na 270k i 10k o współczynniku podziału 28. Przy 12V na wejściu dzielnika ADC=171,42, natomiast przy 15V ADC=214,2. Ustawiłem programowo chwilowo wartość na 170. Napięcie maksymalne graniczne na wejściu dzielnika oszacowałem na 70V wtedy ADC=1000. <br /><br />Odnośnie zmiany wypełnienia impulsu(PWM):<br />Ustawiłem częstotliwość na około 4kHz, i skonfigurowałem do pracy w metodzie Fast PWM.<br /><br />Zastanawia mnie tylko sposób rozwiązania, idea warunku sterowania PWM przez ADC(ich powiązania). Chciałbym się upewnić czy mój pomysł jest w miarę poprawny, prosiłbym o drobną wskazówkę jakich funkcji/rejestrów uC użyć i jak mniej więcej skonfigurować aby ruszyło. Układu jeszcze nie testowałem. Kompiluje się prawidłowo na płytce ATB, lecz zastanawia mnie czy fizycznie ma prawo funkcjonować? Oto kod i schemat mojego układu:<br /><br />Przepraszam za ewentualne błędy jest to mój pierwszy temat na forum.<br />[syntax=cpp]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />// F_cpu=8Mhz<br />#define LED1 (1&lt;&lt;PB3); //makro pinu diody sygnalizacyjnej<br />#define LED2 (1&lt;&lt;PD7); //makro pinu PWM<br /><br />uint16_t pomiar(uint8_t kanal); //deklaracja funkcji pomiaru<br />void wyswietl(void); // deklaracja funkcji wyswietlania w wartosci &#91;V&#93;<br /><br />int main(void) {<br />//---------ADC------------//<br />lcd_init();<br />ADMUX |= (1&lt;&lt;REFS0)|(1&lt;&lt;REFS1); //wybór napiecia odniesienia 2,56V<br />ADCSRA |= (1&lt;&lt;ADEN)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);//włączenie adc i preskaler na 64, 8000000/64=125kHz<br />//---------Podswietlenie LCD--------//<br />DDRD |= (1&lt;&lt;PD6);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTD |= (1&lt;&lt;PD6);// załączamy podświetlenie LCD - stan wysoki<br />//--------PWM-------------//<br />DDRD |= LED2;<br />TCCR2 |= (1&lt;&lt;WGM21) | (1&lt;&lt;WGM20); // tryb FAST PWM pin OC2 PD7<br />TCCR2 |= (1&lt;&lt;COM21); //| (1&lt;&lt;COM20); // TOP OC0 at clear (odwrotnie) NON-INWERTING<br />TCCR2 |= (1&lt;&lt;CS21);// preskaler = 8  F_pwm=8000000/8/256=3,9kHz<br />//-------Led synalizacyjny poprawnej pracy uC-------//<br />DDRB |= LED1; // Pin PB3<br /><br /><br /><br />uint8_t adc;<br /><br />while(1) {<br />lcd_cls();<br />adc = pomiar(7); //przypisanie zmiennej adc wartosci rejestru ADCW<br />wyswietl(); //wyswietlenie na LCD wartosci na wyjsciu w &#91;V&#93;<br />// warunki wspolpracy ADC Z PWM jako FEEDBACK, stabilizowanie nap. na wyjsciu<br /><br />/* if(adc&lt;170)     // lub zastosowac szybsza petle while(adc&lt;170)...while(adc&gt;=170)...??<br />++OCR2;<br />else //(adc&gt;=170)<br />--OCR2; */<br />// _delay_ms(1000);  // opoznia dzialanie regulatora<br />//(jedynie do wyswietlacza LCD tylko na ADC, bez PWM)<br />// stabilizacja na ~ 12&#91;V&#93;<br /> while (adc&lt;170) {<br />++OCR2;<br />}<br /> while(adc&gt;=170) {<br />--OCR2;<br />}<br /><br />}<br />}<br />uint16_t pomiar(uint8_t kanal) {<br />ADMUX = (ADMUX &amp; 0xF8) | kanal; // zerowanie 3 najmłodszych bitów rejestru i ustawianie<br />//nr. kanału/pinu<br />ADCSRA |= (1&lt;&lt;ADSC); // START poiaru poprzez ustawienie bitu ADSC w rejestrze ADCSRA<br />while (ADCSRA &amp; (1&lt;&lt;ADSC)); //Oczekiwanie na koniec pomiaru, Gdy ADSC == 0 koniec petli<br />return ADCW; // zwrocenie wyniku w postaci 16-bitowej wartoci z rejestrów ADCH I ADCL - ADCW<br />}<br /> void wyswietl(void) {<br />uint32_t wynik;<br />uint32_t pm;<br />uint8_t cz_d, cz_u;<br />pm = pomiar(7);<br />wynik = pm*25*28;<br />cz_d=wynik/10000; //cz. dziesietna<br />cz_u=(wynik/100)%100; //cz. ułamkowa<br />lcd_int(cz_d);<br />lcd_str(&quot;.&quot;);<br />lcd_int(cz_u);<br />lcd_str(&quot;V&quot;); // wypisanie na lcd cz_d+.+cz.u+V<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16885">Szczepan</a> — 14 cze 2017, o 06:55</p><hr />
]]></content>
</entry>
</feed>