Skip to content

Commit 106534e

Browse files
Merge pull request #8 from monolithicpower/dev
Merge branch dev into master
2 parents 3c4bb23 + b9b3a23 commit 106534e

28 files changed

+3742
-265
lines changed

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ For more information on the MagAlpha sensor family:
1111
* [MagAlpha Support Materials](http://www.monolithicpower.com/Design-Support/Position-Sensors-Design-Support)
1212

1313
## Supported sensors
14-
Supports all 3rd generation MagAlpha magnetic angle sensors from [Monolithic Power Systems](https://www.monolithicpower.com/).
14+
Supports all 3rd, 4th, 6th, 7th, 8th generation MagAlpha magnetic angle sensors from [Monolithic Power Systems](https://www.monolithicpower.com/).
1515

1616
| Applications | Part Numbers |
1717
| ------------| ------------ |
1818
| Turning knob applications (potentiometer replacement) | MA800, MA820, MA850 |
1919
| Rotary encoders (optical encoder replacement, Servo motors, ...) | MA702, MA704, MA710, MA730 |
20-
| Position controlled motor drivers (FOC, ...) | MA302, MA310 |
20+
| Position controlled motor drivers (FOC, ...) | MA302, MA310, MA600 |
2121
| Motor commutation (hall switches replacement) | MA102 |
2222

2323

@@ -39,6 +39,7 @@ MIT license, all text above must be included in any redistribution.
3939

4040
### Serial communication
4141
All MagAlpha have a SPI communication interface. Some sensors like the MA702 also have an additional SSI (2-wire) interface.
42+
MagAlpha gen8 possess an I2C interface.
4243

4344
#### SPI (4-wire interface)
4445
| Arduino | MagAlpha |
@@ -54,6 +55,12 @@ All MagAlpha have a SPI communication interface. Some sensors like the MA702 als
5455
| MISO | SSD |
5556
| SCK | SSCK |
5657

58+
### I2C (2-wire interface)
59+
| Arduino | MagAlpha |
60+
| -------- | -------- |
61+
| SCL | SCL |
62+
| SDA | SDA |
63+
5764
#### Arduino SPI pin mapping
5865
| Arduino / Genuino Board | MOSI | MISO | SCK | CS | Voltage Level |
5966
| ----------------------- | ---- | ---- | ---- | :---: | ------------- |

examples/gen3/gen3.ino

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include <SPI.h>
2+
3+
#include <MagAlphaGen3.h>
4+
#include <MagAlphaPartProperties.h>
5+
6+
#define SPI_CS_PIN (7)
7+
#define SPI_SCLK_FREQUENCY (1000000)
8+
9+
MagAlphaGen3 magalpha;
10+
11+
double angle_real;
12+
uint16_t zero, bct, angle_raw;
13+
uint8_t register_value[2];
14+
bool crc_error;
15+
16+
void setup() {
17+
18+
magalpha.begin(SPI_SCLK_FREQUENCY, MagAlphaSPIMode::MODE_0, SPI_CS_PIN, &SPI);
19+
// Other ways of use of begin() that will set default settings to the SPI peripheral
20+
// magalpha.begin(SPI_CS_PIN, &SPI);
21+
22+
//magalpha.setSpiClockFrequency(SPI_SCLK_FREQUENCY);
23+
//magalpha.setSpiDataMode(MagAlphaSPIMode::MODE0);
24+
//magalpha.setSpiChipSelectPin(SPI_CS_PIN);
25+
Serial.begin(115200);
26+
while(!Serial);
27+
}
28+
29+
void loop() {
30+
31+
// Read & Write registers
32+
register_value[0] = magalpha.writeRegister(0, 0xAA);
33+
Serial.println(register_value[0], HEX);
34+
register_value[0] = magalpha.readRegister(0);
35+
Serial.println(register_value[0], HEX);
36+
register_value[0] = magalpha.writeRegister(0, 0x00);
37+
38+
// Read & Write registers in burst mode
39+
register_value[0] = 0xAA;
40+
register_value[1] = 0x55;
41+
magalpha.writeRegisterBurst(0, register_value, 2);
42+
magalpha.readRegisterBurst(0, register_value, 2);
43+
for(uint8_t i = 0; i < sizeof(register_value); i++) {
44+
Serial.print("Register ");
45+
Serial.print(i);
46+
Serial.print(" = ");
47+
Serial.println(register_value[i], HEX);
48+
}
49+
register_value[0] = 0x00;
50+
register_value[1] = 0x00;
51+
magalpha.writeRegisterBurst(0, register_value, 2);
52+
53+
// Set & Get zero setting
54+
zero = magalpha.setCurrentAngleAsZero();
55+
Serial.print("Zero setting = ");
56+
Serial.println(zero, HEX);
57+
magalpha.setZero(0x0000);
58+
zero = magalpha.getZero();
59+
Serial.print("Zero setting = ");
60+
Serial.println(zero, HEX);
61+
62+
// Set & Get BCT setting
63+
magalpha.setBct(0xAA55);
64+
bct = magalpha.getBct();
65+
Serial.print("BCT = ");
66+
Serial.println(bct, HEX);
67+
magalpha.setBct(0x00);
68+
69+
// Read angle
70+
angle_raw = magalpha.readAngleRaw8();
71+
Serial.print("Angle raw (8 bits) = ");
72+
Serial.println(angle_raw, HEX);
73+
angle_raw = magalpha.readAngleRaw16();
74+
Serial.print("Angle raw (16 bits) = ");
75+
Serial.println(angle_raw, HEX);
76+
angle_raw = magalpha.readAngleRaw(&crc_error);
77+
if(crc_error) {
78+
Serial.println("An error occured during readAngleRaw");
79+
} else {
80+
Serial.print("readAngleRaw succeded, Angle raw (16 bits) = ");
81+
Serial.println(angle_raw, HEX);
82+
}
83+
84+
angle_real = magalpha.readAngle();
85+
Serial.print("Angle in degree = ");
86+
Serial.println(angle_real, DEC);
87+
88+
// This delay has been added only for visual purpose of the terminal
89+
delay(25);
90+
}

examples/gen4/gen4.ino

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#include <SPI.h>
2+
3+
#include <MagAlphaGen4.h>
4+
#include <MagAlphaPartProperties.h>
5+
6+
#define SPI_CS_PIN (7)
7+
#define SPI_SCLK_FREQUENCY (1000000)
8+
9+
MagAlphaGen4 magalpha;
10+
11+
double angle_real;
12+
uint16_t zero, bct, angle_raw;
13+
uint8_t register_value[2];
14+
bool crc_error;
15+
16+
void setup() {
17+
18+
magalpha.begin(SPI_SCLK_FREQUENCY, MagAlphaSPIMode::MODE_0, SPI_CS_PIN, &SPI);
19+
// Other ways of use of begin() that will set default settings to the SPI peripheral
20+
// magalpha.begin(SPI_CS_PIN, &SPI);
21+
22+
//magalpha.setSpiClockFrequency(SPI_SCLK_FREQUENCY);
23+
//magalpha.setSpiDataMode(MagAlphaSPIMode::MODE0);
24+
//magalpha.setSpiChipSelectPin(SPI_CS_PIN);
25+
Serial.begin(115200);
26+
while(!Serial);
27+
}
28+
29+
void loop() {
30+
31+
// Read & Write registers
32+
register_value[0] = magalpha.writeRegister(0, 0xAA);
33+
Serial.println(register_value[0], HEX);
34+
register_value[0] = magalpha.readRegister(0);
35+
Serial.println(register_value[0], HEX);
36+
register_value[0] = magalpha.writeRegister(0, 0x00);
37+
38+
// Read & Write registers in burst mode
39+
register_value[0] = 0xAA;
40+
register_value[1] = 0x55;
41+
magalpha.writeRegisterBurst(0, register_value, 2);
42+
magalpha.readRegisterBurst(0, register_value, 2);
43+
for(uint8_t i = 0; i < sizeof(register_value); i++) {
44+
Serial.print("Register ");
45+
Serial.print(i);
46+
Serial.print(" = ");
47+
Serial.println(register_value[i], HEX);
48+
}
49+
register_value[0] = 0x00;
50+
register_value[1] = 0x00;
51+
magalpha.writeRegisterBurst(0, register_value, 2);
52+
53+
// Set & Get zero setting
54+
zero = magalpha.setCurrentAngleAsZero();
55+
Serial.print("Zero setting = ");
56+
Serial.println(zero, HEX);
57+
magalpha.setZero(0x0000);
58+
zero = magalpha.getZero();
59+
Serial.print("Zero setting = ");
60+
Serial.println(zero, HEX);
61+
62+
// Set & Get BCT setting
63+
magalpha.setBct(0xAA55);
64+
bct = magalpha.getBct();
65+
Serial.print("BCT = ");
66+
Serial.println(bct, HEX);
67+
magalpha.setBct(0x00);
68+
69+
// Memory management
70+
magalpha.writeRegister(0, 0xAA);
71+
magalpha.storeRegister(0);
72+
magalpha.writeRegister(0, 0x00);
73+
magalpha.restoreAllRegisters();
74+
if(magalpha.readRegister(0) != 0xAA) {
75+
Serial.println("An error occured during restoreAllRegisters");
76+
}
77+
magalpha.writeRegister(0, 0x00);
78+
magalpha.storeAllRegisters();
79+
magalpha.restoreAllRegisters();
80+
if(magalpha.readRegister(0) != 0x00) {
81+
Serial.println("An error occured during storeAllRegisters");
82+
}
83+
84+
// Clear error flags
85+
magalpha.clearErrorFlags();
86+
87+
// Read angle
88+
angle_raw = magalpha.readAngleRaw8();
89+
Serial.print("Angle raw (8 bits) = ");
90+
Serial.println(angle_raw, HEX);
91+
angle_raw = magalpha.readAngleRaw16();
92+
Serial.print("Angle raw (16 bits) = ");
93+
Serial.println(angle_raw, HEX);
94+
angle_raw = magalpha.readAngleRaw(&crc_error);
95+
if(crc_error) {
96+
Serial.println("An error occured during readAngleRaw");
97+
} else {
98+
Serial.print("readAngleRaw succeded, Angle raw (16 bits) = ");
99+
Serial.println(angle_raw, HEX);
100+
}
101+
102+
angle_real = magalpha.readAngle();
103+
Serial.print("Angle in degree = ");
104+
Serial.println(angle_real, DEC);
105+
106+
// This delay has been added only for visual purpose of the terminal
107+
delay(25);
108+
}

examples/gen6/gen6.ino

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
#include <SPI.h>
2+
3+
#include <MagAlphaGen6.h>
4+
#include <MagAlphaPartProperties.h>
5+
6+
#define SPI_CS_PIN (7)
7+
#define SPI_SCLK_FREQUENCY (1000000)
8+
9+
MagAlphaGen6 magalpha;
10+
11+
double angle_real, speed;
12+
uint16_t zero, bct, angle_raw, turn;
13+
uint8_t register_value[2];
14+
bool crc_error;
15+
16+
void setup() {
17+
18+
magalpha.begin(SPI_SCLK_FREQUENCY, MagAlphaSPIMode::MODE_0, SPI_CS_PIN, &SPI);
19+
// Other ways of use of begin() that will set default settings to the SPI peripheral
20+
// magalpha.begin(SPI_CS_PIN, &SPI);
21+
22+
//magalpha.setSpiClockFrequency(SPI_SCLK_FREQUENCY);
23+
//magalpha.setSpiDataMode(MagAlphaSPIMode::MODE0);
24+
//magalpha.setSpiChipSelectPin(SPI_CS_PIN);
25+
Serial.begin(115200);
26+
while(!Serial);
27+
}
28+
29+
void loop() {
30+
31+
// Read & Write registers
32+
register_value[0] = magalpha.writeRegister(0, 0xAA);
33+
Serial.println(register_value[0], HEX);
34+
register_value[0] = magalpha.readRegister(0);
35+
Serial.println(register_value[0], HEX);
36+
register_value[0] = magalpha.writeRegister(0, 0x00);
37+
38+
// Read & Write registers in burst mode
39+
register_value[0] = 0xAA;
40+
register_value[1] = 0x55;
41+
magalpha.writeRegisterBurst(0, register_value, 2);
42+
magalpha.readRegisterBurst(0, register_value, 2);
43+
for(uint8_t i = 0; i < sizeof(register_value); i++) {
44+
Serial.print("Register ");
45+
Serial.print(i);
46+
Serial.print(" = ");
47+
Serial.println(register_value[i], HEX);
48+
}
49+
register_value[0] = 0x00;
50+
register_value[1] = 0x00;
51+
magalpha.writeRegisterBurst(0, register_value, 2);
52+
53+
// Set & Get zero setting
54+
zero = magalpha.setCurrentAngleAsZero();
55+
Serial.print("Zero setting = ");
56+
Serial.println(zero, HEX);
57+
magalpha.setZero(0x0000);
58+
zero = magalpha.getZero();
59+
Serial.print("Zero setting = ");
60+
Serial.println(zero, HEX);
61+
62+
// Set & Get BCT setting
63+
magalpha.setBct(0xAA55);
64+
bct = magalpha.getBct();
65+
Serial.print("BCT = ");
66+
Serial.println(bct, HEX);
67+
magalpha.setBct(0x00);
68+
69+
// Memory management
70+
magalpha.writeRegister(0, 0xAA);
71+
magalpha.storeRegisterBlock(0);
72+
magalpha.writeRegister(0, 0x00);
73+
magalpha.restoreAllRegisters();
74+
if(magalpha.readRegister(0) != 0xAA) {
75+
Serial.println("An error occured during restoreAllRegisters");
76+
}
77+
magalpha.writeRegister(0, 0x00);
78+
magalpha.storeAllRegisters();
79+
magalpha.restoreAllRegisters();
80+
if(magalpha.readRegister(0) != 0x00) {
81+
Serial.println("An error occured during storeAllRegisters");
82+
}
83+
84+
// Clear error flags
85+
magalpha.clearErrorFlags();
86+
87+
speed = magalpha.readSpeed();
88+
Serial.println(speed);
89+
turn = magalpha.readTurn();
90+
Serial.println(turn);
91+
92+
// Read angle
93+
angle_raw = magalpha.readAngleRaw8();
94+
Serial.print("Angle raw (8 bits) = ");
95+
Serial.println(angle_raw, HEX);
96+
angle_raw = magalpha.readAngleRaw16();
97+
Serial.print("Angle raw (16 bits) = ");
98+
Serial.println(angle_raw, HEX);
99+
angle_raw = magalpha.readAngleRaw(&crc_error);
100+
if(crc_error) {
101+
Serial.println("An error occured during readAngleRaw");
102+
} else {
103+
Serial.print("readAngleRaw succeded, Angle raw (16 bits) = ");
104+
Serial.println(angle_raw, HEX);
105+
}
106+
107+
angle_real = magalpha.readAngle();
108+
Serial.print("Angle in degree = ");
109+
Serial.println(angle_real, DEC);
110+
111+
// This delay has been added only for visual purpose of the terminal
112+
delay(25);
113+
}

0 commit comments

Comments
 (0)