test

Dependencies:   mbed Watchdog

Dependents:   STM32-MC_node

AS5045/AS5045.cpp

Committer:
nestedslk
Date:
2020-07-21
Revision:
5:97117a837d2c
Parent:
4:f6e22dd39313
Child:
12:406f75196a12

File content as of revision 5:97117a837d2c:

#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 bitwidth9
    _spi.format(9, 2);

    // Set SPI frequency
    _spi.frequency(500000);//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
//    //timer_enc.reset();
//    timer_enc.start();
//    _cs = 0;
//    
//    wait_ms(1);
//    // 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>>5);
    //return upper ;
    
    _cs = 0;
   upper = _spi.write(0x00);
   lower = _spi.write(0x00);
  _cs = 1;
 
 
 	//upper &=~ 0xF0;//mask out the first 4 bits
//     EncoderByteData  = upper << 8; //shift MSB to correct EncoderByteData in EncoderByteData message
//     EncoderByteData  += lower; // add LSB to EncoderByteData message to complete message
  return ((upper << 3)+(lower >> 6));
  //return EncoderByteData; 
}

/** 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;
}