Ik ben aan het proberen een testopstelling voor een motor/propeller combinatie te maken. Ik zou nu ook graag de rpm van de motor/propeller meten (elke 500ms). Nu heb ik een Eagle tree sensor die het aantal interrupts meet die naar de motor gezonden wordt. Het programmeren is echter moeilijk, ik heb een code gevonden op een forum, maar deze werkt niet.
Dan heb ik ook gekeken naar een hall sensor ( maar daarvoor moet ik de motor opengooien, doe ik liever niet), of een photo sensor. Moeilijke is hier wel dat ik verschillende propellers test (verschillend in diameter en aantal bladen). On top, de motor is gemonteerd aan een aluminium vierkante paal van 30cm hoog, dus ik weet niet of het propeller blad dicht genoeg bij de sensor kan plaatsen (Ik post straks een foto voor meer duidelijkheid).
Hoe zou ik dit het beste aanpakken? Ik denk dat de eagle tree sensor die het aantal interrupts meet het meest nauwkeurige, maar ook het meest moeilijke is. Hoe zouden jullie dit het beste aanpakken? Ik heb verschillende tutorials gevonden voor fans, maar deze staan dicht op de grond en niet aan een Al constructie. Toerentallen zouden maximum om en bij de 4000 rpm liggen.
Groeten, en alvast bedankt
Als je een vraag stelt, ga er dan vanuit dat niemand die 'm leest weet waar je het over hebt.
Dat betekent dat je alles wat maar van toepassing kan zijn, moet vermelden.
Daarmee voorkom je dat je geen antwoorden krijgt, maar meer vragen.
Eagle tree maakt vele sensoren.
Jij hebt het over een sensor die interrupts meet.
Ik vermoed dat dat de "brushless rpm sensor v2" is, maar ik kan dat niet weten.
Die sensor werkt dus alleen voor koolborstelloze motoren, en is uitsluitend bedoeld voor modelbouw (vliegtuigen).
De vraag die dan dus komt, is of je inderdaad zo'n borstelloze motor hebt.
Verder kun je signalen ook met een hall sensor meten zonder een motor open te maken.
Maar dan moet je wel ervoor zorgen dat je een magnetisch veld creëert dat gemeten kan worden met je sensor.
Zo zou je de as uit de motor en naar de propeller magnetisch kunnen maken.
Of bij de naaf van de propeller een magneetje aanbrengen.
Zit die propeller met een boutje geborgd ?
Misschien kun je dat boutje wel magnetisch maken.
Daarbij moet je er uiteraard wel op letten dat je as of propeller niet in onbalans raakt.
Verder werken alle elektro motoren die ik ken, met een of meer magnetische veld(en).
Ook dat moet te meten zijn.
De maximaal 67 Hertz die je wil meten moet eigenlijk wel te doen zijn.
Mijn excuses om het niet aan te vullen, had nogal wat problemen met het verkeer gisteren. Bedankt voor de tips omtrend het posten MAS3.
Het is inderdaad die sensor die ik gebruik of wou gebruiken. Ik gebruik inderdaad een borstelloze motor (pichler boost 15). De as van de motor komt er langs de achterkant ook uit, en ik zal eens kijken of ik daarop een klein magneetje kan aanbrengen. Ik zal vandaag zeker ook een foto uploaden van de opstelling, daar het voor anderen ook interessant kan zijn om dit op te volgen (zijn toch wel wat mensen die zoeken hoe de rpm te meten van een borstelloze motor).
De motor heeft een dikkere as langs de voorkant waar de propeller opgemonteerd is met een moertje (dat wel afneembaar is omdat ik verschillende propellers test), maar er is ook een kleinere dunnere as langs de achterkant die spint aan hetzelfde rpm. Ik zal vanmiddag eens kijken hiervoor. Alvast bedankt, ik hou jullie op de hoogte van de vorderingen van dit projectje!
en een hall sensor er onder steek die dan interrupted wordt als de magneet passeert?
Ik ga mij nog wat verder inlezen in hall sensoren en de programatie er van, als dit een optie zou zijn zou ik direct hiervoor gaan.Bedankt!
als je schrik hebt voor onballans kan je ook een schijfje met een gatje op de achterkant steken.
Dan kan je met een led een een lichtsensor de rpm ook meten
Met vriendelijke groet
Jantje
Je hoeft echt het wiel niet opnieuw uit te vinden. Alle RPM meters in de modelbouw werken met een zwarte streep die voorbij een lichtsensor passeert. Die zwarte streep kan ook een propellorblad zijn die het licht blokkeert.
Kleef wat zwarte tape op de buitenkant van je motor - het is immers een outrunner. Als je motor volledig ingebouwd is zal je een LED moeten toevoegen die het licht reflecteert via de motor naar de lichtsensor.
Met een LDR, of als die niet snel genoeg is met een fototransistor, kan je dan de pulsen inlezen en daaruit de RPMs omrekenen. Voor dit laatste zijn behoorlijk wat voorbeelden te vinden in Google.
Het principe van de hall sensor werkt op zich wel, maar ik wat er gebeurd is dat het getal altijd afgerond wordt.
60,00
60,00
360,00
360,00
360,00
360,00
360,00
540,00
540,00
540,00
540,00
540,00
300,00
300,00
300,00
300,00
Is dit om dat de tijd tussen 2 metingen te groot is? Indien het gewenst is post ik hier de code, al heb ik die ook maar van een tutorial overgenomen.
//rpm
if (millis() - lastmillis == 1000){ //Uptade every one second, this will be equal to reading frecuency (Hz).
detachInterrupt(0);//Disable interrupt when calculating
rpm = half_revolutions * 60; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use half_revolutions * 30.
Ik gebruik 1 magneet dus doe ik *60. Afbeelding meer info. De hall sensor die ik gebruik is een siemens TLE4905L
nicoverduin:
Zet de code maar hier hoor (wel tussen de code tags graag). Zal wel ergens een int vs float issue zijn.
Denk ik ook.
if (millis() - lastmillis == 1000){
het is nooit een goed idee om "gelijk aan" te gebruiken voor tijden. beter is "grote en gelijk aan"
jantje
Dus kijk hier es naar:
rpm = half_revolutions * 60; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use half_revolutions * 30.
Je vermenigvuldigt met zestig (een int.) in plaats van met zestig punt nul (een float).
Geen idee of dat 'm is maar lijkt me het testen waard,
Die tutorial komt zeker van die "instructables" site ?
Enige wat ik daar vandaan zie komen is bakken met ellende en een en al fouten.
Zeer grote afrader, die site die de n00b wel es ff zal laten zien hoe het moet, maar waar het dus stikt van de fouten.
En waar die n00b dus buiten zijn schuld gelijk vastloopt met z'n eerste projectje, en geen idee heeft wat er dan mis gaat.
Vraag me af hoe veel er al weer afgehaakt zijn door al die fouten daar.
Maar goed, weer on topic nu.
Ik weet het niet echt meer van waar, maar zou goed kunnen. Ik heb het geprobeerd met een 30.0 of 60.0, resultaat blijft hetzelfde.
Dit is de code:
// read RPM
int half_revolutions = 0;
int rpm = 0;
unsigned long lastmillis = 0;
void setup(){
digitalWrite(2, HIGH);
Serial.begin(9600);
attachInterrupt(0, rpm_fan, FALLING);
}
void loop(){
if (millis() - lastmillis == 1000){ //Uptade every one second, this will be equal to reading frecuency (Hz).
detachInterrupt(0);//Disable interrupt when calculating
rpm = half_revolutions * 30.0; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use half_revolutions * 30.
Serial.print("RPM =\t"); //print the word "RPM" and tab.
Serial.print(rpm); // print the rpm value.
Serial.print("\t Hz=\t"); //print the word "Hz".
Serial.println(half_revolutions); //print revolutions per second or Hz. And print new line or enter.
half_revolutions = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
}
}
// this code will be executed every time the interrupt 0 (pin2) gets low.
void rpm_fan(){
half_revolutions++;
}
Dus ik pas best de ==1000 aan naar >= ? Voor de rest niets verandert, magneetje op de as van de motor die spint, geeft blijkbaar altijd veelvoud van 30 als ik traag de motor spin met de hand. Alvast bedankt om mij wat op weg te helpen met arduino en de code
veelvoud van 30 is heel normaal als je *30 doet niet?
Eigenlijk moet je maal 60 doen want je hebt maar 1 meting per toer.
Als je geen veelvoud van 60 wilt moet je gewoon 1 minuut meten
Dus
Facepalm voor mijzelf, uiteraard zal het een veelvoud zijn van 30 of 60.
Een minuut meten lijkt mij wat lang, dus zal ik maar leven met de onnauwkeurigheid van afronden op 60.