Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Manualni rizeni PWM
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 2:27    Předmět: Manualni rizeni PWM Citovat

Napsal sem si funci na rizeni dvojice servomotoru HS 422
pouzity xtal = 14745600Hz
zapis je nasledujici:
kód:

int manual(void)
{
int natoceni1;
int natoceni2;
int prepocetH=90;
int prepocetL=90;
char info1[20];
char info2[20];
OCR3A=1500;
OCR3B=1500;
   clear_disp();
         sprintf(info1, "Servo 1:  %d°",prepocetH);
         sprintf(info2, "Servo 2:  %d°",prepocetL);

         put_string_xy(0, 0, info1);
         cursor_disp_ctrl(0x04);
         put_string_xy(0, 1, info2);

key = 0;
   while (key == 0);
   
   // display button name
   while(1) {    
            
      if (key != 0) {
         switch (key) {
            case 0x11 : {prepocetH+=1;}; break;      // 1
            case 0x12 : {prepocetH+=10;}; break;      // 2
            case 0x14 : {prepocetH+=100;}; break;      // 3
            case 0x21 : {prepocetH-=1;}; break;      // 4
            case 0x22 : {prepocetH-=10;}; break;      // 5
            case 0x24 : {prepocetH-=100;}; break;      // 6
            case 0x41 : {prepocetL+=1;}; break;      // 7
            case 0x42 : {prepocetL+=10;}; break;      // 8
            case 0x44 : {prepocetL+=100;}; break;      // 9
            case 0x82 : {prepocetL-=10;}; break;      // 0
            case 0x81 : {prepocetL-=1;}; break;      // *
            case 0x84 : {prepocetL-=100;}; break;      // #
            case 0x18 :return(1);break;                   // ESC
            
                  }

         //pipani
         key = 0;
         beep(200, 10);

         if(prepocetH>=180) prepocetH=180;
         if(prepocetL>=180) prepocetL=180;
         if(prepocetH<=0) prepocetH=0;
         if(prepocetL<=0) prepocetL=0;

         //prepocet uhlu na ciselnou hodnotu OCR3A
         natoceni1=1000+(prepocetH*5,5);
         natoceni2=1000+(prepocetL*5,5);
         //vypis hodnot
         OCR3A=natoceni1;
         OCR3B=natoceni2;
         
         clear_disp();
         sprintf(info1, "Servo 1:  %d°",prepocetH);
         sprintf(info2, "Servo 2:  %d°",prepocetL);

         put_string_xy(0, 0, info1);
         cursor_disp_ctrl(0x04);
         put_string_xy(0, 1, info2);

         PWM();
               }
   }
}

int PWM(void)
{
DDRE = 0x18; //povoleni portu PE3 a PE4 jako vystup PWM (OC3A a OC3B)
//Pouzita preddelicka 8 (prescaler)
ICR3=36864; //nastavenim ICR3=36864 dosahnu f=50Hz f=fxtal/N*TOP  N=8 ICR1=TOP

TCCR3A|=(0<<COM3A0)|(1<<COM3A1)|(0<<COM3B0)|(1<<COM3B1)|(1<<WGM31)|(0<<WGM30); // fazove korigovana PWM (0<<WGM31)|(1<<WGM30)

//######################PWM PRO SERVO 2 ################################



TCCR3B|=(0<<ICNC3)|(0<<ICES3)|(1<<WGM33)|(1<<WGM32)|(0<<CS32)|(1<<CS31)|(0<<CS30);
}


Ale nejak mi nechce jit
kód:
//prepocet uhlu na ciselnou hodnotu OCR3A
         natoceni1=1000+(prepocetH*5,5);
         natoceni2=1000+(prepocetL*5,5);
         //vypis hodnot
         OCR3A=natoceni1;
         OCR3B=natoceni2;


a tim padem mi nechtej jit serva respektive chcou se hybat ale snazi se najet nekam kam nemuzou co s tim?


Naposledy upravil endthe dne st duben 01 2009, 17:11, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Ragnol



Založen: Nov 09, 2005
Příspěvky: 232

