Forum: Mikrocontroller und Digitale Elektronik Krumme Testfrequenzen erzeugen


von Praktikant (Gast)


Lesenswert?

Hallo,

ich soll eine Test-Einrichtung bauen, die über einen Drehschalter 
einstellbare Rechtecksignale (5Vpp) an ein Gerät liefert. Duty Cycle ist 
immer 50%, die Frequenzen liegen zwischen 20 und 85 Hz und sollen 
möglichst exakt eingehalten werden (1%).

Ich habe jetzt eine kleine Platine mit Drehschalter und einem Attiny26P 
gebastelt. Externen Quarz habe ich vorgesehen aber noch nicht bestückt, 
weil ich noch nicht weiß welche Frequenz.

Wie würdet ihr das Signal erzeugen? Timer-Interrupt mit hoher Frequenz 
aufrufen und dann zählen, Ausgangssignal bei Erreichen des Zählwertes 
toggeln?

von Helmut L. (helmi1)


Lesenswert?

Praktikant schrieb:
> Wie würdet ihr das Signal erzeugen?

DDS Prinzip anwenden. Dann kanst du mit mHz Aufloesung deine Frequenz 
einstellen.

von isidor (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> DDS Prinzip anwenden. Dann kanst du mit mHz Aufloesung deine Frequenz
> einstellen.

Er sagt uns nicht was er unter "krummer" Frequenz versteht.
Vielleich ist 57 Hz schon krumm, weil nicht geradzahlig?

Fragen über Fragen ....

von Helmut L. (helmi1)


Lesenswert?

isidor schrieb:
> Fragen über Fragen ....

Eigentlich wie immer hier....

von m.n. (Gast)


Lesenswert?

Praktikant schrieb:
> Ich habe jetzt eine kleine Platine mit Drehschalter und einem Attiny26P
> gebastelt.

Das sieht doch schon mal gut aus.
Mit dem Drehschalter stelltst Du verschiedene Spannungen zur Verfügung 
und der µC generiert Dir daraus eine proportionale Frequenz. Wie krumm 
Deine Frequenzen sein sollen, kannst Du durch 'krumme' Spannungen 
vorgeben ;-)

Mein Vorschlag für einen AVR: 
http://www.mino-elektronik.de/Generator/takte_impulse.htm#bsp6

von Ulrich H. (lurchi)


Lesenswert?

Wenn nur unter 1% Abweichung und so niedrigen Frequenzen gefordert sind, 
kann man einfach den Timer im µC die Frequenz erzeugen lassen: einfach 
den Takt (z.B. 1 MHz) geteilt durch eine gerade ganze Zahl - damit liegt 
man bei etwa 0,01 % Auflösung. Ein 16 Bit Timer wäre von Vorteil, es 
geht aber auch mit 8 Bit Timern. Für die volle Auflösung kann man die 
PWM Register passen dynamisch umprogrammieren, um so die volle Auflösung 
bis auf 1 Zyklus zu erreichen.

Wenn man in ASM Programmiert könnte man auch aktive Warteschleifen 
nutzen, auch das geht bis auf 1 Zyklus genau.

von Julemanden (Gast)


Lesenswert?

>Wie würdet ihr das Signal erzeugen?
Mit einem PIC anstatt AVR.
Einen mit NCO (nummeric controlled oscillator), zum Beispiel PIC16F1713.
Damit hatte ich neulich sogar einen Kurzwellen-Empfänger gebaut.
PIC als LO, Audio-Verstärker (hat interne OPVs) und als 
Telegrafie-Generator, um die Frequenz akustisch auszugeben.
1
unsigned long frq = 3500000;// 3.5MHz
2
3
4
void FRQ_Update(void){
5
  unsigned long inc;
6
7
  //    inc = 2 * frq * 1kHz / 32MHz * 2E20 / 10;
8
  //    inc = ((unsigned long)frq * (unsigned long)8192) / 125; // 1kHz steps
9
  //    inc = ((unsigned long)frq * (unsigned long)4096) / 625 ; // 100Hz steps
10
  inc = ((unsigned long)frq * (unsigned long)1024) / 15625 ; // 100Hz steps
11
12
  // Update the NCO
13
  NCO1INCU = (inc >> 16) & 0x0000FF;
14
  NCO1INCH = (inc >> 8 ) & 0x0000FF;
15
  NCO1INCL = (inc >> 0 ) & 0x0000FF;
16
}

