- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 59

Thema: "Asuro mit Greifer" Projekt

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Je nach Servotyp liegt die Mitte des Drehbereichs bei Impulslängen von ca. 1ms bis 1,5ms Dauer (ms bedeutet Millisekunden oder 1/1000 Sekunde). Der Impuls sollte alle 20ms wiederholt werden.

    In der orginalen asuro-Library von der CD dauert ein Sleep(1) genau 1/72000 Sekunde, Sleep(72) dauert entsprechend eine 1ms. (Bei den neueren Libs wird ein 36kHz-Timer verwendet, deshalb dauert hier Sleep(36) eine Millisekunde.) Für 20ms Impulswiederholung müßte man Sleep(20*72-Impulslänge) warten. Da Sleep() aber einen 8bit-Parameter benötigt, muss man die Impulspause auf mehrere Aufrufe von Sleep verteilen. 20*72 wären 1440 Sleep(1)-Aufrufe, davon muss man noch die Impulsdauer abziehen und den Rest auf 255er Sleep()-Aufrufe verteilen:

    Code:
    #include "asuro.h"
    
    #define libversion 72 // 72kHz oder 36kHz Library
    
    int Impulspause;
    char Servoimpuls = libversion; // 72 (oder 36) für eine Millisekunde (Servomitte?)
    
    int main(void)
    {
    	Init();
    	while(1)
    	{
    		BackLED(OFF,ON); // Impulsstart
    		Sleep(Servoimpuls);
    		BackLED(OFF,OFF); // Impulsende
    
    		Impulspause=libversion*20-Servoimpuls; // Anfang Pause; Dauer berechnen
    		while(Impulspause > 255) // 255er-Schritte
    		{
    			Sleep(255);
    			Impulspause -= 255;
    		}
    		Sleep(Impulspause); // Restpause
    	}
    	return(0);
    }
    (ungetestet)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    erstmal danke also ich hab das programm getestet un es funktioniert auch aber mein servo bewegt sich nur ca ein drittel. deshalb geht mein greifer auch nicht komplett zu danach hör ich nur noch ein zahnrädchen das vibriert und man kann es auch leicht erkennen wenn man genauer hinsieht aber der servo bewegt sich nicht weiter

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    ich weis nicht ob das normal ist aber immer wenn ich den asuro ausschalte, egal was für ein programm drauf ist, dann dreht sich der servo ein stück

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    okay also ich hab jez mal n programm geschrieben un des funktioniert sogar halbwegs =D
    #include <asuro.h>
    #include <myasuro.h>

    int main(void)
    {
    Init();



    int x;
    for(x=0; x<15; x++)
    {
    BackLED(OFF,ON);
    Sleep(0.125);
    BackLED(OFF,OFF);
    Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
    BackLED(OFF,ON);
    Sleep(0.125);
    BackLED(OFF,OFF);
    Sleep(255);Sleep(255);Sleep(255); Sleep(255);Sleep(255);Sleep(255);
    }





    while(1);
    return 0;
    }

    die frequenz habe ich mir jez mal ausgerechnet und mir dadraus die zeit für die pausen ausgerechnet. soweit geht eig alles
    also bei meim asuro läuft des programm so ab: es wird gestartet dann fängt der servo an er dreht sich fast um 90° etwas weniger vielleicht 80° oder so aber dann ist schluss weil der greifer+ das objekt noch zu schwer sind da werd ich noch etwas dran verbessern. mit nem leichteren objekt gehts aber dann hab ich das problem, dass der servo sofort nachlässt wenn in meinem programm x>15 ist. kann man den auch irgendwie feststellen dass er das gewicht hält? oder hängt das auch mit dem gewicht zusammen? das problem dass er sich nochmal um ein stück drehen will, wenn man ihn ausmacht ist immernoch da

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Sleep(0.125);

    ?
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2012
    Beiträge
    18
    hat mich ao gwundert xD ich hab die frequenz so ausgerechnet: Periodendauer =T Frequenz= f un dann mit der Formel T=1/f un mein prozessor hat 8000000Hz also muss ich 1/8000000= 0,000125 rechnen des isch dann T un weil T in sekunden angeben isch hab ich *1000 gmacht damit ich die ms rauskrieg un dann komm raus: T=0,125

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    lol

    Vergiss deine "Berechnungen". 0.irgendwas als Parameter für Sleep() mag der Kompiler ganz sicher nicht. Kannst du das fehlerfrei kompilieren?

    Edit: Huch, das kann man fehlerfrei kompilieren. Fraglich ist natürlch, WAS da kompiliert wird. 0.125 ist ganz sicher kein ganzzahliger Parameter für Sleep()
    Geändert von radbruch (02.06.2012 um 19:10 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests