Krumme Testfrequenzen erzeugen

Gast #3927045
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?
Gast #3927105
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
#3927152
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.
Gast #3927174
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
}
Gast #3927248
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.
#3927761
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.
Gast #3930285
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren