Ik heb hulp nodig bij een schakeling.

De bedoeling is om 3 dc motoren te schakelen.
Dit is wat ik wil bereiken:

Na een druk op een knop gaat de 1ste motor een halve draai dan moet hij stoppen en gaat een 2de motor draaien ook een halve draai.
Die stopt dus ook, dan gaat de 3de motor 1 volledige ronde en dan stop. Direct erna gaan motor 1 en 2 terug naar hun begin positie.(de 3de motor is al terug bij zijn begin positie gezien hij ene volledige ronde maakt)
ofwel een halve draai terug of een halve draai vooruit dat maakt verder niet uit.

Hoe kan ik dit het simpelste bereiken?
Kan dit met eindschakelaars?
Ik hoop dat iemand mij kan helpen.

Mvg Alexander.

Gebruik je hiervoor stappenmotoren?

hoe veregaand wil je dit, met schakelaartjes kan zeker al zal je dan een sturing moeten maken met misch pic's als je ergens wat ervaring hebt.
met relais of ic's zie ik het ook wel mogelijk maar dat wordt iets veregaander en grotere opbouw.

hoe accuraat moet de 180° want als de motor de schakelaar raakt en stopt zal hij nog even uitbollen afhankelijk van de belasting, dus hou daar rekening mee.

