Потокобезопасный драйвер для датчика положения AS5600 на базе STM32 HAL
Высокоуровневый C++ драйвер для магнитного энкодера AS5600, обеспечивающий простой и надежный интерфейс для работы с датчиком угла поворота. Драйвер реализован с блокировкой потока для безопасного использования в многопоточных приложениях.
- Полная поддержка всех функций AS5600 - RAW угол, обработанный угол, статус магнита, AGC, конфигурация
- Потокобезопасность - встроенная защита для многопоточных сред
- HAL-совместимость - работает с STM32Cube HAL I2C
- Объектно-ориентированный дизайн - чистый C++ интерфейс
- Подробная документация - каждый метод имеет комментарии Doxygen
- Гибкая конфигурация - все настройки датчика через структуры
AS5600_Driver/
├── Core/
| └── Src/
│ ├── AS5600/
│ | ├── AS5600.h # Основной класс драйвера
│ | ├── AS5600_Types.h # Типы данных и конфигурации
│ | └── AS5600.cpp # Реализация методов
| └── main.cpp # Пример использования
├── README.md
└── LICENSE
- Сырой угол (RAW angle)
- Обработанный угол с фильтрацией
- Статус магнита (нормальный/сильный/слабый/отсутствует)
- Автоматическая регулировка усиления (AGC)
- Величина магнитного поля (CORDIC magnitude)
- Установка стартовой/стоповой позиции
- Ограничение максимального угла
- Настройка фильтров (медленный/быстрый)
- Выбор режима питания
- Настройка гистерезиса
- Конфигурация выхода (аналоговый/PWM)
Драйвер использует HAL функции I2C с блокировкой потока, что обеспечивает:
- Атомарность операций - каждая транзакция I2C выполняется полностью без прерываний
- Защита от конфликтов - предотвращение одновременного доступа к шине I2C
- Предсказуемое поведение - детерминированное время выполнения операций
- Готовность для RTOS - безопасное использование в FreeRTOS и других ОСРВ
#include "AS5600.h"
// Создание экземпляра
AS5600 encoder(&hi2c1);
// Проверка магнита
if (encoder.isMagnetOK()) {
// Чтение угла
uint16_t angle = encoder.getAngle();
float degrees = encoder.getAngleDegrees();
}
// Настройка конфигурации
AS5600T::ConfigData config;
config.PowerMode = AS5600T::POWER_MODE::NOM;
config.OutputStage = AS5600T::OUTPUT_STAGE::FULL;
encoder.setConfig(&config);- STM32 с поддержкой I2C
- STM32Cube HAL
- C++17 или новее
- Магнитный энкодер AS5600
// В cubeMX настройте I2C:
// - Standard mode (100 kHz)
// - 7-bit addressing
// - Адрес устройства: 0x36- Драйвер использует блокирующие HAL функции с таймаутом
- Для неблокирующего режима требуется модификация кода
- Рекомендуется использовать в отдельном потоке RTOS
Лицензия: MIT
Версия: 1.0.0
Автор: Uneld 😎