Forum: Mikrocontroller und Digitale Elektronik rechteck signal aus sinus


von lisa (Gast)


Lesenswert?

Hallo,

Ich möchte aus einem 16MHz Sinus einen Rechteck erzeugen. Was für
Schmitt-Trigger gibt es für diese Frequenz? Oder wie würded ihr das
Problem lösen?

MFG
lisa

von Andreas K. (ergoproxy)


Lesenswert?

Wie ist denn der Pegel des Sinus ? Außerdem wie soll das Tastverhältniss 
aussehen ?

Andere Frage wäre das nicht ne 1A Verwendungsmöglichkeit für nen 
Quarzoszilator ? Oder hat das Signal irgendwelche Informationen die 
behalten werden müssen ?

Gruß ErgoProxy

von gast (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe einen Drehgeber (s. Anhang).

Ich bin seit geraumer Zeit dran für meinen Drehgeber eine Routine zu
schreiben mit welcher ich die Drehrichtung bestimmen kann. Doch ich habe
einfach keinen Erfolg.

Der Drehgeber besitzt zwei Ausgangssignale, wobei das erste Signal 
ausgelöst wird sobald die Optik auf der inkrementscheibe von schwarz auf 
weiss oder weiss auf schwarz wechselt, das zweite signal folgt dem 
ersten mit 90° Phasenverschiebung.

Mit diese Informationen muss es "anscheinend" möglich sein die Richtung
zu bestimmen. Zuerst probierte ich die einfachste copy /paste von peter 
dannegger:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
#define  XTAL    16e6      // 16MHz
5
6
#define PHASE_A    (PINA & 1<<PB1)
7
#define PHASE_B    (PINA & 1<<PB3)
8
9
#define LEDS_DDR  DDRC
10
#define  LEDS    PORTC      // LEDs against VCC
11
12
13
int8_t enc_delta;        // -128 ... 127
14
15
16
void encode_init( void )
17
{
18
  TCNT0 = 5;          //Set Timer/counter
19
  TCCR0 = 1<<WGM01^0<<CS01^1<<CS00;    // CTC, XTAL / 1024
20
  TIFR |= (1<<TOV0);    //interrupt starts with each overflow  
21
  TIMSK |= (1<<TOIE0);    //Enable Timer/counter0 overflow interrupt
22
}
23
24
ISR( TIMER0_COMP_vect )        // 1ms for manual movement
25
{
26
  static int8_t last;
27
  int8_t new, diff;
28
29
  new = 0;
30
  if( PHASE_A )
31
    new = 3;
32
  if( PHASE_B )
33
    new ^= 1;          // convert gray to binary
34
  diff = last - new;        // difference last - new
35
  if( diff & 1 ){        // bit 0 = value (1)
36
    last = new;          // store new as next last
37
    enc_delta += (diff & 2) - 1;    // bit 1 = direction (+/-)
38
  }
39
}
40
41
42
int8_t encode_read1( void )      // read single step encoders
43
{
44
  int8_t val;
45
46
  cli();
47
  val = enc_delta;
48
  enc_delta = 0;
49
  sei();
50
  return val;          // counts since last call
51
}
52
53
int main( void )
54
{
55
  int32_t val = 0;
56
57
  LEDS_DDR = 0xFF;
58
  encode_init();
59
  sei();
60
61
  for(;;){
62
    val += encode_read1();      // read a single step encoder
63
    LEDS = val;
64
  }
65
}

Ich bemerkte aber schon bald das sich dieses Verfahren bei leichtem hin
und herbewegen des Drehgebers nicht bewährt. Ich habe nun schon
unzählige Möglichkeiten probiert und theoretisch aufgezeichnet doch
funktioiern tut alles nicht.


Also habe ich mir dann gedacht die Signale zu prüfen um die Drehrichtung 
und Phasenlage der GeberSignal herauszufinden. leider kriege ich am 
Oszi. nur sinusformige signal deswegen frage ich dann wie ich diese 
Sinus signale in der Rechteckförmigen Gebersignal umformen kann.


Weiss jemand wie man die Signale auswerten muss (Wahrheitstabelle), dass
die Richtung immer und ohne Zweifel bestimmt werden kann?

Vielen Dank
lisa

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> ISR( TIMER0_COMP_vect )    // 1ms for manual movement
1 ms Abtastintervall ist für einen Drehgeber, der 1000 Impulse pro 
Umdrehung macht, deutlich zu langsam...

von Soeren A. (abraxa)


Lesenswert?

Da du Peter Dannegger zitierst, gehe ich davon aus, dass du 
http://www.mikrocontroller.net/articles/Drehgeber gelesen hast. Ist dem 
so?

von gast (Gast)


Lesenswert?

Vilen Dank für die schnelle Anworten

>Da du Peter Dannegger zitierst, gehe ich davon aus, dass du
>http://www.mikrocontroller.net/articles/Drehgeber gelesen hast. Ist dem
>so?

ja und sogar mehr mals
und genau das verstehe ich nicht so ganz gut was er damit meint?!

>Die Abtastfrequenz muss so hoch sein, dass bei maximaler Drehzahl zwischen >zwei 
Codewechseln mindestens 1 Abtastung erfolgt, besser jedoch mehr.

 @Lothar Miller
>1 ms Abtastintervall ist für einen Drehgeber, der 1000 Impulse pro
>Umdrehung macht, deutlich zu langsam...

und wenn 1 ms zu lagsam für meinem Fall ist, will es damit sagen dass 
ich anstatt timer INT0 und INT1 benutzen muss

gruß
lisa

von Christian B. (chrisbe3)


Lesenswert?

@lisa

das Problem mit der Anpassung habe ich auch bei einem Heidenhain 
LinearScale. Wie ich das Signal in ein TTL Signal wandle, weiss ich auch 
noch nicht. Hab das Teil erst seit 2 Stunden :-) Wegen deiner 
Drehgeberauswertung:
Ich habe an meiner Maschine einen Drehgeber mit 1024 Strichen und der 
dreht max. 2840 U/min. Für eine auswertung nach P. Danegger ist das zu 
schnell. Der bringt bei max. Geschwindigkeit einen Signalabstand von 
0,02 ms. Wenn du die Drehrichtung nicht brauchst, dann Zähle die Striche 
über eine Periode oder du findest etwas, was schnell genug ist.