mischien is servo's nog wel eenvoudiger en een klein pic programmatje
(servo's kunnen accurater de positie nemen en dan heb je de schakelaartjes nimmer nodig)

[Bericht gewijzigd door jokohoko op (17%)]

Ik wil het zo simple mogelijk houden. Ik heb geen ervaring met pics etc.
Dus liever alleen met schakelaars als dat mogelijk is.
De extra bedrading neem ik voor lief...

de 180 graden hoeft niet super exact.

Mvg Alexander

Tja. Als je dan een schakelaar bij de uitgangspositie zet, en omdat ie 6000 toeren per minuut doet doet ie 10 toeren per seconde. Dus een halve in 1/20e van een seconde.

Ik zat nog even te denken: Als je hem dan gewoon aanzet voor een bepaalde tijd om ongeveer 180 graden te draaien, maar dat gaat voor zulke korte tijden niet werken. Zijn die motoren niet veel te zwak en te sneldraaiend voor deze toepassing?

Maar goed. Als dat wel zou kunnen zou je dus een statemachine moeten maken.

State 0 : Idle. Wacht op puls. Zodra puls ga naar state1.

State 1: draai motor 1. Wacht op tijd verstrijken (b.v. 2 sec) ga dan naar state2.

State 2: Draai motor 2, wacht op tijd verstrijken. (b.v. 2 sec), ga dan naar state 3.

State 3: daai motor 3, wacht op eindschakelaar 3. ga dan naar state 4.

State 4: Draai motor 1 ALS niet eindschakelaar1 en motor 2 ALS NIET eindschaklelaar 2. Ga naar state0 als eindschakelaar 1 EN eindschakelaar 2.

Dit soort statemachines kan je ook discreet opbouwen. Zelfs met relais......

Die "b.v. 2 sec" heb ik er bij gezet om een indicatie te geven van een toerental waarbij ik denk dat het blind een tijdje laten draaien kan werken. Dus dan hebben we het over 2 sec per halve omwenteling dus 4 sec per omwenteling dus 15 RPM....

[edit] m.i. is dit veel eenvoudiger met een pic/avr, maar goed....

BEdankt.

dat klinkt vrij ingewikkeld...
Die motoren zijn heel sterk en hebben een vertraagkast.
Ze maken maar 10 rpm bij 1,5V.
Een halve draai duurt dus 3 seconden.
De motoren moeten steeds exact op dezelfde plaats uitkomen.
Anders had ik wat timers erop aangesloten maar op een geveven moment klopt de posities dan nietmeer. na een paar keer.
Weet iemand nog een andere oplossing?

Mvg Alexander.

wat budget heb je er voor over?

ik denk met die schaklaartjes overal om de stant te meten maar qua sturing wordt het dan ook nog een heleboel schakeingetjes waar ik niet direct een eid aan zie.

logo zou een oplossing kunnen bieden ( soort plc van siemens)

anders lijkt me nog steeds voor dit soort toepassing een pic of andere programmeerkaartje

en eig een soort grafcet opbouwen, bij start: draai motor 1 : zodra schakelaar 1 komt : draai motor 2 enzoverder.

kan je mischien even toelichten waar het moet worden gebruikt, wat voor voorzieningen er zijn en hoe groot het mag, en zeker ook het budget

Het is voor een bewegend figuur.
Budget is 100 euro.
plaats is max 30 bij 30 cm, dus waar de bestruring kan staan.
Het si de bedoeling om de motors met 1,5 volt te voeden met ene stabiele voeding.

Maar voor een pic heb je dahct ik al 6v nodig is geen probleem.

Mvg Alexander

Hier pak een microcontroller en 3 h-bruggen.
heb hier onder grootste deel van c-script al voor je gemaakt.
je moet zelf alleen nog even zeggen op welke poorten je ze aangesloten hebt.


/*
    Title:    script
    Author:   Vincent Kerstholt
    Date:     18/02/2011
    Purpose:  
    Software: AVR-GCC
    Hardware: ATS90S8515/8535/2313/mega
    Note:    Gemaakt op verzoek
*/
#include <io.h>

void MotorA1(char h1);	// klep 1 voor motorA
void MotorA2(char h2);  // klep 2 voor motorA
void MotorA3(char h3);	// klep 3 voor motorA
void MotorA4(char h4); // klep 4 voor motorA
void MotorB1(char h5);	// klep 1 voor motorB
void MotorB2(char h6);  // klep 2 voor motorB
void MotorB3(char h7);	// klep 3 voor motorB
void MotorB4(char h8);  // klep 4 voor motorB
void MotorC1(char h9);	// klep 1 voor motorC
void MotorC2(char h10);  // klep 2 voor motorC
void MotorC3(char h11);	// klep 3 voor motorC
void MotorC4(char h12);  // klep 4 voor motorC


int main () {
const true=1, false=0;

while (1) {
h1=1;      // motor A gaat draaien
h2=0;
h3=0;
h4=1;
delay_ms(x) // x het aantal ms voor een halve draai
h1=1;
h2=0;
h3=1;
h4=0;       //motorS word stil gezet.

h5=1;      // motor B gaat draaien
h6=0;
h7=0;
h8=1;
delay_ms(x) // x het aantal ms voor een halve draai
h5=1;
h6=0;
h7=1;
h8=0;       //motorB word stil gezet.

h9=1;      // motor C gaat draaien
h10=0;
h11=0;
h12=1;
delay_ms(x) // x het aantal ms voor een hele draai

h1=1;      // motor A gaat draaien
h2=0;
h3=0;
h4=1;
delay_ms(x) // x het aantal ms voor een halve draai
h1=1;
h2=0;
h3=1;
h4=0;       //motorS word stil gezet.

h5=1;      // motor B gaat draaien
h6=0;
h7=0;
h8=1;
delay_ms(x) // x het aantal ms voor een halve draai
h5=1;
h6=0;
h7=1;
h8=0;       //motorB word stil gezet.

}
return 0;
}

en om hem weer goed te laten zetten kan je gewoon een licht sensortje nemen, met een klein spiegeltje ofzo op het geen wat rond draaid, en dan als die op elkaar staan naar een ingebouwde geheugenstand een 1 laten schrijven.

aub daar ook het script van, vergeef het me als er een fout in zit. heb hem niet getest


/*
    Title:    script
    Author:   Vincent Kerstholt
    Date:     18/02/2011
    Purpose:  
    Software: AVR-GCC
    Hardware: ATS90S8515/8535/2313/mega
    Note:    Gemaakt op verzoek
*/
#include <io.h>
 


char lichtsensorA;	//de licht sensor op motor A
char lichtsensorB;	//de licht sensor op motor B
char lichtsensorC;	//de licht sensor op motor C
void MotorA1(char h1);	// klep 1 voor motorA
void MotorA2(char h2);  // klep 2 voor motorA
void MotorA3(char h3);	// klep 3 voor motorA
void MotorA4(char h4); // klep 4 voor motorA
void MotorB1(char h5);	// klep 1 voor motorB
void MotorB2(char h6);  // klep 2 voor motorB
void MotorB3(char h7);	// klep 3 voor motorB
void MotorB4(char h8);  // klep 4 voor motorB
void MotorC1(char h9);	// klep 1 voor motorC
void MotorC2(char h10);  // klep 2 voor motorC
void MotorC3(char h11);	// klep 3 voor motorC
void MotorC4(char h12);  // klep 4 voor motorC
 
 
int main () {
const true=1, false=0;



while (1) {
if (lichtsensorA=1,lichtsensorB=1,lichtsensorC=1)
{
h1=1;      // motor A gaat draaien
h2=0;
h3=0;
h4=1;
delay_ms(x) // x het aantal ms voor een halve draai
h1=1;
h2=0;
h3=1;
h4=0;       //motorS word stil gezet.
 
h5=1;      // motor B gaat draaien
h6=0;
h7=0;
h8=1;
delay_ms(x) // x het aantal ms voor een halve draai
h5=1;
h6=0;
h7=1;
h8=0;       //motorB word stil gezet.
 
h9=1;      // motor C gaat draaien
h10=0;
h11=0;
h12=1;
delay_ms(x) // x het aantal ms voor een hele draai
 
h1=1;      // motor A gaat draaien
h2=0;
h3=0;
h4=1;
delay_ms(x) // x het aantal ms voor een halve draai
h1=1;
h2=0;
h3=1;
h4=0;       //motorS word stil gezet.
 
h5=1;      // motor B gaat draaien
h6=0;
h7=0;
h8=1;
delay_ms(x) // x het aantal ms voor een halve draai
h5=1;
h6=0;
h7=1;
h8=0;       //motorB word stil gezet.
}
Else
{
if (lichtsensorA=0,lichtsensorB=0,lichtsensorC=0)
{
h1=0;  // motor A gaat draaien
h2=1;
h3=1;
h4=0;
h5=0; // motor B gaat draaien	
h6=1;
h7=1;
h8=0;
h9=0;  // motor C gaat draaien
h10=1;
h11=1;
h12=0;
}
else
{
if (lichtsensorA==0,lichtsensorB==0,lichtsensorC==1)
{
h1=0;  // motor A gaat draaien
h2=1;
h3=1;
h4=0;
h5=0; // motor B gaat draaien	
h6=1;
h7=1;
h8=0;
if (lichtsensorA==0,lichtsensorB==1,lichtsensorC==0)
h1=0;  // motor A gaat draaien
h2=1;
h3=1;
h4=1;
h9=0;  // motor C gaat draaien
h10=1;
h11=1;
h12=0;
}
else
{
if (lichtsensorA==0,lichtsensorB==1,lichtsensorC==1)
{
h1=0;  // motor A gaat draaien
h2=1;
h3=1;
h4=0;
}
else
{
if (lichtsensorA==1,lichtsensorB==0,lichtsensorC==0)
{
h5=0; // motor B gaat draaien	
h6=1;
h7=1;
h8=0;
h9=0;  // motor C gaat draaien
h10=1;
h11=1;
h12=0;
}
else
{
if (lichtsensorA==1,lichtsensorB==0,lichtsensorC==1)
{
h1=0;  // motor A gaat draaien
h2=1;
h3=1;
h4=0;
h9=0;  // motor C gaat draaien
h10=1;
h11=1;
h12=0;
}
if (lichtsensorA==1,lichtsensorB==1,lichtsensorC==0)
{
h9=0;  // motor C gaat draaien
h10=1;
h11=1;
h12=0;
}
}
}
}
}
}
return 0;
}
 

[Bericht gewijzigd door Henry S. op (88%)]

Daar kun je m.i. beter een nette state machine voor maken; een variabele (state register) om de huidige state bij te houden, een tabel voor de status van de uitgangen voor elke state, en een case statement waarin je voor elke state vastlegt wat de voorwaarden zijn om naar een andere state te gaan.

sparky soms moet je ze zelf ook wat laten doen;)
dit was gewoon ff snel werk:P

Natuurlijk, dat snap ik ook wel, het was ook meer bedoeld als hint naar de TS als kritiek op jouw voorbeeldje.