Руслан Бредун / Mbed 2 deprecated STM32-MC_node

Dependencies:   mbed Watchdog stm32-sensor-base2

AS5045/AS5045.cpp

Committer:
nestedslk
Date:
2020-07-18
Revision:
4:f6e22dd39313
Parent:
1:3c6771928b35
Child:
5:97117a837d2c

File content as of revision 4:f6e22dd39313:

#include "AS5045.h"
//we have 5040
/** Constructor
 *
 *	@param CS Pin number for the digital output
 *
 *	@note
 *		PinName CS is the digital output pin number
 */
 
 
 Timer timer_enc;
AS5045::AS5045(PinName CS) :
  _spi(NC,D12, D13),	// MBED SPI init
  _cs(CS)				// Digital output pin init
{
	// Set SPI bitwidth
	_spi.format(9, 2);

	// Set SPI frequency
	_spi.frequency(50000);//SPI_FREQ);
	// Set the digital output high
	_cs = 1;
}

/** Read tick amount from encoder (position)
 *
 *	@note
 *		Tick amount is recieved through SPI
 */
int AS5045::getPosition()
{
	unsigned int upper,		// Upper part of the tick amount integer
				lower;		// Lower part of the tick amount integer

	// Set the chip select pin low
	_cs = 0;
	timer_enc.reset();
        timer_enc.start();
	wait_ms(5);
	// Read data from the encoder
 	upper = (_spi.write(0x00)) ;
 	lower = (_spi.write(0x00));
 	
// 	lower = lower >> 6;   
//    upper = (upper >> 6)+lower;
//   upper = upper & 0xffc0;
   upper = upper >> 6;

	// Set the chip select pin high
 	_cs = 1;
wait_ms(5);
 	// Return full 9-bits tick amount
	return upper; 
	//return upper ;
}

/** Convert position of the encoder to degrees
 *
 *	@note
 *		Tick amount is recieved internally
 */
float AS5045::getRotation()
{
	// Get data from the encoder
 	float value = (float)getPosition();

 	// Return degrees of rotation of the encoder
 	return value * RESOLUTION;
}