Vraag


Acties:
  • 0 Henk 'm!

  • Hert
  • Registratie: Juni 2022
  • Laatst online: 22:22
dag allemaal,

ik kom hier op zoek naar raad gewapend met een schamele hoeveelheid aan informatie vrees ik. Een vriend van mij is bezig aan een hobbyprojectje waarbij iets zou moeten worden aangedreven door een elektromotor. De vriend van zijn zus ging voor de motor + sturing + voeding zorgen. Helaas is die relatie halverwege het project op de klippen gelopen. Ik heb enkel deze foto van de motor:
Afbeeldingslocatie: https://tweakers.net/i/2FR33obpQnw36Tu6qs-tfk-FPyw=/x800/filters:strip_icc():strip_exif()/f/image/mr4J8DCJvmWURUBzkZ39SKUu.jpg?f=fotoalbum_large

het doel is hier een sturing voor te voorzien die 3 standen kent: traag, sneller en random variabele snelheid. Heeft iemand enig idee wat hiervoor nodig is? Alvast bedankt!

Beste antwoord (via Hert op 24-10-2024 08:47)


  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 18-09 10:02
@Hert , heb jij of heeft iemand betrokken bij het project enige kennis van (het programmeren van) microcontrollers/Arduino? Want ik vrees dat dat noodzakelijk gaat zijn.

In deze tutorial krijg je een redelijk kant-en-klare oplossing voor je probleem: https://howtomechatronics...duino-the-ultimate-guide/

