Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
atkbldcdriver
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jake Read
atkbldcdriver
Commits
788e2ee5
Commit
788e2ee5
authored
Jul 30, 2018
by
Jake Read
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added sinusoid commutation, ready to tune offset
parent
a342d381
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
217 additions
and
76 deletions
+217
-76
circuit/README.md
circuit/README.md
+1
-0
embedded/atkbldcdriver/atkbldcdriver/atkbldcdriver.cproj
embedded/atkbldcdriver/atkbldcdriver/atkbldcdriver.cproj
+3
-0
embedded/atkbldcdriver/atkbldcdriver/main.c
embedded/atkbldcdriver/atkbldcdriver/main.c
+41
-76
embedded/atkbldcdriver/atkbldcdriver/sinelut.h
embedded/atkbldcdriver/atkbldcdriver/sinelut.h
+172
-0
No files found.
circuit/README.md
View file @
788e2ee5
...
@@ -22,6 +22,7 @@ This perhaps means I need to run that SPI cable with a differential driver, to b
...
@@ -22,6 +22,7 @@ This perhaps means I need to run that SPI cable with a differential driver, to b
-
wants one lo-side debug pin!
-
wants one lo-side debug pin!
-
for resets etc, pull en to gnd on other side of switch!
-
for resets etc, pull en to gnd on other side of switch!
-
wants spi debug pins
-
wants spi debug pins
-
wants more gnd pins, for scope, gnd pins to be not beside 3v3
-
might have to go to DRV8320 - newer, available
-
might have to go to DRV8320 - newer, available
-
CSD88548 is CSD88599 but more amps less volts, use these
-
CSD88548 is CSD88599 but more amps less volts, use these
...
...
embedded/atkbldcdriver/atkbldcdriver/atkbldcdriver.cproj
View file @
788e2ee5
...
@@ -178,6 +178,9 @@
...
@@ -178,6 +178,9 @@
<Compile
Include=
"ringbuffer.h"
>
<Compile
Include=
"ringbuffer.h"
>
<SubType>
compile
</SubType>
<SubType>
compile
</SubType>
</Compile>
</Compile>
<Compile
Include=
"sinelut.h"
>
<SubType>
compile
</SubType>
</Compile>
<Compile
Include=
"spiport.c"
>
<Compile
Include=
"spiport.c"
>
<SubType>
compile
</SubType>
<SubType>
compile
</SubType>
</Compile>
</Compile>
...
...
embedded/atkbldcdriver/atkbldcdriver/main.c
View file @
788e2ee5
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
#include <avr/interrupt.h>
#include <avr/interrupt.h>
#include "hardware.h"
#include "hardware.h"
#include "fastmath.h"
#include "fastmath.h"
#include "sinelut.h"
// first setup all the pins
// first setup all the pins
// want six step commutation, or sinpwm on encoder reading?
// want six step commutation, or sinpwm on encoder reading?
...
@@ -51,6 +52,20 @@ void encoder_init(void){
...
@@ -51,6 +52,20 @@ void encoder_init(void){
ams5047_init
(
&
ams5047
,
&
spiEncoder
);
ams5047_init
(
&
ams5047
,
&
spiEncoder
);
}
}
#define ENC_RESOLUTION 16835
// a handful of constants, probably need many less
// divisor is # of poles on motor / 2 (for each n/s pair, one set of 3 coils per full rotation)
const
static
uint16_t
enc_resolution
=
ENC_RESOLUTION
;
const
static
uint8_t
enc_reverse
=
1
;
// 1 or 0, for reverse op
const
static
uint16_t
twoPi_enc
=
2340
;
//ENC_RESOLUTION / 7; // divisor is # poles / 2
const
static
uint16_t
pi_enc
=
1170
;
const
static
int16_t
enc_offset
=
-
600
;
// start at midpoint - adjust -ve or +ve from
static
uint16_t
enc_reading
=
0
;
static
uint16_t
phase_target
=
0
;
// 2^14 = 16,384
void
pwm_periods
(
uint16_t
peru
,
uint16_t
perv
,
uint16_t
perw
){
void
pwm_periods
(
uint16_t
peru
,
uint16_t
perv
,
uint16_t
perw
){
// check overrun
// check overrun
(
peru
>
1024
)
?
peru
=
1024
:
(
0
);
(
peru
>
1024
)
?
peru
=
1024
:
(
0
);
...
@@ -78,6 +93,23 @@ void pwm_by_offset(int16_t ofu, int16_t ofv, int16_t ofw){
...
@@ -78,6 +93,23 @@ void pwm_by_offset(int16_t ofu, int16_t ofv, int16_t ofw){
pwm_periods
(
peru
,
perv
,
perw
);
pwm_periods
(
peru
,
perv
,
perw
);
}
}
void
pwm_by_sin_duty
(
uint16_t
phase
,
float
duty
){
// phases respective of home
int16_t
pu
=
phase
;
(
pu
>=
twoPi_enc
)
?
(
pu
-=
twoPi_enc
)
:
(
0
);
int16_t
pv
=
phase
+
780
;
(
pv
>=
twoPi_enc
)
?
(
pv
-=
twoPi_enc
)
:
(
0
);
int16_t
pw
=
phase
+
1560
;
(
pw
>=
twoPi_enc
)
?
(
pw
-=
twoPi_enc
)
:
(
0
);
// zero-set offset
int16_t
peru
=
((
sinelut
[
pu
]
-
512
)
*
duty
)
+
512
;
int16_t
perv
=
((
sinelut
[
pv
]
-
512
)
*
duty
)
+
512
;
int16_t
perw
=
((
sinelut
[
pw
]
-
512
)
*
duty
)
+
512
;
pwm_periods
(
peru
,
perv
,
perw
);
}
void
pwm_init
(
void
){
void
pwm_init
(
void
){
// setup awex etc
// setup awex etc
...
@@ -121,7 +153,7 @@ void drv_init(void){
...
@@ -121,7 +153,7 @@ void drv_init(void){
// setup drv8302 mode
// setup drv8302 mode
pin_clear
(
&
drvModePwm
);
// low for 6-channel pwm, hi and lo sides from uc
pin_clear
(
&
drvModePwm
);
// low for 6-channel pwm, hi and lo sides from uc
pin_
clear
(
&
drvModeGain
);
// low for 10v/v, hi for 40v/v current sense gains
pin_
set
(
&
drvModeGain
);
// low for 10v/v, hi for 40v/v current sense gains
pin_clear
(
&
drvDcCal
);
// turn DC cal off, we turn this high to set midpoint on amps
pin_clear
(
&
drvDcCal
);
// turn DC cal off, we turn this high to set midpoint on amps
pin_clear
(
&
drvEnPin
);
// disable the gate driver, to start. also broken by no/go hardware switch
pin_clear
(
&
drvEnPin
);
// disable the gate driver, to start. also broken by no/go hardware switch
}
}
...
@@ -193,7 +225,7 @@ int main(void)
...
@@ -193,7 +225,7 @@ int main(void)
bldc_init
(
&
bldc
);
bldc_init
(
&
bldc
);
// on startup, speed (if clcomm) and duty
// on startup, speed (if clcomm) and duty
//bldc_setTargetSpeed(&bldc, 1000);
//bldc_setTargetSpeed(&bldc, 1000);
bldc_setDuty
(
&
bldc
,
3
0
);
// bldc_setDuty(&bldc, 1
0);
// startup the driver
// startup the driver
drv_init
();
drv_init
();
// and enable the gate
// and enable the gate
...
@@ -215,87 +247,20 @@ int main(void)
...
@@ -215,87 +247,20 @@ int main(void)
}
}
}
}
int8_t
comTable
[
6
][
3
]
=
{
{
1
,
-
1
,
0
},
{
1
,
0
,
-
1
},
{
0
,
1
,
-
1
},
{
-
1
,
1
,
0
},
{
-
1
,
0
,
1
},
{
0
,
-
1
,
1
}
};
#define ENC_RESOLUTION 16834
// a handful of constants, probably need many less
// divisor is # of poles on motor / 2 (for each n/s pair, one set of 3 coils per full rotation)
const
static
uint16_t
enc_resolution
=
ENC_RESOLUTION
;
const
static
uint8_t
enc_reverse
=
0
;
// 1 or 0, for reverse op
const
static
uint16_t
enc_modulo
=
ENC_RESOLUTION
/
7
;
// divisor is # poles / 2
const
static
uint16_t
enc_offset
=
0
;
// start at midpoint - adjust -ve or +ve from
const
static
uint16_t
enc_steplength
=
ENC_RESOLUTION
/
7
/
6
;
static
uint16_t
enc_reading
=
0
;
static
uint16_t
enc_adjusted
=
0
;
static
uint16_t
enc_phase
=
0
;
static
uint16_t
enc_target
=
0
;
// 2^14 = 16,384
// commutation timer
// commutation timer
ISR
(
TCD0_OVF_vect
){
ISR
(
TCD0_OVF_vect
){
// CL 6-step Commutate
// CL 6-step Commutate
// get encoder reading
// get encoder reading
ams5047_read
(
&
ams5047
,
&
enc_reading
);
ams5047_read
(
&
ams5047
,
&
enc_reading
);
// offset and modulo to bring to in-phase relative location
// reversal if
if
(
enc_reverse
){
enc_reverse
?
enc_reading
=
enc_resolution
-
enc_reading
:
(
0
);
enc_adjusted
=
enc_resolution
-
enc_reading
;
// target phase expressed in 0 - 2PI, where 2PI in terms of an encoder counts' worth of ticks
}
else
{
// we add the encoder's resolution here so that we can safely have negative encoder offsets
enc_adjusted
=
enc_reading
;
phase_target
=
(
enc_resolution
+
enc_reading
+
enc_offset
+
pi_enc
)
%
twoPi_enc
;
}
enc_adjusted
+=
enc_offset
;
// add offset
// we need to compute the respective pwm positions given the phase target
enc_adjusted
%=
enc_resolution
;
// wrap to resolution
pwm_by_sin_duty
(
phase_target
,
0
.
04
);
enc_adjusted
%=
enc_modulo
;
// break into phase relative
// so this should represent the phase (0-5) that we're currently in
enc_phase
=
enc_adjusted
/
enc_steplength
;
// if dir, phase + 2 to go forwards, else + 4, effectively - 2, and wrap past circle
(
bldc
.
comDir
)
?
(
enc_target
=
(
enc_phase
+
2
)
%
6
)
:
(
enc_target
=
(
enc_phase
+
4
)
%
6
);
//uint8_t dout[6] = {6,0,5,254,255,enc_target};
//uart_sendchars_buffered(&up0, dout, 6);
// now we can set PWMs accordingly
pwm_by_offset
(
comTable
[
enc_target
][
0
]
*
bldc
.
comDuty
,
comTable
[
enc_target
][
1
]
*
bldc
.
comDuty
,
comTable
[
enc_target
][
2
]
*
bldc
.
comDuty
);
// OL Commutate
/*
(bldc.comDir) ? (bldc.comState ++) : (bldc.comState --);
if(bldc.comState > 5){
bldc.comState = 0;
}
pwm_by_offset( comTable[bldc.comState][0] * bldc.comDuty,
comTable[bldc.comState][1] * bldc.comDuty,
comTable[bldc.comState][2] * bldc.comDuty
);
*/
}
// acceleration timer
ISR
(
TCD1_OVF_vect
){
// CL Commutate: PID Speed Loop
// OL Commutate: Acceleration to Speed
/*
if(bldc.currentSpeed != bldc.targetSpeed){
if(bldc.currentSpeed < bldc.targetSpeed){
bldc.currentSpeed ++;
bldc_setSpeed(&bldc, bldc.currentSpeed);
} else {
bldc.currentSpeed --;
bldc_setSpeed(&bldc, bldc.currentSpeed);
}
}
*/
}
}
ISR
(
USARTE1_RXC_vect
){
ISR
(
USARTE1_RXC_vect
){
...
...
embedded/atkbldcdriver/atkbldcdriver/sinelut.h
0 → 100644
View file @
788e2ee5
/*
* sinelut.h
*
* Created: 7/30/2018 5:47:35 PM
* Author: Jake
*/
#ifndef SINELUT_H_
#define SINELUT_H_
const
static
int16_t
sinelut
[
2340
]
=
{
512
,
513
,
515
,
516
,
517
,
519
,
520
,
522
,
523
,
524
,
526
,
527
,
528
,
530
,
531
,
533
,
534
,
535
,
537
,
538
,
539
,
541
,
542
,
544
,
545
,
546
,
548
,
549
,
550
,
552
,
553
,
555
,
556
,
557
,
559
,
560
,
561
,
563
,
564
,
566
,
567
,
568
,
570
,
571
,
572
,
574
,
575
,
576
,
578
,
579
,
581
,
582
,
583
,
585
,
586
,
587
,
589
,
590
,
591
,
593
,
594
,
595
,
597
,
598
,
600
,
601
,
602
,
604
,
605
,
606
,
608
,
609
,
610
,
612
,
613
,
614
,
616
,
617
,
618
,
620
,
621
,
622
,
624
,
625
,
627
,
628
,
629
,
631
,
632
,
633
,
635
,
636
,
637
,
639
,
640
,
641
,
643
,
644
,
645
,
647
,
648
,
649
,
650
,
652
,
653
,
654
,
656
,
657
,
658
,
660
,
661
,
662
,
664
,
665
,
666
,
668
,
669
,
670
,
672
,
673
,
674
,
675
,
677
,
678
,
679
,
681
,
682
,
683
,
685
,
686
,
687
,
688
,
690
,
691
,
692
,
694
,
695
,
696
,
697
,
699
,
700
,
701
,
703
,
704
,
705
,
706
,
708
,
709
,
710
,
711
,
713
,
714
,
715
,
716
,
718
,
719
,
720
,
722
,
723
,
724
,
725
,
727
,
728
,
729
,
730
,
731
,
733
,
734
,
735
,
736
,
738
,
739
,
740
,
741
,
743
,
744
,
745
,
746
,
748
,
749
,
750
,
751
,
752
,
754
,
755
,
756
,
757
,
758
,
760
,
761
,
762
,
763
,
764
,
766
,
767
,
768
,
769
,
770
,
772
,
773
,
774
,
775
,
776
,
777
,
779
,
780
,
781
,
782
,
783
,
784
,
786
,
787
,
788
,
789
,
790
,
791
,
793
,
794
,
795
,
796
,
797
,
798
,
799
,
801
,
802
,
803
,
804
,
805
,
806
,
807
,
808
,
810
,
811
,
812
,
813
,
814
,
815
,
816
,
817
,
818
,
820
,
821
,
822
,
823
,
824
,
825
,
826
,
827
,
828
,
829
,
830
,
832
,
833
,
834
,
835
,
836
,
837
,
838
,
839
,
840
,
841
,
842
,
843
,
844
,
845
,
846
,
847
,
848
,
849
,
850
,
852
,
853
,
854
,
855
,
856
,
857
,
858
,
859
,
860
,
861
,
862
,
863
,
864
,
865
,
866
,
867
,
868
,
869
,
870
,
871
,
872
,
873
,
874
,
875
,
875
,
876
,
877
,
878
,
879
,
880
,
881
,
882
,
883
,
884
,
885
,
886
,
887
,
888
,
889
,
890
,
891
,
892
,
892
,
893
,
894
,
895
,
896
,
897
,
898
,
899
,
900
,
901
,
902
,
902
,
903
,
904
,
905
,
906
,
907
,
908
,
909
,
909
,
910
,
911
,
912
,
913
,
914
,
915
,
915
,
916
,
917
,
918
,
919
,
920
,
920
,
921
,
922
,
923
,
924
,
925
,
925
,
926
,
927
,
928
,
929
,
929
,
930
,
931
,
932
,
933
,
933
,
934
,
935
,
936
,
936
,
937
,
938
,
939
,
940
,
940
,
941
,
942
,
943
,
943
,
944
,
945
,
945
,
946
,
947
,
948
,
948
,
949
,
950
,
951
,
951
,
952
,
953
,
953
,
954
,
955
,
955
,
956
,
957
,
957
,
958
,
959
,
959
,
960
,
961
,
961
,
962
,
963
,
963
,
964
,
965
,
965
,
966
,
967
,
967
,
968
,
969
,
969
,
970
,
970
,
971
,
972
,
972
,
973
,
973
,
974
,
975
,
975
,
976
,
976
,
977
,
977
,
978
,
979
,
979
,
980
,
980
,
981
,
981
,
982
,
982
,
983
,
984
,
984
,
985
,
985
,
986
,
986
,
987
,
987
,
988
,
988
,
989
,
989
,
990
,
990
,
991
,
991
,
992
,
992
,
993
,
993
,
994
,
994
,
995
,
995
,
995
,
996
,
996
,
997
,
997
,
998
,
998
,
999
,
999
,
999
,
1000
,
1000
,
1001
,
1001
,
1001
,
1002
,
1002
,
1003
,
1003
,
1003
,
1004
,
1004
,
1005
,
1005
,
1005
,
1006
,
1006
,
1006
,
1007
,
1007
,
1007
,
1008
,
1008
,
1008
,
1009
,
1009
,
1009
,
1010
,
1010
,
1010
,
1011
,
1011
,
1011
,
1012
,
1012
,
1012
,
1013
,
1013
,
1013
,
1013
,
1014
,
1014
,
1014
,
1014
,
1015
,
1015
,
1015
,
1015
,
1016
,
1016
,
1016
,
1016
,
1017
,
1017
,
1017
,
1017
,
1018
,
1018
,
1018
,
1018
,
1018
,
1019
,
1019
,
1019
,
1019
,
1019
,
1020
,
1020
,
1020
,
1020
,
1020
,
1020
,
1021
,
1021
,
1021
,
1021
,
1021
,
1021
,
1021
,
1022
,
1022
,
1022
,
1022
,
1022
,
1022
,
1022
,
1022
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1024
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1023
,
1022
,
1022
,
1022
,
1022
,
1022
,
1022
,
1022
,
1022
,
1021
,
1021
,
1021
,
1021
,
1021
,
1021
,
1021
,
1020
,
1020
,
1020
,
1020
,
1020
,
1020
,
1019
,
1019
,
1019
,
1019
,
1019
,
1018
,
1018
,
1018
,
1018
,
1018
,
1017
,
1017
,
1017
,
1017
,
1016
,
1016
,
1016
,
1016
,
1015
,
1015
,
1015
,
1015
,
1014
,
1014
,
1014
,
1014
,
1013
,
1013
,
1013
,
1013
,
1012
,
1012
,
1012
,
1011
,
1011
,
1011
,
1010
,
1010
,
1010
,
1009
,
1009
,
1009
,
1008
,
1008
,
1008
,
1007
,
1007
,
1007
,
1006
,
1006
,
1006
,
1005
,
1005
,
1005
,
1004
,
1004
,
1003
,
1003
,
1003
,
1002
,
1002
,
1001
,
1001
,
1001
,
1000
,
1000
,
999
,
999
,
999
,
998
,
998
,
997
,
997
,
996
,
996
,
995
,
995
,
995
,
994
,
994
,
993
,
993
,
992
,
992
,
991
,
991
,
990
,
990
,
989
,
989
,
988
,
988
,
987
,
987
,
986
,
986
,
985
,
985
,
984
,
984
,
983
,
982
,
982
,
981
,
981
,
980
,
980
,
979
,
979
,
978
,
977
,
977
,
976
,
976
,
975
,
975
,
974
,
973
,
973
,
972
,
972
,
971
,
970
,
970
,
969
,
969
,
968
,
967
,
967
,
966
,
965
,
965
,
964
,
963
,
963
,
962
,
961
,
961
,
960
,
959
,
959
,
958
,
957
,
957
,
956
,
955
,
955
,
954
,
953
,
953
,
952
,
951
,
951
,
950
,
949
,
948
,
948
,
947
,
946
,
945
,
945
,
944
,
943
,
943
,
942
,
941
,
940
,
940
,
939
,
938
,
937
,
936
,
936
,
935
,
934
,
933
,
933
,
932
,
931
,
930
,
929
,
929
,
928
,
927
,
926
,
925
,
925
,
924
,
923
,
922
,
921
,
920
,
920
,
919
,
918
,
917
,
916
,
915
,
915
,
914
,
913
,
912
,
911
,
910
,
909
,
909
,
908
,
907
,
906
,
905
,
904
,
903
,
902
,
902
,
901
,
900
,
899
,
898
,
897
,
896
,
895
,
894
,
893
,
892
,
892
,
891
,
890
,
889
,
888
,
887
,
886
,
885
,
884
,
883
,
882
,
881
,
880
,
879
,
878
,
877
,
876
,
875
,
875
,
874
,
873
,
872
,
871
,
870
,
869
,
868
,
867
,
866
,
865
,
864
,
863
,
862
,
861
,
860
,
859
,
858
,
857
,
856
,
855
,
854
,
853
,
852
,
850
,
849
,
848
,
847
,
846
,
845
,
844
,
843
,
842
,
841
,
840
,
839
,
838
,
837
,
836
,
835
,
834
,
833
,
832
,
830
,
829
,
828
,
827
,
826
,
825
,
824
,
823
,
822
,
821
,
820
,
818
,
817
,
816
,
815
,
814
,
813
,
812
,
811
,
810
,
808
,
807
,
806
,
805
,
804
,
803
,
802
,
801
,
799
,
798
,
797
,
796
,
795
,
794
,
793
,
791
,
790
,
789
,
788
,
787
,
786
,
784
,
783
,
782
,
781
,
780
,
779
,
777
,
776
,
775
,
774
,
773
,
772
,
770
,
769
,
768
,
767
,
766
,
764
,
763
,
762
,
761
,
760
,
758
,
757
,
756
,
755
,
754
,
752
,
751
,
750
,
749
,
748
,
746
,
745
,
744
,
743
,
741
,
740
,
739
,
738
,
736
,
735
,
734
,
733
,
731
,
730
,
729
,
728
,
727
,
725
,
724
,
723
,
722
,
720
,
719
,
718
,
716
,
715
,
714
,
713
,
711
,
710
,
709
,
708
,
706
,
705
,
704
,
703
,
701
,
700
,
699
,
697
,
696
,
695
,
694
,
692
,
691
,
690
,
688
,
687
,
686
,
685
,
683
,
682
,
681
,
679
,
678
,
677
,
675
,
674
,
673
,
672
,
670
,
669
,
668
,
666
,
665
,
664
,
662
,
661
,
660
,
658
,
657
,
656
,
654
,
653
,
652
,
650
,
649
,
648
,
647
,
645
,
644
,
643
,
641
,
640
,
639
,
637
,
636
,
635
,
633
,
632
,
631
,
629
,
628
,
627
,
625
,
624
,
622
,
621
,
620
,
618
,
617
,
616
,
614
,
613
,
612
,
610
,
609
,
608
,
606
,
605
,
604
,
602
,
601
,
600
,
598
,
597
,
595
,
594
,
593
,
591
,
590
,
589
,
587
,
586
,
585
,
583
,
582
,
581
,
579
,
578
,
576
,
575
,
574
,
572
,
571
,
570
,
568
,
567
,
566
,
564
,
563
,
561
,
560
,
559
,
557
,
556
,
555
,
553
,
552
,
550
,
549
,
548
,
546
,
545
,
544
,
542
,
541
,
539
,
538
,
537
,
535
,
534
,
533
,
531
,
530
,
528
,
527
,
526
,
524
,
523
,
522
,
520
,
519
,
517
,
516
,
515
,
513
,
512
,
511
,
509
,
508
,
507
,
505
,
504
,
502
,
501
,
500
,
498
,
497
,
496
,
494
,
493
,
491
,
490
,
489
,
487
,
486
,
485
,
483
,
482
,
480
,
479
,
478
,
476
,
475
,
474
,
472
,
471
,
469
,
468
,
467
,
465
,
464
,
463
,
461
,
460
,
458
,
457
,
456
,
454
,
453
,
452
,
450
,
449
,
448
,
446
,
445
,
443
,
442
,
441
,
439
,
438
,
437
,
435
,
434
,
433
,
431
,
430
,
429
,
427
,
426
,
424
,
423
,
422
,
420
,
419
,
418
,
416
,
415
,
414
,
412
,
411
,
410
,
408
,
407
,
406
,
404
,
403
,
402
,
400
,
399
,
397
,
396
,
395
,
393
,
392
,
391
,
389
,
388
,
387
,
385
,
384
,
383
,
381
,
380
,
379
,
377
,
376
,
375
,
374
,
372
,
371
,
370
,
368
,
367
,
366
,
364
,
363
,
362
,
360
,
359
,
358
,
356
,
355
,
354
,
352
,
351
,
350
,
349
,
347
,
346
,
345
,
343
,
342
,
341
,
339
,
338
,
337
,
336
,
334
,
333
,
332
,
330
,
329
,
328
,
327
,
325
,
324
,
323
,
321
,
320
,
319
,
318
,
316
,
315
,
314
,
313
,
311
,
310
,
309
,
308
,
306
,
305
,
304
,
302
,
301
,
300
,
299
,
297
,
296
,
295
,
294
,
293
,
291
,
290
,
289
,
288
,
286
,
285
,
284
,
283
,
281
,
280
,
279
,
278
,
276
,
275
,
274
,
273
,
272
,
270
,
269
,
268
,
267
,
266
,
264
,
263
,
262
,
261
,
260
,
258
,
257
,
256
,
255
,
254
,
252
,
251
,
250
,
249
,
248
,
247
,
245
,
244
,
243
,
242
,
241
,
240
,
238
,
237
,
236
,
235
,
234
,
233
,
231
,
230
,
229
,
228
,
227
,
226
,
225
,
223
,
222
,
221
,
220
,
219
,
218
,
217
,
216
,
214
,
213
,
212
,
211
,
210
,
209
,
208
,
207
,
206
,
204
,
203
,
202
,
201
,
200
,
199
,
198
,
197
,
196
,
195
,
194
,
192
,
191
,
190
,
189
,
188
,
187
,
186
,
185
,
184
,
183
,
182
,
181
,
180
,
179
,
178
,
177
,
176
,
175
,
174
,
172
,
171
,
170
,
169
,
168
,
167
,
166
,
165
,
164
,
163
,
162
,
161
,
160
,
159
,
158
,
157
,
156
,
155
,
154
,
153
,
152
,
151
,
150
,
149
,
149
,
148
,
147
,
146
,
145
,
144
,
143
,
142
,
141
,
140
,
139
,
138
,
137
,
136
,
135
,
134
,
133
,
132
,
132
,
131
,
130
,
129
,
128
,
127
,
126
,
125
,
124
,
123
,
122
,
122
,
121
,
120
,
119
,
118
,
117
,
116
,
115
,
115
,
114
,
113
,
112
,
111
,
110
,
109
,
109
,
108
,
107
,
106
,
105
,
104
,
104
,
103
,
102
,
101
,
100
,
99
,
99
,
98
,
97
,
96
,
95
,
95
,
94
,
93
,
92
,
91
,
91
,
90
,
89
,
88
,
88
,
87
,
86
,
85
,
84
,
84
,
83
,
82
,
81
,
81
,
80
,
79
,
79
,
78
,
77
,
76
,
76
,
75
,
74
,
73
,
73
,
72
,
71
,
71
,
70
,
69
,
69
,
68
,
67
,
67
,
66
,
65
,
65
,
64
,
63
,
63
,
62
,
61
,
61
,
60
,
59
,
59
,
58
,
57
,
57
,
56
,
55
,
55
,
54
,
54
,
53
,
52
,
52
,
51
,
51
,
50
,
49
,
49
,
48
,
48
,
47
,
47
,
46
,
45
,
45
,
44
,
44
,
43
,
43
,
42
,
42
,
41
,
40
,
40
,
39
,
39
,
38
,
38
,
37
,
37
,
36
,
36
,
35
,
35
,
34
,
34
,
33
,
33
,
32
,
32
,
31
,
31
,
30
,
30
,
29
,
29
,
29
,
28
,
28
,
27
,
27
,
26
,
26
,
25
,
25
,
25
,
24
,
24
,
23
,
23
,
23
,
22
,
22
,
21
,
21
,
21
,
20
,
20
,
19
,
19
,
19
,
18
,
18
,
18
,
17
,
17
,
17
,
16
,
16
,
16
,
15
,
15
,
15
,
14
,
14
,
14
,
13
,
13
,
13
,
12
,
12
,
12
,
11
,
11
,
11
,
11
,
10
,
10
,
10
,
10
,
9
,
9
,
9
,
9
,
8
,
8
,
8
,
8
,
7
,
7
,
7
,
7
,
6
,
6
,
6
,
6
,
6
,
5
,
5
,
5
,
5
,
5
,
4
,
4
,
4
,
4
,
4
,
4
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
4
,
4
,
4
,
5
,
5
,
5
,
5
,
5
,
6
,
6
,
6
,
6
,
6
,
7
,
7
,
7
,
7
,
8
,
8
,
8
,
8
,
9
,
9
,
9
,
9
,
10
,
10
,
10
,
10
,
11
,
11
,
11
,
11
,
12
,
12
,
12
,
13
,
13
,
13
,
14
,
14
,
14
,
15
,
15
,
15
,
16
,
16
,
16
,
17
,
17
,
17
,
18
,
18
,
18
,
19
,
19
,
19
,
20
,
20
,
21
,
21
,
21
,
22
,
22
,
23
,
23
,
23
,
24
,
24
,
25
,
25
,
25
,
26
,
26
,
27
,
27
,
28
,
28
,
29
,
29
,
29
,
30
,
30
,
31
,
31
,
32
,
32
,
33
,
33
,
34
,
34
,
35
,
35
,
36
,
36
,
37
,
37
,
38
,
38
,
39
,
39
,
40
,
40
,
41
,
42
,
42
,
43
,
43
,
44
,
44
,
45
,
45
,
46
,
47
,
47
,
48
,
48
,
49
,
49
,
50
,
51
,
51
,
52
,
52
,
53
,
54
,
54
,
55
,
55
,
56
,
57
,
57
,
58
,
59
,
59
,
60
,
61
,
61
,
62
,
63
,
63
,
64
,
65
,
65
,
66
,
67
,
67
,
68
,
69
,
69
,
70
,
71
,
71
,
72
,
73
,
73
,
74
,
75
,
76
,
76
,
77
,
78
,
79
,
79
,
80
,
81
,
81
,
82
,
83
,
84
,
84
,
85
,
86
,
87
,
88
,
88
,
89
,
90
,
91
,
91
,
92
,
93
,
94
,
95
,
95
,
96
,
97
,
98
,
99
,
99
,
100
,
101
,
102
,
103
,
104
,
104
,
105
,
106
,
107
,
108
,
109
,
109
,
110
,
111
,
112
,
113
,
114
,
115
,
115
,
116
,
117
,
118
,
119
,
120
,
121
,
122
,
122
,
123
,
124
,
125
,
126
,
127
,
128
,
129
,
130
,
131
,
132
,
132
,
133
,
134
,
135
,
136
,
137
,
138
,
139
,
140
,
141
,
142
,
143
,
144
,
145
,
146
,
147
,
148
,
149
,
149
,
150
,
151
,
152
,
153
,
154
,
155
,
156
,
157
,
158
,
159
,
160
,
161
,
162
,
163
,
164
,
165
,
166
,
167
,
168
,
169
,
170
,
171
,
172
,
174
,
175
,
176
,
177
,
178
,
179
,
180
,
181
,
182
,
183
,
184
,
185
,
186
,
187
,
188
,
189
,
190
,
191
,
192
,
194
,
195
,
196
,
197
,
198
,
199
,
200
,
201
,
202
,
203
,
204
,
206
,
207
,
208
,
209
,
210
,
211
,
212
,
213
,
214
,
216
,
217
,
218
,
219
,
220
,
221
,
222
,
223
,
225
,
226
,
227
,
228
,
229
,
230
,
231
,
233
,
234
,
235
,
236
,
237
,
238
,
240
,
241
,
242
,
243
,
244
,
245
,
247
,
248
,
249
,
250
,
251
,
252
,
254
,
255
,
256
,
257
,
258
,
260
,
261
,
262
,
263
,
264
,
266
,
267
,
268
,
269
,
270
,
272
,
273
,
274
,
275
,
276
,
278
,
279
,
280
,
281
,
283
,
284
,
285
,
286
,
288
,
289
,
290
,
291
,
293
,
294
,
295
,
296
,
297
,
299
,
300
,
301
,
302
,
304
,
305
,
306
,
308
,
309
,
310
,
311
,
313
,
314
,
315
,
316
,
318
,
319
,
320
,
321
,
323
,
324
,
325
,
327
,
328
,
329
,
330
,
332
,
333
,
334
,
336
,
337
,
338
,
339
,
341
,
342
,
343
,
345
,
346
,
347
,
349
,
350
,
351
,
352
,
354
,
355
,
356
,
358
,
359
,
360
,
362
,
363
,
364
,
366
,
367
,
368
,
370
,
371
,
372
,
374
,
375
,
376
,
377
,
379
,
380
,
381
,
383
,
384
,
385
,
387
,
388
,
389
,
391
,
392
,
393
,
395
,
396
,
397
,
399
,
400
,
402
,
403
,
404
,
406
,
407
,
408
,
410
,
411
,
412
,
414
,
415
,
416
,
418
,
419
,
420
,
422
,
423
,
424
,
426
,
427
,
429
,
430
,
431
,
433
,
434
,
435
,
437
,
438
,
439
,
441
,
442
,
443
,
445
,
446
,
448
,
449
,
450
,
452
,
453
,
454
,
456
,
457
,
458
,
460
,
461
,
463
,
464
,
465
,
467
,
468
,
469
,
471
,
472
,
474
,
475
,
476
,
478
,
479
,
480
,
482
,
483
,
485
,
486
,
487
,
489
,
490
,
491
,
493
,
494
,
496
,
497
,
498
,
500
,
501
,
502
,
504
,
505
,
507
,
508
,
509
,
511
};
const
static
int8_t
comTable
[
6
][
3
]
=
{
{
1
,
-
1
,
0
},
{
1
,
0
,
-
1
},
{
0
,
1
,
-
1
},
{
-
1
,
1
,
0
},
{
-
1
,
0
,
1
},
{
0
,
-
1
,
1
}
};
#endif
/* SINELUT_H_ */
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment