Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
drivers: sensor: ams_as5600: Fix calculation of fractional part
commit 98903d4 upstream. The original calculation has two bugs. One is the calculated value, and the other is that the value is not in one-millionth parts. What the original calculation does is compute a scaled position value by multiplying the raw sensor value (`dev_data->position`) by `AS5600_FULL_ANGLE`, which represents a full rotation in degrees. It then subtracts the product of the whole number of pulses (`val->val1`) and `AS5600_PULSES_PER_REV` from this scaled position value. ((int32_t)dev_data->position * AS5600_FULL_ANGLE) - (val->val1 * AS5600_PULSES_PER_REV); What you actually need is to extract the fractional part of the value by taking the modulo of AS5600_PULSES_PER_REV from the scaled value of the position. (((int32_t)dev_data->position * AS5600_FULL_ANGLE) % AS5600_PULSES_PER_REV) Then convert the value to one-millionth part. * (AS5600_MILLION_UNIT / AS5600_PULSES_PER_REV); Signed-off-by: Yasushi SHOJI <[email protected]>
- Loading branch information