55// _bit_resolution sensor resolution bit number
66// _angle_register - (optional) angle read register - default 0x3FFF
77MagneticSensorSPI::MagneticSensorSPI (int cs, float _bit_resolution, int _angle_register){
8- // chip select pin
8+
99 chip_select_pin = cs;
1010 // angle read register of the magnetic sensor
1111 angle_register = _angle_register ? _angle_register : DEF_ANGLE_REGISTAR;
@@ -21,25 +21,21 @@ MagneticSensorSPI::MagneticSensorSPI(int cs, float _bit_resolution, int _angle_r
2121
2222}
2323
24- MagneticSensorSPI MagneticSensorSPI::MA730 (int cs) {
25- MagneticSensorSPI* sensor = new MagneticSensorSPI (cs, 14 , 0x0000 );
26- sensor->spi_mode = SPI_MODE0;
27- sensor->command_parity_bit = -1 ; // parity bit insertion not implemented
28- sensor->command_rw_bit = -1 ; // rw bit not required for angle
29- sensor->data_start_bit = 15 ;
30- return *sensor;
31- }
32-
33- MagneticSensorSPI MagneticSensorSPI::AS5147 (int cs) {
34- MagneticSensorSPI* sensor = new MagneticSensorSPI (cs, 14 , 0xCFFF );
35- sensor->spi_mode = SPI_MODE1;
36- sensor->command_parity_bit = 15 ;
37- sensor->command_rw_bit = 14 ;
38- sensor->data_start_bit = 13 ;
39- return *sensor;
24+ MagneticSensorSPI::MagneticSensorSPI (MagneticSensorSPIConfig_s config, int cs){
25+ chip_select_pin = cs;
26+ // angle read register of the magnetic sensor
27+ angle_register = config.angle_register ? config.angle_register : DEF_ANGLE_REGISTAR;
28+ // register maximum value (counts per revolution)
29+ cpr = pow (2 , config.bit_resolution );
30+ spi_mode = config.spi_mode ;
31+ clock_speed = config.clock_speed ;
32+ bit_resolution = config.bit_resolution ;
33+
34+ command_parity_bit = config.command_parity_bit ; // for backwards compatibilty
35+ command_rw_bit = config.command_rw_bit ; // for backwards compatibilty
36+ data_start_bit = config.data_start_bit ; // for backwards compatibilty
4037}
4138
42-
4339void MagneticSensorSPI::init (){
4440 // 1MHz clock (AMS should be able to accept up to 10MHz)
4541 settings = SPISettings (clock_speed, MSBFIRST, spi_mode);
@@ -174,10 +170,10 @@ word MagneticSensorSPI::read(word angle_register){
174170
175171 word command = angle_register;
176172
177- if (command_rw_bit > - 1 ) {
173+ if (command_rw_bit > 0 ) {
178174 command = angle_register | (1 << command_rw_bit);
179175 }
180- if (command_parity_bit > - 1 ) {
176+ if (command_parity_bit > 0 ) {
181177 // Add a parity bit on the the MSB
182178 command |= ((word)spiCalcEvenParity (command) << command_parity_bit);
183179 }
0 commit comments