Skip to content

Uneld/F103_AS5600_Driver

Repository files navigation

AS5600 Magnetic Encoder Driver

Потокобезопасный драйвер для датчика положения 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

🔧 Настройка I2C

// В cubeMX настройте I2C:
// - Standard mode (100 kHz) 
// - 7-bit addressing
// - Адрес устройства: 0x36

📝 Примечания

  • Драйвер использует блокирующие HAL функции с таймаутом
  • Для неблокирующего режима требуется модификация кода
  • Рекомендуется использовать в отдельном потоке RTOS

Лицензия: MIT
Версия: 1.0.0
Автор: Uneld 😎


About

AS5600 Magnetic Encoder Driver for stm32

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages