Template for LPC1768

Dependencies:   Gimbal MLX90620 Socket lwip-eth lwip-sys lwip mbed-rtos mbed

Fork of EkkoEye by EkkoSense

CGimbal.h

Committer:
Mike
Date:
2016-04-14
Revision:
53:72f350a6d09c

File content as of revision 53:72f350a6d09c:

/*
 * CGimbal.h
 *
 *  Created on: 15 Feb 2016
 *      Author: mike
 */
#ifndef CGIMBAL_H_
#define CGIMBAL_H_

#include "mbed.h"

#define FORWARD	0				// Used for the direction pin
#define REVERSE 1				// Used for the direction pin
#define	CLOCKWISE 0				// Used for the direction pin
#define	ANTICLOCKWISE 1			// Used for the direction pin
#define DFT_STEP_PULSE 0.00002	// 20us is recommended pulse width for most stepper drivers
#define X_AXIS 0				// Used for Tour array indexing
#define	Y_AXIS 1				// Used for Tour array indexing
#define NUM_AXES 2				// Used for Tour array indexing
#define DEGREES_PER_STEP 	.1125	//	0.45 & 200 steps per revolution give 360/3200 degrees per step (1/16microsteps)
#define	DFT_STEP_INTERVAL	250 // Normal time interval between pulses (5ms =  250 * 20us)
#define	HOME_STEP_INTERVAL	500 // Moves more slowly when homing (10ms = 250 * 20us)
#define MAX_TOUR 10				// Maximum number of way-points that can be performed in a single tour

class CGimbal
{
	public:

	DigitalOut * m_pXStepPin;					//	Pointer to the X axis step pin
	DigitalOut * m_pXDirPin;					//	Pointer to the Y axis step pin
	DigitalOut * m_pYStepPin;					//	Pointer to the X axis direction pin
	DigitalOut * m_pYDirPin;					//	Pointer to the Y axis direction pin

	//	Constructor
	CGimbal(DigitalOut * pXStepPin, DigitalOut * pXDirPin, DigitalOut * pYStepPin, DigitalOut * pYDirPin);

	//	Destructor
	~CGimbal();

	void Zero(void);
	void Home(void);							//	Move to the Home position
	int MoveRel();								//	Move (x, y) relative to current position
	int MoveAbs(float x, float y);				//	Move to Absolute (x,y) position
	int	RotateAbs(float xAngle, float yAngle);	//	Rotate to Absolute (x,y) angle in degrees
	int TourPoint(int n);							//	Execute a tour using n stored waypoints
	void MeanderScan(void);						//	Perform a full sweep at increments of (60, 15) degrees

	int	m_StepInterval;							//	The time in 10us increments between each Step pulse (ie 100 = 1ms)
	int m_AbsoluteXPos;							//	The current motor x axis position in steps (800 per revolution)
	int m_AbsoluteYPos;							//	The current motor y axis position in steps (800 per revolution)

	float m_AbsoluteXAngle;						//	The current motor x axis angle in degrees
	float m_AbsoluteYAngle;						//	The current motor y axis angle in degrees

	int m_xSteps;								//	Tracks the number of required x steps (+/-) when moving relative or absolute
	int m_ySteps;								//	Tracks the number of required y steps (+/-) when moving relative or absolute
	int m_xPulses;								//	Tracks the number of required x pulses when moving (always a positive value)
	int m_yPulses;								//	Tracks the number of required y pulses when moving (always a positive value)
	int	m_xDir;									//	X Direction: Used internally when moving, calculated from m_xSteps 1 to move ccw, 0 to move cw
	int	m_yDir;									//	Y Direction: Used internally when moving, calculated from m_xSteps 1 to move ccw, 0 to move cw

	int	m_NumWaypoints;
	float m_TourPoints [NUM_AXES] [MAX_TOUR];	//	Used to store the x,y way-points received from the server
	float m_PointTemperature [MAX_TOUR];	//	Used to store the x,y way-points received from the server


	int m_TickCount;							//	Used to track the number of 10us Ticks that have occurred to ensure consistent motor speed

};




#endif /* CGIMBAL_H_ */