Forum: Mikrocontroller und Digitale Elektronik Sweep von 10Hz bis 120Hz erzeugen


von Nils (Gast)


Lesenswert?

Hallo,

ich stehe glaube ich ein bißchen auf dem Schlauch. Ich möchte einen 
Sweep erzeugen der von 10Hz bis 120Hz in 10Sek läuft. Ganz wichtig ist 
es dabei, das jeder sweep identisch (deckungsgleich) und genau 10sek 
lang ist. Derzeit habe ich das mit einer DDS versucht zu realisieren, 
jedoch bringt das nicht den gewünschten erfolg der genauen 
Reproduzierung, bedeutet die Phasen waren bei jedem Sweep etwas 
verschoben. Womit könnte ich das gewünschte Ergebnis erzielen? Ich hatte 
jetzt gedacht das vielleicht mit einem DAC zu machen und einer LUT zu 
machen, jedoch habe ich keine Ahnung wie ich eine LUT im Flash ablege um 
dann aus dem Programm auf den Bereich zugreifen zu können. Als zweites 
habe ich ein problem mit der Umsetzung in ein Programm. Gibt es dazu 
Beispiele?

Danke für Eure Info

von ?? (Gast)


Lesenswert?

Ja. Wenn's phasenidentisch sein muss ... ausm FPGA heraus erzeugen. 
Alternativ gibt's n'chip, der das bereits macht, den AD5932.

von Daniel W. (pegasus)


Lesenswert?

Hi Nils,

dieses BASCOM Code-Beispiel (für Atmega8) erzeugt eine gewünschte 
Frequenz
von 50 bis 400 Hz!

Jede Sekunde wird die Frequenz automatisch um 50 Hertz erhöht.  Sind 400 
Hz erreicht, fängt die Frequenz wieder bei 50 Hz an.

$regfile = "M8def.dat"
$crystal = 1000000

Drehzahl Alias Portc.5
Config Drehzahl = Output

Dim Myfrequency As Long
Dim Timervorspannung As Long
Dim Jederzweite As Byte
Dim Tmp As Single

Config Timer0 = Timer , Prescale = 64

Config Timer1 = Timer , Prescale = 8
On Timer1 Togglehorst
Enable Timer1

On Ovf0 On_ovf0
Enable Ovf0
Enable Interrupts
Myfrequency = 50

Do
Loop
End

On_ovf0:
Toggle Drehzahl
Timer0 = Timervorspannung
Return

Togglehorst:
Timer1 = 2975 'Timer1 auf 2975 (von 65535 möglichen) vorladen, um 1s zu
erzeugen
If Jederzweite = 0 Then Jederzweite = 1 Else Jederzweite = 0
If Jederzweite = 0 Then Goto Bravo
Myfrequency = Myfrequency + 50
If Myfrequency > 400 Then Myfrequency = 50 'Maximalfrequenz von 30,5
bis  7812 Hertz möglich

Tmp = 1000000       'Quarzoszillator 1 MHz
Tmp = Tmp / 64      'Timer0 Prescale = 64
Tmp = Tmp / Myfrequency
Tmp = Tmp / 2       'Korrektur, um Halbwelle in Vollwelle umzuwandeln
Tmp = Tmp - 1
Tmp = 256 - Tmp     'Timer0 mit einem Wert 0-255 vorladen
Tmp = Round(tmp)    'aus 2.3 wird 2  und  aus 2.8 wird 3
Timervorspannung = Tmp

Bravo:
Return

von Nils (Gast)


Lesenswert?

Vielen Dank für die Tipps. Ich denke der AD5932 ist für reproduzierbare 
Messreihen eine gute Wahl. Damit werde ich mich mal näher beschäftigen. 
Gibbet davon Beispielcode? Werde ich mich wohl mal auf die Suche nach 
machen.

Grüsse

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.