Servo motor probleem

Hopelijk vinden we hier een antwoord op ons probleem.
We zijn een systeem aan het ontwikkelen waar een klepje kort open en dicht moet gaan op commando. We gebruiken hiervoor een servo motor. Tot hier geen probleem. Klep gaat open en dicht zoals het hoort.
Echter: als de servomotor uit "sleepmode" komt wil hij 180 graden omdraaien wat (zoals je kan zien) niet gaat.

Buiten het hels lawaai verslijten de motoren op deze manier in no time.
Als we geen "sleep" commando geven zoemt de servo motor de hele tijd.

Servo motor:
https://www.conrad.be/p/bluebird-standaard-servo-bms-2109-digitale-ser…

Ik kan alleen de byte commando’s doorsturen zoals ze in de voorbeeld codebibliotheek van Adafruit staan. Die exact dezelfde commando’s sturen wij ook.

Heeft iemand een oplossing/alternatief ?

Manual van die servo??
Mechanisch anders plaatsen zodat het niet hindert?

Mechanisch anders plaatsen is niet nodig.
We moeten enkel de automatic sweep mode kunnen uitschakelen. Als hij uit sleep mode komt dus een commando krijgt. Wil hij 180 graden draaien als test. Dat moeten we uit krijgen.

Lambiek

Special Member

De eerste twee foto's zijn niet echt duidelijk, op de derde foto zie ik ook een sensor staan, waar is die voor? En waar dient het geheel eigenlijk voor?, is wel goed om te weten.

Als je servo geluid maakt betekent dat, dat je servo constant staat te drukken / bekrachtigd is, moet dat? En waar stuur je de servo mee aan? En is het nodig om in een slaapstand te gaan?

Als je haar maar goed zit, GROETEN LAMBIEK.
Shiptronic

Overleden

Stukje hysteresis inbouwen ?

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Als er invoer gebeurd krijgt het systeem een input door scanning van RFID tag van het ingevoerde product.
Bij scanning van een tag gaat de klep kort open en dicht om het product door te laten.
Indien het systeem geen rfid tag scant blijft de klep dicht.

Neen dat moet niet bekrachtigd blijven net dat willen we oplossen door hem in sleep mode te plaatsen. Maar dan krijgen we de automatic sweep waarbij de servo bij ontwaken 180 graden wil draaien (om onduidelijke reden) wat niet gaat door de opbouw.

Kan je u nader verklaren shiptronic ?

We sturen de servo aan met dit
https://www.adafruit.com/product/815
en dat bordje wordt via de Raspi aangestuurd via I2C

Lambiek

Special Member

Je zou je servo met een controller aan kunnen sturen in plaats van met dat adafruit board. Dan kun je in je software het één en ander instellen. Op dat board kun je verder niets.

Als je haar maar goed zit, GROETEN LAMBIEK.

Staat dat sweepen in de manual van die servo? Ik heb nog nooit van zoiets gehoord. Sleep is als je het PWM signaal weghaalt of zo? Komt dat sweepen niet gewoon doordat je bij "ontwaken" eerst een 100% PWM maakt os zo?

[Bericht gewijzigd door flipflop op vrijdag 23 augustus 2019 21:48:09 (25%)

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Wat zou je dan voorstellen lambiek ?

Dit zijn de commandos die we sturen

public void ResetPWM(II2CDevice i2cDev)
{
i2cDev.WriteAddressByte(0x0, 0x80);
Thread.Sleep(10);
}

public void Sleep(II2CDevice i2cDev)
{
byte awake = i2cDev.ReadAddressByte(0x0);
byte sleep = (byte)(awake | 0x10);
i2cDev.WriteAddressByte(0x0, sleep);
Thread.Sleep(5);
}

public void WakeUp(II2CDevice i2cDev)
{
byte sleep = i2cDev.ReadAddressByte(0x0);
byte wakeup = (byte)(sleep & ~0x10);
i2cDev.WriteAddressByte(0x0, wakeup);
Thread.Sleep(5);
}

Lambiek

Special Member

Morgen zal ik op je vraag reageren als je het goed vindt.

Als je haar maar goed zit, GROETEN LAMBIEK.
Lambiek

Special Member

Eerst even een vraagje. Is het een school opdracht, is het voor de hobby, of is het een professionele oplossing? Voor de eerste twee geld dat je daar wel een modelbouw-servo voor kunt gebruiken, voor de laatste geld: is eigenlijk geen goede oplossing.

Ik neem aan dat de Raspi in de slaapstand gaat en niet het servo board? Want de servo moet niet in de slaapstand gaan "als dat al mogelijk is met dat board" omdat hij anders zijn positie niet behoud.

Ik zou het zo doen: Je neemt een kleine microcontroller, dat kan bijv. een PIC zijn of een Atmel of een Arduino uno, of een ander type. Dan ben je niet afhankelijk van de data die uit de Raspi komt als hij uit de slaap stand gaat.

Heb een voorbeeldje gemaakt met een pic 12F683. Is gemaakt in basic, maar dat kan ook in C.

Hierbij heb je ook geen I2C nodig, gewoon een uitgang op je Raspi. Je zou er een optocoupler tussen kunnen zetten als level shifter, maar dat moet je maar even bekijken of dat nodig is.

Als de ingang van de pic hoog is staat de servo in positie 1000. En als de ingang van de pic laag is staat de servo in positie 2000. Die waardes kun je aan passen naar jou wens. Je kunt eventueel ook nog een kleine pauze toevoegen mocht dat nodig zijn.

pic basic code:


Device 12F683               ; processor type 12F683

Xtal 10                     ; Kristal 10MHz

Config HS_OSC,_             ; Oscilator op 10MHz
       WDT_OFF,_            ; WatchDog Timer uit
       PWRTE_ON,_           ; Power-up Timer Enable aan
       MCLRE_OFF            ; Externe Master Reset Enable uit
     
All_Digital TRUE            ; Alle ingangen digitaal
                                   
Symbol IN_1 = GPIO.0        ; Ingang 

Symbol SERVO_MOTOR = GPIO.2 ; Uitgang sevo 

Clear                       ; Wis geheugen

         ;543210            ; Hulpregel Poort IO
GPIO   = %000000            ; Zet poort op nul    
TRISIO = %000001            ; Poort I/O

;---------------------------
; STUKJE CODE VOOR DE SERVO.
;---------------------------

RUN:

    If IN_1 = 1 Then
     Servo SERVO_MOTOR, 1000 
     DelayMS 10
    EndIf
    
    If IN_1 = 0 Then
     Servo SERVO_MOTOR, 2000
     DelayMS 10
    EndIf
GoTo RUN

End        

Zorg er voor dat je klep net afsluit zodat de servo niet te hard tegen de aanslag staat te drukken, als de klep net dicht is moet het goed zijn. Als je dat niet doet zal de servo heet worden en niet lang mee gaan, plus dat hij een hoop stroom staat te verbruiken.

Hier heb je nog wat info over het werken met servo's, lees het eens rustig door, misschien kun je er nog iets uithalen.

https://www.circuitsonline.net/artikelen/view/48

Als je haar maar goed zit, GROETEN LAMBIEK.

Een servo houdt prima z'n positie als ie niet meer aangestuurd wordt. Blijft gewoon staan waar ie staat.
TS, je post die functies, maar wij weten niet wat er op dat board gebeurd. Wat ik denk is zoiets: op een gegeven moment gaat de servo netjes in "sleep". Ik neem maar even aan dat dat is doordat het PWM signaal naar een stabiele 0V gaat en niet meer pulst. Als je wilt herstarten gaat het PWM nivo eerst naar 5V, wat de servo weer wakker maakt. 5V is 100% duty, dan schiet ie in de hoek. Kort daarna zet je de PWM weer echt aan op een gewenste waarde, de servo zoekt z'n positie weer op.
Als je een scoop hebt (scoop moet!) zou je het proces kunnen volgen op de PWM spanning.

ps, disclaimer: dit zou een scenario kunnen zijn. Of die spanningen precies zo zijn als ik schrijf weet ik natuurlijk niet. Kun je uitzoeken.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Lambiek

Special Member

Op 24 augustus 2019 08:57:43 schreef flipflop:
Een servo houdt prima z'n positie als ie niet meer aangestuurd wordt. Blijft gewoon staan waar ie staat.

Natuurlijk, NOT.

TS,Wat ik denk is zoiets: op een gegeven moment gaat de servo netjes in "sleep". Ik neem maar even aan dat dat is doordat het PWM signaal naar een stabiele 0V gaat en niet meer pulst. Als je wilt herstarten gaat het PWM nivo eerst naar 5V, wat de servo weer wakker maakt. 5V is 100% duty, dan schiet ie in de hoek. Kort daarna zet je de PWM weer echt aan op een gewenste waarde, de servo zoekt z'n positie weer op.

Hierin ga ik met je mee.

@TS,
Op je board kunnen 16 servo's, ga je die ook gebruiken? Of gebruik je maar één servo?

Als je haar maar goed zit, GROETEN LAMBIEK.

Volgens mij reageert elke merk van servo's verschillend als het signaal wegvalt en terug opkomt, een servo is niet gemaakt om in sleepmode te gaan tenzij aangegeven in de manual maar heb dat nog nooit gelezen.
De reactie zal bij elke servo anders zijn denk ik.

Je zou beter met een dc motor werken en eindcontacten.
Je kunt ook de elektronica uit die servo halen en enkel de motorreductie gebruiken.
Dat is enkel maar eens luidop denken...

LDmicro user.
Lambiek

Special Member

Op 24 augustus 2019 09:45:53 schreef MGP:
Volgens mij reageert elke merk van servo's verschillend als het signaal wegvalt en terug opkomt,....

Dat valt in principe nog wel mee, als je het signaal uitstuurt dat overeen komt met de stand van de servo.

een servo is niet gemaakt om in sleepmode te gaan tenzij aangegeven in de manual maar heb dat nog nooit gelezen.

Precies.

De reactie zal bij elke servo anders zijn denk ik.

Het is in ieder geval merk gebonden, als je bijv. de waarde 2000 uitstuurt, zal ieder merk een net andere positie in nemen. Kan zelfs al type gebonden zijn.

Je zou beter met een dc motor werken en eindcontacten.
Je kunt ook de elektronica uit die servo halen en enkel de motor gebruiken.

Ik denk dat het dan een hardware probleem wordt. :)