von Praktikant (Gast)


Lesenswert?

Der Drehschalter hat 6 Positionen, gemeinsamen Anschluss auf Masse, 
Ausgänge auf je einen Portpin. Ist zwar Verschwendung, aber ich bräuchte 
die Pins sonst eh nicht.

Frequenzen sind zum Beispiel 26,525 Hz oder 51,9 Hz. Leider sind die 
Abstände ziemlich willkürlich, also keine gemeinsamen Teiler oder so. Es 
geht darum, ein Anzeigegerät mit Frequenzeingang bei bestimmten Werten 
zu kalibrieren.

Wenn irgendwie möglich, wäre auch noch eine Rampe zwischen den Stufen 
sinnvoll, d.h. wenn ich den Drehschalter verstellt, soll die Frequenz 
nicht springen sondern vielleicht innerhalb von 500 ms linear auf den 
neuen Sollwert ansteigen.

von Praktiker (Gast)


Lesenswert?

Praktikant schrieb:
> Frequenzen sind zum Beispiel 26,525 Hz oder 51,9 Hz.

Wenn die Frequenz nur auf 1% genau sein soll, ist spätestens die 4te 
Stelle bei der Frequenzangabe überflüssig.

Hier findest du ein Beispiel für einen DDS-Generator
http://www.myplace.nu/avr/minidds/

Für ein Rechtecksignal kann man sich die ganze Wertetabelle natürlich 
sparen.

von Klaus (Gast)


Lesenswert?

Praktiker schrieb:
> Hier findest du ein Beispiel für einen DDS-Generator
> http://www.myplace.nu/avr/minidds/
>
> Für ein Rechtecksignal kann man sich die ganze Wertetabelle natürlich
> sparen.

Wenn man sich die Wertetabelle spart, macht dann der Begiff DDS 
überhaupt noch einen Sinn?

MfG Klaus

von Peter D. (peda)


Lesenswert?

Praktikant schrieb:
> möglichst exakt eingehalten werden (1%).

1% ist überhaupt kein Problem. Nimm einen Compare-Ausgang im 
Toggle-Modus.
Mit dem ATtiny261 geht es noch einfacher, da der einen 16Bit Timer hat.

von Udo S. (urschmitt)


Lesenswert?

Praktikant schrieb:
> Wenn irgendwie möglich, wäre auch noch eine Rampe zwischen den Stufen
> sinnvoll, d.h. wenn ich den Drehschalter verstellt, soll die Frequenz
> nicht springen sondern vielleicht innerhalb von 500 ms linear auf den
> neuen Sollwert ansteigen.

Was soll das für das Kalibrieren bringen? Eine sich verändernde Frequenz 
über 500ms ist dafür völlig kontraproduktiv.

Praktikant schrieb:
> Es
> geht darum, ein Anzeigegerät mit Frequenzeingang bei bestimmten Werten
> zu kalibrieren.

von LostInMusic (Gast)


Lesenswert?

>soll die Frequenz nicht springen sondern vielleicht innerhalb von 500 ms
>linear auf den neuen Sollwert ansteigen.

Wobei eine lineare Änderung der Periodendauer programmtechnisch viel 
einfacher zu realisieren ist. Die Frequenz ändert sich dann allerdings 
nicht linear (beide Größen simultan linear zu ändern ist unmöglich).

"Musikalisch richtig" wäre übrigens eine exponentiell verlaufende 
Änderung der Frequenz, d. h. ein Änderungsschritt entspricht einer 
Multiplikation mit einem bestimmten, konstanten Faktor (*). In diesem 
Fall ändert sich dann auch die Periodendauer T = 1/f exponentiell.

(*) Für eine ganze Oktave aufwärts beträgt dieser Faktor 2; für einen 
Halbton aufwärts 2^(1/12) ≈ 1.059463...

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.