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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-08-27T06:50:30+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15989&amp;mode</id>
<entry>
<author><name><![CDATA[Mysteziz]]></name></author>
<updated>2016-08-27T06:50:30+01:00</updated>
<published>2016-08-27T06:50:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=167218#p167218</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=167218#p167218"/>
<title type="html"><![CDATA[Re: Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=167218#p167218"><![CDATA[
Dzięki, koledzy, rzeczywiście z tymi tablicami to był babol.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14012">Mysteziz</a> — 27 sie 2016, o 06:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2016-08-14T09:15:35+01:00</updated>
<published>2016-08-14T09:15:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=166005#p166005</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=166005#p166005"/>
<title type="html"><![CDATA[Re: Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=166005#p166005"><![CDATA[
O faktycznie dwie tablice... Pisałem swój post wcześniejszy nie przyglądając się programowi. @Daro69 dobrze prawi - nie robi się osobnych tablic dla różnych kierunków tylko korzysta z jednej, bo to na 99% będzie stwarzać problemy nie mówiąc już o komplikowaniu i rozrastaniu programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 14 sie 2016, o 09:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-08-13T22:42:21+01:00</updated>
<published>2016-08-13T22:42:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165994#p165994</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165994#p165994"/>
<title type="html"><![CDATA[Re: Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165994#p165994"><![CDATA[
Witam,<br />W tym kodzie silnik gubi kroki ponieważ czyta z dwóch tablic.<br />kiedy obracaj w prawo i dostanie sygnał do obrotu w lewo,<br />to krok np. =3 , nie będzie tym samym położeniem(wartością) w tablicy.<br />Lepiej chyba zastosować jedną tablice i czytać ją od 0 do 7 lub od 7 do 0. czyli jeżeli prawo krok++, lewo krok--,<br />wtedy wartość krok będzie przy starcie taka sama na jakiej silnik przestał kręcić.<br />(Uwaga: oczywiście przy małych  prędkościach o czym kolega &quot;SylwekK&quot; pisał.)<br /><br />pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 13 sie 2016, o 22:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mysteziz]]></name></author>
<updated>2016-08-13T09:24:12+01:00</updated>
<published>2016-08-13T09:24:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165965#p165965</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165965#p165965"/>
<title type="html"><![CDATA[Re: Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165965#p165965"><![CDATA[
Sylwku, wiem o rampie, ale u mnie ta sytuacja występuje też w przypadku małych prędkości nawet jeśli jeden pełny obrót trwa 5 czy 10 sekund stąd pomysł ze mam babola jakiegoś w programie. Tak myślę ze jak silnik się startuje pierwszy raz to może jest ustawiony tak ze powinien zaczynać od innego kroku ale program nie wie od którego i jeśli poda prąd na silnik to do pierwszego kroku następuje przeskok?  Ale dlaczego w takim razie nie da się zrobić równo pełnego obrotu nawet jak już silnik naskoczy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14012">Mysteziz</a> — 13 sie 2016, o 09:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2016-08-13T08:02:39+01:00</updated>
<published>2016-08-13T08:02:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165956#p165956</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165956#p165956"/>
<title type="html"><![CDATA[Re: Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165956#p165956"><![CDATA[
Mówiłem to już tutaj wiele razy i powtórzę - przy dokładnym pozycjomowaniu dowolnego silnika z racji na jego sporą bezwładność potrzebny jest przynajmniej minimalny czas rozbiegu i hamowania tzw. RAMPA. Silniki krokowe przy zwykłym sterowaniu (czyli , np. tak jak u Ciebie) dużo lepiej sobie radzą na wolnych obrotach, a więc jeśli go zaczniesz wolno rozkręcać do docelowej prędkości to nie powinieneś gubić kroków. Ta sama bezwładność wirnika przekręca go przy gwałtownym hamowaniu z wysokich obrotów dlatego i tu rampa jest niezbędna.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 13 sie 2016, o 08:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mysteziz]]></name></author>
<updated>2016-08-13T06:18:40+01:00</updated>
<published>2016-08-13T06:18:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165952#p165952</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165952#p165952"/>
<title type="html"><![CDATA[Re: Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165952#p165952"><![CDATA[
Silniczek mam mały podłączony do portu C przez uln2003<br />oto program<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />volatile uint8_t ms10=255, s1=255;//zmienne do systick<br />volatile uint8_t ms10cnt=0, s1cnt=0;<br />#define any_key (1&lt;&lt;PD6)            //konfiguracje przycisków<br />#define przycisk !(PIND &amp; any_key)<br />#define przycisk_plus (1&lt;&lt;PD1)<br />#define przycisk_minus (1&lt;&lt;PD7)<br />#define  przycisk_l (1&lt;&lt;PD4)<br />#define przycisk_r (1&lt;&lt;PD5)<br />#define l !(PIND &amp; przycisk_l)<br />#define r !(PIND &amp; przycisk_r)<br />#define plus !(PIND &amp; przycisk_plus)<br />#define minus !(PIND &amp; przycisk_minus)<br />volatile uint8_t kroki=0;           //zmienne u¿yte w programie<br />volatile uint16_t zmienna=0;<br />uint16_t kr=0;<br />uint8_t flaga=0;<br />void stop(void);<br />void silnik_off(void);<br />volatile uint8_t pwm=0;<br />volatile uint8_t a=1;<br />const uint8_t kroki_prawo&#91;&#93; = {       // tablice z krokami<br />8,<br />12,<br />4,<br />6,<br />2,<br />3,<br />1,<br />9,<br />//1,<br />//2,<br />//4,<br />//8,<br />};<br /><br />const uint8_t kroki_lewo&#91;&#93; = {<br />9,<br />1,<br />3,<br />2,<br />6,<br />4,<br />12,<br />8,<br />//8,<br />//4,<br />//2,<br />//1,<br />};<br /><br />int main(void)<br />{<br />PORTC |=(1&lt;&lt;PC6);     //wyjcie dla leda, pwm<br /><br />TIMSK |=(1&lt;&lt;TOIE2);//to konfigi do pwm, nie maj¹ znaczenia dla krokowca<br />TCNT2 |=132;<br />TCCR2 |=(1&lt;&lt;CS21)|(1&lt;&lt;CS20);<br />TIMSK |=(1&lt;&lt;TOIE2);<br /><br /><br />TCCR0 |=(1&lt;&lt;WGM01);//konfigi timera do systick<br />TCCR0 |=(1&lt;&lt;CS02)|(1&lt;&lt;CS00);<br />OCR0 = 50;<br />TIMSK |=(1&lt;&lt;OCIE0);<br />    DDRC |=0b01001111;//wyjcia na silnik<br />DDRD &amp;= ~((1&lt;&lt;PD6) | (1&lt;&lt;PD1) | (1&lt;&lt;PD7) | (1&lt;&lt;PD4) |(1&lt;&lt;PD5));// wejcia<br />PORTD |= ((1&lt;&lt;PD6) | (1&lt;&lt;PD1) | (1&lt;&lt;PD7) | (1&lt;&lt;PD4) |(1&lt;&lt;PD5));//pullup<br />lcd_init();<br />sei();<br />lcd_locate(0,0);<br />lcd_str(&quot;Atmega32&quot;);<br />//   PORTC |=(1&lt;&lt;PC5);<br /><br /><br />for(;;)<br />{<br /><br />if(plus)  //zwiêkszamy iloc obrotow jaka ma wykonac silnik<br />{<br /><br />kr+=96;<br />if(kr&gt;(kr*10)) kr=(kr*10);<br />_delay_ms(180);<br />lcd_locate(1,0);<br />lcd_str(&quot;      &quot;);<br />lcd_locate(1,0);<br />  lcd_int(kr);<br />}<br />else<br />if(minus)     //a tu zmniejszamy<br />{<br />kr-=96;<br />if (kr&gt;(kr*10)) kr=0;<br />_delay_ms(180);<br />lcd_locate(1,0);<br />lcd_str(&quot;      &quot;);<br />lcd_locate(1,0);<br />    lcd_int(kr);<br />}<br />else<br />if(przycisk)        //wcisniecie tego przycisku startuje silnik<br />{<br />zmienna=kr;<br />kroki=0;<br />flaga=0;<br />_delay_ms(500);<br />lcd_locate(1,8);<br />lcd_str(&quot;    &quot;);<br />lcd_locate(1,8);<br />lcd_str(&quot;kroki&quot;);<br />lcd_int(zmienna);<br />}<br />       if(r)<br />       {<br />       stop();<br />       }<br />if (l)<br />{<br />silnik_off();<br /><br />}<br />if(ms10 !=ms10cnt)  //timer programowy<br />{<br />          if(zmienna)<br />          {<br /><br /><br />          if(flaga){<br />          PORTC = kroki_prawo&#91;kroki&#93;;<br />          if(++kroki&gt;7) kroki=0;<br />          }<br />          else{<br />          PORTC = kroki_lewo&#91;kroki&#93;;<br />          if(++kroki&gt;7) kroki=0;<br />          }<br />          --zmienna;<br />         // _delay_ms(3);<br />          if(zmienna==0)  //jeli zmienna==0 to zatrzymanie i start w przeciwnym kierunku<br />          {<br />          flaga ^=1;<br />        _delay_ms(500);<br />        zmienna=kr;<br />          }<br />                   }<br /><br /><br />ms10=ms10cnt;<br />}<br /><br />//if(s1 !=s1cnt)<br />//{<br />//<br />//        _delay_us(1);<br />//}<br />}<br /><br /><br />}<br /><br /><br /><br /><br />ISR(TIMER0_COMP_vect)   //przerwanie obsluga timera programowego<br />{<br /> if(++ms10cnt&gt;99)<br /> {<br /> ms10cnt=0;<br /> if(++s1cnt&gt;59) s1cnt=0;<br /> }<br />}<br /><br /><br /><br /><br />void stop(void)<br />{<br />zmienna=0;<br />lcd_locate(1,0);<br />lcd_str(&quot;S&quot;);<br />}<br /><br />void silnik_off(void)<br />{<br />zmienna=0;<br />PORTC=0;<br />lcd_locate(1,0);<br />lcd_str(&quot;off&quot;);<br />}<br /><br />ISR(TIMER2_OVF_vect)<br />{<br />TCNT2 |=132;<br /><br />if (pwm&lt;a){<br />PORTC |=(1&lt;&lt;PC6);<br />}<br />else PORTC &amp;=~(1&lt;&lt;PC6);<br />if(++pwm&gt;20) pwm=0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14012">Mysteziz</a> — 13 sie 2016, o 06:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2016-08-12T19:53:44+01:00</updated>
<published>2016-08-12T19:53:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165944#p165944</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165944#p165944"/>
<title type="html"><![CDATA[Re: Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165944#p165944"><![CDATA[
Kolego jak masz podłączony silnik ? Pokaż kod odpowiedzialny za obrót <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 12 sie 2016, o 19:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mysteziz]]></name></author>
<updated>2016-08-12T19:16:41+01:00</updated>
<published>2016-08-12T19:16:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165943#p165943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165943#p165943"/>
<title type="html"><![CDATA[Silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15989&amp;p=165943#p165943"><![CDATA[
Mam proste pytanie o sterowanie silnikiem krokowym. Jak zrobić aby wykonał określoną ilość kroków w jedną stronę a póżniej dokładnie tyle samo w drugą tak aby wrócił dokładnie do tego samego miejsca z którego wystartował? Bo jakoś nie umiem tego osiągnąć. Mój silnik pracuje bez obciążenia i powoli (krok np co 10 ms) więc nie gubi kroków. Zawsze mam tak że jak startuję z programem to silnik wykonuje na początku jakiś przeskok, póżniej kręci się poprawnie, zatrzymuje sie i wraca, i od tego momentu jest powtarzalność ale.... Nie od punktu gdzie zaczynał. I nie wiem jak zrobić aby wykonał dokładnie pełny obrót albo jest mniej albo więcej, nawet jak zmieniam liczbę kroków o 1 aby dopasować.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14012">Mysteziz</a> — 12 sie 2016, o 19:16</p><hr />
]]></content>
</entry>
</feed>