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:46:13 2021 +0000
Branch:
MPU-9250-MagSensServo
Revision:
2:3470f2c07582
Parent:
1:3bcd844dd707
Child:
8:07c3cb01a5b6
M-Series Servo Works

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 // the following initial values are not validated
mfurukawa 1:3bcd844dd707 27 M[0] = 0;
mfurukawa 1:3bcd844dd707 28 M[1] = 0;
mfurukawa 1:3bcd844dd707 29 M[2] = 0;
mfurukawa 1:3bcd844dd707 30 M[3] = 1;
mfurukawa 1:3bcd844dd707 31 M[4] = 0;
mfurukawa 1:3bcd844dd707 32 M[5] = 0;
mfurukawa 1:3bcd844dd707 33 M[6] = 0;
mfurukawa 1:3bcd844dd707 34 M[7] = 1;
mfurukawa 1:3bcd844dd707 35 M[8] = 0;
mfurukawa 1:3bcd844dd707 36 M[9] = 0;
mfurukawa 1:3bcd844dd707 37 M[10] = 0;
mfurukawa 1:3bcd844dd707 38 M[11] = 1;
mfurukawa 1:3bcd844dd707 39 M[12] = 0;
mfurukawa 1:3bcd844dd707 40 M[13] = 0;
mfurukawa 1:3bcd844dd707 41 M[14] = 0;
mfurukawa 1:3bcd844dd707 42 M[15] = 1;
mfurukawa 1:3bcd844dd707 43
mfurukawa 1:3bcd844dd707 44 // the following initial values are not validated
mfurukawa 1:3bcd844dd707 45 H[0] = 1;
mfurukawa 1:3bcd844dd707 46 H[1] = 0;
mfurukawa 1:3bcd844dd707 47 H[2] = 0;
mfurukawa 1:3bcd844dd707 48 H[3] = 1;
mfurukawa 1:3bcd844dd707 49 H[4] = 1;
mfurukawa 1:3bcd844dd707 50 H[5] = 0;
mfurukawa 1:3bcd844dd707 51 H[6] = 0;
mfurukawa 1:3bcd844dd707 52 H[7] = 1;
mfurukawa 1:3bcd844dd707 53 H[8] = 1;
mfurukawa 1:3bcd844dd707 54 H[9] = 0;
mfurukawa 1:3bcd844dd707 55 H[10] = 0;
mfurukawa 1:3bcd844dd707 56 H[11] = 1;
mfurukawa 1:3bcd844dd707 57 H[12] = 1;
mfurukawa 1:3bcd844dd707 58 H[13] = 0;
mfurukawa 1:3bcd844dd707 59 H[14] = 0;
mfurukawa 1:3bcd844dd707 60 H[15] = 1;
mfurukawa 1:3bcd844dd707 61 }
mfurukawa 1:3bcd844dd707 62
mfurukawa 1:3bcd844dd707 63 uint8_t update(void)
mfurukawa 1:3bcd844dd707 64 {
mfurukawa 1:3bcd844dd707 65 // update M-series
mfurukawa 1:3bcd844dd707 66 uint8_t Mtmp = M[0] * H[0];
mfurukawa 1:3bcd844dd707 67
mfurukawa 1:3bcd844dd707 68 // one left-shifting on ring buffer
mfurukawa 1:3bcd844dd707 69 M[0] = M[1];
mfurukawa 1:3bcd844dd707 70
mfurukawa 1:3bcd844dd707 71 // take sequential XOR on the entire sequence
mfurukawa 1:3bcd844dd707 72 for (int i = 1 ; i < MSeries_N - 1 ; i++) {
mfurukawa 1:3bcd844dd707 73 // XOR
mfurukawa 1:3bcd844dd707 74 Mtmp = (Mtmp + M[i] * H[i]) % 2;
mfurukawa 1:3bcd844dd707 75
mfurukawa 1:3bcd844dd707 76 // one left-shifting on ring buffer
mfurukawa 1:3bcd844dd707 77 M[i] = M[i + 1];
mfurukawa 1:3bcd844dd707 78 }
mfurukawa 1:3bcd844dd707 79
mfurukawa 1:3bcd844dd707 80 // store the latest value at the last
mfurukawa 1:3bcd844dd707 81 M[MSeries_N - 1] = Mtmp;
mfurukawa 1:3bcd844dd707 82
mfurukawa 1:3bcd844dd707 83 return Mtmp;
mfurukawa 1:3bcd844dd707 84 }
mfurukawa 1:3bcd844dd707 85 };
mfurukawa 1:3bcd844dd707 86
mfurukawa 1:3bcd844dd707 87
mfurukawa 1:3bcd844dd707 88 #endif // __M_SERIES_H__