Rekenen om te corrigeren

Software die niet past in bovenstaande onderwerpen
Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Rekenen om te corrigeren

Berichtdoor Redundant » 18 Mei 2014, 04:32

Hallo allemaal, ik ben Martin, 67 jaar en ben sinds kort bezig met de Arduino Mega2560 en het Programmeren uiteraard.
Het gaat gelukkig steeds beter dankzij dit forum etc.

Momenteel bezig om een zgn verdeelapparaat te besturen en kom nu in de problemen, :oops:

Een verdeelapparaat kan een overbrenging hebben van bijv. Verhouding 1:40 of 1:60, 1:72, 1: 90 etc.
Uitgaande van een verhouding 1:40 en een stappenmotor met 200 steps betekend dit: 200 X 40 = 8.000 steps.
Als we nu een tandwiel willen frezen van 20 tanden, dan is dat geen probleem. Per tand sturen we dan 400 stapjes en maken de bewerking, enz.

Zolang de verhouding deelbaar is door 2 en/of 3 zijn er heel veel mogelijkheden die met mooie uitkomsten zijn. Verhouding 1:40 en bijvoorbeeld een tandwiel van 117 tanden gaat niet goed.
8.000 gedeeld door 117 is 68,376 stappen.
Afwijking is bij hele stappen 117 X .376 = 43,996.
44 stappen dus is de afwijking. 44 8.000 ste. Is dan weer 1.98 graad, wat uiteraard niet kan want de laatste tandafstand is veel te groot.

Dit is een veel voorkomend probleem. Deel zelf maar eens 8.000 door verschillende getallen. Bijv 59, 61, 13, 29, 31 etc.

Hoe kunnen we dit corrigeren?
Overbrenging 1 op 10, is een grote correctie in ieder geval.
Half steps of iets dergelijks.
Corrigeren door de .376 steeds te blijven corrigeren, maar hoe.

Heeft er iemand een suggestie hoe E.e.a. Zou kunnen worden gecorrigeerd.

Gr. Martin

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Rekenen om te corrigeren

Berichtdoor nicoverduin » 18 Mei 2014, 08:32

Niet dus....
Een stappenmotor kan 1,1/2,1/4,1/8, 1/16 en 1/32 steps maken. Dan heb je nog betere (duurdere) stappenmotoren die 0.9 graden per stap dus (400 steps per rev). maar het blijven gehele getallen. Ze zou dan nog met de kleinste stap kunnen werken en af en toe een stapje kunnen smokkelen. Dus stel:
Je wilt 117 stappen maken
Dan heb je 27 microstappen nodig per tand (bij 1/16 Microstep)
Dan houd je 41 stapjes over
Die verdeel je over de 117. Dat is iets meer als 1 extra micro stap per 3 tanden.
dus zou je iets van 27-27-28-27-27-28 stapjes in de reeks krijgen
Leuk puzzelvraagstuk voor je :)

Je kan gewoon een tabel maken en dan elke keer kijken waar je de kleinste restwaarde overhoud. Dat wordt dan de instelling voor de controller.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Rekenen om te corrigeren

Berichtdoor shooter » 18 Mei 2014, 10:03

