2Chx3dof Magnetrometer supported M-Series Random Sequence Generator Servo Control

Dependencies:   mbed

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

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?

UserRevisionLine numberNew 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__