2017-08-29 7 views
0

Je veux dessiner un cercle en utilisant 2 moteurs pas à pas (42H48) et 2 pilotes (TB6560).Dessiner un cercle à l'aide de 2 moteurs pas à pas (Arduino)

Le matériel sont comme ceci:

 
    (y-axis motor) 
     | 
     | 
--—--- |-------- (x-axis motor) 
     | 
     | 

Maintenant, je ne peux contrôler ces moteurs à dessiner comme forme de diamant.

// 1 
digitalWrite(xAxisMotorDirection, HIGH); 
digitalWrite(yAxisMotorDirection , HIGH); 
for(i=0; i<12000; i++) 
{ 
    digitalWrite(xAxisMotorPulse, HIGH); 
    digitalWrite(yAxisMotorPulse , HIGH); 
    delay(1); 
    digitalWrite(xAxisMotorPulse , LOW); 
    digitalWrite(yAxisMotorPulse , LOW); 
    delay(1); 
} 

// 2 
digitalWrite(xAxisMotorDirection, HIGH); 
digitalWrite(yAxisMotorDirection , LOW); 
for(i=0; i<12000; i++) 
{ 
    digitalWrite(xAxisMotorPulse, HIGH); 
    digitalWrite(yAxisMotorPulse , HIGH); 
    delay(1); 
    digitalWrite(xAxisMotorPulse , LOW); 
    digitalWrite(yAxisMotorPulse , LOW); 
    delay(1); 
} 

// 3 
digitalWrite(xAxisMotorDirection, LOW); 
digitalWrite(yAxisMotorDirection , LOW); 
for(i=0; i<12000; i++) 
{ 
    digitalWrite(xAxisMotorPulse, HIGH); 
    digitalWrite(yAxisMotorPulse , HIGH); 
    delay(1); 
    digitalWrite(xAxisMotorPulse , LOW); 
    digitalWrite(yAxisMotorPulse , LOW); 
    delay(1); 
} 

// 4 
digitalWrite(xAxisMotorDirection, LOW); 
digitalWrite(yAxisMotorDirection , HIGH); 
for(i=0; i<12000; i++) 
{ 
    digitalWrite(xAxisMotorPulse, HIGH); 
    digitalWrite(yAxisMotorPulse , HIGH); 
    delay(1); 
    digitalWrite(xAxisMotorPulse , LOW); 
    digitalWrite(yAxisMotorPulse , LOW); 
    delay(1); 
} 

Toute bonne approche pour dessiner un cercle en utilisant des impulsions?

Je ai googlé "algorithme de bresenham", mais je ne sais pas comment implémenter cet algorithme en utilisant impulsion.

+0

sry combien de pas vos moteurs ont-ils? –

+0

1.8 degrés angle de pas – Vfire

Répondre

0

Ceci est juste un concept, je ne l'ai pas testé:

Faire une table de correspondance avec des paires x et y. Pour créer ceci, espacer 100 ou plus entre 0 et 2pi et calculer sin et cos de cet ensemble et le placer dans la table.

Créez une variable d'index d'entier pour x et une pour y. Utilisez une minuterie ou un délai pour établir un intervalle de temps régulier. À chaque intervalle de temps, regardez la position suivante dans la table de recherche et faites des étapes sur les axes appropriés pour que l'index pas à pas du milieu corresponde à la table de recherche à ce moment-là.

Exemple: table [1] = (1,2) Mes positions pas à pas actuelles sont (2, -1) cela est arbitraire sur ce pas de temps je reculerais mon pas de 1 pas et mon y avance 3 étapes .

Je pense que vous aurez besoin de rester à l'écart du délai pour cela car vous devrez exécuter les étapes pendant l'intervalle de temps. À un pas de temps, vous établirez où vous êtes et devez être, mais devrez alors créer plusieurs étapes chronométrées pour y arriver. Mon plus gros souci est que vos steppers ne soient pas assez rapides pour cela, mais idk. Jusqu'à un certain point, un courant plus élevé peut permettre un pas plus rapide.