2018.07.26
Dependencies: EthernetInterface TextLCD USBDevice USBHost mbed
mtrAccess.cpp@1:fdf87a1a724b, 2018-07-26 (annotated)
- Committer:
- sayzyas
- Date:
- Thu Jul 26 00:26:07 2018 +0000
- Revision:
- 1:fdf87a1a724b
- Parent:
- 0:19075177391c
2018.07.26
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sayzyas | 0:19075177391c | 1 | #include "mbed.h" |
sayzyas | 0:19075177391c | 2 | #include "rtos.h" |
sayzyas | 0:19075177391c | 3 | #include "stdio.h" |
sayzyas | 0:19075177391c | 4 | #include "common.h" |
sayzyas | 0:19075177391c | 5 | #include "com_func.h" |
sayzyas | 0:19075177391c | 6 | #include "mtrAccess.h" |
sayzyas | 0:19075177391c | 7 | |
sayzyas | 0:19075177391c | 8 | Serial sdc2130(p28, p27); // Communicate with RpboteQ Driver by tx, rx |
sayzyas | 0:19075177391c | 9 | |
sayzyas | 0:19075177391c | 10 | Mutex stdio_mutex; |
sayzyas | 0:19075177391c | 11 | |
sayzyas | 0:19075177391c | 12 | |
sayzyas | 0:19075177391c | 13 | mtrAccess::mtrAccess() |
sayzyas | 0:19075177391c | 14 | { |
sayzyas | 0:19075177391c | 15 | MCTR_CANID_PTORWCH = 3; // PAN,TILT(B1) or Winch(B2) motor ID |
sayzyas | 0:19075177391c | 16 | MCTR_CANID_TRANSFORM = 2; // TRANSFORM motor ID |
sayzyas | 0:19075177391c | 17 | MCTR_CANID_CRAWLER = 1; // CRAWLER motor ID |
sayzyas | 0:19075177391c | 18 | } |
sayzyas | 0:19075177391c | 19 | |
sayzyas | 0:19075177391c | 20 | |
sayzyas | 0:19075177391c | 21 | // ====================================================================== |
sayzyas | 0:19075177391c | 22 | // Send Motor command to motor controller |
sayzyas | 0:19075177391c | 23 | // ====================================================================== |
sayzyas | 0:19075177391c | 24 | bool mtrAccess::sndCmd2MC( |
sayzyas | 0:19075177391c | 25 | int rcan_id, // RoboCAN Motor controller id |
sayzyas | 0:19075177391c | 26 | int no, // Motor number (1 or 2) |
sayzyas | 0:19075177391c | 27 | int speed // Motor Speed <-- this is 10x data |
sayzyas | 0:19075177391c | 28 | ){ |
sayzyas | 0:19075177391c | 29 | sdc2130.printf( "@%02d!G %d %d\r", rcan_id, no, speed ); |
sayzyas | 0:19075177391c | 30 | return true; |
sayzyas | 0:19075177391c | 31 | } |
sayzyas | 0:19075177391c | 32 | |
sayzyas | 0:19075177391c | 33 | |
sayzyas | 0:19075177391c | 34 | bool mtrAccess::setBaudRate( int baudrate ) |
sayzyas | 0:19075177391c | 35 | { |
sayzyas | 0:19075177391c | 36 | sdc2130.baud(baudrate); |
sayzyas | 0:19075177391c | 37 | return true; |
sayzyas | 0:19075177391c | 38 | } |
sayzyas | 0:19075177391c | 39 | |
sayzyas | 0:19075177391c | 40 | // ====================================================================== |
sayzyas | 0:19075177391c | 41 | // Get command from client and send to motor controller |
sayzyas | 0:19075177391c | 42 | // ====================================================================== |
sayzyas | 0:19075177391c | 43 | bool mtrAccess::cmdControl( |
sayzyas | 0:19075177391c | 44 | char* cmd, // Operationg Command |
sayzyas | 0:19075177391c | 45 | int sizeofcmd, // Command size |
sayzyas | 0:19075177391c | 46 | int speed // real speed x 10 : this is from Rst Handy |
sayzyas | 0:19075177391c | 47 | ){ |
sayzyas | 0:19075177391c | 48 | // Winch |
sayzyas | 0:19075177391c | 49 | if ( !strncmp( cmd,"XX_WICH", sizeofcmd) ) { |
sayzyas | 0:19075177391c | 50 | sndCmd2MC( MCTR_CANID_PTORWCH, MOTOR_NO1, speed ); |
sayzyas | 0:19075177391c | 51 | } |
sayzyas | 0:19075177391c | 52 | // Crawler |
sayzyas | 0:19075177391c | 53 | else if ( !strncmp( cmd, "XX_CLRF", sizeofcmd ) ) { |
sayzyas | 0:19075177391c | 54 | sndCmd2MC( MCTR_CANID_CRAWLER, MOTOR_NO1, speed ); |
sayzyas | 0:19075177391c | 55 | } |
sayzyas | 0:19075177391c | 56 | else if ( !strncmp(cmd, "XX_CLLB", sizeofcmd) ) { |
sayzyas | 0:19075177391c | 57 | sndCmd2MC( MCTR_CANID_CRAWLER, MOTOR_NO2, speed ); |
sayzyas | 0:19075177391c | 58 | } |
sayzyas | 0:19075177391c | 59 | // Crawler |
sayzyas | 0:19075177391c | 60 | else if ( !strncmp( cmd, "XX_TFRF", sizeofcmd ) ) { |
sayzyas | 0:19075177391c | 61 | sndCmd2MC( MCTR_CANID_TRANSFORM, MOTOR_NO1, speed ); |
sayzyas | 0:19075177391c | 62 | } |
sayzyas | 0:19075177391c | 63 | else if ( !strncmp(cmd, "XX_TFLB", sizeofcmd) ) { |
sayzyas | 0:19075177391c | 64 | sndCmd2MC( MCTR_CANID_TRANSFORM, MOTOR_NO2, speed ); |
sayzyas | 0:19075177391c | 65 | } |
sayzyas | 0:19075177391c | 66 | // Camera PAN |
sayzyas | 0:19075177391c | 67 | else if ( !strncmp(cmd, "XX_CPAN", sizeofcmd) ) { |
sayzyas | 0:19075177391c | 68 | sndCmd2MC( MCTR_CANID_PTORWCH, MOTOR_NO2, speed ); |
sayzyas | 0:19075177391c | 69 | } |
sayzyas | 0:19075177391c | 70 | else if ( !strncmp(cmd, "XX_CPAN", sizeofcmd) ) { |
sayzyas | 0:19075177391c | 71 | sndCmd2MC( MCTR_CANID_PTORWCH, MOTOR_NO2, speed ); |
sayzyas | 0:19075177391c | 72 | } |
sayzyas | 0:19075177391c | 73 | // Camera PAN |
sayzyas | 0:19075177391c | 74 | else if ( !strncmp(cmd, "XX_CTLT", sizeofcmd) ) { |
sayzyas | 0:19075177391c | 75 | sndCmd2MC( MCTR_CANID_PTORWCH, MOTOR_NO1, speed ); |
sayzyas | 0:19075177391c | 76 | } |
sayzyas | 0:19075177391c | 77 | else if ( !strncmp(cmd, "XX_CTLT", sizeofcmd) ) { |
sayzyas | 0:19075177391c | 78 | sndCmd2MC( MCTR_CANID_PTORWCH, MOTOR_NO1, speed ); |
sayzyas | 0:19075177391c | 79 | } |
sayzyas | 0:19075177391c | 80 | return true; |
sayzyas | 0:19075177391c | 81 | } |
sayzyas | 0:19075177391c | 82 | |
sayzyas | 0:19075177391c | 83 | // ============================================================ |
sayzyas | 0:19075177391c | 84 | // Read motor current |
sayzyas | 0:19075177391c | 85 | // ============================================================ |
sayzyas | 0:19075177391c | 86 | int mtrAccess::readMotorCurrent( |
sayzyas | 0:19075177391c | 87 | int motor_id, // Motor CAN ID |
sayzyas | 0:19075177391c | 88 | int motor_no, // Motor Number ( 1 or 2 ) |
sayzyas | 0:19075177391c | 89 | int motor_dir // Motor direction |
sayzyas | 0:19075177391c | 90 | ){ |
sayzyas | 0:19075177391c | 91 | |
sayzyas | 0:19075177391c | 92 | float motor_current; |
sayzyas | 0:19075177391c | 93 | int i; |
sayzyas | 0:19075177391c | 94 | int mc_abs_pct = 0; |
sayzyas | 0:19075177391c | 95 | int mc_Threshold = 0; |
sayzyas | 0:19075177391c | 96 | |
sayzyas | 0:19075177391c | 97 | if( motor_id == MCTR_CANID_PTORWCH ) |
sayzyas | 0:19075177391c | 98 | { |
sayzyas | 0:19075177391c | 99 | if (motor_no == MOTOR_2 ){ |
sayzyas | 0:19075177391c | 100 | //motor_current = mcnt_panwdm.read()*100.0f; |
sayzyas | 0:19075177391c | 101 | mc_abs_pct = abs((int)((motor_current - motor1_current_center_value)*100.0f)); |
sayzyas | 0:19075177391c | 102 | // DEBUG_PRINT_L1("Bd0> M1:%lf/%lf= [%03d%%] th:%3.2f< <%3.2f\t", motor_current, motor1_current_center_value, mc_abs_pct, motor1_current_rvs_thd, motor1_current_fwd_thd ); |
sayzyas | 0:19075177391c | 103 | |
sayzyas | 0:19075177391c | 104 | for( i = 0; i < (mc_abs_pct/10); i++){ |
sayzyas | 0:19075177391c | 105 | // DEBUG_PRINT_L1(">"); |
sayzyas | 0:19075177391c | 106 | } |
sayzyas | 0:19075177391c | 107 | // DEBUG_PRINT_L4("\r\n"); |
sayzyas | 0:19075177391c | 108 | |
sayzyas | 0:19075177391c | 109 | if( motor_dir == MOTOR_FWD ){ |
sayzyas | 0:19075177391c | 110 | mc_Threshold = (int)motor1_current_fwd_thd; |
sayzyas | 0:19075177391c | 111 | // DEBUG_PRINT_L1("Bd0> Upper threshold: %d\r\n", mc_Threshold); |
sayzyas | 0:19075177391c | 112 | } |
sayzyas | 0:19075177391c | 113 | else{ |
sayzyas | 0:19075177391c | 114 | mc_Threshold = (int)motor1_current_rvs_thd; |
sayzyas | 0:19075177391c | 115 | DEBUG_PRINT_L1("Bd0> Lower threshold: %d\r\n", mc_Threshold); |
sayzyas | 0:19075177391c | 116 | } |
sayzyas | 0:19075177391c | 117 | if( mc_abs_pct > mc_Threshold ){ |
sayzyas | 0:19075177391c | 118 | // DEBUG_PRINT_L1("Bd0> **** MC1 Over the Limit [%d] ****\r\n", motor1_lock_count ); |
sayzyas | 0:19075177391c | 119 | motor_pantiltwch_1_lock_count += 1; |
sayzyas | 0:19075177391c | 120 | if( motor_pantiltwch_1_lock_count >= MC_LOCK_COUNT ){ |
sayzyas | 0:19075177391c | 121 | stdio_mutex.lock(); // Mutex Lock |
sayzyas | 0:19075177391c | 122 | flg_motor_pantiltwch_1_lock = 1; |
sayzyas | 0:19075177391c | 123 | stdio_mutex.unlock(); // Mutex Release |
sayzyas | 0:19075177391c | 124 | // DEBUG_PRINT_L1("Bd0> #### MOTOR1 LOCK ! #### (%d)\r\n", flg_motor_pantiltwch_1_lock); |
sayzyas | 0:19075177391c | 125 | } |
sayzyas | 0:19075177391c | 126 | } |
sayzyas | 0:19075177391c | 127 | else{ |
sayzyas | 0:19075177391c | 128 | // DEBUG_PRINT_L1("Bd0> Pass\r\n"); |
sayzyas | 0:19075177391c | 129 | if( motor_pantiltwch_1_lock_count > 0 ) flg_motor_pantiltwch_1_lock -= 1; |
sayzyas | 0:19075177391c | 130 | else motor_pantiltwch_1_lock_count = 0; |
sayzyas | 0:19075177391c | 131 | } |
sayzyas | 0:19075177391c | 132 | } |
sayzyas | 0:19075177391c | 133 | } |
sayzyas | 0:19075177391c | 134 | else if( motor_id == MCTR_CANID_TRANSFORM ) |
sayzyas | 0:19075177391c | 135 | { |
sayzyas | 0:19075177391c | 136 | } |
sayzyas | 0:19075177391c | 137 | else if( motor_id == MCTR_CANID_CRAWLER ) |
sayzyas | 0:19075177391c | 138 | { |
sayzyas | 0:19075177391c | 139 | } |
sayzyas | 0:19075177391c | 140 | |
sayzyas | 0:19075177391c | 141 | return mc_abs_pct; |
sayzyas | 0:19075177391c | 142 | } |