Test program for the ES200 board

Dependencies:   SERVOGEN mbed

ES20X mbed board I/O Tester

This program allows you to quickly test the digital output port pins (p5, p6, p7, p8, p11), the analog input pins (p16 - p20), RS-232 Serial ports (p9,p10) and (p13, p14), four hobby servo control ports using the SERVOGEN library for pins (p21, p22, p23, p24) and exercising the 2 motor control ports (p25, p27 and p27) for port 1 and (p26, p30, p29) for port 2.

/media/uploads/jebradshaw/es200_oscope_attachemant.jpg

O'scope lead attachment

/media/uploads/jebradshaw/oscope_servo_motc.jpg

Screen capture of O'scope. The blue trace is the PWM on the motor control port, the low 20us PWM period cannot be captured on this digital scope with the hobby servo signal.

include the mbed library, and SERVOGEN.h with this snippet

// J. Bradshaw 20141119
// Program for testing I/O on mbed ES200 breakout board
#include "mbed.h"
#include "SERVOGEN.h"   //uses SERVOGEN.h library for generating servo pulses

DigitalOut myled(LED1);

//PC serial connection
Serial pc(USBTX, USBRX);    //tx, rx via USB connection
Serial DB9_female(p9, p10); //DB9 serial female
Serial DB9_male(p13, p14); //DB9 serial male

//Port J2
BusOut bus_J2(p5, p6, p7, p8, p11);

//header for J2
DigitalOut J2_p5(p5);
DigitalOut J2_p6(p6);
DigitalOut J2_p7(p7);
DigitalOut J2_p8(p8);
DigitalOut J2_p11(p11);

//Analog port in J3
AnalogIn    J3_P16(p16);
AnalogIn    J3_P17(p17);
AnalogIn    J3_P18(p18);
AnalogIn    J3_P19(p19);
AnalogIn    J3_P20(p20);

// servo ports p21 - p24
SERVOGEN sv1(p21);
SERVOGEN sv2(p22);
SERVOGEN sv3(p23);
SERVOGEN sv4(p24);

DigitalOut mot1_ph1(p28);
DigitalOut mot1_ph2(p27);
PwmOut mot_en1(p25);

DigitalOut mot2_ph1(p29);
DigitalOut mot2_ph2(p30);
PwmOut mot_en2(p26);
//Motor control routine for PWM on 5 pin motor driver header
// drv_num is 1 or 2 (defaults to 1, anything but 2)
// dc is signed duty cycle (+/-1.0)

void mot_control(int drv_num, float dc){        
    if(dc>1.0)
        dc=1.0;
    if(dc<-1.0)
        dc=-1.0;
    
    if(drv_num != 2){           
        if(dc > 0.0){
            mot1_ph2 = 0;
            mot1_ph1 = 1;
            mot_en1 = dc;
        }
        else if(dc < -0.0){
            mot1_ph1 = 0;
            mot1_ph2 = 1;
            mot_en1 = abs(dc);
        }
        else{
            mot1_ph1 = 0;
            mot1_ph2 = 0;
            mot_en1 = 0.0;
        }
    }                
    else{
        if(dc > 0.0){
            mot2_ph2 = 0;
            mot2_ph1 = 1;
            mot_en2 = dc;
        }
        else if(dc < -0.0){
            mot2_ph1 = 0;
            mot2_ph2 = 1;
            mot_en2 = abs(dc);
        }
        else{
            mot2_ph1 = 0;
            mot2_ph2 = 0;
            mot_en2 = 0.0;
        }
    }                   
}

