duinozone.cz - Arduino a Raspberry fórum

Autor Téma: Tří fázový motor a jeho žízení  (Přečteno 11890 krát)

Offline kutilak

  • Bastlíř začátečník
  • *
  • Příspěvků: 25
Tří fázový motor a jeho žízení
« kdy: Listopad 17, 2012, 23:45:15 odpoledne »
Zdravim , měl bych tkový dotaz .. motorky z HDD nebo z CD/DVD mechanik jsou tří fázové .. nevíte o nějákém předprogramovanym souboru pro arduino , který by uměl tyto motory plynule roztočit a regulovat jejich otáčky ?
S něčím vám poradím a něco si naopak nechám poradit :)

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #1 kdy: Listopad 19, 2012, 20:16:44 odpoledne »
takový program by nemusle být nějak příliš složitý, ale jeho funkčnost ti nemohu začučit. je to spíše metoda pokus omyl. NIcméně podle selského rozumu je to prostě krokový motůrek jen má 3 fáze. Jeho roztočení by měla být hračka :) kdyžtak ti mohu něco napsat a můžeš zkusit.
S pozdarem
Kutil Radek Buš

Offline kutilak

  • Bastlíř začátečník
  • *
  • Příspěvků: 25
Re:Tří fázový motor a jeho žízení
« Odpověď #2 kdy: Listopad 19, 2012, 23:13:47 odpoledne »
tak klidně to někam upni a hoď sem odkazy :) .. ale přecejen .. roztočení je problém , protože tady je co fáze to 90 stupňů posun .. a krokový motor prostřídá 200 x 4 kroky a udělá jednu otáčku například .... takže po  pár mých pokusech jsem se dostal k tomu že 3 fázový motor z CD mechaniky budu muset roztáčet plynule a zrychovat fáze , a nejlepší by bylo kdyby to jelo přez PWM aby to simulovalo sinusový průběh ..  a potenciometrem pěkně od nuly to roztočit do plných toček :) .. vždyť CDčko lítá jak zběsilý .. a já jsem ho nebyl schopnej roztočit bez ruční pomoci prakticky vůbec ..
S něčím vám poradím a něco si naopak nechám poradit :)

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #3 kdy: Listopad 20, 2012, 11:51:26 dopoledne »
O nějaké rychlosti plácnu třeba 10 otáček za minutu to si můžeš nechat zdát... to nepujde.. tyto motory jsou dělané spíš na vysokou rychlost. nicméně dělají se regulátory pro 3f motory (modelářské) a ty se ovládají PWM signálem ;-)
S pozdarem
Kutil Radek Buš

Offline kutilak

  • Bastlíř začátečník
  • *
  • Příspěvků: 25
Re:Tří fázový motor a jeho žízení
« Odpověď #4 kdy: Listopad 20, 2012, 17:58:17 odpoledne »
jojo .. mě jde o vysokou rychlost .. ale když do toho pustim rovnou tu frekvency plnejch otáček tak to přeskakuje fáze ale netočí se ,, musí to být postupný .. a ideálně aby to bylo přez PWM
S něčím vám poradím a něco si naopak nechám poradit :)

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #5 kdy: Listopad 20, 2012, 21:44:14 odpoledne »
no přes PWM to neuděláš.. to by jsi musel mít ten externí regulátor pro 3f motory.... ale program na to napsat jde ;-)

tady takto by jsi je měl mít zapojené. (nejdříve bych zkusil na nepájivém poli)
dúvod proč se ti to prakticky netočil oje ten že jsi to nespínal H-můstkama (to je to schéma). Zítra najdu snad nějakou chvilku a něco ti napíšu.. bohužel nemám na čem zkoušet, tak potom budeš dávat vědět :)
S pozdarem
Kutil Radek Buš

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #6 kdy: Listopad 21, 2012, 14:45:50 odpoledne »
Tááák jo  :)
napsal jsem pro tebe a myslím že i pro dost dalších lidí luxusní prográmek. Musím jen doufat že bude fungovat tak jak myslím :D ale měl by :)
Kdyby byly jakékoliv dotazy tak neváhej a ptej se. a rozhodně dej vědět jestli to funguje. Teď mě napadlo žeby se tam dal zjemnit krok a ten motor by měl vlastně na jednu otáčku 6 kroků. No kdyžtak potom udělám novou verzi programu.
Tak program zde: (ještě jen dodám že propagování pod tím, že se jedná o Váš program je zakázáno ... bohužel už i s takovými jsem se setkal... )

