Guten Tag Zusammen,
ich hoffe ich werde nicht gestinigt, aber ich spiele mit dem MCC für
einen PIC18 rum.
Im großen Ganzen steuere ich einen BLDC Motor, das klappt auch soweit
erstmal.
Aber der Motor läuft nicht sauber, er verschluckt regelmäßig "Schritte"
weshalb er "wooblet" ?
Ich stehe auch grade aufn Schlauch bzgl. der 16 Pole wie ich dies
berücksichten muss.
Stell ich den Timer auf 1ms und das auf die 6 Schritte ümrechne müsste
ich theoretisch auf 10.000rpm kommen. Da bin ich aber weiiiit von weg
eher 232 rpm wenn ich die gemessenen 16.8ms pro H1 Impuls umrechne.
Bin erst frisch in dem Thema und würde mich auf paar Tipps freuen.
Was ist so grundlegent falsch an meinen Code und der Überlegung dahinter
? ( Ja MCC ist blöd und man sollte alles selber machen, aber bis jetzt
war immer alles zufahrlässig, den Timer habe ich aus Kontrolle mal als
Uhr benutzt und da funktioniert er tadellos)
Die Analoge Schaltung kann ich gerne auch dran hängen.
1 | void main(void)
|
2 | {
|
3 |
|
4 | SYSTEM_Initialize();
|
5 | INTERRUPT_GlobalInterruptEnable();
|
6 | TMR1_SetInterruptHandler (Timer);
|
7 |
|
8 |
|
9 |
|
10 | while(1)
|
11 | {
|
12 |
|
13 | if(ms==0){
|
14 | if(PORTAbits.RA0 == 1 && PORTAbits.RA1 == 0 && PORTAbits.RA2 == 1 )
|
15 | {
|
16 | LATBbits.LATB5 = 1; //EN1
|
17 | PWM_IN1(1023); //IN1
|
18 | LATBbits.LATB3 = 1; //EN2
|
19 | PWM_IN2(0); //IN2
|
20 | LATCbits.LATC7 = 0; //EN3
|
21 | PWM_IN3(1023); //IN3
|
22 | }
|
23 | }
|
24 |
|
25 |
|
26 | if(ms==1){
|
27 | if(PORTAbits.RA0 == 1 && PORTAbits.RA1 == 0 && PORTAbits.RA2 == 0 )
|
28 | {
|
29 | LATBbits.LATB5 = 1;
|
30 | PWM_IN1(1023);
|
31 | LATBbits.LATB3 = 0;
|
32 | PWM_IN2(1023);
|
33 | LATCbits.LATC7 = 1;
|
34 | PWM_IN3(0);
|
35 | }
|
36 | }
|
37 |
|
38 |
|
39 | if(ms==2){
|
40 | if(PORTAbits.RA0 == 1 && PORTAbits.RA1 == 1 && PORTAbits.RA2 == 0 )
|
41 | {
|
42 | LATBbits.LATB5 = 0;
|
43 | PWM_IN1(1023);
|
44 | LATBbits.LATB3 = 1;
|
45 | PWM_IN2(1023);
|
46 | LATCbits.LATC7 = 1;
|
47 | PWM_IN3(0);
|
48 | }
|
49 | }
|
50 |
|
51 |
|
52 | if(ms==3){
|
53 | if(PORTAbits.RA0 == 0 && PORTAbits.RA1 == 1 && PORTAbits.RA2 == 0 )
|
54 | {
|
55 | LATBbits.LATB5 = 1;
|
56 | PWM_IN1(0);
|
57 | LATBbits.LATB3 = 1;
|
58 | PWM_IN2(1023);
|
59 | LATCbits.LATC7 = 0;
|
60 | PWM_IN3(1023);
|
61 | }
|
62 | }
|
63 |
|
64 |
|
65 | if(ms==4){
|
66 | if(PORTAbits.RA0 == 0 && PORTAbits.RA1 == 1 && PORTAbits.RA2 == 1 )
|
67 | {
|
68 | LATBbits.LATB5 = 1;
|
69 | PWM_IN1(0);
|
70 | LATBbits.LATB3 = 0;
|
71 | PWM_IN2(1023);
|
72 | LATCbits.LATC7 = 1;
|
73 | PWM_IN3(1023);
|
74 | }
|
75 | }
|
76 |
|
77 |
|
78 | if(ms==5){
|
79 | if(PORTAbits.RA0 == 0 && PORTAbits.RA1 == 0 && PORTAbits.RA2 == 1 )
|
80 | {
|
81 | LATBbits.LATB5 = 0;
|
82 | PWM_IN1(1023);
|
83 | LATBbits.LATB3 = 1;
|
84 | PWM_IN2(0);
|
85 | LATCbits.LATC7 = 1;
|
86 | PWM_IN3(1023);
|
87 |
|
88 | }
|
89 | }
|
90 |
|
91 | if(ms>=6)
|
92 | {
|
93 | ms=0;
|
94 | }
|
95 |
|
96 |
|
97 |
|
98 | }
|
99 | }
|
100 | void Timer(void){
|
101 | ms++;
|
102 | }
|