|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
sebastjan.kamensek Član
Pridružen-a: Sob 26 Jul 2008 11:04 Prispevkov: 1021 Aktiv.: 5.30 Kraj: Škofja Loka
|
Objavljeno: Pon Apr 08, 2024 10:55 am Naslov sporočila: Sprememba programa |
|
|
Že dolgo časa je nazaj kar sem kar koli naredil z Arduinotom, tako da imam trenutno ogromne težave z razumevanjem tele kode.
Sepravi, to je obstoječ program za Arduino, kateri je bil spisan za rotirajočo mizo ki pa je mehansko malo drugačna od moje.
riginal miza je imela 100 zob na zunanjem obroču mize in 20 zob na pogonskem zobniku koračnega motorja. Moja izvedenka je večja, in ima 150 zob na zunanjem obroču, medtem ko na pogonskem zobniku je ostalo identično število zob (20).
Vprašanje je, kako popravit spodnjo kodo, da bo upoštevala to razliko v prestavnem razmerju zobnikov:
Sam sem sklepal, da je prestavno razmerje upotevano tule :
motor.step(-tempDeger * 5);
Ampak če popravim to vrstico *7,5, da upoštevam višje prestavno razmerje, motor naredi preveč korakov.
Original lokacija kode: koda
Koda: |
#include<Stepper.h>
#include<stdlib.h>
int deger = 0;
char buffer1[8] = {0,0,0,0,0,0,0,0};
unsigned int zaman=0;
unsigned int donmeacisi=0;
int sayac = 0;
int tempDeger = 0;
int i = 0, j = 0;
boolean durdurBasla = false;
boolean durum;
int k = 0;
int [slovenščina je zame španska vas] = 0;
int kalanSayac = 0;
int pin1 = 8;
int pin2 = 10;
int pin3 = 9;
int pin4 = 11;
Stepper motor = Stepper(2048, 8, 10, 9, 11);
void setup() {
motor.setSpeed(10);
Serial.begin(9600);
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
}
void stopMotor(){
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
}
void loop() {
int [slovenščina je zame španska vas] = 0;
if(deger < 253){
[slovenščina je zame španska vas] = deger * 5.68;
}
tempDeger = deger * 5.68;
sayac = 2048 / tempDeger;
kalanSayac = sayac;
if(durdurBasla == false){
for(i = 0; i < sayac; i++, kalanSayac--){
deger = Serial.read();
if(durum == false){
motor.step([slovenščina je zame španska vas]);
durdurBasla = true;
break;
}
else{
if(deger == 254){
durum = false;
}
else{
if(deger == 253){
motor.step(-[slovenščina je zame španska vas]);
delay(zaman);
}
else{
motor.step(-tempDeger * 5);
stopMotor();
delay(zaman);
}
}
}
}
}
else if(durdurBasla == true){
for(j = 0; j < kalanSayac; j++){
deger = Serial.read();
if(durum == false){
motor.step([slovenščina je zame španska vas]);
durdurBasla = false;
break;
}
else{
durdurBasla = false;
if(deger == 254){
durum = false;
}
else{
if(deger == 253){
motor.step(-[slovenščina je zame španska vas]);
stopMotor();
delay(zaman);
}
else{
motor.step(-tempDeger * 5);
stopMotor();
delay(zaman);
}
}
}
}
}
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
}
void serialEvent(){
while(Serial.available()){
Serial.readBytes(buffer1, 8);
Serial.println(buffer1[0], DEC);
Serial.println(buffer1[1], DEC);
Serial.println(buffer1[2], DEC);
Serial.println(buffer1[3], DEC);
Serial.println(buffer1[4], DEC);
Serial.println(buffer1[5], DEC);
Serial.println(buffer1[6], DEC);
Serial.println(buffer1[7], DEC);
zaman=((int(buffer1[0]-48)*10000)+(int(buffer1[1]-48)*1000)+(int(buffer1[2]-48)*100)+int(buffer1[3]-48)*10)+int(buffer1[4]-48);
Serial.println(zaman, DEC);
donmeacisi= (int(buffer1[5]-48)*100)+(int(buffer1[6]-48)*10)+int(buffer1[7]-48);
Serial.println(donmeacisi, DEC);
deger=donmeacisi;
if(deger == 254){
durum = false;
}
else if(deger == 253){
durum = true;
}
else{
durum = true;
}
}
} |
|
|
Nazaj na vrh |
|
|
prel1 Član
Pridružen-a: Pon 29 Nov 2021 20:16 Prispevkov: 176 Aktiv.: 5.84 Kraj: Koper
|
Objavljeno: Pon Apr 08, 2024 11:56 am Naslov sporočila: |
|
|
Sam na tem področju nimam nikakršnih izkušenj, tako da bolj ugibam.
Podal si samo razmerje oziroma število zob med motorjem in mizo.
Recimo da je lahko razlika v motorju oziroma koraku glede na število polov, če ta ni podatkovno identičen temu v originalnem projektu.
Se ti je pojavila kakšna razlika v številu vrtljajev med originalno kodo in spremenjeno?
Je na mizi še kakšna dodatna kontrola pozicije. Ali je originalni projekt objavljen na spletu...povezava
_________________ Lp |
|
Nazaj na vrh |
|
|
robert Član
Pridružen-a: Sob 29 Maj 2004 21:48 Prispevkov: 1872 Aktiv.: 8.36 Kraj: Tolmin
|
Objavljeno: Pon Apr 08, 2024 1:32 pm Naslov sporočila: |
|
|
Koda: |
Stepper motor = Stepper(2048, 8, 10, 9, 11); |
Stepper(steps, pin1, pin2, pin3, pin4)
Lahko pa tudi tu nastaviš drugačno število korakov motorja.
_________________ LP Robert |
|
Nazaj na vrh |
|
|
sebastjan.kamensek Član
Pridružen-a: Sob 26 Jul 2008 11:04 Prispevkov: 1021 Aktiv.: 5.30 Kraj: Škofja Loka
|
Objavljeno: Pon Apr 08, 2024 1:40 pm Naslov sporočila: |
|
|
Tule je cel projek link
Če uporabim original kodo, se miza obrne premalo. To testiram tako, da v windows programu nastaviš kot 180° in na mizi gledaš mehansko oznako. 180° obrat je dokaj enostanvo spremljat.
Da bi premenil število korakov sploh nisem pomislil... poskusim... sepravi namesto 2048 za 1 obrat, lahko nastavim na 3072 in bi moralo delat pravilno.
lp
|
|
Nazaj na vrh |
|
|
prel1 Član
Pridružen-a: Pon 29 Nov 2021 20:16 Prispevkov: 176 Aktiv.: 5.84 Kraj: Koper
|
Objavljeno: Pon Apr 08, 2024 8:44 pm Naslov sporočila: |
|
|
Glede na povečano razmerje prenosa je res za pričakovat manjši kotni obrat mize z originalno kodo. Zgolj zanašanje na število korakov motorja lahko vseeno prihaja do zamika v primeru, da se miza med rotacijo zatakne. Torej ne doseže želenega kota ali ciljne točke brez povratne informacije o poziciji. Drugače pa odvisno od zahtevnosti uporabe.
Kar se tiče sedanje korekcije je bolj smiselno nastaviti pravilno število korakov na obrat mize oziroma 0/360.
_________________ Lp |
|
Nazaj na vrh |
|
|
sebastjan.kamensek Član
Pridružen-a: Sob 26 Jul 2008 11:04 Prispevkov: 1021 Aktiv.: 5.30 Kraj: Škofja Loka
|
Objavljeno: Tor Apr 09, 2024 9:10 am Naslov sporočila: |
|
|
Ja, ta miza nima nikakršne kontrole pozicije. Gre se za vrtljivo mizo, katera se uporablja za 3D skeniranje.
Ker sem v programiranju precej "bos" sem se poslužil obstoječega projekta. Sicer se strinjam da bi bilo bolje imet povratno informacijo kje je miza, ampak se v aplikaciji ubistvu ne more zataknit. Bom popoldan prilepil slike.
lp
|
|
Nazaj na vrh |
|
|
sebastjan.kamensek Član
Pridružen-a: Sob 26 Jul 2008 11:04 Prispevkov: 1021 Aktiv.: 5.30 Kraj: Škofja Loka
|
Objavljeno: Čet Apr 11, 2024 7:13 pm Naslov sporočila: |
|
|
Žal sprememba korakov motorja ni obrodila sadov... vbistvu je razlika zelo mala ali vpišem 2048 ali 3072. še kakšna ideja?
|
|
Nazaj na vrh |
|
|
rafaellsi Član
Pridružen-a: Ned 11 Sep 2011 18:54 Prispevkov: 478 Aktiv.: 3.09 Kraj: Radovljica
|
Objavljeno: Čet Apr 11, 2024 8:30 pm Naslov sporočila: |
|
|
Na hitro pogledano me motijo neke konstante npr. 5,68, ki bog ve kaj pomeni (ali je povezava mad kotom in koraki: 360*5,68 =2045 ??) in vmes imaš tudi izračun "sayac = 2048 / tempDeger;" ki pomeni število obratov če drži prva predpostavka ....
|
|
Nazaj na vrh |
|
|
sebastjan.kamensek Član
Pridružen-a: Sob 26 Jul 2008 11:04 Prispevkov: 1021 Aktiv.: 5.30 Kraj: Škofja Loka
|
Objavljeno: Čet Apr 11, 2024 9:03 pm Naslov sporočila: |
|
|
Sayat v turščini pomeni števec (counter)
Sepravi če povzamem tole (v oklaepajih so slovenski prevodi)
Dagar (vrednost) je prebrana vrednost v stopinjah iz windoes programa - recimo 180
"t u t" so koraki katere mora motor naredit.
Ta konstanta me bega... ker recim da prebereš 360 ° v "dagar" to pomeni, da je "t u t" = "dager" * 5,68 -> 2045 korakov... v praksi to pomeni 1 obrat motorja in 1/5 obrata cele mize (ker je prestavno razmerje v originalu 1 -> 5 obratov motorja pomeni 1 obrat cele mize), kar si nekako ne znam razložit kako bi lahko delalo... za 180 ° obrat mora original motor naredit 2,5 obrata oziroma 5120 korakov.... ne gre mi skupaj...
lp
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.41 Kraj: Vrhnika
|
Objavljeno: Čet Apr 11, 2024 10:45 pm Naslov sporočila: |
|
|
Probaj takole:
Koda: |
Stepper(200, 8, 10, 9, 11); |
ker motor iz povezave naredi 200 korakov na obrat oz 1,8 stopinje/korak.
Ce je "deger"=stopinje in "t u t"=koraki potem izracunas stevilo korakov
Koda: |
t u t=(deger/1.8)*7.5 |
Mnozis s prestavnim razmerjem 7.5. Za poln obrat mize naj bi potem potreboval 1500 korakov.
|
|
Nazaj na vrh |
|
|
sebastjan.kamensek Član
Pridružen-a: Sob 26 Jul 2008 11:04 Prispevkov: 1021 Aktiv.: 5.30 Kraj: Škofja Loka
|
Objavljeno: Pet Apr 12, 2024 12:00 pm Naslov sporočila: |
|
|
mato1111 je napisal/a: |
Probaj takole:
Koda: |
Stepper(200, 8, 10, 9, 11); |
ker motor iz povezave naredi 200 korakov na obrat oz 1,8 stopinje/korak.
Ce je "deger"=stopinje in "t u t"=koraki potem izracunas stevilo korakov
Koda: |
t u t=(deger/1.8)*7.5 |
Mnozis s prestavnim razmerjem 7.5. Za poln obrat mize naj bi potem potreboval 1500 korakov. |
Motor ima na sebi reduktor, tako da če želimo da naredi 1 kompleten obrat izhoda iz reduktorja mora motor naredit 2048 korakov (glej pripeto sliko).
Speravi prvi del kode je potemtakem pravilen :
Koda: |
Stepper(2048, 8, 10, 9, 11); |
Drugi del pa moram skladno z tem popravit, in ker na vsak korak naredi ~0,176 stopinje (360° delim z številom korakov za 1 obrat, torej 2048) je potem drugi del kode :
Koda: |
t u t=(deger/0,1757)*7.5 |
Poskusim popoldan... hvala
Opis: |
|
Velikost datoteke: |
209.97 KB |
Pogledana: |
1 krat |
|
|
|
Nazaj na vrh |
|
|
prel1 Član
Pridružen-a: Pon 29 Nov 2021 20:16 Prispevkov: 176 Aktiv.: 5.84 Kraj: Koper
|
Objavljeno: Pet Apr 12, 2024 1:20 pm Naslov sporočila: |
|
|
V pripeti sliki ima izhodni zobnik 24 zob, tvoj kot si omenil na začetku ima 20 zob.
Osnova je koliko korakov ima motor za en obrat, prestavno razmerje reduktorja in prestavno razmerje med reduktorjem in mizo,da dobiš končno števio korakov motorja za 1 obrat mize.
_________________ Lp |
|
Nazaj na vrh |
|
|
sebastjan.kamensek Član
Pridružen-a: Sob 26 Jul 2008 11:04 Prispevkov: 1021 Aktiv.: 5.30 Kraj: Škofja Loka
|
Objavljeno: Pet Apr 12, 2024 2:35 pm Naslov sporočila: |
|
|
Se opravičujem za zmedo...
Da bolje opišem sistem. Gre se za vrtljivo mizo za 3D skeniranje.
Pogone te mize, je izveden preko zgoraj omenjenega motorja, kateri ima že notranji reduktor (1/64). Na Izhodno gred reduktorja se natakne še dodatni zobnik kateri ima 20 zob, ta zobnik pa potem poganja mizo preko zobnika, kateri ima 150 zob.
Sepravi za 1 cel obrat mize, mora izgodna gred reduktorja naredit 7,5 obratov. Motor pa mora za 1 obrat gredi reduktorja naredit 2048 korakov, kar potem pomeni, da je za 1 obrat cele mize, potrebnih 15.360 korakov motorja (2048 *7,5).
V prilogi slika 3D modela celega sistema. Na veliki zobnik je na vrhu privijača direktno miza, tako da je 1 obraz velikega zobnika tudi 1 obrat mize.
Opis: |
|
Velikost datoteke: |
528.6 KB |
Pogledana: |
5 krat |
|
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 102 dni
Powered by phpBB © 2001, 2005 phpBB Group
|