Kód: [Vybrat]
/*
 ### Regulace 3f motorku ###
 
 Tak nějaké informace k tomu:
 hodnoty co bude pravděpodobně potřeba doladit jsou rozjezdove_otacky
 (nedávat příliš vysoké číslo, protože by mohlo dojít ke spálení vynutí,
 z toho důvodu jsme dal 500ms ale myslím že by se byl schopný orztočit i při 100ms nicméně chce vyzkoušet) ;-)
 toto číslo se samo automaticky bude snižovat a motor se tím pádem rozjede do vyšších otáček.
 Ty maximální otáčky nastavíte v konstantě maximalni_otacky.
 cas_toceni je jak název vypovídá konstanta kterou určuujete jak dlouho vám motor bdue držet dané otáčky než
 se zastaví a změní směr.. je to spíěe jen pro testování.
 
 fáze je předpokládáno že budou zapojeny ve sledu A B C pro otážení ve směru hodinových ručiček (doprava)
 a že vinutí je do trojúhelníku
 
 Příjemnou zábavu
 
 
 Radek Buš
 www.roboti.4fan.cz
 */

  int rozjezdove_otacky = 500;
  int maximalni_otacky = 10;
  int cas_toceni = 1000;

  int A_1 = 13;  // +
  int A_2 = 12;  // -

  int B_1 = 11;  // +
  int B_2 = 10;  // -

  int C_1 = 9;   // +
  int C_2 = 8;   // -

void setup() {
  pinMode(A_1 ,OUTPUT);
  pinMode(A_2 ,OUTPUT);
  pinMode(B_1 ,OUTPUT);
  pinMode(B_2 ,OUTPUT);
  pinMode(C_1 ,OUTPUT);
  pinMode(C_2 ,OUTPUT);
}

void loop() {
  rozjezd_R();
  for(int i = 0; i <= cas_toceni/(maximalni_otacky*3); i++) {
  volnobezne_R();
  }
  STOP();

  rozjezd_L();
  for(int i = 0; i <= cas_toceni/(maximalni_otacky*3); i++) {
  volnobezne_L();
  }
  STOP();
}

void rozjezd_R() {
  for(int cas = rozjezdove_otacky; cas >= maximalni_otacky; cas++) {
  // 1. krok
  digitalWrite(A_1, 1);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 1);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 0);
  delay(cas);
  // 2. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 1);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 1);
  delay(cas);
  // 3. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 1);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 1);
  digitalWrite(C_2, 0);
  delay(cas);
  }
}

void rozjezd_L() {
  for(int cas = rozjezdove_otacky; cas >= maximalni_otacky; cas++) {
  // 1. krok
  digitalWrite(A_1, 1);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 1);
  // 2. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 1);
  digitalWrite(C_1, 1);
  digitalWrite(C_2, 0);
  // 3. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 1);
  digitalWrite(B_1, 1);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 0);
  }
}

void volnobezne_R() {
  // 1. krok
  digitalWrite(A_1, 1);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 1);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 0);
  delay(maximalni_otacky);
  // 2. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 1);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 1);
  delay(maximalni_otacky);
  // 3. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 1);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 1);
  digitalWrite(C_2, 0);
  delay(maximalni_otacky);
}

void volnobezne_L() {
  // 1. krok
  digitalWrite(A_1, 1);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 1);
  delay(maximalni_otacky);
  // 2. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 1);
  digitalWrite(C_1, 1);
  digitalWrite(C_2, 0);
  delay(maximalni_otacky);
  // 3. krok
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 1);
  digitalWrite(B_1, 1);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 0);
  delay(maximalni_otacky);
}

void STOP() {
  digitalWrite(A_1, 1);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 1);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 0);
  delay(500);
  digitalWrite(A_1, 0);
  digitalWrite(A_2, 0);
  digitalWrite(B_1, 0);
  digitalWrite(B_2, 0);
  digitalWrite(C_1, 0);
  digitalWrite(C_2, 0);
  delay(500);
}
S pozdarem
Kutil Radek Buš

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #7 kdy: Listopad 21, 2012, 14:55:10 odpoledne »
ještě dodám příklad jak se tento program dá použít v praxi.
Vše zůstává tak jak je ale abych to tu nevypisoval celé tak sem dám jen část v "loop"
Vysvětlivky jsou doufám dostatečně jasné. (platí opět zákaz zveřejňování pod jiným jménem než je mé)

Kód: [Vybrat]
void loop() {
  // zde můžete mít cokoliv
 
  //////////////////////////////////////////////////////////
  rozjezd_R();            // tento příkaz zde musí být jelikož jinak by se nám motor neroztočil
 
  int cas_toceni = 5000;  // zde si můžete nastavit libovolné číslo po jakou dobu se nám motor má točit na max otáčky
  for(int i = 0; i <= cas_toceni/(maximalni_otacky*3); i++) {
  volnobezne_R();
  }
  STOP();                 // zastaví (zablokuje motor a následně jej uvolní) tím předejdeme spálení vinutí
  //////////////////////////////////////////////////////////
 
  // a zde také :)
}
S pozdarem
Kutil Radek Buš

