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
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
Revision 0:bf2ba94eb7e0, committed 2015-12-14
- Comitter:
- mareikeFSL
- Date:
- Mon Dec 14 16:44:50 2015 +0000
- Commit message:
- Initial upload
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Dec 14 16:44:50 2015 +0000
@@ -0,0 +1,140 @@
+/*------------------------------------------------------------------------------------*/
+/* DC motor driver for FRDM-33879A-EVB (MC33879A) */
+/* See application note AN5221 at www.nxp.com for more information */
+/*------------------------------------------------------------------------------------*/
+
+/*--COMPANY-----AUTHOR------DATE------------REVISION----NOTES-------------------------*/
+/* NXP mareikeFSL 2015.12.14 rev 1.0 initial */
+/* */
+/*------------------------------------------------------------------------------------*/
+/* 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 */
+/*------------------------------------------------------------------------------------*/
+
+/*--SPI-------------------------------------------------------------------------------*/
+/* CLK (CLK) = PTD1 (J2/12) */
+/* MOSI (MOSI) = PTD2 (J2/8) */
+/* MISO (MISO) = PTD3 (J2/10) */
+/*------------------------------------------------------------------------------------*/
+/*--GPIO------------------------------------------------------------------------------*/
+/* CS (CS) = PTD0 (J2/6) */
+/* IO12 (EN) = PTA1 (J1/2) */
+/*------------------------------------------------------------------------------------*/
+/*--PWM-------------------------------------------------------------------------------*/
+/* PWM0 (IN5) = PTA12 (J1/8) */
+/* PWM1 (IN6) = PTA5 (J1/12) */
+/*------------------------------------------------------------------------------------*/
+
+
+/*--INCLUDES--------------------------------------------------------------------------*/
+#include "mbed.h"
+
+
+/*--DEFINES---------------------------------------------------------------------------*/
+
+
+/*--INITS-----------------------------------------------------------------------------*/
+SPI spi(PTD2, PTD3, PTD1); //mosi, miso, clk
+DigitalOut cs(PTD0); //cs
+
+DigitalOut en(PTA1); //en
+
+PwmOut in5(PTA12); //in5
+PwmOut in6(PTA5); //in6
+
+DigitalOut cw(LED_GREEN); //forward LED
+DigitalOut ccw(LED_RED); //backward LED
+
+
+/*--CONSTANTS-------------------------------------------------------------------------*/
+unsigned const ON1 = 0x01;
+unsigned const ON2 = 0x02;
+unsigned const ON3 = 0x04;
+unsigned const ON4 = 0x08;
+unsigned const ON5 = 0x10;
+unsigned const ON6 = 0x20;
+unsigned const ON7 = 0x40;
+unsigned const ON8 = 0x80;
+unsigned const ALL_OFF = 0x00;
+
+
+/*--VARIABLES-------------------------------------------------------------------------*/
+
+
+/*--FUNCTION DECLARATIONS-------------------------------------------------------------*/
+void init_spi(void); //initializes SPI
+void send_spi(unsigned const word); //sends SPI commands
+int main(void); //main
+
+
+/*--FUNCTION DEFINITIONS--------------------------------------------------------------*/
+
+/***************************************************************************INIT_SPI***/
+void init_spi(void)
+{
+ spi.format(8,1); //8-bit transfer, mode 1 (POL 0, PHA 1)
+ spi.frequency(4000000); //freq
+
+} //end init_spi()
+
+/***************************************************************************SEND_SPI***/
+void send_spi(unsigned const word)
+{
+ cs = 0; //set cs low
+ spi.write(0x00); //send 0x00
+ spi.write(word); //send 0xXX
+ cs = 1; //set cs high
+
+} //end send_spi()
+
+/*******************************************************************************MAIN***/
+int main(void)
+{
+ cw = 1; //turn off green LED
+ ccw = 1; //turn off red LED
+ cs = 1; //set cs high
+
+ init_spi(); //initialize SPI
+
+ in5 = 0; //set in5 PWM low
+ in6 = 0; //set in6 PWM low
+ en = 1; //set en high (enable device)
+
+ while(true)
+ {
+ //SPI only
+ cw = 0; //turn on green LED
+ ccw = 1; //turn off red LED
+ send_spi(ON5 | ON7); //5 and 7 ON (forward)
+ wait_ms(1000); //wait 1 second
+
+ cw = 1; //turn off green LED
+ ccw = 0; //turn on red LED
+ send_spi(ON6 | ON8); //6 and 8 ON (backward)
+ wait_ms(1000); //wait 1 second
+
+ //SPI with PWMing
+ cw = 0; //turn on green LED
+ ccw = 1; //turn off red LED
+ in5.period_us(100); //set period for 5
+ in5.write(0.5); //set duty cycle for 5
+ send_spi(ON7); //7 ON
+ wait_ms(3000); //wait 3 seconds
+ in5.write(0); //set duty cycle for 5 (OFF)
+ send_spi(ALL_OFF); //turn all outputs off
+
+ cw = 1; //turn off green LED
+ ccw = 0; //turn on red LED
+ in6.period_us(100); //set period for 6
+ in6.write(0.5); //set duty cycle for 6
+ send_spi(ON8); //8 ON
+ wait_ms(3000); //wait 3 seconds
+ in6.write(0); //set duty cycle for 6 (OFF)
+ send_spi(ALL_OFF); //turn all outputs off
+
+ } //end while()
+
+} //end main()
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Dec 14 16:44:50 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/34e6b704fe68 \ No newline at end of file