PříspěvekZaslal: st duben 01 2009, 7:56    Předmět: Citovat

místo toho zapiš

natoceni1=1000+(prepocetH*5,5);
natoceni2=1000+(prepocetL*5,5);
//vypis hodnot
OCR3A=natoceni1;
OCR3B=natoceni2;

hlavně nejen že jsem ti ušetřil dvě proměnný ale hlavně se v C desetinný čárka píše tečkou a ne čárkou ... proto to blbě počítalo.

OCR3A=1000+(prepocetH*5.5);
OCR3B=1000+(prepocetL*5.5);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 13:36    Předmět: Citovat

tak sem to opravil ale stejne mi t porad nechce tocit servem poradi nekdo?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 01 2009, 15:36    Předmět: Citovat

Odkud spadla ta čísla, 1000, které přičítáš a 5.5, kterým násobíš?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 15:54    Předmět: Citovat

Andrea napsal(a):
Odkud spadla ta čísla, 1000, které přičítáš a 5.5, kterým násobíš?


to je z vypoctu pokud 1500 je 90° , 1000 je 0° a 2000 je 180° potom to vychazi na
OCR3A=1000+(prepocetH*5.555555556);
OCR3B=1000+(prepocetL*5.555555556);

a to sedi je to pocitane pomoci trojclenky Smile

mas snad jiny zpusob vypoctu delky pulzu z natoceni serva (podotykam zadavani je pomoci natoceni o 0° do 180° takze je to nutne prepocitat)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 01 2009, 16:01    Předmět: Citovat

endthe napsal(a):
to je z vypoctu pokud 1500 je 90° , 1000 je 0° a 2000 je 180° potom to vychazi na
OCR3A=1000+(prepocetH*5.555555556);
OCR3B=1000+(prepocetL*5.555555556);

a to sedi je to pocitane pomoci trojclenky Smile

mas snad jiny zpusob vypoctu delky pulzu z natoceni serva (podotykam zadavani je pomoci natoceni o 0° do 180° takze je to nutne prepocitat)

Ale jak jsi přišel na to, že 1000 je 0° a 2000 je 180°?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 16:06    Předmět: Citovat

Andrea napsal(a):
endthe napsal(a):
to je z vypoctu pokud 1500 je 90° , 1000 je 0° a 2000 je 180° potom to vychazi na
OCR3A=1000+(prepocetH*5.555555556);
OCR3B=1000+(prepocetL*5.555555556);

a to sedi je to pocitane pomoci trojclenky Smile

mas snad jiny zpusob vypoctu delky pulzu z natoceni serva (podotykam zadavani je pomoci natoceni o 0° do 180° takze je to nutne prepocitat)

Ale jak jsi přišel na to, že 1000 je 0° a 2000 je 180°?



no pouzivam serva HS 422
a 1ms je leva krajni poloha oznacena 0°
2ms je prava krajni poloha oznacena 180°

jinak to definovani ma byt ze kdyz dam 1000 tak delka bude 1ms
delal sem to podle tohoto a upravoval na megu128
http://winavr.scienceprog.com/example-avr-projects/servo-motor-control-using-avr.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 01 2009, 16:11    Předmět: Citovat

endthe napsal(a):
no pouzivam serva HS 422
a 1ms je leva krajni poloha oznacena 0°
2ms je prava krajni poloha oznacena 180°

jinak to definovani ma byt ze kdyz dam 1000 tak delka bude 1ms
delal sem to podle tohoto a upravoval na megu128
http://winavr.scienceprog.com/example-avr-projects/servo-motor-control-using-avr.html

Když je 36864 = 20ms, tak jak může být 1000 = 1ms a 2000 = 2ms, to mi prosím vysvětli (asi někdo neumí přemýšlet a počítat a jen tupě opisuje cizí programy).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 16:19    Předmět: Citovat

Andrea napsal(a):
endthe napsal(a):
no pouzivam serva HS 422
a 1ms je leva krajni poloha oznacena 0°
2ms je prava krajni poloha oznacena 180°