Offline kutilak

  • Bastlíř začátečník
  • *
  • Příspěvků: 25
Re:Tří fázový motor a jeho žízení
« Odpověď #8 kdy: Listopad 21, 2012, 15:22:41 odpoledne »
Ok .. super .. vyzkouším to hned co to pujde , akorád teď nemam na čem , protože čekám až mi v pátek přijdou atmegy a v pondělí do nich musim dostat bootloader ... takže pokud vše pujde podle plánu tak by to mělo být hotový už v pondělí.. povedlo se mi omylem zavadit výstupem z arduina 5V o 12ti voltovou gelovou baterku .. tak snad do odnesl jen Atmel , protože jestli jsem si oddělal ješt něco jinýho . bojim se hlavně o USB řadič :(
S něčím vám poradím a něco si naopak nechám poradit :)

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #9 kdy: Listopad 21, 2012, 15:28:20 odpoledne »
jaj... no tak snad řadič je v pohodě...
tak potom dej vědět ;)
S pozdarem
Kutil Radek Buš

Offline kutilak

  • Bastlíř začátečník
  • *
  • Příspěvků: 25
Re:Tří fázový motor a jeho žízení
« Odpověď #10 kdy: Listopad 21, 2012, 15:55:04 odpoledne »
OK
S něčím vám poradím a něco si naopak nechám poradit :)

Offline kutilak

  • Bastlíř začátečník
  • *
  • Příspěvků: 25
Re:Tří fázový motor a jeho žízení
« Odpověď #11 kdy: Listopad 26, 2012, 17:02:57 odpoledne »
tak šlape to .. ale mam to jen na plusový a na přímo .. nevim jaký tranzistory budou nejlepší do toho můstku .. to ještě musim vyzkoušet :) jinak jede to pěkně ale do plnejch otáček to má ještě daleko .. uvidim až udělám ten můstek jestli z toho pujde vytáhnout víc :)
S něčím vám poradím a něco si naopak nechám poradit :)

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #12 kdy: Listopad 26, 2012, 18:14:36 odpoledne »
Určitě ano :)
protože ted ti to jede jakoby na 2 fáze jestli jsme pochopil dobře ;)
no na ten H-můstek bych použil asi klidně i klasiku BC547  NPN-ka :) nebo podle toho kolik bdue brát to vinutí nevím jak velký ten motor máš :D ale asi něco na tento  způsob. popřípadě třeba oblíbený mosfety BD420 :)
S pozdarem
Kutil Radek Buš

Offline kutilak

  • Bastlíř začátečník
  • *
  • Příspěvků: 25
Re:Tří fázový motor a jeho žízení
« Odpověď #13 kdy: Listopad 26, 2012, 19:20:40 odpoledne »
ok .. tak jsem použil nějáký tranďáky ze PC zdroje .. točí se , ale není to 7200 ot/min. a sám moc ještě programovat arduino neumim a nevim jak by to šlo udělat , aby se měnil čas v jinejch jednotkách než milisekundách , protože mi to jede na rozestup fází 5ms a to je dost na těsno když to jede celkem pomalu , a navíc tomu do roztočení musim pomoct rukou protože jinak jenom divně bzučí a fáze litaj rychlejc než by bylo na roztočení zdrávo ..  takže by to chtělo poťák kterej by ovládal čas všech fází najednou a šlo by to regulovat dejme tomu od 100ms do 200us ... to by mohlo odpovídat .. protože z nuly se hned nemůže točit těch 7200 ot /min a chtělo by to nějak vyřešit .. takže manuálně tam prdnout na analogovej vstup poťák a kroutit :) a navíc .. arduino má 6 PWM výstupů . který by zvládly simulovat sinusovku , tudíž by to mělo mení ztráty a větší tah  a ani by to nedělalo kravál .. ale to už asi bude složitý
S něčím vám poradím a něco si naopak nechám poradit :)

Offline Radek Buš

  • Bastlíř začátečník
  • *
  • Příspěvků: 47
  • Nic není nemožné :-)
    • Roboti.4fan.cz
Re:Tří fázový motor a jeho žízení
« Odpověď #14 kdy: Listopad 26, 2012, 19:27:37 odpoledne »
PWM nedělají sinusovku ;)
si to najdi na wikipedii...
nicméně s tím potenciometrem by to šlo zapracuju na tom a hodím to sem :)
nicméně pokud se nestíhá roztočit tak jak tam píšu zvětši číslo pro rozjezd...
pokud se točí moc málo uber číslo max otáčky ;) a pokud budeš na 1 a budeš chtít ještě rychlejc tak přepis delay na delayMicroseconds
to to celé upraví tak že toto se rovná => delay(1); = delayMicroseconds(1000);
S pozdarem
Kutil Radek Buš