Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
SCforMatlab.h@0:0b57d295ca56, 2020-12-24 (annotated)
- Committer:
- mrtkhmbed
- Date:
- Thu Dec 24 08:35:33 2020 +0000
- Revision:
- 0:0b57d295ca56
SCforMatlab
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mrtkhmbed | 0:0b57d295ca56 | 1 | #ifndef _INCLUDE_MOTORMEASURE_H_ |
| mrtkhmbed | 0:0b57d295ca56 | 2 | #define _INCLUDE_MOTORMEASURE_H_ |
| mrtkhmbed | 0:0b57d295ca56 | 3 | #define MEASURE_CW 0 |
| mrtkhmbed | 0:0b57d295ca56 | 4 | #define MEASURE_CCW 1 |
| mrtkhmbed | 0:0b57d295ca56 | 5 | #define GEER 1.0 //回転を制御したい軸とエンコーダーの付いてる軸が異なる場合に |
| mrtkhmbed | 0:0b57d295ca56 | 6 | class SCforMatlab //制御周期が0.01s以上を想定。それ以上細かい制御周期では使えない |
| mrtkhmbed | 0:0b57d295ca56 | 7 | { |
| mrtkhmbed | 0:0b57d295ca56 | 8 | private: |
| mrtkhmbed | 0:0b57d295ca56 | 9 | //////////////////////////////// |
| mrtkhmbed | 0:0b57d295ca56 | 10 | int size; |
| mrtkhmbed | 0:0b57d295ca56 | 11 | float duty; |
| mrtkhmbed | 0:0b57d295ca56 | 12 | float delta_t; |
| mrtkhmbed | 0:0b57d295ca56 | 13 | int save_count; |
| mrtkhmbed | 0:0b57d295ca56 | 14 | int duty_count; |
| mrtkhmbed | 0:0b57d295ca56 | 15 | float turn_time; |
| mrtkhmbed | 0:0b57d295ca56 | 16 | // float *omega; //Matlab用に出力を記録。fが正転の測定分でbが逆転の測定分 |
| mrtkhmbed | 0:0b57d295ca56 | 17 | // float *input_duty; //Matlab用に入力を記録 |
| mrtkhmbed | 0:0b57d295ca56 | 18 | float omega[3500]; //Matlab用に出力を記録 |
| mrtkhmbed | 0:0b57d295ca56 | 19 | float input_duty[3500]; //Matlab用に入力を記録 |
| mrtkhmbed | 0:0b57d295ca56 | 20 | float least_squares[18][2]; //最小二乗法用に測定(データは0~0.8取得しているが計算では指定した範囲(デフォルト0.1~0.7)を使う) |
| mrtkhmbed | 0:0b57d295ca56 | 21 | int measure_mode; //正転計測時0で逆転計測時1 |
| mrtkhmbed | 0:0b57d295ca56 | 22 | Ec *ec_; |
| mrtkhmbed | 0:0b57d295ca56 | 23 | ////////////////////////////////速度制御のC値,D値計算周り。 |
| mrtkhmbed | 0:0b57d295ca56 | 24 | float start_cal; |
| mrtkhmbed | 0:0b57d295ca56 | 25 | float end_cal; |
| mrtkhmbed | 0:0b57d295ca56 | 26 | float cf_; |
| mrtkhmbed | 0:0b57d295ca56 | 27 | float df_; |
| mrtkhmbed | 0:0b57d295ca56 | 28 | float cb_; |
| mrtkhmbed | 0:0b57d295ca56 | 29 | float db_; |
| mrtkhmbed | 0:0b57d295ca56 | 30 | public: |
| mrtkhmbed | 0:0b57d295ca56 | 31 | PwmOut forward; |
| mrtkhmbed | 0:0b57d295ca56 | 32 | PwmOut back; |
| mrtkhmbed | 0:0b57d295ca56 | 33 | Ticker ticker_; |
| mrtkhmbed | 0:0b57d295ca56 | 34 | SCforMatlab(PinName pwm_F,PinName pwm_B,float period_us,Ec &ec,float dt);//dtには速度制御(Sc)を実際に使うときに繰り返す周期を入れる(0.05とか0.01とか) |
| mrtkhmbed | 0:0b57d295ca56 | 35 | void saveOmega(); |
| mrtkhmbed | 0:0b57d295ca56 | 36 | void motorTurn(float out); |
| mrtkhmbed | 0:0b57d295ca56 | 37 | void measureTurn(); |
| mrtkhmbed | 0:0b57d295ca56 | 38 | void showOmega(); |
| mrtkhmbed | 0:0b57d295ca56 | 39 | ////////////////////////////////////////////////////////////////C,D値計算周りの関数 |
| mrtkhmbed | 0:0b57d295ca56 | 40 | void setCDRange(float start,float end);//最小二乗法に使う範囲を0.05刻みで決める |
| mrtkhmbed | 0:0b57d295ca56 | 41 | void calC_Dvalue();//速度制御のC値,D値を計算して表示してくれる。 |
| mrtkhmbed | 0:0b57d295ca56 | 42 | //////////////////////////////////////////////////////////////////// |
| mrtkhmbed | 0:0b57d295ca56 | 43 | void measureMotor();/////測定し、結果がprintfされる。 |
| mrtkhmbed | 0:0b57d295ca56 | 44 | //////////////////////////使い方/////////////////////////////////////// |
| mrtkhmbed | 0:0b57d295ca56 | 45 | //1:まずエンコーダーとモーターの向きを合わせる。pwm_Fピンから入力したときにエンコーダーが増えてく方向推奨。 |
| mrtkhmbed | 0:0b57d295ca56 | 46 | //2:measureMotor()を一回処理するとモーターが回って、測定が始まる |
| mrtkhmbed | 0:0b57d295ca56 | 47 | //3:出てきたデータを全部エクセルなどにコピペ(Matlabに取り込むときにエクセルファイルである必要があるので) |
| mrtkhmbed | 0:0b57d295ca56 | 48 | //////出てきたデータについて |
| mrtkhmbed | 0:0b57d295ca56 | 49 | //////まずMatlab用の入出力データが表示される。最後にSpeedControllerライブラリで必要なC,D値が出力される。 |
| mrtkhmbed | 0:0b57d295ca56 | 50 | //////記録の意味もあるのでエクセルに全部コピペ推奨ですが、最後のSC用の部分はMatlabでは使わないです。 |
| mrtkhmbed | 0:0b57d295ca56 | 51 | //4:MatlabでPIDの係数を算出する。 |
| mrtkhmbed | 0:0b57d295ca56 | 52 | //5:以上でSC用のC,D値とPIDの係数が算出される。 |
| mrtkhmbed | 0:0b57d295ca56 | 53 | }; |
| mrtkhmbed | 0:0b57d295ca56 | 54 | #endif |
| mrtkhmbed | 0:0b57d295ca56 | 55 | |
| mrtkhmbed | 0:0b57d295ca56 | 56 | |
| mrtkhmbed | 0:0b57d295ca56 | 57 | |
| mrtkhmbed | 0:0b57d295ca56 | 58 | |
| mrtkhmbed | 0:0b57d295ca56 | 59 | |
| mrtkhmbed | 0:0b57d295ca56 | 60 | |
| mrtkhmbed | 0:0b57d295ca56 | 61 | |
| mrtkhmbed | 0:0b57d295ca56 | 62 | |
| mrtkhmbed | 0:0b57d295ca56 | 63 | |
| mrtkhmbed | 0:0b57d295ca56 | 64 | |
| mrtkhmbed | 0:0b57d295ca56 | 65 | |
| mrtkhmbed | 0:0b57d295ca56 | 66 | |
| mrtkhmbed | 0:0b57d295ca56 | 67 | |
| mrtkhmbed | 0:0b57d295ca56 | 68 | |
| mrtkhmbed | 0:0b57d295ca56 | 69 |