2Chx3dof Magnetrometer supported M-Series Random Sequence Generator Servo Control
Sampling Frequency
Sampling Frequency in main.cpp
#define SampleFreq 200 // [Hz]
Auto Stop Setting
Auto-stop Timer 15sec after
// auto-stop when 15sec after if(smpl_cnt>3000){stop_dump();}
The number of 3000 means Sample Count. The number is given by SampleFreq[Hz] * Auto-Stop Time [sec].
M-Series Random Sequence
M-series Random Update Term in main.cpp
// M-series update flag #define M_TERM 200;
Unit is sample count.
cf.) 200 equals to 200 [samples] which equals to 1 [second] where SampleFreq = 200 [Hz}.
See above.
M-Series Random Servo Control
M-Series.h@1:3bcd844dd707, 2021-02-02 (annotated)
- Committer:
- mfurukawa
- Date:
- Tue Feb 02 13:43:21 2021 +0000
- Branch:
- MPU-9250-MagSensServo
- Revision:
- 1:3bcd844dd707
- Child:
- 2:3470f2c07582
PWM Servo bug fixed;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mfurukawa | 1:3bcd844dd707 | 1 | // |
mfurukawa | 1:3bcd844dd707 | 2 | // M-Series Random Sequence Generator |
mfurukawa | 1:3bcd844dd707 | 3 | // |
mfurukawa | 1:3bcd844dd707 | 4 | // Masahiro Furukawa, m.furukawa@ist.osaka-u.ac.jp |
mfurukawa | 1:3bcd844dd707 | 5 | // Feb 2, 2021 |
mfurukawa | 1:3bcd844dd707 | 6 | |
mfurukawa | 1:3bcd844dd707 | 7 | // m-sequence |
mfurukawa | 1:3bcd844dd707 | 8 | // https://okasho-engineer.com/m-sequence/ |
mfurukawa | 1:3bcd844dd707 | 9 | |
mfurukawa | 1:3bcd844dd707 | 10 | |
mfurukawa | 1:3bcd844dd707 | 11 | #ifndef __M_SERIES_H__ |
mfurukawa | 1:3bcd844dd707 | 12 | #define __M_SERIES_H__ |
mfurukawa | 1:3bcd844dd707 | 13 | |
mfurukawa | 1:3bcd844dd707 | 14 | #define MSeries_N 16 |
mfurukawa | 1:3bcd844dd707 | 15 | |
mfurukawa | 1:3bcd844dd707 | 16 | // m-series definition |
mfurukawa | 1:3bcd844dd707 | 17 | class Mseries |
mfurukawa | 1:3bcd844dd707 | 18 | { |
mfurukawa | 1:3bcd844dd707 | 19 | private: |
mfurukawa | 1:3bcd844dd707 | 20 | uint8_t M[MSeries_N]; |
mfurukawa | 1:3bcd844dd707 | 21 | uint8_t H[MSeries_N]; |
mfurukawa | 1:3bcd844dd707 | 22 | |
mfurukawa | 1:3bcd844dd707 | 23 | public: |
mfurukawa | 1:3bcd844dd707 | 24 | Mseries() |
mfurukawa | 1:3bcd844dd707 | 25 | { |
mfurukawa | 1:3bcd844dd707 | 26 | |
mfurukawa | 1:3bcd844dd707 | 27 | // the following initial values are not validated |
mfurukawa | 1:3bcd844dd707 | 28 | M[0] = 0; |
mfurukawa | 1:3bcd844dd707 | 29 | M[1] = 0; |
mfurukawa | 1:3bcd844dd707 | 30 | M[2] = 0; |
mfurukawa | 1:3bcd844dd707 | 31 | M[3] = 1; |
mfurukawa | 1:3bcd844dd707 | 32 | M[4] = 0; |
mfurukawa | 1:3bcd844dd707 | 33 | M[5] = 0; |
mfurukawa | 1:3bcd844dd707 | 34 | M[6] = 0; |
mfurukawa | 1:3bcd844dd707 | 35 | M[7] = 1; |
mfurukawa | 1:3bcd844dd707 | 36 | M[8] = 0; |
mfurukawa | 1:3bcd844dd707 | 37 | M[9] = 0; |
mfurukawa | 1:3bcd844dd707 | 38 | M[10] = 0; |
mfurukawa | 1:3bcd844dd707 | 39 | M[11] = 1; |
mfurukawa | 1:3bcd844dd707 | 40 | M[12] = 0; |
mfurukawa | 1:3bcd844dd707 | 41 | M[13] = 0; |
mfurukawa | 1:3bcd844dd707 | 42 | M[14] = 0; |
mfurukawa | 1:3bcd844dd707 | 43 | M[15] = 1; |
mfurukawa | 1:3bcd844dd707 | 44 | |
mfurukawa | 1:3bcd844dd707 | 45 | // the following initial values are not validated |
mfurukawa | 1:3bcd844dd707 | 46 | H[0] = 1; |
mfurukawa | 1:3bcd844dd707 | 47 | H[1] = 0; |
mfurukawa | 1:3bcd844dd707 | 48 | H[2] = 0; |
mfurukawa | 1:3bcd844dd707 | 49 | H[3] = 1; |
mfurukawa | 1:3bcd844dd707 | 50 | H[4] = 1; |
mfurukawa | 1:3bcd844dd707 | 51 | H[5] = 0; |
mfurukawa | 1:3bcd844dd707 | 52 | H[6] = 0; |
mfurukawa | 1:3bcd844dd707 | 53 | H[7] = 1; |
mfurukawa | 1:3bcd844dd707 | 54 | H[8] = 1; |
mfurukawa | 1:3bcd844dd707 | 55 | H[9] = 0; |
mfurukawa | 1:3bcd844dd707 | 56 | H[10] = 0; |
mfurukawa | 1:3bcd844dd707 | 57 | H[11] = 1; |
mfurukawa | 1:3bcd844dd707 | 58 | H[12] = 1; |
mfurukawa | 1:3bcd844dd707 | 59 | H[13] = 0; |
mfurukawa | 1:3bcd844dd707 | 60 | H[14] = 0; |
mfurukawa | 1:3bcd844dd707 | 61 | H[15] = 1; |
mfurukawa | 1:3bcd844dd707 | 62 | } |
mfurukawa | 1:3bcd844dd707 | 63 | |
mfurukawa | 1:3bcd844dd707 | 64 | uint8_t update(void) |
mfurukawa | 1:3bcd844dd707 | 65 | { |
mfurukawa | 1:3bcd844dd707 | 66 | // update M-series |
mfurukawa | 1:3bcd844dd707 | 67 | uint8_t Mtmp = M[0] * H[0]; |
mfurukawa | 1:3bcd844dd707 | 68 | |
mfurukawa | 1:3bcd844dd707 | 69 | // one left-shifting on ring buffer |
mfurukawa | 1:3bcd844dd707 | 70 | M[0] = M[1]; |
mfurukawa | 1:3bcd844dd707 | 71 | |
mfurukawa | 1:3bcd844dd707 | 72 | // take sequential XOR on the entire sequence |
mfurukawa | 1:3bcd844dd707 | 73 | for (int i = 1 ; i < MSeries_N - 1 ; i++) { |
mfurukawa | 1:3bcd844dd707 | 74 | // XOR |
mfurukawa | 1:3bcd844dd707 | 75 | Mtmp = (Mtmp + M[i] * H[i]) % 2; |
mfurukawa | 1:3bcd844dd707 | 76 | |
mfurukawa | 1:3bcd844dd707 | 77 | // one left-shifting on ring buffer |
mfurukawa | 1:3bcd844dd707 | 78 | M[i] = M[i + 1]; |
mfurukawa | 1:3bcd844dd707 | 79 | } |
mfurukawa | 1:3bcd844dd707 | 80 | |
mfurukawa | 1:3bcd844dd707 | 81 | // store the latest value at the last |
mfurukawa | 1:3bcd844dd707 | 82 | M[MSeries_N - 1] = Mtmp; |
mfurukawa | 1:3bcd844dd707 | 83 | |
mfurukawa | 1:3bcd844dd707 | 84 | return Mtmp; |
mfurukawa | 1:3bcd844dd707 | 85 | } |
mfurukawa | 1:3bcd844dd707 | 86 | }; |
mfurukawa | 1:3bcd844dd707 | 87 | |
mfurukawa | 1:3bcd844dd707 | 88 | |
mfurukawa | 1:3bcd844dd707 | 89 | #endif // __M_SERIES_H__ |