//------------ Main ------------------------------
int main() {
    float analogVal[6];
    
    pc.baud(9600);
    DB9_female.baud(9600);
    DB9_male.baud(9600);
    mot_en1.period_us(20);
    mot_en2.period_us(20);
    
    while(1) {        
        bus_J2 = 0x1f;
        analogVal[0] = J3_P16;
        analogVal[1] = J3_P17;
        analogVal[2] = J3_P18;
        analogVal[3] = J3_P19;
        analogVal[4] = J3_P20;
        pc.printf("%.2f %.2f %.2f %.2f %.2f \r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4]);
        DB9_female.printf("Female %.2f %.2f %.2f %.2f %.2f \r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4]);
        DB9_male.printf("Male %.2f %.2f %.2f %.2f %.2f \r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4]);
        
        //toggle bus I/O for testing
        wait(.5);
        bus_J2 = 0xAA;
        wait(.1);
        bus_J2 = 0x55;
        wait(.1);
        bus_J2 = 0xAA;
        wait(.1);
        bus_J2 = 0x55;
        wait(.1);        
        bus_J2 = 0; //all off
        wait(.5);
            
        pc.printf("\r\n");
        // Run PWM and servo command signals
        for(float pos=0.0;pos<1.0;pos+=.034){
            sv1 = pos * 1000 + 1000;
            sv2 = pos * 1000 + 1000;
            sv3 = pos * 1000 + 1000;
            sv4 = pos * 1000 + 1000;

            mot_control(1, (pos*2.0) - 1.0);
            mot_control(2, (pos*2.0) - 1.0);
                        
            pc.printf("pos = %.2f  \r", pos);
            wait(.06);
        }
        for(float pos=1.0;pos>0.0;pos-=.034){
            sv1 = pos * 1000 + 1000;    
            sv2 = pos * 1000 + 1000;
            sv3 = pos * 1000 + 1000;
            sv4 = pos * 1000 + 1000;
            
            mot_control(1, (pos*2.0) - 1.0);
            mot_control(2, (pos*2.0) - 1.0);
            
            pc.printf("pos = %.2f  \r", pos);
            wait(.06);        
        }
    }
}

Committer:
jebradshaw
Date:
Wed Nov 19 15:26:45 2014 +0000
Revision:
0:165863a01366
Test program for the ES200 board I/O

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jebradshaw 0:165863a01366 1 // J. Bradshaw 20141119
jebradshaw 0:165863a01366 2 // Program for testing I/O on mbed ES200 breakout board
jebradshaw 0:165863a01366 3 #include "mbed.h"
jebradshaw 0:165863a01366 4 #include "SERVOGEN.h" //uses SERVOGEN.h library for generating servo pulses
jebradshaw 0:165863a01366 5
jebradshaw 0:165863a01366 6 DigitalOut myled(LED1);
jebradshaw 0:165863a01366 7
jebradshaw 0:165863a01366 8 //PC serial connection
jebradshaw 0:165863a01366 9 Serial pc(USBTX, USBRX); //tx, rx via USB connection
jebradshaw 0:165863a01366 10 Serial DB9_female(p9, p10); //DB9 serial female
jebradshaw 0:165863a01366 11 Serial DB9_male(p13, p14); //DB9 serial male
jebradshaw 0:165863a01366 12
jebradshaw 0:165863a01366 13 //Port J2
jebradshaw 0:165863a01366 14 BusOut bus_J2(p5, p6, p7, p8, p11);
jebradshaw 0:165863a01366 15
jebradshaw 0:165863a01366 16 //header for J2
jebradshaw 0:165863a01366 17 DigitalOut J2_p5(p5);
jebradshaw 0:165863a01366 18 DigitalOut J2_p6(p6);
jebradshaw 0:165863a01366 19 DigitalOut J2_p7(p7);
jebradshaw 0:165863a01366 20 DigitalOut J2_p8(p8);
jebradshaw 0:165863a01366 21 DigitalOut J2_p11(p11);
jebradshaw 0:165863a01366 22
jebradshaw 0:165863a01366 23 //Analog port in J3
jebradshaw 0:165863a01366 24 AnalogIn J3_P16(p16);
jebradshaw 0:165863a01366 25 AnalogIn J3_P17(p17);
jebradshaw 0:165863a01366 26 AnalogIn J3_P18(p18);
jebradshaw 0:165863a01366 27 AnalogIn J3_P19(p19);
jebradshaw 0:165863a01366 28 AnalogIn J3_P20(p20);
jebradshaw 0:165863a01366 29
jebradshaw 0:165863a01366 30 // servo ports p21 - p24
jebradshaw 0:165863a01366 31 SERVOGEN sv1(p21);
jebradshaw 0:165863a01366 32 SERVOGEN sv2(p22);
jebradshaw 0:165863a01366 33 SERVOGEN sv3(p23);
jebradshaw 0:165863a01366 34 SERVOGEN sv4(p24);
jebradshaw 0:165863a01366 35
jebradshaw 0:165863a01366 36 DigitalOut mot1_ph1(p28);
jebradshaw 0:165863a01366 37 DigitalOut mot1_ph2(p27);
jebradshaw 0:165863a01366 38 PwmOut mot_en1(p25);
jebradshaw 0:165863a01366 39
jebradshaw 0:165863a01366 40 DigitalOut mot2_ph1(p29);
jebradshaw 0:165863a01366 41 DigitalOut mot2_ph2(p30);
jebradshaw 0:165863a01366 42 PwmOut mot_en2(p26);
jebradshaw 0:165863a01366 43 //Motor control routine for PWM on 5 pin motor driver header
jebradshaw 0:165863a01366 44 // drv_num is 1 or 2 (defaults to 1, anything but 2)
jebradshaw 0:165863a01366 45 // dc is signed duty cycle (+/-1.0)
jebradshaw 0:165863a01366 46
jebradshaw 0:165863a01366 47 void mot_control(int drv_num, float dc){
jebradshaw 0:165863a01366 48 if(dc>1.0)
jebradshaw 0:165863a01366 49 dc=1.0;
jebradshaw 0:165863a01366 50 if(dc<-1.0)
jebradshaw 0:165863a01366 51 dc=-1.0;
jebradshaw 0:165863a01366 52
jebradshaw 0:165863a01366 53 if(drv_num != 2){
jebradshaw 0:165863a01366 54 if(dc > 0.0){
jebradshaw 0:165863a01366 55 mot1_ph2 = 0;
jebradshaw 0:165863a01366 56 mot1_ph1 = 1;
jebradshaw 0:165863a01366 57 mot_en1 = dc;
jebradshaw 0:165863a01366 58 }
jebradshaw 0:165863a01366 59 else if(dc < -0.0){
jebradshaw 0:165863a01366 60 mot1_ph1 = 0;
jebradshaw 0:165863a01366 61 mot1_ph2 = 1;
jebradshaw 0:165863a01366 62 mot_en1 = abs(dc);
jebradshaw 0:165863a01366 63 }
jebradshaw 0:165863a01366 64 else{
jebradshaw 0:165863a01366 65 mot1_ph1 = 0;
jebradshaw 0:165863a01366 66 mot1_ph2 = 0;
jebradshaw 0:165863a01366 67 mot_en1 = 0.0;
jebradshaw 0:165863a01366 68 }
jebradshaw 0:165863a01366 69 }
jebradshaw 0:165863a01366 70 else{
jebradshaw 0:165863a01366 71 if(dc > 0.0){
jebradshaw 0:165863a01366 72 mot2_ph2 = 0;
jebradshaw 0:165863a01366 73 mot2_ph1 = 1;
jebradshaw 0:165863a01366 74 mot_en2 = dc;
jebradshaw 0:165863a01366 75 }
jebradshaw 0:165863a01366 76 else if(dc < -0.0){
jebradshaw 0:165863a01366 77 mot2_ph1 = 0;
jebradshaw 0:165863a01366 78 mot2_ph2 = 1;
jebradshaw 0:165863a01366 79 mot_en2 = abs(dc);
jebradshaw 0:165863a01366 80 }
jebradshaw 0:165863a01366 81 else{
jebradshaw 0:165863a01366 82 mot2_ph1 = 0;
jebradshaw 0:165863a01366 83 mot2_ph2 = 0;
jebradshaw 0:165863a01366 84 mot_en2 = 0.0;
jebradshaw 0:165863a01366 85 }
jebradshaw 0:165863a01366 86 }
jebradshaw 0:165863a01366 87 }
jebradshaw 0:165863a01366 88
jebradshaw 0:165863a01366 89 //------------ Main ------------------------------
jebradshaw 0:165863a01366 90 int main() {
jebradshaw 0:165863a01366 91 float analogVal[6];
jebradshaw 0:165863a01366 92
jebradshaw 0:165863a01366 93 pc.baud(9600);
jebradshaw 0:165863a01366 94 DB9_female.baud(9600);
jebradshaw 0:165863a01366 95 DB9_male.baud(9600);
jebradshaw 0:165863a01366 96 mot_en1.period_us(20);
jebradshaw 0:165863a01366 97 mot_en2.period_us(20);
jebradshaw 0:165863a01366 98
jebradshaw 0:165863a01366 99 while(1) {
jebradshaw 0:165863a01366 100 bus_J2 = 0x1f;
jebradshaw 0:165863a01366 101 analogVal[0] = J3_P16;
jebradshaw 0:165863a01366 102 analogVal[1] = J3_P17;
jebradshaw 0:165863a01366 103 analogVal[2] = J3_P18;
jebradshaw 0:165863a01366 104 analogVal[3] = J3_P19;
jebradshaw 0:165863a01366 105 analogVal[4] = J3_P20;
jebradshaw 0:165863a01366 106 pc.printf("%.2f %.2f %.2f %.2f %.2f \r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4]);
jebradshaw 0:165863a01366 107 DB9_female.printf("Female %.2f %.2f %.2f %.2f %.2f \r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4]);
jebradshaw 0:165863a01366 108 DB9_male.printf("Male %.2f %.2f %.2f %.2f %.2f \r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4]);
jebradshaw 0:165863a01366 109
jebradshaw 0:165863a01366 110 //toggle bus I/O for testing
jebradshaw 0:165863a01366 111 wait(.5);
jebradshaw 0:165863a01366 112 bus_J2 = 0xAA;
jebradshaw 0:165863a01366 113 wait(.1);
jebradshaw 0:165863a01366 114 bus_J2 = 0x55;
jebradshaw 0:165863a01366 115 wait(.1);
jebradshaw 0:165863a01366 116 bus_J2 = 0xAA;
jebradshaw 0:165863a01366 117 wait(.1);
jebradshaw 0:165863a01366 118 bus_J2 = 0x55;
jebradshaw 0:165863a01366 119 wait(.1);
jebradshaw 0:165863a01366 120 bus_J2 = 0; //all off
jebradshaw 0:165863a01366 121 wait(.5);
jebradshaw 0:165863a01366 122
jebradshaw 0:165863a01366 123 pc.printf("\r\n");
jebradshaw 0:165863a01366 124 // Run PWM and servo command signals
jebradshaw 0:165863a01366 125 for(float pos=0.0;pos<1.0;pos+=.034){
jebradshaw 0:165863a01366 126 sv1 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 127 sv2 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 128 sv3 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 129 sv4 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 130
jebradshaw 0:165863a01366 131 mot_control(1, (pos*2.0) - 1.0);
jebradshaw 0:165863a01366 132 mot_control(2, (pos*2.0) - 1.0);
jebradshaw 0:165863a01366 133
jebradshaw 0:165863a01366 134 pc.printf("pos = %.2f \r", pos);
jebradshaw 0:165863a01366 135 wait(.06);
jebradshaw 0:165863a01366 136 }
jebradshaw 0:165863a01366 137 for(float pos=1.0;pos>0.0;pos-=.034){
jebradshaw 0:165863a01366 138 sv1 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 139 sv2 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 140 sv3 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 141 sv4 = pos * 1000 + 1000;
jebradshaw 0:165863a01366 142
jebradshaw 0:165863a01366 143 mot_control(1, (pos*2.0) - 1.0);
jebradshaw 0:165863a01366 144 mot_control(2, (pos*2.0) - 1.0);
jebradshaw 0:165863a01366 145
jebradshaw 0:165863a01366 146 pc.printf("pos = %.2f \r", pos);
jebradshaw 0:165863a01366 147 wait(.06);
jebradshaw 0:165863a01366 148 }
jebradshaw 0:165863a01366 149 }
jebradshaw 0:165863a01366 150 }