7 .clock_speed = 1000000,
9 .angle_register = 0x3FFF,
12 .command_parity_bit = 15
20 .clock_speed = 1000000,
22 .angle_register = 0x3FFF,
25 .command_parity_bit = 15
29 .clock_speed = 1000000,
31 .angle_register = 0x3FFF,
34 .command_parity_bit = 15
40 .clock_speed = 1000000,
42 .angle_register = 0x0000,
45 .command_parity_bit = 0
62 bit_resolution = _bit_resolution;
64 command_parity_bit = 15;
91 pinMode(chip_select_pin, OUTPUT);
96 digitalWrite(chip_select_pin, HIGH);
104 return (getRawCount() / (
float)cpr) *
_2PI;
108int MagneticSensorSPI::getRawCount(){
109 return (
int)MagneticSensorSPI::read(angle_register);
116byte MagneticSensorSPI::spiCalcEvenParity(word value){
120 for (i = 0; i < 16; i++)
122 if (value & 0x1) cnt++;
133word MagneticSensorSPI::read(word angle_register){
135 word command = angle_register;
137 if (command_rw_bit > 0) {
138 command = angle_register | (1 << command_rw_bit);
140 if (command_parity_bit > 0) {
142 command |= ((word)spiCalcEvenParity(command) << command_parity_bit);
146 spi->beginTransaction(settings);
149 digitalWrite(chip_select_pin, LOW);
150 spi->transfer16(command);
151 digitalWrite(chip_select_pin,HIGH);
153#if defined(ESP_H) && defined(ARDUINO_ARCH_ESP32)
154 delayMicroseconds(50);
156 delayMicroseconds(1);
160 digitalWrite(chip_select_pin, LOW);
161 word register_value = spi->transfer16(0x00);
162 digitalWrite(chip_select_pin, HIGH);
165 spi->endTransaction();
167 register_value = register_value >> (1 + data_start_bit - bit_resolution);
169 const static word data_mask = 0xFFFF >> (16 - bit_resolution);
171 return register_value & data_mask;
178void MagneticSensorSPI::close(){
MagneticSensorSPIConfig_s MA730_SPI
MagneticSensorSPIConfig_s AS5047_SPI
MagneticSensorSPIConfig_s AS5048_SPI
MagneticSensorSPIConfig_s AS5147_SPI
#define DEF_ANGLE_REGISTER
float getSensorAngle() override
MagneticSensorSPI(int cs, int bit_resolution, int angle_register=0, long clock_speed=NOT_SET)