AS5600

Форк
0
/
main.py 
85 строк · 3.6 Кб
1
import sys
2
from machine import I2C, Pin
3
from sensor_pack_2.bus_service import I2cAdapter
4
import as5600mod
5
import time
6

7

8
def decode_magnet_status(source: as5600mod.status_as5600, _gain: int):
9
    """Выводит в stdout состояние магнита и усиление АРУ"""
10
    if source.min_gain_ovf:
11
        print("Магнит слишком сильный! Замените его на более слабый!!!")
12
        return
13
    print(f"Магнит установлен: {source.mag_detected}; Предел усиления АРУ достигнут: {source.max_gain_ovf}; Минимальное усиление: {source.min_gain_ovf}; Усиление: {_gain}")
14

15

16
def decode_config(source: as5600mod.config_as5600):
17
    """Выводит в stdout настройки датчика"""
18
    def decode_pm(pm: int) -> str:
19
        if 0 == pm:
20
            return "нормальный режим"
21
        return f"LPM{pm}"
22

23
    def decode_hyst(hyst: int) -> str:
24
        if 0 == hyst:
25
            return "выключен"
26
        return f"{hyst}"
27

28
    def decode_output_stage(stage: int) -> str:
29
        if 0 == stage:
30
            return "аналоговый выход. диапазон GND..VDD"
31
        if 1 == stage:
32
            return "аналоговый выход. диапазон 10% VDD..90% VDD"
33
        if 2 == stage:
34
            return "Цифровой выход. ШИМ."
35

36
    def decode_pwmf(pwmf: int) -> int:
37
        vals = 115, 230, 460, 920   # Гц
38
        return vals[pwmf]
39

40
    def decode_slow_filter(sf: int) -> str:
41
        vals = "16x", "8x", "4x", "2x"
42
        return vals[sf]
43

44
    def decode_ffh(ffh: int) -> int:
45
        vals = 0, 6, 7, 9, 18, 21, 24, 10
46
        return vals[ffh]
47

48
    print(f"Watchdog: {source.watchdog}")
49
    print(f"fast filter threshold: {decode_ffh(source.fast_filter_threshold)}; slow filter: {decode_slow_filter(source.slow_filter)}")
50
    print(f"PWM frequency: {decode_pwmf(source.pwm_freq)}; output stage: {decode_output_stage(source.output_stage)}")
51
    print(f"hysteresis: {decode_hyst(source.hysteresis)}; power mode: {decode_pm(source.power_mode)}")
52

53

54
def decode_angle_pos(source: as5600mod.angle_positions, _raw: bool):
55
    """Выводит в stdout угловые настройки датчика"""
56
    print(f"Угловые положения raw: {_raw}. старт: {source.start}; стоп: {source.stop}; диапазон: {source.angular_range}")
57

58

59
if __name__ == '__main__':
60
    i2c = I2C(id=1, scl=Pin(7), sda=Pin(6), freq=400_000)  # on Raspberry Pi Pico
61
    adapter = I2cAdapter(i2c)
62
    sensor = as5600mod.AS5600(adapter)
63
    print(f"Время преобразования [мкс]: {sensor.get_conversion_cycle_time()}")
64
    print("---Настройки датчика---")
65
    decode_config(sensor.get_config(noreturn=False))
66
    print("---Угловые настройки---")
67
    decode_angle_pos(sensor.get_angle_pos(raw=False), _raw=False)
68
    sensor.set_angle_pos(0, 360)
69
    decode_angle_pos(sensor.get_angle_pos(raw=False), _raw=False)
70
    #
71
    check_magnet_time = 15
72
    print("---Проверка наличия магнита---")
73
    wait_func = time.sleep_us
74
    for _ in range(check_magnet_time):
75
        decode_magnet_status(sensor.status, sensor.gain)
76
        time.sleep_ms(1000)
77
    #
78
    counter, _max = 0, 10_000
79
    sensor.start_measurement()
80
    for angle in sensor:
81
        print(f"Угол: {angle}; raw angle: {sensor.get_raw_angle(raw=True)}; коефф. усиления: {sensor.gain}; magnitude: {sensor.magnitude}")
82
        wait_func(100_000)
83
        if counter > _max:
84
            sys.exit(0)
85
        counter += 1
86

87

88

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.