Gruß

Christian

von Nick M. (Gast)


Lesenswert?

> Wie ich das Signal in ein TTL Signal wandle, weiss ich auch noch nicht.

Linear Scale mit Drehzahl? Eher ein Drehgeber. Ein ROD wenn er von HH 
ist.
Man kann natürlich die analoge Information wegwerfen. Einfach durch 
einen Komparator schicken.
Zähler für Quadratur-Encoderausgänge gibts wimre bei IC-Haus. Die lassen 
sich über einen serielle Bus ansprechen und werten auch den Index aus. 
Gehen bis paar MHz.

Nick

von Michael (Gast)


Lesenswert?

>Mit diese Informationen muss es "anscheinend" möglich sein die Richtung
>zu bestimmen.

"Anscheinend" würde die Möglichkeit ausschließen, dass es möglich ist 
damit die Richtung zu bestimmen. Richtig wäre "scheinbar" gewesen. Grund 
hierfür: Bei 90° Phasenverschiebung ist es möglich die Drehrichtung zu 
bestimmen.

Die Signale sehen ja so aus:

Signal1: 000011110000111100001111
Signal2: 110000111100001111000011

Und jetzt einfach mal durch gehen, es macht einen eindeutigen 
Unterschied ob man von links nach rechts geht oder von rechts nach links 
;).

von Martin Sche (Gast)


Lesenswert?

Wenn du Komparatoren gefunden hast die die Frequenz mitmachen schickst 
du die beiden Rechteck-Signale durch ein D-Flip-Flop. Ein Signal am 
Eingang das andre als Clock.Und schon zeigt dir der Ausgang des 
Flip-Flop die Richtung an

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.