Kosaka Lab
/
auto_tracking_car
auto tracking car
controller.h@0:2af3980d8cc8, 2016-06-14 (annotated)
- Committer:
- kosakaLab
- Date:
- Tue Jun 14 03:12:50 2016 +0000
- Revision:
- 0:2af3980d8cc8
ver 0.1;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kosakaLab | 0:2af3980d8cc8 | 1 | #ifndef __controller_h |
kosakaLab | 0:2af3980d8cc8 | 2 | #define __controller_h |
kosakaLab | 0:2af3980d8cc8 | 3 | |
kosakaLab | 0:2af3980d8cc8 | 4 | #define PI 3.14159265358979 // 円周率πの定義 |
kosakaLab | 0:2af3980d8cc8 | 5 | |
kosakaLab | 0:2af3980d8cc8 | 6 | /*********** 使用するポート、サンプル時間、制御ゲインなどの設定 (ここから) ***************/ |
kosakaLab | 0:2af3980d8cc8 | 7 | // タイマーのサンプル周期等 |
kosakaLab | 0:2af3980d8cc8 | 8 | #define TS0 0.002 // [s], timerTS0のサンプル時間(電流制御用) sampling time (priority highest: Ticker IRQ) of motor current i control PID using timer interrupt |
kosakaLab | 0:2af3980d8cc8 | 9 | #define TS1 0.002 // [s], timerTS1のサンプル時間(位置制御用) sampling time (priority high: RtosTimer) of motor angle th PID using rtos-timer |
kosakaLab | 0:2af3980d8cc8 | 10 | #define TS2 0.2 // [s], timerTS2のサンプル時間(不使用) sampling time (priority =main(): precision 4ms) to save data to PC using thread. But, max data length is 1000. |
kosakaLab | 0:2af3980d8cc8 | 11 | #define TS3 0.002 // [s], timerTS3のサンプル時間(データセーブ用) sampling time (priority low: precision 4ms) |
kosakaLab | 0:2af3980d8cc8 | 12 | #define TS4 0.2 // [s], timerTS4のサンプル時間(モニタ表示用) sampling time (priority lowest: precision 4ms) to display data to PC tera term |
kosakaLab | 0:2af3980d8cc8 | 13 | #define TMAX 5.0 // [s], プログラム開始から終了までの時間 experiment starts from 0[s] to TMAX[s] |
kosakaLab | 0:2af3980d8cc8 | 14 | #define N_DATA 1000 // PC上のmbed USB ディスクにセーブするデータの数 |
kosakaLab | 0:2af3980d8cc8 | 15 | |
kosakaLab | 0:2af3980d8cc8 | 16 | #define DA_PORT p18 // デバッグ用DAポート analog out (DA) port of mbed |
kosakaLab | 0:2af3980d8cc8 | 17 | /*********** 使用するポートやサンプル時間、制御ゲインなどの設定 (ここから) ***************/ |
kosakaLab | 0:2af3980d8cc8 | 18 | |
kosakaLab | 0:2af3980d8cc8 | 19 | // 制御器 K(s) の定数、変数の宣言 |
kosakaLab | 0:2af3980d8cc8 | 20 | typedef struct struct_controller_parameters{ |
kosakaLab | 0:2af3980d8cc8 | 21 | float y; // 出力(制御量) |
kosakaLab | 0:2af3980d8cc8 | 22 | float r; // 目標値 |
kosakaLab | 0:2af3980d8cc8 | 23 | float u; // 制御入力 |
kosakaLab | 0:2af3980d8cc8 | 24 | float eI; // 偏差eの積分値(積分項) |
kosakaLab | 0:2af3980d8cc8 | 25 | float e_old; // 偏差eの1サンプル過去の値 |
kosakaLab | 0:2af3980d8cc8 | 26 | float eI_old; // 偏差eの積分値の1サンプル過去の値 |
kosakaLab | 0:2af3980d8cc8 | 27 | }controller_parameters; |
kosakaLab | 0:2af3980d8cc8 | 28 | |
kosakaLab | 0:2af3980d8cc8 | 29 | // タイマー宣言 |
kosakaLab | 0:2af3980d8cc8 | 30 | extern void timerTS0(); // TS0[s]ごとにコールされるタイマー timer called every TS0[s]. |
kosakaLab | 0:2af3980d8cc8 | 31 | extern void timerTS1(void const *argument); // TS1[s]ごとにコールされるタイマー timer called every TS1[s]. |
kosakaLab | 0:2af3980d8cc8 | 32 | extern void timerTS2(); // TS2[s]ごとにコールされるタイマー timer called every TS2[s]. |
kosakaLab | 0:2af3980d8cc8 | 33 | extern void timerTS3(); // TS3[s]ごとにコールされるタイマー timer called every TS3[s]. |
kosakaLab | 0:2af3980d8cc8 | 34 | extern void timerTS4(); // TS4[s]ごとにコールされるタイマー timer called every TS4[s]. |
kosakaLab | 0:2af3980d8cc8 | 35 | |
kosakaLab | 0:2af3980d8cc8 | 36 | extern void init_parameters(); // モータの機器定数等の設定, 制御器の初期化する関数の宣言 |
kosakaLab | 0:2af3980d8cc8 | 37 | |
kosakaLab | 0:2af3980d8cc8 | 38 | extern unsigned long _countTS0; // TS0[s]ごとのカウント数 |
kosakaLab | 0:2af3980d8cc8 | 39 | extern float _time; // [s], プログラム開始時からの経過時間 |
kosakaLab | 0:2af3980d8cc8 | 40 | |
kosakaLab | 0:2af3980d8cc8 | 41 | extern controller_parameters K[2]; // 制御器の定数、変数 |
kosakaLab | 0:2af3980d8cc8 | 42 | |
kosakaLab | 0:2af3980d8cc8 | 43 | extern float data[][5]; // PC上のmbed USB ディスクにセーブするデータ // memory to save data offline instead of "online fprintf". |
kosakaLab | 0:2af3980d8cc8 | 44 | extern unsigned short _countTS3_data; // data[i][5]のカウンタ |
kosakaLab | 0:2af3980d8cc8 | 45 | |
kosakaLab | 0:2af3980d8cc8 | 46 | #endif |