Als je haar maar goed zit, GROETEN LAMBIEK.
Sine

Moderator

Ik denk dat het dan een hardware probleem wordt. :)

Natuurlijk, maar wel eentje wat je hard kunt afvangen. Met een eindachakelaar kun je natuurlijk prima een draairichting blokkeren.

Lambiek

Special Member

Op 24 augustus 2019 10:10:02 schreef Sine:
Natuurlijk, maar wel eentje wat je hard kunt afvangen. Met een eindachakelaar kun je natuurlijk prima een draairichting blokkeren.

Helemaal mee eens.

Maar we weten eigenlijk weer veel te weinig, "zoals altijd" we weten bijv. niet of er tegen die klep aangedrukt wordt, "eventueel door het product" dan is een motor met een vertraging niet zelf remmend genoeg als de spanning er van af gaat. Misschien is een heel andere constructie wel beter? Weer veel te weinig info om een goed antwoord te geven.

Laar de TS eerst maar eens reageren. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 24 augustus 2019 09:30:27 schreef Lambiek:
[...]
Natuurlijk, NOT.

[...]
Hierin ga ik met je mee.

@TS,
Op je board kunnen 16 servo's, ga je die ook gebruiken? Of gebruik je maar één servo?

we gebruiken maar 1 servo.

Op 24 augustus 2019 08:43:12 schreef Lambiek:
Eerst even een vraagje. Is het een school opdracht, is het voor de hobby, of is het een professionele oplossing? Voor de eerste twee geld dat je daar wel een modelbouw-servo voor kunt gebruiken, voor de laatste geld: is eigenlijk geen goede oplossing.

Ik neem aan dat de Raspi in de slaapstand gaat en niet het servo board? Want de servo moet niet in de slaapstand gaan "als dat al mogelijk is met dat board" omdat hij anders zijn positie niet behoud.

Ik zou het zo doen: Je neemt een kleine microcontroller, dat kan bijv. een PIC zijn of een Atmel of een Arduino uno, of een ander type. Dan ben je niet afhankelijk van de data die uit de Raspi komt als hij uit de slaap stand gaat.

