DC motor driver for FRDM-33879A-EVB (MC33879A). See application note AN5221 at www.nxp.com for more information.

Dependencies:   mbed

Fork of FRDM-33879A-EVB_Brushed_DC_Motor_Control by Freescale

The sample code provided is described in NXP's application note AN5221 found at http://www.nxp.com/products/power-management/engine-and-dc-motor-control/h-bridges/evaluation-kit-33879configurable-octal-serial-switch:FRDM-33879A-EVB. It drives a DC motor using a configurable switch.

DC MOTOR DRIVER

-> 1 second full on forward, 1 second full on backward

-> 3 seconds PWMing forward, 3 seconds PWMing backward

-> green LED indicates forward direction

-> red LED indicates backward direction

Committer:
mareikeFSL
Date:
Mon Dec 14 16:44:50 2015 +0000
Revision:
0:bf2ba94eb7e0
Initial upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mareikeFSL 0:bf2ba94eb7e0 1 /*------------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 2 /* DC motor driver for FRDM-33879A-EVB (MC33879A) */
mareikeFSL 0:bf2ba94eb7e0 3 /* See application note AN5221 at www.nxp.com for more information */
mareikeFSL 0:bf2ba94eb7e0 4 /*------------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 5
mareikeFSL 0:bf2ba94eb7e0 6 /*--COMPANY-----AUTHOR------DATE------------REVISION----NOTES-------------------------*/
mareikeFSL 0:bf2ba94eb7e0 7 /* NXP mareikeFSL 2015.12.14 rev 1.0 initial */
mareikeFSL 0:bf2ba94eb7e0 8 /* */
mareikeFSL 0:bf2ba94eb7e0 9 /*------------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 10 /* DC MOTOR DRIVER */
mareikeFSL 0:bf2ba94eb7e0 11 /* -> 1 second full on forward, 1 second full on backward */
mareikeFSL 0:bf2ba94eb7e0 12 /* -> 3 seconds PWMing forward, 3 seconds PWMing backward */
mareikeFSL 0:bf2ba94eb7e0 13 /* -> green LED indicates forward direction */
mareikeFSL 0:bf2ba94eb7e0 14 /* -> red LED indicates backward direction */
mareikeFSL 0:bf2ba94eb7e0 15 /*------------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 16
mareikeFSL 0:bf2ba94eb7e0 17 /*--SPI-------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 18 /* CLK (CLK) = PTD1 (J2/12) */
mareikeFSL 0:bf2ba94eb7e0 19 /* MOSI (MOSI) = PTD2 (J2/8) */
mareikeFSL 0:bf2ba94eb7e0 20 /* MISO (MISO) = PTD3 (J2/10) */
mareikeFSL 0:bf2ba94eb7e0 21 /*------------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 22 /*--GPIO------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 23 /* CS (CS) = PTD0 (J2/6) */
mareikeFSL 0:bf2ba94eb7e0 24 /* IO12 (EN) = PTA1 (J1/2) */
mareikeFSL 0:bf2ba94eb7e0 25 /*------------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 26 /*--PWM-------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 27 /* PWM0 (IN5) = PTA12 (J1/8) */
mareikeFSL 0:bf2ba94eb7e0 28 /* PWM1 (IN6) = PTA5 (J1/12) */
mareikeFSL 0:bf2ba94eb7e0 29 /*------------------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 30
mareikeFSL 0:bf2ba94eb7e0 31
mareikeFSL 0:bf2ba94eb7e0 32 /*--INCLUDES--------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 33 #include "mbed.h"
mareikeFSL 0:bf2ba94eb7e0 34
mareikeFSL 0:bf2ba94eb7e0 35
mareikeFSL 0:bf2ba94eb7e0 36 /*--DEFINES---------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 37
mareikeFSL 0:bf2ba94eb7e0 38
mareikeFSL 0:bf2ba94eb7e0 39 /*--INITS-----------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 40 SPI spi(PTD2, PTD3, PTD1); //mosi, miso, clk
mareikeFSL 0:bf2ba94eb7e0 41 DigitalOut cs(PTD0); //cs
mareikeFSL 0:bf2ba94eb7e0 42
mareikeFSL 0:bf2ba94eb7e0 43 DigitalOut en(PTA1); //en
mareikeFSL 0:bf2ba94eb7e0 44
mareikeFSL 0:bf2ba94eb7e0 45 PwmOut in5(PTA12); //in5
mareikeFSL 0:bf2ba94eb7e0 46 PwmOut in6(PTA5); //in6
mareikeFSL 0:bf2ba94eb7e0 47
mareikeFSL 0:bf2ba94eb7e0 48 DigitalOut cw(LED_GREEN); //forward LED
mareikeFSL 0:bf2ba94eb7e0 49 DigitalOut ccw(LED_RED); //backward LED
mareikeFSL 0:bf2ba94eb7e0 50
mareikeFSL 0:bf2ba94eb7e0 51
mareikeFSL 0:bf2ba94eb7e0 52 /*--CONSTANTS-------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 53 unsigned const ON1 = 0x01;
mareikeFSL 0:bf2ba94eb7e0 54 unsigned const ON2 = 0x02;
mareikeFSL 0:bf2ba94eb7e0 55 unsigned const ON3 = 0x04;
mareikeFSL 0:bf2ba94eb7e0 56 unsigned const ON4 = 0x08;
mareikeFSL 0:bf2ba94eb7e0 57 unsigned const ON5 = 0x10;
mareikeFSL 0:bf2ba94eb7e0 58 unsigned const ON6 = 0x20;
mareikeFSL 0:bf2ba94eb7e0 59 unsigned const ON7 = 0x40;
mareikeFSL 0:bf2ba94eb7e0 60 unsigned const ON8 = 0x80;
mareikeFSL 0:bf2ba94eb7e0 61 unsigned const ALL_OFF = 0x00;
mareikeFSL 0:bf2ba94eb7e0 62
mareikeFSL 0:bf2ba94eb7e0 63
mareikeFSL 0:bf2ba94eb7e0 64 /*--VARIABLES-------------------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 65
mareikeFSL 0:bf2ba94eb7e0 66
mareikeFSL 0:bf2ba94eb7e0 67 /*--FUNCTION DECLARATIONS-------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 68 void init_spi(void); //initializes SPI
mareikeFSL 0:bf2ba94eb7e0 69 void send_spi(unsigned const word); //sends SPI commands
mareikeFSL 0:bf2ba94eb7e0 70 int main(void); //main
mareikeFSL 0:bf2ba94eb7e0 71
mareikeFSL 0:bf2ba94eb7e0 72
mareikeFSL 0:bf2ba94eb7e0 73 /*--FUNCTION DEFINITIONS--------------------------------------------------------------*/
mareikeFSL 0:bf2ba94eb7e0 74
mareikeFSL 0:bf2ba94eb7e0 75 /***************************************************************************INIT_SPI***/
mareikeFSL 0:bf2ba94eb7e0 76 void init_spi(void)
mareikeFSL 0:bf2ba94eb7e0 77 {
mareikeFSL 0:bf2ba94eb7e0 78 spi.format(8,1); //8-bit transfer, mode 1 (POL 0, PHA 1)
mareikeFSL 0:bf2ba94eb7e0 79 spi.frequency(4000000); //freq
mareikeFSL 0:bf2ba94eb7e0 80
mareikeFSL 0:bf2ba94eb7e0 81 } //end init_spi()
mareikeFSL 0:bf2ba94eb7e0 82
mareikeFSL 0:bf2ba94eb7e0 83 /***************************************************************************SEND_SPI***/
mareikeFSL 0:bf2ba94eb7e0 84 void send_spi(unsigned const word)
mareikeFSL 0:bf2ba94eb7e0 85 {
mareikeFSL 0:bf2ba94eb7e0 86 cs = 0; //set cs low
mareikeFSL 0:bf2ba94eb7e0 87 spi.write(0x00); //send 0x00
mareikeFSL 0:bf2ba94eb7e0 88 spi.write(word); //send 0xXX
mareikeFSL 0:bf2ba94eb7e0 89 cs = 1; //set cs high
mareikeFSL 0:bf2ba94eb7e0 90
mareikeFSL 0:bf2ba94eb7e0 91 } //end send_spi()
mareikeFSL 0:bf2ba94eb7e0 92
mareikeFSL 0:bf2ba94eb7e0 93 /*******************************************************************************MAIN***/
mareikeFSL 0:bf2ba94eb7e0 94 int main(void)
mareikeFSL 0:bf2ba94eb7e0 95 {
mareikeFSL 0:bf2ba94eb7e0 96 cw = 1; //turn off green LED
mareikeFSL 0:bf2ba94eb7e0 97 ccw = 1; //turn off red LED
mareikeFSL 0:bf2ba94eb7e0 98 cs = 1; //set cs high
mareikeFSL 0:bf2ba94eb7e0 99
mareikeFSL 0:bf2ba94eb7e0 100 init_spi(); //initialize SPI
mareikeFSL 0:bf2ba94eb7e0 101
mareikeFSL 0:bf2ba94eb7e0 102 in5 = 0; //set in5 PWM low
mareikeFSL 0:bf2ba94eb7e0 103 in6 = 0; //set in6 PWM low
mareikeFSL 0:bf2ba94eb7e0 104 en = 1; //set en high (enable device)
mareikeFSL 0:bf2ba94eb7e0 105
mareikeFSL 0:bf2ba94eb7e0 106 while(true)
mareikeFSL 0:bf2ba94eb7e0 107 {
mareikeFSL 0:bf2ba94eb7e0 108 //SPI only
mareikeFSL 0:bf2ba94eb7e0 109 cw = 0; //turn on green LED
mareikeFSL 0:bf2ba94eb7e0 110 ccw = 1; //turn off red LED
mareikeFSL 0:bf2ba94eb7e0 111 send_spi(ON5 | ON7); //5 and 7 ON (forward)
mareikeFSL 0:bf2ba94eb7e0 112 wait_ms(1000); //wait 1 second
mareikeFSL 0:bf2ba94eb7e0 113
mareikeFSL 0:bf2ba94eb7e0 114 cw = 1; //turn off green LED
mareikeFSL 0:bf2ba94eb7e0 115 ccw = 0; //turn on red LED
mareikeFSL 0:bf2ba94eb7e0 116 send_spi(ON6 | ON8); //6 and 8 ON (backward)
mareikeFSL 0:bf2ba94eb7e0 117 wait_ms(1000); //wait 1 second
mareikeFSL 0:bf2ba94eb7e0 118
mareikeFSL 0:bf2ba94eb7e0 119 //SPI with PWMing
mareikeFSL 0:bf2ba94eb7e0 120 cw = 0; //turn on green LED
mareikeFSL 0:bf2ba94eb7e0 121 ccw = 1; //turn off red LED
mareikeFSL 0:bf2ba94eb7e0 122 in5.period_us(100); //set period for 5
mareikeFSL 0:bf2ba94eb7e0 123 in5.write(0.5); //set duty cycle for 5
mareikeFSL 0:bf2ba94eb7e0 124 send_spi(ON7); //7 ON
mareikeFSL 0:bf2ba94eb7e0 125 wait_ms(3000); //wait 3 seconds
mareikeFSL 0:bf2ba94eb7e0 126 in5.write(0); //set duty cycle for 5 (OFF)
mareikeFSL 0:bf2ba94eb7e0 127 send_spi(ALL_OFF); //turn all outputs off
mareikeFSL 0:bf2ba94eb7e0 128
mareikeFSL 0:bf2ba94eb7e0 129 cw = 1; //turn off green LED
mareikeFSL 0:bf2ba94eb7e0 130 ccw = 0; //turn on red LED
mareikeFSL 0:bf2ba94eb7e0 131 in6.period_us(100); //set period for 6
mareikeFSL 0:bf2ba94eb7e0 132 in6.write(0.5); //set duty cycle for 6
mareikeFSL 0:bf2ba94eb7e0 133 send_spi(ON8); //8 ON
mareikeFSL 0:bf2ba94eb7e0 134 wait_ms(3000); //wait 3 seconds
mareikeFSL 0:bf2ba94eb7e0 135 in6.write(0); //set duty cycle for 6 (OFF)
mareikeFSL 0:bf2ba94eb7e0 136 send_spi(ALL_OFF); //turn all outputs off
mareikeFSL 0:bf2ba94eb7e0 137
mareikeFSL 0:bf2ba94eb7e0 138 } //end while()
mareikeFSL 0:bf2ba94eb7e0 139
mareikeFSL 0:bf2ba94eb7e0 140 } //end main()