jinak to definovani ma byt ze kdyz dam 1000 tak delka bude 1ms
delal sem to podle tohoto a upravoval na megu128
http://winavr.scienceprog.com/example-avr-projects/servo-motor-control-using-avr.html

Když je 36864 = 20ms, tak jak může být 1000 = 1ms a 2000 = 2ms, to mi prosím vysvětli (asi někdo neumí přemýšlet a počítat a jen tupě opisuje cizí programy).


pokud se nepletu tak ICR3 je tech 36864 a to je pri tom pouzitem krystalu 50Hz


no dobre pokud to je tak tak to 1000 a 2000 nemuze byt
musi to byt 1843.2 pro 1ms 2764.8 pro 1,5ms a 3686.4 pro 2ms


tudiz ten prepocet by mel vypadat takto pokud sem dobre pocital:
kód:

         OCR3A=1843.8+(prepocetH*10.24);
         OCR3B=1843.8+(prepocetL*10.24);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 16:57    Předmět: Citovat

ale stejne mam pocit ze se ty dve PWM ovlivnuji navzajem da se to nejak poresit?
jinak serva napajim externe


Naposledy upravil endthe dne st duben 01 2009, 17:14, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 01 2009, 17:08    Předmět: Citovat

Pokud nemáš chybu v programu, tak se ty PWM nemůžou ovlivňovat. Máš dobře blokované napájení, alespoň 470uF u každého serva?
A proč v programu po každém stisku klávesy znovu inicializuješ Timer3 a proč v té inicializaci děláš příkaz ICR1=TOP?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 17:13    Předmět: Citovat

Andrea napsal(a):
Pokud nemáš chybu v programu, tak se ty PWM nemůžou ovlivňovat. Máš dobře blokované napájení, alespoň 470uF u každého serva?
A proč v programu po každém stisku klávesy znovu inicializuješ Timer3 a proč v té inicializaci děláš příkaz ICR1=TOP?


no to ICR3 tam je traba aby PWM melo frekvenci 50Hz pokud sem to dobre pochopil

jinak jak mam teda delat to PWM abych po kazdem stisku zmenil natoceni serva mam nechat poouze zmenu OCR3A a OCR3B a ten Timer3 inicializovat poze v mainu kde odskakuju z menu do teto fce?
serva napajim externe a u kazdeho mam 1000uF
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 01 2009, 17:26    Předmět: Citovat

endthe napsal(a):
no to ICR3 tam je traba aby PWM melo frekvenci 50Hz pokud sem to dobre pochopil

jinak jak mam teda delat to PWM abych po kazdem stisku zmenil natoceni serva mam nechat poouze zmenu OCR3A a OCR3B a ten Timer3 inicializovat poze v mainu kde odskakuju z menu do teto fce?

Jistě, stačí tu inicializaci provést na začátku, pak už jen po stisku klávesy měnit OCR3A a B.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
endthe



Založen: Mar 07, 2009
Příspěvky: 56
Bydliště: Brno

PříspěvekZaslal: st duben 01 2009, 17:35    Předmět: Citovat

Andrea napsal(a):
endthe napsal(a):
no to ICR3 tam je traba aby PWM melo frekvenci 50Hz pokud sem to dobre pochopil

jinak jak mam teda delat to PWM abych po kazdem stisku zmenil natoceni serva mam nechat poouze zmenu OCR3A a OCR3B a ten Timer3 inicializovat poze v mainu kde odskakuju z menu do teto fce?

Jistě, stačí tu inicializaci provést na začátku, pak už jen po stisku klávesy měnit OCR3A a B.


dobre jdu to zkusit. Diky Andrejko
P.S.: jinak jakym zdrojem doporucujes napajet ty serva
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st duben 01 2009, 18:13    Předmět: Citovat

endthe napsal(a):
P.S.: jinak jakym zdrojem doporucujes napajet ty serva

Moc zkušeností s nima nemám, takže na nějaké doporučení si netroufám, ale na 4 tužkovky běhaly a na zdroj 5V/2A taky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.16 sekund