[ Voor 3% gewijzigd door naarden 4ever op 23-10-2024 08:21 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 23:58

memphis

48k was toen meer dan genoeg.

Dit is een stappenmotor of ook wel een stepper.

Je hebt daarvoor een stepper driver nodig en voor een stepperdriver kan je ook weer een losse RPM controler vinden.

Er zijn mensen die mij een GOD vinden


Acties:
  • +2 Henk 'm!

  • Umbrah
  • Registratie: Mei 2006
  • Laatst online: 22:25

Umbrah

The Incredible MapMan

Dat is geen "traag" of "snel" motor, dat is een stappenmotor. Een soort servomotor zonder gesloten lus: precies in positie aansturen, maar hij weet initieel niet waar hij is. Wel bedoeld óm positie te bepalen, niet
"snel rondjes maken" als primair doel. Je hebt twee aderparen (door te meten door een connectie), die je met een stepperdriver heel eenvoudig "zoveel naar links" en "zo veel naar rechts" kan laten gaan. Vaak staat er ook wel iets op in de zin van hoeveel graden/stap en hoeveel weerstand de motor heeft. De beste hiervan (LDO's naar mijn mening) kun je met 48V enorm snel, sterk, en hun eigenlijke doel: precies laten gaan. Je ziet dit soort dingen veel in de kinematica van freesmachines en 3D-printers. Voor "ronddraaien" zijn ze minder geschikt, hoewel het wel kan...

TMC2209 is een bekende stepper driver, die bijvoorbeeld een UART input heeft (ook SPI), waarmee je met een arduino, pi, of iets anders.

Vaak zijn deze motoren ook wel iets van 24V 'bedoeld' (want daar werken 3D printers op meestal). Dus je wilt je stepper driver ook nog eens een goede voeding input geven.

Vaak zie je dat RAMPS bordjes of basis 3D printer bordjes (die je best goedkoop kan krijgen bij zelfs winkels als 123-3d) redelijk aan te sturen.

Feitelijk is dit een 2-fase motor waarbij je een stepper driver gebruikt om min of meer twee blokgolven te genereren.

[ Voor 13% gewijzigd door Umbrah op 22-10-2024 22:01 ]


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 18-09 10:02
@Hert , heb jij of heeft iemand betrokken bij het project enige kennis van (het programmeren van) microcontrollers/Arduino? Want ik vrees dat dat noodzakelijk gaat zijn.

In deze tutorial krijg je een redelijk kant-en-klare oplossing voor je probleem: https://howtomechatronics...duino-the-ultimate-guide/

[ Voor 3% gewijzigd door naarden 4ever op 23-10-2024 08:21 ]


Acties:
  • 0 Henk 'm!

  • Hert
  • Registratie: Juni 2022
  • Laatst online: 22:22
naarden 4ever schreef op woensdag 23 oktober 2024 @ 08:21:
@Hert , heb jij of heeft iemand betrokken bij het project enige kennis van (het programmeren van) microcontrollers/Arduino? Want ik vrees dat dat noodzakelijk gaat zijn.

In deze tutorial krijg je een redelijk kant-en-klare oplossing voor je probleem: https://howtomechatronics...duino-the-ultimate-guide/
Wel, ik ben van opleiding ingenieur elektronica dus heb indertijd (2001) wel C en Assembly geleerd. Helaas heb ik na mijn opleiding daar helemaal niks meer mee gedaan en ben de IT in gegaan. Maar ik zal eens bekijken of het haalbaar is, met dingen klooien kan ik wel.

Acties:
  • +1 Henk 'm!

  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 18-09 10:02
Ik heb ook nog even gekeken naar de andere suggestie van @Umbrah , die TMC2209 driver is ook een hele mooie. Die biedt naast de 'handmatige' aansturing ook de mogelijkheid om automatisch de snelheid te regelen.

Het 'nadeel' van de handmatige aansturing in de optie die ik noemde, is dat je voor elke stap die de motor zet (max. 1,8°, min. 0,056°) de STP-pin op de motor driver hoog en laag moet brengen. Met eenvoudige Arduino-code ben je dan enigszins beperkt in de maximale snelheid die je kan bereiken, maar vervelender is dat de vertraging tussen stappen inconsistent wordt als je programma ook nog andere zaken moet doen (zoals: controleren in welke modus de motor nu moet worden aangedreven, langzaam, snel, of variabel?), omdat de rest van het programma een extra vertraging in het programma toevoegt.

Nu zijn er meerdere wegen die naar Rome leiden.

Om te beginnen: als de maximale snelheid niet heel hoog is (in de orde van 1 tot enkele omwentelingen per seconde) en je doet verder vrij weinig in de rest van je code, dan is dit waarschijnlijk helemaal geen issue voor jou en kan je met Arduino en delayMicroseconds een voldoende consistente beweging mogelijk maken. Arduino is betrekkelijk traag, zo kost het hoog of laag zetten van 1 digitale uitgang ongeveer 4,5µs en tellen een aantal handelingen all gauw op tot enkele tientallen tot honderden microseconden aan processortijd. Om je een klein voorbeeldje te geven, deze code geeft dit als resultaat op de scope:

code:
1
2
3
4
5
6
7
8
9
// the setup function runs once when you press reset or power the board
void setup() {
  pinMode(3, OUTPUT);
}

void loop() {
  digitalWrite(3, HIGH);
  digitalWrite(3, LOW);
}


Afbeeldingslocatie: https://tweakers.net/i/RH83WSa-G6E3CnJjXGpfBejA2xQ=/fit-in/4000x4000/filters:no_upscale():strip_exif()/f/image/2FAQTqGDIf5XsYzaTwWEA83P.png?f=user_large

Je ziet, een signaal met 50/50 verdeeld hoog/laag, en het duurt ongeveer 4,5µs om te wisselen tussen hoog en laag. Hier en daar zit soms een iets langer sprongetje van ongeveer 10µs, die komt eens in de 1ms voor, want dan is de Arduino bezig zijn eigen timer bij te werken (De Arduino houdt zelf het aantal milliseconden sinds deze is opgestart bij, dus eens per 1ms moet de Arduino deze teller bijwerken).

Maar als we iets meer in de code gaan doen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uint32_t val = 0;
// the setup function runs once when you press reset or power the board
void setup() {
  // Stel pin 3 in als uitgang
  pinMode(3, OUTPUT);
}

void loop() {
  digitalWrite(3, HIGH); // Zet de pin hoog

  // Voer wat rekenoperaties uit
  val = val + 3;
  // Conditionele check
  if (val % 10 == 0)
  {
    val = (val + 4) * 2;
  }
  digitalWrite(3, LOW);   // Zet de pin laag
}


Afbeeldingslocatie: https://tweakers.net/i/RUrdokvvfnvGZ0voJsDnXSu032E=/fit-in/4000x4000/filters:no_upscale():strip_exif()/f/image/GraK3Lo4t7n612B1CmuSpDbP.png?f=user_large

Dan opeens is de pin voor zo'n 45µs hoog, en dan weer 4,5µs laag. Dus een paar kleine operaties kosten al best veel tijd als we op deze tijdschaal kijken. Maar als je een lage snelheid gebruikt, in de orde van 1 stap zetten per 1ms bijvoorbeeld, dan zal deze extra vertraging die door de rest van de code wordt veroorzaakt min of meer in het niet vallen, en hoef je daar geen rekening mee te houden.

Ga je echter met hogere snelheden werken (meerdere omwentelingen per seconde), dan kan het goed zijn dat je hiermee wel in de knoei komt. Dan zijn er twee opties waar ik nu zo snel aan kan denken waarmee je dit probleem omzeilt:

1. Gebruik een van de timers van de Arduino en pas port manipulation toe (direct de registers aansturen i.p.v. de abstraction layer van Arduino) om een behoorlijk exacte vertraging te verzorgen en de handeling van het aanpassen van de pin zo snel mogelijk uit te voeren, of...
2. Gebruik de interne pulsgenerator van de TMC2209 om het lastige werk voor je te doen.

Beide zijn goede opties. Optie 1 zou mijn voorkeur hebben omdat dat ik niet bekend ben met de TMC2209 en wel bekend ben met de registers van Arduino en ik van mijzelf weet dat ik dit sneller in elkaar kan zetten dan ik de TMC2209 in huis kan hebben en de datasheet heb doorgespit. Anderzijds denk ik dat de TMC2209 een hele eenvoudige en zorgeloze oplossing kan als je het eenmaal door hebt. Maar ik wacht eerst even af wat de bedoeling is van je project en wat je precies nodig hebt voordat ik daar verder over uit ga wijden. :)

[ Voor 3% gewijzigd door naarden 4ever op 24-10-2024 10:29 ]


Acties:
  • 0 Henk 'm!

  • Hert
  • Registratie: Juni 2022
  • Laatst online: 22:22
Hmm, interessant. De bedoeling is eigenlijk een "novelty" cornholebord te maken waarbij de ring rond het gat gaat draaien zodat er een extra timing factor bij het spel komt. Dat moet niet vreselijk snel gaan want dan is de lol er af. Maar ik weet eigenlijk niet op hoeveel omwentelingen van de motor de ring een volledige omwenteling doet.

Acties:
  • +1 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 23:58

memphis

48k was toen meer dan genoeg.

Er zijn mensen die mij een GOD vinden

Pagina: 1