complete the switch to SS49E hall sensor
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
#include "ss49e.h"
|
||||
|
||||
void ss49e_init(SS49E_State *self, enum MagnetPolarityType magnetPolarityType, ss49e_tick_callback_t tickCallback) {
|
||||
self->workingPhase = SS49E_WORKING_PHASE_NORMAL;
|
||||
self->tickCallback = tickCallback;
|
||||
|
||||
self->magnetPolType = magnetPolarityType;
|
||||
const float level0 = 2445.0f / 4095.0f;
|
||||
const float deviation = 380.0f / 4095.0f;
|
||||
if (magnetPolarityType == MAGNET_POLTYPE_BIPOLAR) {
|
||||
// self->threshold01 = level0 + deviation * 0.75;
|
||||
// self->threshold10 = level0 - deviation * 0.75;
|
||||
self->threshold01 = (2447.0 + 520.0 * 2.0 / 3.0) / 4095.0;
|
||||
self->threshold10 = (2447.0 - 800.0 * 2.0 / 3.0) / 4095.0;
|
||||
} else {
|
||||
float activeLevel = level0 + (magnetPolarityType == MAGNET_POLTYPE_UNIPOLAR_POSITIVE ? deviation : -deviation);
|
||||
self->threshold01 = level0 * 1 / 3 + activeLevel * 2 / 3;
|
||||
self->threshold10 = activeLevel * 1 / 3 + level0 * 2 / 3;
|
||||
}
|
||||
self->currentLevel = 0;
|
||||
}
|
||||
|
||||
void ss49e_process_sample(SS49E_State *self, uint16_t sample) {
|
||||
float normalized = (float)sample / 4095.0f;
|
||||
if (self->currentLevel == 0) {
|
||||
if (normalized >= self->threshold01) {
|
||||
self->currentLevel = 1;
|
||||
if (self->magnetPolType == MAGNET_POLTYPE_BIPOLAR || self->magnetPolType == MAGNET_POLTYPE_UNIPOLAR_POSITIVE)
|
||||
self->tickCallback();
|
||||
}
|
||||
} else {
|
||||
if (normalized <= self->threshold10) {
|
||||
self->currentLevel = 0;
|
||||
if (self->magnetPolType == MAGNET_POLTYPE_BIPOLAR || self->magnetPolType == MAGNET_POLTYPE_UNIPOLAR_NEGATIVE)
|
||||
self->tickCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user