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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-06-25T21:04:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=20919&amp;mode</id>
<entry>
<author><name><![CDATA[Bart92]]></name></author>
<updated>2018-06-25T21:04:06+01:00</updated>
<published>2018-06-25T21:04:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20919&amp;p=209326#p209326</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20919&amp;p=209326#p209326"/>
<title type="html"><![CDATA[Zacinający się silnik BLDC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20919&amp;p=209326#p209326"><![CDATA[
Witam!<br /><br />Piszę w  kolejnej sprawie. Mam sterownik trójfazowego silnika BLDC. Kroki są ustawiane na podstawie odczytów z czujników halla. <br /><br />Tylko jest pewien problem. Po zmianie driverów półmostków z IR2108 na IR2184 silnik delikatnie acz zauważalnie się przycina.<br /><br />W międzyczasie zmieniłem też czujniki halla(upalone przez przypadek) więc tutaj też może leżeć problem. Ale najpierw chciałbym wykluczyć błąd programowy. IR22184 ma nieco inną logikę i tak:<br /><br />wejście SD odpowiada za to, czy dany półmostek w ogóle ma działać. Jeżeli 0, jest wyłączony i nie przewodzi żaden z kluczy. Jeżeli 1, to:<br /><br />gdy wejście IN jest ustawione na 1, przewodzi górny mosfet natomiast jeżeli 0- dolny.<br /><br />moc silnika jest regulowana poprzez podanie sygnału PWM do wejścia SD.<br />Fazy są przełączane poprzez zmianę stanu IN.<br /><br />Oczywiście w danym momencie przewodzą dwa półmostki, w jednym górny mosfet, w drugim dolny. Trzeci jest wyłączony. PWM wystarczy podać na jedną stronę(góra lub dół), bo i tak przerywa cały obwód<br /><br />Ponieważ drivery działają na zasadzie bootstrap, korzystniejsze będzie podanie sygnału PWM do otwierania mostka w którym przewodzi góra. Wtedy prądu z kondensatorów bez problemu wystarczy do załączenia góry przez PWM.<br /><br />W takim jednak wypadku silnik przycina się przy niższych wypełnieniach. na full pracuje w porządku.<br /><br />Silnik za to pracuje całkiem poprawnie, gdy zarówno góra jak i dół dostają sygnał PWM. Ale kiedy działa na full wypełnieniu, raz na kilka sekund pyka, jakby tracił synchro na moment. <br /><br />Sporo tu tych góra/dół, U/V/W, PWM/bez PWM. Obawiam się, że mogłem coś porypać. <br /><br />tutaj nagłówek odpowiedzialny za przełączanie PWM i portów:<br /><br />[syntax=c]//U//drivers<br /># define U_H1 TCCR1A |= (1&lt;&lt;COM1A1); //pwm off<br /># define U_H2 PORTD |= (1&lt;&lt;PD1); //high<br />//#define U_H3 PORTB |= (1 &lt;&lt; PB1); //sd on<br /><br />#define U_H U_H2; U_H1;// U_H3;<br /><br /># define U_L1 TCCR1A |= (1&lt;&lt;COM1A1); //pwm on<br /># define U_L2 PORTD &amp;= ~(1&lt;&lt;PD1); // low<br />#define U_L3 PORTB |= (1 &lt;&lt; PB1); //sd on<br /><br />#define U_L U_L2; U_L1; U_L3;<br /><br /># define U_OFF1 TCCR1A &amp;= ~(1&lt;&lt;COM1A1); //pwm off<br /># define U_OFF2 PORTD &amp;= ~(1&lt;&lt;PD1); // low<br />#define U_OFF3 PORTB &amp;= ~(1 &lt;&lt; PB1); //sd off<br /><br />#define U_OFF U_OFF2; U_OFF1; U_OFF3;<br /><br />//V<br /># define V_H1 TCCR0A |= (1&lt;&lt;COM0A1); //pwm off<br /># define V_H2 PORTD |= (1&lt;&lt;PD2); //high<br />//#define V_H3 PORTD |= (1&lt;&lt;PD6);//sd on<br /><br />#define V_H V_H2; V_H1;// V_H3;<br /><br /># define V_L1 TCCR0A |= (1&lt;&lt;COM0A1);//pwm on<br /># define V_L2 PORTD &amp;= ~(1&lt;&lt;PD2);//low<br />#define V_L3 PORTD |= (1&lt;&lt;PD6);//sd on<br /><br />#define V_L V_L2; V_L1; V_L3;<br /><br /># define V_OFF1 TCCR0A &amp;= ~(1&lt;&lt;COM0A1);//pwm off<br /># define V_OFF2 PORTD &amp;= ~(1&lt;&lt;PD2);//low<br />#define V_OFF3 PORTD &amp;= ~(1&lt;&lt;PD6);//sd off<br /><br />#define V_OFF V_OFF2; V_OFF1; V_OFF3;<br /><br />//W<br /># define W_H1 TCCR2A |= (1&lt;&lt;COM2A1); //pwm off<br /># define W_H2 PORTD |= (1&lt;&lt;PD3); //high<br />//#define W_H3 PORTB |= (1&lt;&lt;PB3);//sd on<br /><br />#define W_H W_H2; W_H1;// W_H3;<br /><br /># define W_L1 TCCR2A |= (1&lt;&lt;COM2A1); //pwm on<br /># define W_L2 PORTD &amp;= ~(1&lt;&lt;PD3); //low<br />#define W_L3 PORTB |= (1&lt;&lt;PB3);//sd on<br /><br />#define W_L W_L2; W_L1; W_L3;<br /><br /># define W_OFF1 TCCR2A &amp;= ~(1&lt;&lt;COM2A1);//pwm off<br /># define W_OFF2 PORTD &amp;= ~(1&lt;&lt;PD3); //low<br />#define W_OFF3 PORTB &amp;= ~(1&lt;&lt;PB3);//sd off<br /><br />#define W_OFF W_OFF2; W_OFF1; W_OFF3;<br /><br />#define ALL_OFF U_OFF; V_OFF; W_OFF;[/syntax]<br /><br />Generalnie program jest spoko, bo <strong><span style="color: #0000FF">silnik osiąga nominalne obroty i moc</span></strong>(śmigałem już na rowerze). Ale coś &quot;chrupie&quot;, no..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=19363">Bart92</a> — 25 cze 2018, o 21:04</p><hr />
]]></content>
</entry>
</feed>