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
Revision 14:02411880ffb9, committed 2013-03-12
- Comitter:
- kosaka
- Date:
- Tue Mar 12 04:32:22 2013 +0000
- Parent:
- 13:ba71733c11d7
- Commit message:
- 130303;
Changed in this revision
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(); // モータの機器定数等の設定, 制御器の初期化