ach een leuk simpel rekenverhaal:
ik ga even uit van 1:40 maar vul zelf maar in.
jouw 8000 stappen is dus 360/8000 = 0.045 graden nauwkeurigheid (de meeste tafels halen dat niet omdat ze een beetje speling hebben dus goed genoeg.
pak even een papiertje erbij:
we gaan een tandwiel maken van 59 tanden met een 8000 stappen:
maak een assenstelsel
begin bij 0,0
trek een lijn naar 8000,59
zoek nu op hoeveel stappen 1 tand is:135.59322 stappen
je kunt alleen maar 136 kiezen logisch.
de volgende is 8000/59*2=271.18644 dus 271 dat is 271-136=135 stappen
volgende 8000/59*3=406.77966 = 136 stappen
de rest doe je zelf maar, je zult zien dat je soms 135 doet en soms 136, maar het is niet om en om.

berekening: met simpele INT:
if tanden <59
{zet een stap
pos=pos+1
add 59 to tand
if (tand=> 8000) // je hebt je volgende tand bereikt:
{subtract 8000 van tand
frezen van tand
laat frees teruglopen
tanden=tanden+1
}
}
while (pos < 8000) then zet stap
pos=pos+1 (hier kan een stap verschil ontstaan door)
om weer met een schone lei te beginnen moet de stappenmotor wel weer op de juiste begnpositie staan. je kunt ook gewoon terugdraaien en opnieuw beginnen met de frees een stukje dieper.

de getallen moet je opgeven als variabelen natuurlijk dan kun je ze simpel veranderen.

Bij veel tanden helpt het terugdraaien na elke frees want dan heb je telkens een vaste psoitie. zeker voor de eerste aanzet is dat wel handig.
als 8000 niet genoeg is dan kun je inderdaad microsteppen, echter moet je wel goed kijken of je stappenmotor inderdaad ook netjes die tussenstappen zet. beter is dan om een grotere verhouding te kiezen, want snelheid heb je hier niet nodig. 100 stappen is 0.5 seconden. bedenk ook dat je frees eerst terugmoet voor je de volgende tand gaat maken.
paul deelen
shooter@home.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 18 Mei 2014, 11:41

Hoi, Nico en Shooter.
Nico, je ziet wel, ik probeer de vragen te splitsen zodat ik niet een Topic krijg wat veel te ingewikkeld wordt.

Shooter, bedankt, was al wel eens in die richting aan het denken maar hoopte stiekum dat er een heel eenvoudige methode zou zijn. Er bestaan al meer Arduino verdeeltafels ten slotte.
Dank zij je suggestie kan ik nu een routine gaan maken waarin een automatische correctie is ingebouwd.

Gr. Martin

Wat betreft de speling die in de wormwieloverbrenging aanwezig is.
Bijvoorbeeld een palwiel aan de tafel maken (groot) en die steeds onder druk brengen door een extra Servo of magneet tegen dat palwiel laten drukken.
En dan een blokkering maken uiteraard tijdens het frezen.
De kloktandwielen worden meestal in eens op diepte gefreesd

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 20 Mei 2014, 13:15

Hoi shooter,
ik ben eerst met excell bezig geweest en zie dat het afronden van de getallen op hele cijfers een uitstekend resultaat geeft.
Onderstaande tabel geeft een aantal van 13 tanden weer. En is dus weer 8.000. :mrgreen:
Het grootste verschil is dus maximaal 0,50 stap. Te verwaarlozen dus.
Ik heb diverse getallen en verhoudingen getest, altijd een goed resultaat.
Nu nog voor de Arduino omzetten.

Op hele
getallen
A6 X F6 Afgerond
Bewerking afronden Verschil Gecorr. Verschil
1e tand 1 615,38 615,00 615 615,00 -0,38 615,00 -0,38
2e tand 2 1.230,77 1.231,00 615 1230,00 -0,77 1.231,00 0,23
3e tand 3 1.846,15 1.846,00 615 1845,00 -1,15 1.846,00 -0,15
4e tand 4 2.461,54 2.462,00 615 2460,00 -1,54 2.462,00 0,46
5e tand 5 3.076,92 3.077,00 615 3075,00 -1,92 3.077,00 0,08
6e tand 6 3.692,31 3.692,00 615 3690,00 -2,31 3.692,00 -0,31
7e tand 7 4.307,69 4.308,00 615 4305,00 -2,69 4.308,00 0,31
8e tand 8 4.923,08 4.923,00 615 4920,00 -3,08 4.923,00 -0,08
9e tand 9 5.538,46 5.538,00 615 5535,00 -3,46 5.538,00 -0,46
10e tand 10 6.153,85 6.154,00 615 6150,00 -3,85 6.154,00 0,15
11e tand 11 6.769,23 6.769,00 615 6765,00 -4,23 6.769,00 -0,23
12e tand 12 7.384,62 7.385,00 615 7380,00 -4,62 7.385,00 0,38
13e tand 13 8.000,00 8.000,00 615 7995,00 -5,00 8.000,00 0,00 :mrgreen:

14e tand 14 8.615,38 8.615,00 615 8610,00 -5,38 8.615,00 -0,38
15e tand 15 9.230,77 9.231,00 615 9225,00 -5,77 9.231,00 0,23
16e tand 16 9.846,15 9.846,00 615 9840,00 -6,15 9.846,00 -0,15
17e tand 17 10.461,54 10.462,00 615 10455,00 -6,54 10.462,00 0,46
18e tand 18 11.076,92 11.077,00 615 11070,00 -6,92 11.077,00 0,08
19e tand 19 11.692,31 11.692,00 615 11685,00 -7,31 11.692,00 -0,31
20e tand 20 12.307,69 12.308,00 615 12300,00 -7,69 12.308,00 0,31
21e tand 21 12.923,08 12.923,00 615 12915,00 -8,08 12.923,00 -0,08
22e tand 22 13.538,46 13.538,00 615 13530,00 -8,46 13.538,00 -0,46

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Rekenen om te corrigeren

Berichtdoor shooter » 20 Mei 2014, 19:53

0.5 stap is natuurlijk de grens maar dat snapte je zelf ook wel natuurlijk.

je kunt het stukje vrijwel helemaal overnemen, er moeten een paar accolades en haakjes tusswen , maar dat kun je zelf wel doen denk ik.
dit geintje kun je ook toepassen op meerdere assen, om een schuine lijn te maken, dan gebruik je een virtuele as waar alle andere onder staan.

bij een cirkel of andere gebogen lijn, moet je even opletten dat je de tand gewoon laat staan, alleen met een ander getal gaat optellen.
paul deelen
shooter@home.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 20 Mei 2014, 21:01

Met INT komen er hele getallen tevoorschijn.
135 steps, ik wil uiteraard 1 of twee cijfers achter de komma.
Maar hoe?
gr, Martin

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 21 Mei 2014, 15:34

Met Excell heb ik de formule =AFRONDEN(G14;0) gebruikt werkt perfect.
Is er een mogelijkheid binnen Arduino om een dergelijke formule toe te passen?

Wat ik nu ook doe er komen afgeronde getallen, of er komt een binaire uitkomst.
Maar altijd een heel getal. :oops:

Zelfs na uren op internet zoeken kom ik er niet uit. :evil:

Als ik 8000 deel door 59 = 135,5932, daar kan ik wat mee.

Waarom lukt het niet?

gr, Martin

Berichten: 9
Geregistreerd: 27 Mrt 2014, 02:49

Re: Rekenen om te corrigeren

Berichtdoor LowD » 21 Mei 2014, 16:05

Geef eens een stukje code waarin je het probeert.

Gebruik je float of int?

Probeer eens of je verschil ziet bij
Serial.print(8000/59)
Serial.print(8000/59.0)
Serial.print(8000/59.0,2)
Serial.print(8000/59.0,7)

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: Rekenen om te corrigeren

Berichtdoor Redundant » 21 Mei 2014, 16:42

Ik gebruik overal INT voor :?

met jouw suggestie kom ik inderdaad naar twee decimalen, zoals gewenst. :mrgreen:

Maar als ik de getallen 8000 en 59 vervang, gaat het weer fout. :oops:

Waarom?

int drukknop = 0;
// int WW40 = 40; // Wormwielverhouding 1:40
// int Msteps = 200; // Aantal stappen van de motor per omwenteling
int maxsteps = 0; // WW40*200 = 8.000
int DWSW = 0; // Aantal te maken Tanden
int Tandsteps = 0; // Aantal stappen per tand
int Tanden = 0; // Gemaakt aantal tanden
int TTsteps = 0; // Totaal aantal gemaakte stappen



void setup
() {
Serial.begin(9600);
DWSW = 59;
maxsteps = 8000;
Tandsteps = (maxsteps/DWSW);
Tanden = 0;
Serial.println(" ");
}
void loop
() {

TTsteps = (Tanden * Tandsteps); // nodig is met een getal achter de komma ????????




Serial.print("maxsteps = ");
Serial.print(maxsteps);
Serial.print(" ");
Serial.print("DWSW = ");
Serial.print(DWSW);
Serial.print(" ");
Serial.print("Tandsteps =");
Serial.print(Tandsteps);
Serial.print(" ");
Serial.print("Tanden =");
Serial.print(Tanden);
Serial.print(" ");
Serial.print("TTsteps =");
Serial.println(8000/59.0,2);
Serial.print("TTsteps =");
Serial.println(maxsteps/DWSW.0,2);

Tanden ++ ;

}

Volgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten