Op 15 juli 2022 19:32:05 schreef Ex-fietser:
Maar in feite hoef je die spanning alleen maar 2,5 volt op te tillen om alles goed te krijgen. Dat kan inderdaad met een eenvoudig opampje. De oeroude 741 is eigenlijk zelfs al te mooi voor deze taak.
Dat is dus gewoon niet waar; kijk maar eens naar de regel code die ik de TS gegeven heb, die doet ook iets anders dan gewoon 512 erbij tellen. Misschien moet je nog even naar de probleemstelling kijken; het midden van de joystick moet 0 geven, en dan omhoog en omlaag verder uit het midden een steeds groter signaal. Tegelijk moet er een relais aangestuurd worden voor de richting.
Het voordeel van een Arduino of andere microcontroller is dat je nog wat beveiliging kunt toevoegen; na het opstarten vereisen dat de joystick in het midden is geweest voordat je iets gaat aandrijven, een dood gebied in het midden, uitschakelen bij overmatige ruis, uitschakelen bij een signaal te dicht bij de voeding of ground (draadbreuk), etc.
Ik zou de Arduino een spanningsdeler op zijn ingang geven, zodat hij, wanneer de joystick niet aangesloten is, een signaal in het dode gebied in het midden krijgt, en dus niet gaat aandrijven.
Ik ben wel met je eens dat dit niet de goede oplossing is als het een gevaarlijk apparaat betreft, en de aanwezigheid van een frequentieregelaar suggereert dat wel een beetje.
@TS: zorg dat je een betrouwbare methode hebt om de aandrijving te stoppen als er iets mis gaat; een noodstop drukker op een STO (safe torque off) ingang van je regelaar is echt het minste.
@benleentje: ik neem aan dat hij de FO uit zet door midden van een logische ingang, en niet door ineens zijn voeding af te schakelen, dus dat moet de FO sowieso probleemloos kunnen, in afhankelijk van het type FO kun je die ook nog laten remmen (door negatief koppel te leveren, of middels DC injectie).
Op 15 juli 2022 20:23:25 schreef benleentje:
Dus onder voorbehoud van fouten zou het moeten zijn.
En dat zijn er nogal wat...
c code:
void loop() {
outputValue = map(sensorValue, 515, 102, 0, 255);
analogWrite(analogOutPin, outputValue);
delay(2);
Dit gaat natuurlijk al gruwelijk fout, je gaat hier al iets naar buiten sturen zonder de range van de ingang te checken, en de map() functie gaat lekker voor je extrapoleren.
code:
if (sensorValue >= 518 ){ // we gaan vooruit
outputValue = map(sensorValue, 515, 937, 255,0);
analogWrite(analogOutPin, outputValue);
delay(2);
digitalWrite(relayFW_REV , LOW);
digitalWrite(relayRun , HIGH);
}
if (sensorValue = 515 ){ // we staan stilalles mag uit
analogWrite(analogOutPin, 0);
delay(2);
digitalWrite(relayFW_REV , LOW);
digitalWrite(relayRun , LOW);
}
if(sensorValue <= 512){ // we gaan acheruit
sensorValue = analogRead(analogInPin);
analogWrite(analogOutPin, outputValue);
delay(2);
digitalWrite(relayFW_REV , HIGH);
digitalWrite(relayRun , HIGH);
}
}
En wat gebeurd er als je na een beweging de joystick loslaat, en niet perfect uikomt op 515? Dus als je ADC 516, 517, 514 of 513 geeft? Ja, dan gaat je beweging dus lekker door zonder ooit te stoppen!
Dit is niet de schuld van het gebruik van een Arduino, of willekeurig welke andere microcontroller, maar 100% de schuld van de programmeur.
[Bericht gewijzigd door
SparkyGSX
op vrijdag 15 juli 2022 23:05:12
(29%)