This program is controlling the motor by MTU2 (Reset-Synchronized PWM mode). (Note : This is a program using only API of the mbed library)

Dependencies:   PwmOutResetSync mbed

main.cpp

Committer:
TetsuyaKonno
Date:
2016-09-09
Revision:
0:22d9384f2094

File content as of revision 0:22d9384f2094:

//------------------------------------------------------------------//
//Supported MCU:   RZ/A1H
//File Contents:   Motor Control (GR-PEACH version on the Micon Car)
//Version number:  Ver.1.00
//Date:            2016.09.09
//Copyright:       Renesas Electronics Corporation
//                 Hitachi Document Solutions Co., Ltd.
//------------------------------------------------------------------//
 
//This program supports the following boards:
//* GR-PEACH(E version)
//* Motor drive board Ver.5
//* Camera module (SC-310)
 
//Include
//------------------------------------------------------------------//
#include "mbed.h"
#include "iodefine.h"
#include "PwmOutResetSync.h"
 
//Define
//------------------------------------------------------------------//
//Motor speed
#define     MAX_SPEED           85      /* motor()  set: 0 to 100   */
 
//Constructor
//------------------------------------------------------------------//
Ticker      interrput;
DigitalOut  Left_motor_signal(P4_6);
DigitalOut  Right_motor_signal(P4_7);
PwmOutResetSync pwm_l(P4_4);
PwmOutResetSync pwm_r(P4_5);
 
//Prototype
//------------------------------------------------------------------//
void intTimer( void );                  /* Interrupt fanction       */
void timer( unsigned long timer_set );
void motor( int accele_l, int accele_r );
void MTU2_PWM_Motor_Stop( void );
void MTU2_PWM_Motor_Start( void );
 
//Globle
//------------------------------------------------------------------//
volatile unsigned long  cnt_timer;      /* Used by timer function   */
 
//Main
//------------------------------------------------------------------//
int main( void )
{
    /* Initialize MCU functions */
    PwmOutResetSync::period(0.001);   /* Other notation: "pwm_l.period_ms(1);" or "pwm_r.period_ms(1);" */
    interrput.attach(&intTimer, 0.001);

    while(1) {
        motor( 100, 0 );
        timer( 1000 );
        motor( 0, 80 );
        timer( 1000 );
        motor( -60, 0 );
        timer( 1000 );
        motor( 0, -40 );
        timer( 1000 );
        motor( 0, 0 );
        timer( 1000 );
    }
}

//Interrupt Timer
//------------------------------------------------------------------//
void intTimer( void )
{
    cnt_timer++;
}

//Timer fanction
//------------------------------------------------------------------//
void timer( unsigned long timer_set )
{
    cnt_timer = 0;
    while( cnt_timer < timer_set );
}

//motor speed control(PWM)
//Arguments: motor:-100 to 100
//Here, 0 is stop, 100 is forward, -100 is reverse
//------------------------------------------------------------------//
void motor( int accele_l, int accele_r )
{
    accele_l = ( accele_l * MAX_SPEED ) / 100;
    accele_r = ( accele_r * MAX_SPEED ) / 100;

    /* Left Motor Control */
    if( accele_l >= 0 ) {
        /* forward */
        Left_motor_signal = 0;
        pwm_l.write((float)accele_l / 100);    /* Other notation: "pwm_l = (float)accele_l / 100;" */
    } else {
        /* reverse */
        Left_motor_signal = 1;
        pwm_l.write((float)(-accele_l) / 100); /* Other notation: "pwm_l = (float)(-accele_l) / 100;" */
    }
 
    /* Right Motor Control */
    if( accele_r >= 0 ) {
        /* forward */
        Right_motor_signal = 0;
        pwm_r.write((float)accele_r / 100);    /* Other notation: "pwm_r = (float)accele_r / 100;" */
    } else {
        /* reverse */
        Right_motor_signal = 1;
        pwm_r.write((float)(-accele_r) / 100); /* Other notation: "pwm_r = (float)(-accele_r) / 100;" */
    }
}

// MTU2 PWM Motor Stop
//------------------------------------------------------------------//
void MTU2_PWM_Motor_Stop( void )
{
    MTU2TSTR   &= 0xbf;                 /* TCNT_4 Stop              */
    MTU2TOER   &= 0xf9;                 /* TIOC4A,4B enabled output */
    GPIOPMC4   &= 0xffcf;               /* P4_4,P4_5 : port mode    */
}

// MTU2 PWM Motor Start
//------------------------------------------------------------------//
void MTU2_PWM_Motor_Start( void )
{
    GPIOPMC4   |= 0x0030;               /* P4_4, P4_5 : double mode */
    MTU2TOER   |= 0xc6;                 /* TIOC4A,4B enabled output */
    MTU2TCNT_3  = MTU2TCNT_4 = 0;       /* TCNT3,TCNT4 Set 0        */
    MTU2TSTR   |= 0x40;                 /* TCNT_3 Start             */
}

//------------------------------------------------------------------//
// End of file
//------------------------------------------------------------------//