====== Magnetic angle sensors ======
{{ :sensor:mt6816_1.png?180|MT-6816}}
A magnetic angle sensor is a contactless electronic device used to measure the rotational position of a shaft or object. It works by detecting the orientation of a magnetic field—usually from a small permanent magnet attached to the rotating part—and converting that physical position into a digital or analog signal.
**How It Works**
* **The Magnet:** A simple dipole (North/South) magnet is mounted on the end or side of a rotating shaft.
* **The Sensing Element:** An integrated circuit (IC) is placed close to the magnet. It uses physical phenomena such as the Hall Effect and magnetoresistance (AMR/GMR/TMR) to detect the direction of magnetic flux lines.
* **The Processor:** The sensor’s internal logic calculates the precise angle (0° to 360°) based on the field strength across multiple internal axes and outputs that data via interfaces like SPI, I²C, or PWM.
**Technical Comparison of Several Typical Magnetic Angle Sensors**
^Feature^AS5047P^AS5600^MT6701^MT6816^MT6835^TLE5012B|
^Max Resolution|14-bit (SPI)|12-bit (I²C)|14-bit (I²C/SSI)|14-bit (SPI)|21-bit (SPI)|15-bit (SSC/SPI)|
^Interfaces|SPI, ABI, UVW, PWM|I²C, PWM, Analog|I²C, SSI, ABZ, UVW, PWM|SPI, ABZ, UVW, PWM|SPI, ABZ, UVW, PWM|SSC (SPI), IIF, HSM, PWM|
^Max Speed (RPM)|28,000|Low speed (potentiometer)|55,000|25,000|120,000|~10,000+|
^Latency|< 1 µs (DAEC)|High (I2C)|< 5 µs|< 2 µs Ultra-low|Low|
^Accuracy (Typ)|±0.34° at speed|±0.5° (static)|±1.0°|High precision|Micro-level|±1.0°|
^Best For|High-speed BLDC|Contactless Knobs|General Purpose|Standard Robotics|High-end Servo|Automotive/Industrial|
**Key Product Highlights**
* **ams OSRAM AS5047P:** Noted by experts for its Dynamic Angle Error Compensation (DAEC), which maintains accuracy even at 28,000 RPM.
* **ams OSRAM AS5600:** A popular, low-cost choice for contactless potentiometers and battery-powered devices due to its simple I2C interface and low power modes.
* **MagnTek MT6701:** Often cited as a superior AS5600 replacement; it offers higher 14-bit resolution and much higher speed support (55k RPM) while remaining affordable.
* **MagnTek MT6835:** A high-performance 21-bit sensor that delivers over 2 million steps per revolution, making it ideal for micro-level accuracy in professional robotics.
* **Infineon TLE5012B:** Praised for its robustness in extreme environments (-40°C to +150°C) and stable readings under high heat.
==== Common Sensor Types ====
* **Hall Effect Sensors:** The most widely used type. According to Allegro MicroSystems, these are often integrated into single-chip CMOS solutions like the Allegro A33002, making them cost-effective for general motor control and automotive steering.
* **Anisotropic Magnetoresistance (AMR):** These sensors, such as the Honeywell HMC1501, are prized for high precision. A key limitation noted by Infineon is that a standard AMR element is unique only over a 180° range, often requiring additional logic or sensors to achieve full 360° detection.
* **Giant Magnetoresistance (GMR):** Based on multi-layer thin films, GMR sensors like the Infineon TLE5012B offer a much higher signal-to-noise ratio than Hall sensors. Experts at Alif Sensor highlight that GMR was a Nobel Prize-winning discovery that allowed for extreme miniaturization.
* **Tunnel Magnetoresistance (TMR):** The newest and most advanced type. TDK-Micronas states that TMR sensors (e.g., the TDK TAD2141) provide 500 times the output of a Hall element while consuming significantly less power, making them ideal for battery-operated and high-reliability automotive systems.
==== MT-6816 ====
{{ :sensor:mt6816_1.png?180|MT-6816}}
The MagnTek MT6816 is a high-speed, 14-bit magnetic angle sensor IC based on advanced //Anisotropic Magnetoresistive// (**AMR**) technology. It is specifically designed to provide absolute 0°–360° angle sensing for high-performance applications like BLDC motor control and robotics.
**Core Technical Specifications**
According to official technical documents from MagnTek and Novosense, the sensor features the following primary specifications:
* **Resolution:** 14-bit absolute angle resolution (16,384 steps per revolution).
* **Maximum Speed:** Supports rotation speeds up to 25,000 RPM.
* **System Latency:** Ultra-low propagation delay of less than 2 µs.
* **Operating Voltage:** 3.0V to 5.5V DC.
* **Supply Current:** Typically 10mA.
* **Operating Temperature:** Industrial range from -40°C to +125°C.
* **Magnetic Flux Density:** Operates within a range of 30 mT to 1,000 mT.
**MT-6816 Pinout**
^Pin^Pin Name^Type^Function Description
^1|CSN|Input|Chip Select (Active Low) for SPI communication|
^2|SCK|Input|Serial Clock input for SPI|
^3|SDO|Output|Serial Data Output (MISO) for SPI|
^4|SDI / SDA|I/O|Serial Data Input (MOSI) for 4-wire SPI, or Data I/O for 3-wire SPI|
^5|TEST / PWM|Output|PWM absolute angle output; also used as a factory test pin|
^6|OUT / Z / W|Output|Z-index for ABZ mode, or W phase for UVW mode|
^7|VSS|Power|Ground (0V)|
^8|VDD|Power|Supply Voltage (3.0V to 5.5V)|
**Pin Functionality by Mode**
The output pins (Pins 5 and 6) and the SPI pins change behavior based on your interface choice:
* **SPI Mode:** Uses Pins 1-4 for data transfer. It supports both 3-wire (sharing SDI/SDO) and 4-wire configurations.
* **Incremental Mode (ABZ):** Pin 6 provides the Z (Index) pulse, while internal programming determines which pins output the A and B quadrature signals (often multiplexed on the SPI lines when SPI is not active).
* **Motor Commutation (UVW):** Pin 6 provides the W phase, replacing traditional Hall effect sensor signals for brushless motors.
**Connection Notes**
* **Power Supply:** Place a 0.1µF decoupling capacitor as close as possible between VDD (Pin 8) and VSS (Pin 7) to ensure stable readings.
* **Magnet Placement:** The magnet should be centered over the SOP-8 package's geometric center for maximum accuracy.
* **SPI Settings**: For microcontroller communication, use SPI Mode 3 (CPOL=1, CPHA=1) with MSB first.
**Arduino example**
To read the 14-bit absolute angle from the MagnTek MT6816 using an Arduino, you use the SPI interface. The sensor requires SPI Mode 3 (CPOL=1, CPHA=1) and a clock speed up to 16MHz.
**Arduino Wiring**
Connect the MT6816 to your Arduino (e.g., Uno/Nano) as follows:
* VDD (Pin 8) → 3.3V or 5V
* VSS (Pin 7) → GND
* CSN (Pin 1) → D10 (Chip Select)
* SCK (Pin 2) → D13 (Serial Clock)
* SDO (Pin 3) → D12 (MISO)
* SDI (Pin 4) → D11 (MOSI)
**Example Sketch**
This code initializes the SPI bus and reads the absolute angle from registers 0x03 and 0x04
#include
const int CS_PIN = 10;
const byte READ_REG_03 = 0x83; // Read command for Register 0x03
void setup() {
Serial.begin(115200);
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
SPI.begin();
}
void loop() {
uint16_t angle = readMT6816();
// Convert 14-bit raw value (0-16383) to degrees (0-360)
float degrees = (angle * 360.0) / 16384.0;
Serial.print("Raw: ");
Serial.print(angle);
Serial.print(" | Angle: ");
Serial.println(degrees);
delay(100);
}
uint16_t readMT6816() {
// MT6816 requires SPI Mode 3, MSB first, max 16MHz
SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE3));
digitalWrite(CS_PIN, LOW);
// Step 1: Send read command for the first register
SPI.transfer(READ_REG_03);
// Step 2: Read two bytes
uint8_t highByte = SPI.transfer(0x00);
uint8_t lowByte = SPI.transfer(0x00);
digitalWrite(CS_PIN, HIGH);
SPI.endTransaction();
// Combine bytes: The 14-bit angle is in highByte and bits [7:2] of lowByte
uint16_t rawData = (highByte << 8) | lowByte;
uint16_t angle = (rawData & 0x3FFF); // Mask to 14 bits
return angle;
}
**Key Coding Details**
* **Register Access:** The absolute angle data is stored in registers 0x03 and 0x04. Sending 0x83 (Read bit + address 0x03) allows you to burst-read both bytes.
* **Data Masking:** The sensor provides 14-bit data. The result must be masked with 0x3FFF to remove any parity or error flags stored in the remaining bits.
* **Parity Check (Optional):** For high-reliability applications, you can verify the parity bit (typically bit 15) to ensure the data wasn't corrupted during transmission.
==== MT-6835 ====
{{ :sensor:mt6835_1.png?180|MT-6835}}
The MagnTek MT6835 is a fourth-generation magnetic angle encoder IC that significantly improves upon the MT6816, offering higher resolution and specialized calibration features. Based on //Anisotropic Magnetoresistive// (**AMR**) technology, it is designed for ultra-high-precision applications such as absolute-value servo motor control and high-speed robotics.
**Technical Specifications**
According to data from MagnTek and Novosense, the MT6835 features the following core parameters:
* **Resolution:** 21-bit absolute angle resolution (over 2 million steps per revolution).
* **Maximum Speed:** Supports high-speed rotation up to 120,000 RPM.
* **Accuracy (INL):**
* **Factory Default:** < ±0.5°.
* **After Self-Calibration:** Typical accuracy of ±0.07°.
* **With NLC Mode**: Typical accuracy of ±0.02°.
* **System Latency:** 2 µs to 10 µs propagation delay.
* **Operating Voltage:** 3.0V to 5.5V DC (3.3V to 5.0V typical).
* **Operating Temperature:** Industrial range from -40°C to +125°C.
**Output Interfaces**
The MT6835 provides several independent output modes, making it a versatile replacement for optical encoders:
* **SPI:** Standard 4-wire interface supporting up to 16 MHz clock frequency for reading 21-bit angle data.
* **Incremental ABZ:** Programmable resolution from 1 to 16,384 lines (pulses per revolution).
* **Incremental UVW:** Supports any resolution from 1 to 16 pole pairs.
* **PWM:** 12-bit absolute angle output.
**MT6835 Pinout**
^Pin^Pin Name^Type^Function Description|
^1|U / CAL|Output/Input|U phase for UVW mode; also used as an Auto-Calibration trigger|
^2|V|Output|V phase for UVW commutation mode|
^3|W|Output|W phase for UVW commutation mode|
^4|VSS|Power|Ground (0V)|
^5|PWM|Output|12-bit Pulse Width Modulation absolute angle output|
^6|A|Output|A channel for incremental ABZ quadrature mode|
^7|B|Output|B channel for incremental ABZ quadrature mode|
^8|Z|Output|Z (Index) pulse for incremental ABZ mode|
^9|MISO|Output|Master In Slave Out for SPI communication (4-wire)|
^10|MOSI|Input|Master Out Slave In for SPI communication (4-wire)|
^11|SCK|Input|Serial Clock for SPI (up to 16MHz)|
^12|CSN|Input|Chip Select (Active Low) for SPI|
^13|VDD|Power|Supply Voltage (3.0V to 5.5V)|
^14|VOUT|Power|Internal LDO output (typically connected to a decoupling capacitor)|
^15|NC|—|No Internal Connection (Leave floating)|
^16|NC|—|No Internal Connection (Leave floating)|
**Key Hardware Considerations**
* **Decoupling:** It is critical to place a 100 nF (0.1 µF) capacitor between VDD (Pin 13) and VSS (Pin 4), and another capacitor on the VOUT (Pin 14) pin, for internal voltage stability.
* **Calibration Pin:** Pin 1 (CAL) can be used to trigger the built-in self-calibration routine, which is unique to the MT6835 and improves its accuracy to ±0.07°.
* **Independent Outputs:** Unlike the MT6816, which often shares pins, the MT6835 allows you to use SPI and ABZ/UVW outputs simultaneously without pin multiplexing conflicts.
**MT-6835 Arduino example code**
To read the 21-bit absolute angle from the MT6835, you must use the SPI interface. Because 21 bits exceed a standard 16-bit integer, you will need to store the data in a //uint32_t//.
**Wiring (MT-6835 to Arduino)**
* VDD (Pin 13) → 3.3V or 5V
* VSS (Pin 4) → GND
* CSN (Pin 12) → D10
* SCK (Pin 11) → D13
* MISO (Pin 9) → D12
* MOSI (Pin 10) → D11
**Example code**
The MT6835 stores its 21-bit angle across three registers starting at 0x03.
#include
const int CS_PIN = 10;
const byte READ_CMD = 0x83; // Read bit (0x80) + Register address (0x03)
void setup() {
Serial.begin(115200);
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
SPI.begin();
}
void loop() {
uint32_t rawAngle = readMT6835();
// Convert 21-bit (0 to 2,097,151) to degrees
float degrees = (rawAngle * 360.0) / 2097152.0;
Serial.print("21-bit Raw: ");
Serial.print(rawAngle);
Serial.print(" | Angle: ");
Serial.println(degrees, 4); // 4 decimal places for precision
delay(50);
}
uint32_t readMT6835() {
// MT6835 SPI: Mode 3, MSB first, up to 16MHz
SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE3));
digitalWrite(CS_PIN, LOW);
SPI.transfer(READ_CMD);
uint32_t b1 = SPI.transfer(0x00); // Bits 20-13
uint32_t b2 = SPI.transfer(0x00); // Bits 12-5
uint32_t b3 = SPI.transfer(0x00); // Bits 4-0 + Status bits
digitalWrite(CS_PIN, HIGH);
SPI.endTransaction();
// Combine the bytes:
// The 21-bit angle is packed into the 24 bits of data returned.
// Format: [Byte1: 8 bits][Byte2: 8 bits][Byte3: 5 bits + 3 status bits]
uint32_t combined = (b1 << 16) | (b2 << 8) | b3;
uint32_t angle = combined >> 3; // Shift right by 3 to remove status bits
return angle;
}
**Critical Implementation Details**
* **Bit Packing:** The sensor returns 3 bytes (24 bits). The top 21 bits are the angle, while the bottom 3 bits are status flags (like No-Magnet or Over-speed errors).
* **SPI Mode:** Like its predecessor, the MT6835 uses SPI Mode 3. If you get oscillating or "garbage" data, double-check your CPOL/CPHA settings.
* **High Resolution:** Because 21-bit resolution is extremely sensitive (0.00017° per step), even tiny vibrations or magnetic noise will cause the last few digits to flicker.
===== Sensor topics on lamaPLC =====
{{topic>sensor}}
\\
\\
{{tag>magnetic_angle_sensor magnetic_flux sensor SPI I2C PWM communication modul AS5047P AS5600 MT6701 MT6816 MT6835 TLE5012B AMR GMR TMR Anisotropic_Magnetoresistive}}
\\
This page has been accessed for: Today: {{counter|today}}, Until now: {{counter|total}}