DC motor control program using TA7291P type H bridge driver and rotary encoder with A, B phase.

Dependencies:   QEI mbed-rtos mbed

Fork of DCmotor by manabu kosaka

Files at this revision

API Documentation at this revision

Comitter:
kosaka
Date:
Tue Mar 12 04:32:22 2013 +0000
Parent:
13:ba71733c11d7
Commit message:
130303;

Changed in this revision

Hbridge.h Show annotated file Show diff for this revision Revisions of this file
controller.cpp Show annotated file Show diff for this revision Revisions of this file
controller.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r ba71733c11d7 -r 02411880ffb9 Hbridge.h
--- a/Hbridge.h	Fri Mar 01 02:10:59 2013 +0000
+++ b/Hbridge.h	Tue Mar 12 04:32:22 2013 +0000
@@ -2,7 +2,7 @@
 #define __Hbridge_h
 
 //*************  使用するポートなどの設定 (ここから) *****************
-#define PWM_FREQ 20000.0   // [Hz], PWMチョッピング周波数    pwm freq. (> 1/(DEAD_TIME*10))
+#define PWM_FREQ 10000.0   // [Hz], PWMチョッピング周波数    pwm freq. (> 1/(DEAD_TIME*10))
 #define DEADTIME 0.0001    // [s], デッドタイム(モータに加える電圧の正負が変わるときに上下アーム短絡を避けるために同時オフする時間)    // [s], deadtime to be set between plus volt. to/from minus
 #define fwdIN_PORT    p21  //LED1    // ポート:fwdIN    port for U phase fwdIN arm
 #define rvsIN_PORT    p22  // ポート:rvsIN    port for U phase rvsIN arm
diff -r ba71733c11d7 -r 02411880ffb9 controller.cpp
--- a/controller.cpp	Fri Mar 01 02:10:59 2013 +0000
+++ b/controller.cpp	Tue Mar 12 04:32:22 2013 +0000
@@ -135,6 +135,7 @@
     float  e, ed;
 
     e = vl.w_ref - vl.w_lpf;        // 速度偏差の計算
+debug[1]=vl.w_ref/2/PI;//[Hz], for debug
 
     vl.eI = vl.eI + TS1*e;          // 速度偏差の積分値の計算
 
@@ -243,7 +244,7 @@
 
 void data2mbedUSB(){    // PC上のmbed USB ディスクにセーブするためのデータをTS3[s]ごとに代入    save data to mbed USB drive 
     if( _countTS3<1000 ){   // データ数が1,000の5種類のデータをメモリーに貯める
-        data[_countTS3][0]=p.th[0]/*vl.w_ref*/; data[_countTS3][1]=debug[0];
+        data[_countTS3][0]=debug[0]; data[_countTS3][1]=debug[1];
         data[_countTS3][2]=vl.w_lpf; data[_countTS3][3]=_countTS0*TS0; data[_countTS3][4]=il.v_ref;
         _countTS3++;
     }
diff -r ba71733c11d7 -r 02411880ffb9 controller.h
--- a/controller.h	Fri Mar 01 02:10:59 2013 +0000
+++ b/controller.h	Tue Mar 12 04:32:22 2013 +0000
@@ -16,7 +16,7 @@
 #define CH_B    p30         // B相用ポート   A phase port
 
     // タイマーのサンプル周期等
-//#define PWM_FREQ 20000.0   // [Hz], PWMチョッピング周波数  pwm freq. (> 1/(DEAD_TIME*10))
+//#define PWM_FREQ 10000.0   // [Hz], PWMチョッピング周波数  pwm freq. (> 1/(DEAD_TIME*10))
 //#define DEADTIME 0.0001    // [s], デッドタイム(モータに加える電圧の正負が変わるときに上下アーム短絡を避けるために同時オフする時間)  // [s], deadtime to be set between plus volt. to/from minus
 #define TS0     0.002      // [s], timerTS0のサンプル時間(電流制御用)   sampling time (priority highest: Ticker IRQ) of motor current i control PID using timer interrupt
 #define TS1     0.002      // [s], timerTS1のサンプル時間(位置制御用)   sampling time (priority high: RtosTimer) of motor angle th PID using rtos-timer
@@ -44,10 +44,10 @@
 #else                       // 電流制御なしのとき
  #define wKp 0.05               // [A/(rad/s)], 速度制御PIDのPゲイン
  #define wKi 0.5//2.50          // [A/(rad/s) s], 速度制御PIDのIゲイン
- #define wKd 0                  // [A/(rad/s)/s], 速度制御PIDのDゲイン
+ #define wKd 0.0005                // [A/(rad/s)/s], 速度制御PIDのDゲイン
 #endif
 #define iLPF   0.95         // 0-1, 速度に対する1次LPFの強さ; Low Pass Filter, G(z)=(1-a)/(z-a)
-#define iMAX   3.3          // [A], 電流指令の最大値
+#define iMAX   1.0//3.3          // [A], 電流指令の最大値
 
 #define DA_PORT p18         // デバッグ用DAポート   analog out (DA) port of mbed
 /*********** 使用するポートやサンプル時間、制御ゲインなどの設定 (ここから) ***************/
diff -r ba71733c11d7 -r 02411880ffb9 main.cpp
--- a/main.cpp	Fri Mar 01 02:10:59 2013 +0000
+++ b/main.cpp	Tue Mar 12 04:32:22 2013 +0000
@@ -79,7 +79,7 @@
 //  osPriorityHigh          = +2,          ///< priority: high 
 //  osPriorityRealtime      = +3,          ///< priority: realtime (highest)
 //  osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority
-    float  w_ref_req[2] = {2* 2*PI, 4* 2*PI};   // [rad/s], 指令速度(第2要素は指令速度急変後の指令速度)
+    float  w_ref_req[2] = {2* 2*PI, 10* 2*PI};   // [rad/s], 指令速度(第2要素は指令速度急変後の指令速度)
     float  t;   // [s], 現在の時間
 
     init_parameters();  // モータの機器定数等の設定, 制御器の初期化