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:
Wed Feb 10 21:59:00 2021 +0000
Branch:
MPU-9250-MagSensServo
Revision:
11:f23a77c2296d
Parent:
9:b32312aacbba
e

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 8:07c3cb01a5b6 9 //
mfurukawa 8:07c3cb01a5b6 10 // Maximum-Length Tap Position and Number of taps
mfurukawa 8:07c3cb01a5b6 11 // http://wista.jp/M-Seq.htm
mfurukawa 8:07c3cb01a5b6 12 //
mfurukawa 8:07c3cb01a5b6 13 // 既約多項式
mfurukawa 8:07c3cb01a5b6 14 // https://www.nagoya-bunri.ac.jp//~t-ymzm/rand/rand_mseq4.html
mfurukawa 1:3bcd844dd707 15
mfurukawa 1:3bcd844dd707 16 #ifndef __M_SERIES_H__
mfurukawa 1:3bcd844dd707 17 #define __M_SERIES_H__
mfurukawa 1:3bcd844dd707 18
mfurukawa 1:3bcd844dd707 19 #define MSeries_N 16
mfurukawa 1:3bcd844dd707 20
mfurukawa 1:3bcd844dd707 21 // m-series definition
mfurukawa 1:3bcd844dd707 22 class Mseries
mfurukawa 1:3bcd844dd707 23 {
mfurukawa 1:3bcd844dd707 24 private:
mfurukawa 1:3bcd844dd707 25 uint8_t M[MSeries_N];
mfurukawa 1:3bcd844dd707 26 uint8_t H[MSeries_N];
mfurukawa 1:3bcd844dd707 27
mfurukawa 1:3bcd844dd707 28 public:
mfurukawa 1:3bcd844dd707 29 Mseries()
mfurukawa 1:3bcd844dd707 30 {
mfurukawa 8:07c3cb01a5b6 31 init();
mfurukawa 8:07c3cb01a5b6 32 }
mfurukawa 8:07c3cb01a5b6 33
mfurukawa 8:07c3cb01a5b6 34 void init(void)
mfurukawa 8:07c3cb01a5b6 35 {
mfurukawa 1:3bcd844dd707 36 // the following initial values are not validated
mfurukawa 1:3bcd844dd707 37 M[0] = 0;
mfurukawa 1:3bcd844dd707 38 M[1] = 0;
mfurukawa 1:3bcd844dd707 39 M[2] = 0;
mfurukawa 1:3bcd844dd707 40 M[3] = 1;
mfurukawa 1:3bcd844dd707 41 M[4] = 0;
mfurukawa 1:3bcd844dd707 42 M[5] = 0;
mfurukawa 1:3bcd844dd707 43 M[6] = 0;
mfurukawa 1:3bcd844dd707 44 M[7] = 1;
mfurukawa 1:3bcd844dd707 45 M[8] = 0;
mfurukawa 1:3bcd844dd707 46 M[9] = 0;
mfurukawa 1:3bcd844dd707 47 M[10] = 0;
mfurukawa 1:3bcd844dd707 48 M[11] = 1;
mfurukawa 1:3bcd844dd707 49 M[12] = 0;
mfurukawa 1:3bcd844dd707 50 M[13] = 0;
mfurukawa 1:3bcd844dd707 51 M[14] = 0;
mfurukawa 1:3bcd844dd707 52 M[15] = 1;
mfurukawa 1:3bcd844dd707 53
mfurukawa 8:07c3cb01a5b6 54 // Maximum-Length Tap Position and Number of taps
mfurukawa 8:07c3cb01a5b6 55 // http://www5b.biglobe.ne.jp/~pisan/radio-Msequence.htm
mfurukawa 8:07c3cb01a5b6 56 //
mfurukawa 9:b32312aacbba 57 H[0] = 1;
mfurukawa 1:3bcd844dd707 58 H[1] = 0;
mfurukawa 8:07c3cb01a5b6 59 H[2] = 1;
mfurukawa 8:07c3cb01a5b6 60 H[3] = 0;
mfurukawa 9:b32312aacbba 61
mfurukawa 9:b32312aacbba 62 H[4] = 0;
mfurukawa 1:3bcd844dd707 63 H[5] = 0;
mfurukawa 1:3bcd844dd707 64 H[6] = 0;
mfurukawa 8:07c3cb01a5b6 65 H[7] = 0;
mfurukawa 9:b32312aacbba 66
mfurukawa 9:b32312aacbba 67 H[8] = 0;
mfurukawa 8:07c3cb01a5b6 68 H[9] = 0;
mfurukawa 1:3bcd844dd707 69 H[10] = 0;
mfurukawa 1:3bcd844dd707 70 H[11] = 1;
mfurukawa 9:b32312aacbba 71
mfurukawa 8:07c3cb01a5b6 72 H[12] = 0;
mfurukawa 1:3bcd844dd707 73 H[13] = 0;
mfurukawa 1:3bcd844dd707 74 H[14] = 0;
mfurukawa 1:3bcd844dd707 75 H[15] = 1;
mfurukawa 9:b32312aacbba 76
mfurukawa 1:3bcd844dd707 77 }
mfurukawa 1:3bcd844dd707 78
mfurukawa 1:3bcd844dd707 79 uint8_t update(void)
mfurukawa 1:3bcd844dd707 80 {
mfurukawa 1:3bcd844dd707 81 // update M-series
mfurukawa 1:3bcd844dd707 82 uint8_t Mtmp = M[0] * H[0];
mfurukawa 1:3bcd844dd707 83
mfurukawa 1:3bcd844dd707 84 // one left-shifting on ring buffer
mfurukawa 1:3bcd844dd707 85 M[0] = M[1];
mfurukawa 1:3bcd844dd707 86
mfurukawa 1:3bcd844dd707 87 // take sequential XOR on the entire sequence
mfurukawa 1:3bcd844dd707 88 for (int i = 1 ; i < MSeries_N - 1 ; i++) {
mfurukawa 1:3bcd844dd707 89 // XOR
mfurukawa 1:3bcd844dd707 90 Mtmp = (Mtmp + M[i] * H[i]) % 2;
mfurukawa 1:3bcd844dd707 91
mfurukawa 1:3bcd844dd707 92 // one left-shifting on ring buffer
mfurukawa 1:3bcd844dd707 93 M[i] = M[i + 1];
mfurukawa 1:3bcd844dd707 94 }
mfurukawa 1:3bcd844dd707 95
mfurukawa 1:3bcd844dd707 96 // store the latest value at the last
mfurukawa 1:3bcd844dd707 97 M[MSeries_N - 1] = Mtmp;
mfurukawa 1:3bcd844dd707 98
mfurukawa 9:b32312aacbba 99 return get();
mfurukawa 9:b32312aacbba 100 }
mfurukawa 9:b32312aacbba 101
mfurukawa 9:b32312aacbba 102 uint8_t get(void)
mfurukawa 9:b32312aacbba 103 {
mfurukawa 9:b32312aacbba 104 return M[15];
mfurukawa 1:3bcd844dd707 105 }
mfurukawa 1:3bcd844dd707 106 };
mfurukawa 1:3bcd844dd707 107
mfurukawa 1:3bcd844dd707 108
mfurukawa 1:3bcd844dd707 109 #endif // __M_SERIES_H__