Heb een voorbeeldje gemaakt met een pic 12F683. Is gemaakt in basic, maar dat kan ook in C.

Hierbij heb je ook geen I2C nodig, gewoon een uitgang op je Raspi. Je zou er een optocoupler tussen kunnen zetten als level shifter, maar dat moet je maar even bekijken of dat nodig is.

Als de ingang van de pic hoog is staat de servo in positie 1000. En als de ingang van de pic laag is staat de servo in positie 2000. Die waardes kun je aan passen naar jou wens. Je kunt eventueel ook nog een kleine pauze toevoegen mocht dat nodig zijn.

pic basic code:


Device 12F683               ; processor type 12F683

Xtal 10                     ; Kristal 10MHz

Config HS_OSC,_             ; Oscilator op 10MHz
       WDT_OFF,_            ; WatchDog Timer uit
       PWRTE_ON,_           ; Power-up Timer Enable aan
       MCLRE_OFF            ; Externe Master Reset Enable uit
     
All_Digital TRUE            ; Alle ingangen digitaal
                                   
Symbol IN_1 = GPIO.0        ; Ingang 

Symbol SERVO_MOTOR = GPIO.2 ; Uitgang sevo 

Clear                       ; Wis geheugen

         ;543210            ; Hulpregel Poort IO
GPIO   = %000000            ; Zet poort op nul    
TRISIO = %000001            ; Poort I/O

;---------------------------
; STUKJE CODE VOOR DE SERVO.
;---------------------------

RUN:

    If IN_1 = 1 Then
     Servo SERVO_MOTOR, 1000 
     DelayMS 10
    EndIf
    
    If IN_1 = 0 Then
     Servo SERVO_MOTOR, 2000
     DelayMS 10
    EndIf
GoTo RUN

End        

Zorg er voor dat je klep net afsluit zodat de servo niet te hard tegen de aanslag staat te drukken, als de klep net dicht is moet het goed zijn. Als je dat niet doet zal de servo heet worden en niet lang mee gaan, plus dat hij een hoop stroom staat te verbruiken.

Hier heb je nog wat info over het werken met servo's, lees het eens rustig door, misschien kun je er nog iets uithalen.

https://www.circuitsonline.net/artikelen/view/48

we hebben eigenlijk C# nodig.
en is pic 12F683 geen 8bit ? Onze servo is 12 bit.

het is bedoeld als prototype.

de klep kan net ver genoeg op en dicht nu zonder dat deze ergens tegen aanduwt. het zoemen is minder maar nog niet weg.

Zoemen? mogelijks is het servosignaal niet stabiel genoeg maar dat moet je meten of zit er al teveel sleet op.

Op 24 augustus 2019 10:45:54 schreef Goodstuff:

we hebben eigenlijk C# nodig.
en is pic 12F683 geen 8bit ? Onze servo is 12 bit.

Hier is er spraakverwarring, een servo luistert enkele naar de breedte van het signaal of dat nu 8bit of 12bit resolutie heeft dat ga je toch niet zien.

[Bericht gewijzigd door MGP op zaterdag 24 augustus 2019 10:53:33 (61%)

LDmicro user.

Op 24 augustus 2019 10:22:00 schreef Lambiek:
[...]
Helemaal mee eens.

Maar we weten eigenlijk weer veel te weinig, "zoals altijd" we weten bijv. niet of er tegen die klep aangedrukt wordt, "eventueel door het product" dan is een motor met een vertraging niet zelf remmend genoeg als de spanning er van af gaat. Misschien is een heel andere constructie wel beter? Weer veel te weinig info om een goed antwoord te geven.

Laar de TS eerst maar eens reageren. :)

er word met niks tegen de klep aangedrukt. de klep opent naar boven toe.

-Als er een correct product ingevoerd word moet de klep net snel genoeg open gaan zodat het product kan passeren richting de ruimte waar het gecollecteerd word.

-Is het geen goed product (zonder werkende Rfdid Tag) blijft de klep dicht en word het product terug naar buiten afgevoerd.

op de foto zie je het klepje die dus snel genoeg open en dicht gaat om het product te laten passeren.