z ysaito / Mbed 2 deprecated CPro_DemoB1B2_4_ResAnaCtrl

Dependencies:   QEI mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers mcchk.cpp Source File

mcchk.cpp

00001 #include "mbed.h"
00002 #include "common.h"
00003 #include <math.h>
00004 #include "mcchk.h"
00005 
00006 
00007 // Motor current
00008 AnalogIn   mctr3_m2c(A5);  // LB crawler
00009 AnalogIn   mctr3_m1c(A4);  // RF crawler
00010 AnalogIn   mctr2_m2c(A3);  // LB transform
00011 AnalogIn   mctr2_m1c(A2);  // RF Transform
00012 AnalogIn   mctr1_m2c(A1);  // Tilt
00013 AnalogIn   mctr1_m1c(A0);  // B1: Pan, B2:Winch
00014 
00015 
00016 mcchk::mcchk()
00017 {
00018     cnt_mclock_LBCRW_f = 0;    // motor lock counter 
00019     cnt_mclock_LBCRW_r = 0;    // motor lock counter 
00020     cnt_mclock_RFCRW_f = 0;    // motor lock counter 
00021     cnt_mclock_RFCRW_r = 0;    // motor lock counter 
00022     cnt_mclock_LBTFM_f = 0;    // motor lock counter 
00023     cnt_mclock_LBTFM_r = 0;    // motor lock counter 
00024     cnt_mclock_RFTFM_f = 0;    // motor lock counter  
00025     cnt_mclock_RFTFM_r = 0;    // motor lock counter  
00026     cnt_mclock_CMPAN_f = 0;    // motor lock counter 
00027     cnt_mclock_CMPAN_r = 0;    // motor lock counter 
00028     cnt_mclock_CTILT_f = 0;    // motor lock counter 
00029     cnt_mclock_CTILT_r = 0;    // motor lock counter 
00030     cnt_mclock_WINCH_f = 0;    // motor lock counter  
00031     cnt_mclock_WINCH_r = 0;    // motor lock counter      
00032 }
00033 
00034 
00035 // --------------------------------------------------------------
00036 // Motor Current Calibration Function
00037 //   Arg: Motor Number 1 - 3
00038 // --------------------------------------------------------------
00039 void mcchk::set_init_mc( int cnt )
00040 {
00041 
00042     m_LBCRW_center_value = 0;
00043     m_RFCRW_center_value = 0;
00044     m_LBTFM_center_value = 0;
00045     m_RFTFM_center_value = 0;
00046     m_WINCH_center_value = 0;
00047     m_CMPAN_center_value = 0;
00048     m_CTILT_center_value = 0;
00049 
00050     for( int i = 0; i < cnt; i++ )
00051     {
00052         m_LBCRW_center_value += mctr3_m1c.read() * 100.0f;
00053         m_RFCRW_center_value += mctr3_m2c.read() * 100.0f;
00054         m_LBTFM_center_value += mctr2_m1c.read() * 100.0f;
00055         m_RFTFM_center_value += mctr2_m2c.read() * 100.0f;
00056         m_WINCH_center_value += mctr1_m1c.read() * 100.0f;
00057         m_CMPAN_center_value += mctr1_m1c.read() * 100.0f;
00058         m_CTILT_center_value += mctr1_m2c.read() * 100.0f;
00059     }
00060      
00061     m_LBCRW_center_value /= cnt;
00062     m_RFCRW_center_value /= cnt;
00063     m_LBTFM_center_value /= cnt;
00064     m_RFTFM_center_value /= cnt;
00065     m_WINCH_center_value /= cnt;
00066     m_CMPAN_center_value /= cnt;
00067     m_CTILT_center_value /= cnt;
00068 }
00069 
00070 
00071 float mcchk::rd_motorCurrent( int no )
00072 {
00073     if( no == 11 ) return mctr1_m1c.read()*100.0f;
00074     else if( no == 12 ) return mctr1_m2c.read()*100.0f;
00075     else if( no == 21 ) return mctr2_m1c.read()*100.0f;
00076     else if( no == 22 ) return mctr2_m2c.read()*100.0f;
00077     else if( no == 31 ) return mctr3_m1c.read()*100.0f;
00078     else if( no == 32 ) return mctr3_m2c.read()*100.0f;
00079     return 0;
00080 }
00081 
00082 
00083 bool mcchk::rdnchk_motorCurrent(
00084     int8_t  motor_number, 
00085     int8_t  motor_dir,
00086     int8_t  motor_lock_chk_cnt          
00087 ){
00088     bool    mcchk = false;     
00089     bool    rts = false;     
00090     
00091     // Check RF-Crawler
00092     if( motor_number == MOTOR_RFCRW )
00093     {
00094         if( motor_dir == MOTOR_DIR_FWD )
00095         {
00096             mcchk = chk_motor_lock( mctr3_m1c.read()*100.0f, m_RFCRW_center_value, mc_th_RFCRW_f);
00097             if( mcchk == true )
00098             {
00099                 cnt_mclock_RFCRW_f += 1;
00100             }
00101             else
00102             {   if( cnt_mclock_RFCRW_f  > 0 )
00103                 {
00104                     cnt_mclock_RFCRW_f -= 1;
00105                 }
00106                 else
00107                 {
00108                     cnt_mclock_RFCRW_f = 0;
00109                 }
00110             }        
00111             if( cnt_mclock_RFCRW_f > motor_lock_chk_cnt )
00112             {
00113                 flg_mclock_RFCRW = 1;
00114             }
00115             else
00116             {
00117                 flg_mclock_RFCRW = 0;
00118                 rts = false; // NO LOCK
00119             }
00120         }
00121         else
00122         {
00123             mcchk = chk_motor_lock( mctr3_m1c.read()*100.0f, m_RFCRW_center_value, mc_th_RFCRW_r);
00124             if( mcchk == true )
00125             {
00126                 cnt_mclock_RFCRW_r += 1;
00127             }
00128             else
00129             {   if( cnt_mclock_RFCRW_r  > 0 )
00130                 {
00131                     cnt_mclock_RFCRW_r -= 1;
00132                 }
00133                 else
00134                 {
00135                     cnt_mclock_RFCRW_r = 0;
00136                 }
00137             }        
00138             if( cnt_mclock_RFCRW_r > motor_lock_chk_cnt )
00139             {
00140                 flg_mclock_RFCRW = 1;
00141                 rts = true; // LOCK
00142             }
00143             else
00144             {
00145                 flg_mclock_RFCRW = 0;
00146                 rts = false; // NO LOCK
00147             }
00148         }
00149     }
00150     // Check LB-Crawler
00151     else if( motor_number == MOTOR_LBCRW )
00152     {
00153         if( motor_dir == MOTOR_DIR_FWD )
00154         {
00155             mcchk = chk_motor_lock( mctr3_m2c.read()*100.0f, m_LBCRW_center_value, mc_th_LBCRW_f);
00156             if( mcchk == true )
00157             {
00158                 cnt_mclock_LBCRW_f += 1;
00159             }
00160             else
00161             {   if( cnt_mclock_LBCRW_f  > 0 )
00162                 {
00163                     cnt_mclock_LBCRW_f -= 1;
00164                 }
00165                 else
00166                 {
00167                     cnt_mclock_LBCRW_f = 0;
00168                 }
00169             }
00170             if( cnt_mclock_LBCRW_f > motor_lock_chk_cnt )
00171             {
00172                 flg_mclock_LBCRW = 1;
00173                 rts = true; // LOCK
00174             }
00175             else
00176             {
00177                 flg_mclock_LBCRW = 0;
00178                 rts = false; // LOCK
00179             }
00180         }
00181         else
00182         {
00183             mcchk = chk_motor_lock( mctr3_m2c.read()*100.0f, m_LBCRW_center_value, mc_th_LBCRW_r);
00184             if( mcchk == true )
00185             {
00186                 cnt_mclock_LBCRW_r += 1;
00187             }
00188             else
00189             {   if( cnt_mclock_LBCRW_r  > 0 )
00190                 {
00191                     cnt_mclock_LBCRW_r -= 1;
00192                 }
00193                 else
00194                 {
00195                     cnt_mclock_LBCRW_r= 0;
00196                 }
00197             } 
00198             if( cnt_mclock_LBCRW_r > motor_lock_chk_cnt )
00199             {
00200                 flg_mclock_LBCRW = 1;
00201                 rts = true; // LOCK
00202             }
00203             else
00204             {
00205                 flg_mclock_LBCRW = 0;
00206                 rts = false; // LOCK
00207             }
00208         }
00209     }
00210     // Check RF-Crawler
00211     else if( motor_number == MOTOR_RFTFM )
00212     {
00213         if( motor_dir == MOTOR_DIR_FWD )
00214         {
00215             mcchk = chk_motor_lock( mctr2_m1c.read()*100.0f, m_RFTFM_center_value, mc_th_RFTFM_f);
00216             if( mcchk == true )
00217             {
00218                 cnt_mclock_RFTFM_f += 1;
00219             }
00220             else
00221             {   if( cnt_mclock_RFTFM_f  > 0 )
00222                 {
00223                     cnt_mclock_RFTFM_f -= 1;
00224                 }
00225                 else
00226                 {
00227                     cnt_mclock_RFTFM_f = 0;
00228                 }
00229             }        
00230             if( cnt_mclock_RFTFM_f > motor_lock_chk_cnt )
00231             {
00232                 flg_mclock_RFTFM = 1;
00233                 rts = true; // LOCK
00234             }
00235             else
00236             {
00237                 flg_mclock_RFTFM = 0;
00238                 rts = false; // LOCK
00239             }
00240         }
00241         else
00242         {
00243             rts = chk_motor_lock( mctr2_m1c.read()*100.0f, m_RFTFM_center_value, mc_th_RFTFM_r);
00244             if( rts == true )
00245             {
00246                 cnt_mclock_RFTFM_r += 1;
00247             }
00248             else
00249             {   if( cnt_mclock_RFTFM_r  > 0 )
00250                 {
00251                     cnt_mclock_RFTFM_r -= 1;
00252                 }
00253                 else
00254                 {
00255                     cnt_mclock_RFTFM_r = 0;
00256                 }
00257             }
00258             if( cnt_mclock_RFTFM_r > motor_lock_chk_cnt )
00259             {
00260                 flg_mclock_RFTFM = 1;
00261                 rts = true; // LOCK
00262             }
00263             else
00264             {
00265                 flg_mclock_RFTFM = 0;
00266                 rts = false; // LOCK
00267             }
00268         }
00269     }
00270     // Check LB-Transform
00271     else if( motor_number == MOTOR_LBTFM )
00272     {
00273         if( motor_dir == MOTOR_DIR_FWD )
00274         {
00275             mcchk = chk_motor_lock( mctr2_m2c.read()*100.0f, m_LBTFM_center_value, mc_th_LBTFM_f);
00276             if( mcchk == true )
00277             {
00278                 cnt_mclock_LBTFM_f += 1;
00279             }
00280             else
00281             {   if( cnt_mclock_LBTFM_f  > 0 )
00282                 {
00283                     cnt_mclock_LBTFM_f -= 1;
00284                 }
00285                 else
00286                 {
00287                     cnt_mclock_LBTFM_f = 0;
00288                 }
00289             }        
00290             if( cnt_mclock_LBTFM_f > motor_lock_chk_cnt )
00291             {
00292                 flg_mclock_LBTFM = 1;
00293                 rts = true; // LOCK
00294             }
00295             else
00296             {
00297                 flg_mclock_LBTFM = 0;
00298                 rts = false; // LOCK
00299             }
00300         }
00301         else
00302         {
00303             mcchk = chk_motor_lock( mctr2_m2c.read()*100.0f, m_LBTFM_center_value, mc_th_LBTFM_r);
00304             if( mcchk == true )
00305             {
00306                 cnt_mclock_LBTFM_r += 1;
00307             }
00308             else
00309             {   if( cnt_mclock_LBTFM_r  > 0 )
00310                 {
00311                     cnt_mclock_LBTFM_r -= 1;
00312                 }
00313                 else
00314                 {
00315                     cnt_mclock_LBTFM_r = 0;
00316                 }
00317             }        
00318             if( cnt_mclock_LBTFM_r > motor_lock_chk_cnt )
00319             {
00320                 flg_mclock_LBTFM = 1;
00321                 rts = true; // LOCK
00322             }
00323             else
00324             {
00325                 flg_mclock_LBTFM = 0;
00326                 rts = false; // LOCK
00327             }
00328         }
00329     }
00330 
00331     // Check Winch
00332     else if( motor_number == MOTOR_WINCH )
00333     {
00334         if( motor_dir == MOTOR_DIR_FWD )
00335         {
00336             mcchk= chk_motor_lock( mctr1_m1c.read()*100.0f, m_WINCH_center_value, mc_th_WINCH_f);
00337             if( mcchk == true )
00338             {
00339                 cnt_mclock_WINCH_f += 1;
00340             }
00341             else
00342             {   if( cnt_mclock_WINCH_f  > 0 )
00343                 {
00344                     cnt_mclock_WINCH_f -= 1;
00345                 }
00346                 else
00347                 {
00348                     cnt_mclock_WINCH_f = 0;
00349                 }
00350 
00351             }
00352              if( cnt_mclock_WINCH_f > motor_lock_chk_cnt )
00353             {
00354                 flg_mclock_WINCH = 1;
00355                 rts = true; // LOCK
00356             }
00357             else
00358             {
00359                 flg_mclock_WINCH = 0;
00360                 rts = false; // LOCK
00361             }
00362         }
00363         else
00364         {
00365             mcchk = chk_motor_lock( mctr1_m1c.read()*100.0f, m_WINCH_center_value, mc_th_WINCH_r);
00366             if( mcchk == true )
00367             {
00368                 cnt_mclock_WINCH_r += 1;
00369             }
00370             else
00371             {   if( cnt_mclock_WINCH_r  > 0 )
00372                 {
00373                     cnt_mclock_WINCH_r -= 1;
00374                 }
00375                 else
00376                 {
00377                     cnt_mclock_WINCH_r = 0;
00378                 }
00379             }
00380             if( cnt_mclock_WINCH_r > motor_lock_chk_cnt )
00381             {
00382                 flg_mclock_WINCH = 1;
00383                 rts = true; // LOCK
00384             }
00385             else
00386             {
00387                 flg_mclock_WINCH = 0;
00388                 rts = false; // LOCK
00389             }
00390         }
00391     }
00392     // Check Tilt
00393     else if( motor_number == MOTOR_CMPAN )
00394     {
00395         if( motor_dir == MOTOR_DIR_FWD )
00396         {
00397             mcchk = chk_motor_lock( mctr1_m1c.read()*100.0f, m_CMPAN_center_value, mc_th_CMPAN_f);
00398              if( mcchk == true )
00399             {
00400                 cnt_mclock_CMPAN_f += 1;
00401             }
00402             else
00403             {   if( cnt_mclock_CMPAN_f  > 0 )
00404                 {
00405                     cnt_mclock_CMPAN_f -= 1;
00406                 }
00407                 else
00408                 {
00409                     cnt_mclock_CMPAN_f = 0;
00410                 }
00411 
00412             }      
00413             if( cnt_mclock_CMPAN_f > motor_lock_chk_cnt )
00414             {
00415                 flg_mclock_CMPAN = 1;
00416                 rts = true; // LOCK
00417             }
00418             else
00419             {
00420                 flg_mclock_CMPAN = 0;
00421                 rts = false; // LOCK
00422             }
00423         }
00424         else
00425         {
00426             mcchk = chk_motor_lock( mctr1_m1c.read()*100.0f, m_CMPAN_center_value, mc_th_CMPAN_r);
00427             if( mcchk == true )
00428             {
00429                 cnt_mclock_CMPAN_r += 1;
00430             }
00431             else
00432             {   if( cnt_mclock_CMPAN_r  > 0 )
00433                 {
00434                     cnt_mclock_CMPAN_r -= 1;
00435                 }
00436                 else
00437                 {
00438                     cnt_mclock_CMPAN_r = 0;
00439                 }
00440             }
00441             if( cnt_mclock_CMPAN_r > motor_lock_chk_cnt )
00442             {
00443                 flg_mclock_CMPAN = 1;
00444                 rts = true; // LOCK
00445             }
00446             else
00447             {
00448                 flg_mclock_CMPAN = 0;
00449                 rts = false; // LOCK
00450             }
00451         }
00452     }
00453     // Check Tilt
00454     else if( motor_number == MOTOR_CTILT )
00455     {
00456         if( motor_dir == MOTOR_DIR_FWD )
00457         {
00458             mcchk = chk_motor_lock( mctr1_m2c.read()*100.0f, m_CTILT_center_value, mc_th_CTILT_f);
00459             if( mcchk == true )
00460             {
00461                 cnt_mclock_CTILT_f += 1;
00462             }
00463             else
00464             {   if( cnt_mclock_CTILT_f  > 0 )
00465                 {
00466                     cnt_mclock_CTILT_f -= 1;
00467                 }
00468                 else
00469                 {
00470                     cnt_mclock_CTILT_f = 0;
00471                 }
00472             }        
00473              if( cnt_mclock_CTILT_f > motor_lock_chk_cnt )
00474             {
00475                 flg_mclock_CTILT = 1;
00476                 rts = true; // LOCK
00477             }
00478             else
00479             {
00480                 flg_mclock_CTILT = 0;
00481                 rts = false; // LOCK
00482             }
00483         }
00484         else
00485         {
00486             mcchk = chk_motor_lock( mctr1_m2c.read()*100.0f, m_CTILT_center_value, mc_th_CTILT_r);
00487             if( mcchk == true )
00488             {
00489                 cnt_mclock_CTILT_r += 1;
00490             }
00491             else
00492             {   if( cnt_mclock_CTILT_r  > 0 )
00493                 {
00494                     cnt_mclock_CTILT_r -= 1;
00495                 }
00496                 else
00497                 {
00498                     cnt_mclock_CTILT_r = 0;
00499                 }
00500             }        
00501             if( cnt_mclock_CTILT_r > motor_lock_chk_cnt )
00502             {
00503                 flg_mclock_CTILT = 1;
00504                 rts = true; // LOCK
00505             }
00506             else
00507             {
00508                 flg_mclock_CTILT = 0;
00509                 rts = false; // LOCK
00510             }
00511         }
00512     }
00513     return rts;
00514 }
00515 
00516 bool mcchk::chk_motor_lock( 
00517     float   motor_current,      // motor current
00518     float   motor_center_value, // motor current center value
00519     int     mc_threshold        // motor current threshold
00520 ){
00521 //    int32_t     mc_abs_pct;
00522    
00523     _cnt_now = motor_current;
00524     _cnt_center = motor_center_value; 
00525     _cnt_th = mc_threshold;
00526    
00527     mc_abs_pct = abs((int32_t)((motor_current - motor_center_value)*100.0f));
00528     if( mc_abs_pct > mc_threshold )
00529     {
00530         return true;    // Motor current is over threshold.
00531     }
00532     else
00533     {
00534         return false;   // Motor current isn't over threshold.
00535     }
00536 }