Gast schrieb:
> Es wäre doch schön, wenn man einfach nur die Frequenz eines Interrupts
> angibt, und der Rest (Prescaler- und z.B. Compare-Register-Werte) vom PC
> berechnet würden.
Hallo,
ich lasse grundsätzlich solche Sachen berechnen - das Folgende ist PIC,
aber vielleicht kannst du ein paar prinzipielle Dinge draus entnehmen.
Ich gebe nur den Schrittwinkel eines Schrittmotors (AStep) und die
Quarzfrequenz (Fq) vor und lasse die ganzen Schritttabellen für
verschiedene Drehzahlen berechnen:
1 | ;
|
2 | ; set Values for Fq (quartz frequ)
|
3 | ; Astep (step angle * 100)
|
4 | ;
|
5 | Fq equ D'12000000'
|
6 | Astep equ D'1125' ;11.25
|
7 | IntRes1 equ Fq / D'205'
|
8 | IntRes2 equ IntRes1 * Astep
|
9 | ; GFactor = Fq / 205 * Astep / 100
|
10 | GFactor equ IntRes2 / D'100'
|
11 | MinRpM equ GFactor / D'65000'
|
12 | MaxRpM equ D'599'
|
13 | ;
|
14 | ;
|
15 | ; Table macros
|
16 | ;
|
17 | ltab macro RpM
|
18 | if RpM < MinRpM
|
19 | retlw Low (GFactor / MinRpM)
|
20 | else
|
21 | retlw Low (GFactor / RpM)
|
22 | endif
|
23 | endm
|
24 | ;
|
25 | ;
|
26 | TLStart
|
27 | variable li
|
28 | li = 0
|
29 | while li < D'200' ;Table 0..199
|
30 | ltab li
|
31 | li += 1
|
32 | endw
|
33 | while li < D'400' ;Table 200..399
|
34 | ltab li
|
35 | li += 1
|
36 | endw
|
37 | while li < D'600' ;Table 400..599
|
38 | ltab li
|
39 | li += 1
|
40 | endw
|
41 | ;
|
Hier steht dann eine Tabelle für 0..599 U/min.
Gruss Reinhard