Library for the TLE5012B magnetic 360° angle sensor.
This is a Mbed port of the TLE5012B-Angle-Sensor Arduino library.
TLE5012B
The TLE5012B is a 360° angle sensor that detects the orientation of a magnetic field. This is achieved by measuring sine and cosine angle components with monolithic integrated Giant Magneto Resistance (iGMR) elements. These raw signals (sine and cosine) are digitally processed internally to calculate the angle orientation of the magnetic field (magnet). The TLE5012B is a pre-calibrated sensor. The calibration parameters are stored in laser fuses. At start-up the values of the fuses are written into flip-flops, where these values can be changed by the application-specific parameters. Further precision of the angle measurement over a wide temperature range and a long lifetime can be improved by enabling an optional internal autocalibration algorithm. Data communications are accomplished with a bi-directional Synchronous Serial Communication (SSC) that is SPI-compatible. The sensor configuration is stored in registers, which are accessible by the SSC interface.
A bi-directional Synchronous Serial Communication (SSC) Interface (aka 3-wire SPI) is used for the communication. The TLE5012B has a single pin for Data input and and Data output. This pin is connected to the Mbed's SPI MOSI and MISO pins using a series/pull-up resistor as proposed for the 3-wire SPI by Wim Huiskamp.
Wiring of the 8MHz SSC (aka 3-wire SPI) communication:
Example program:
Import programTLE5012B_Hello
Example program for the TLE5012B magnetic 360° angle sensor.
TLE5012B_SPI.h
- Committer:
- hudakz
- Date:
- 2020-09-19
- Revision:
- 1:220a2496380e
- Parent:
- 0:4b76b1dc05cd
File content as of revision 1:220a2496380e:
/*! * \name TLE5012B_SPI.h - Mbed port of Arduino library for the TLE5012B angle sensor. * \author Infineon Technologies AG (Dr.Olaf Filies) * \copyright 2019 Infineon Technologies AG * \version 2.0.1 * \brief GMR-based angle sensor for angular position sensing in automotive applications * \details Ported to Mbed by Zoltan Hudak 2020-08 * * The TLE5012B is a 360° angle sensor that detects the orientation of a magnetic field. * This is achieved by measuring sine and cosine angle components with monolithic integrated * Giant Magneto Resistance (iGMR) elements. These raw signals (sine and cosine) are digitally * processed internally to calculate the angle orientation of the magnetic field (magnet). * The TLE5012B is a pre-calibrated sensor. The calibration parameters are stored in laser fuses. * At start-up the values of the fuses are written into flip-flops, where these values can be changed * by the application-specific parameters. Further precision of the angle measurement over a wide * temperature range and a long lifetime can be improved by enabling an optional internal autocalibration * algorithm. Data communications are accomplished with a bi-directional Synchronous Serial Communication (SSC) * that is SPI-compatible. The sensor configuration is stored in registers, which are accessible by the * SSC interface. Additionally four other interfaces are available with the TLE5012B: Pulse-Width-Modulation (PWM) * Protocol, Short-PWM-Code (SPC) Protocol, Hall Switch Mode (HSM) and Incremental Interface (IIF). These interfaces * can be used in parallel with SSC or alone. Pre-configured sensor derivates with different interface settings are available. * Online diagnostic functions are provided to ensure reliable operation. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the * following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following * disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote * products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #ifndef TLE5021B_SPI_H #define TLE5021B_SPI_H #include "mbed.h" class TLE5012B_SPI { DigitalInOut _mosi; DigitalOut _sck; SPI _spi; inline void writeBit(int value); inline int readBit(); void write(uint16_t word); uint16_t read(); public: TLE5012B_SPI(PinName mosi, PinName miso, PinName sck); void begin(DigitalOut* cs); void triggerUpdate(); void sendReceiveSpi(DigitalOut*, uint16_t* txData, uint16_t txLen, uint16_t* rxData, uint16_t rxLen); }; #endif // TLE5021B_INT_H