|
| 1 | +/* |
| 2 | + * ReadAllRegisters_Serial |
| 3 | + * |
| 4 | + * Демонстрация вывода значений всей карты памяти от энкодера AS5600 в "Монитор порта" |
| 5 | + * |
| 6 | + * AS5600 Board |
| 7 | + * VCC -> +3V3 |
| 8 | + * GND -> GND |
| 9 | + * DIR -> GND |
| 10 | + * SDA -> SDA |
| 11 | + * SCL -> SCL |
| 12 | + * |
| 13 | + * Проверка: |
| 14 | + * 1. Подключить энкодер согласно распиновке |
| 15 | + * 2. Загрузить скетч в плату |
| 16 | + * 3. Открыть "Монитор порта" |
| 17 | + * 4. Менять положение магнита |
| 18 | + * |
| 19 | + * Соответствие массива и регистров: |
| 20 | + * reg_map[0] - ZMCO (0x00) |
| 21 | + * reg_map[1] - ZPOS_H (0x01) |
| 22 | + * reg_map[2] - ZPOS_L (0x02) |
| 23 | + * reg_map[3] - MPOS_H (0x03) |
| 24 | + * reg_map[4] - MPOS_L (0x04) |
| 25 | + * reg_map[5] - MANG_H (0x05) |
| 26 | + * reg_map[6] - MANG_L (0x06) |
| 27 | + * reg_map[7] - CONF_H (0x07) |
| 28 | + * reg_map[8] - CONF_L (0x08) |
| 29 | + * reg_map[9] - STATUS (0x0B) |
| 30 | + * reg_map[10] - RAW_ANGLE_H (0x0C) |
| 31 | + * reg_map[11] - RAW_ANGLE_L (0x0D) |
| 32 | + * reg_map[12] - ANGLE_H (0x0E) |
| 33 | + * reg_map[13] - ANGLE_L (0x0F) |
| 34 | + * reg_map[14] - AGC (0x1A) |
| 35 | + * reg_map[15] - MAGNITUDE_H (0x1B) |
| 36 | + * reg_map[15] - MAGNITUDE_L (0x1C) |
| 37 | + * reg_map[15] - BURN (0xFF) |
| 38 | + * |
| 39 | + * Документация к датчику: |
| 40 | + * https://look.ams-osram.com/m/7059eac7531a86fd/original/AS5600-DS000365.pdf |
| 41 | + * |
| 42 | + * Контакты: |
| 43 | + ** GitHub - https://github.com/S-LABc |
| 44 | + ** Gmail - romansklyar15@gmail.com |
| 45 | + * |
| 46 | + * Copyright (C) 2024. v1.0 / Скляр Роман S-LAB |
| 47 | + */ |
| 48 | + |
| 49 | +// Подключаем библиотеку |
| 50 | +#include <AMS_AS5600.h> |
| 51 | + |
| 52 | +const String desc_map[AS5600_REGISTER_MAP_SIZE] = { |
| 53 | + "ZMCO (0x00)", |
| 54 | + "ZPOS_H (0x01)", |
| 55 | + "ZPOS_L (0x02)", |
| 56 | + "MPOS_H (0x03)", |
| 57 | + "MPOS_L (0x04)", |
| 58 | + "MANG_H (0x05)", |
| 59 | + "MANG_L (0x06)", |
| 60 | + "CONF_H (0x07)", |
| 61 | + "CONF_L (0x08)", |
| 62 | + "STATUS (0x0B)", |
| 63 | + "RAW_ANGLE_H (0x0C)", |
| 64 | + "RAW_ANGLE_L (0x0D)", |
| 65 | + "ANGLE_H (0x0E)", |
| 66 | + "ANGLE_L (0x0F)", |
| 67 | + "AGC (0x1A)", |
| 68 | + "MAGNITUDE_H (0x1B)", |
| 69 | + "MAGNITUDE_L (0x1C)", |
| 70 | + "BURN (0xFF)" |
| 71 | +}; |
| 72 | + |
| 73 | +// Создаем объект Encoder с указанием ссылки на объект Wire |
| 74 | +AS5600 Sensor(&Wire); |
| 75 | + |
| 76 | +void setup() { |
| 77 | + Serial.begin(115200); |
| 78 | + |
| 79 | + // Запускаем соединение |
| 80 | + Sensor.begin(); |
| 81 | + // Настраиваем шину I2C на 400кГц |
| 82 | + Sensor.setClock(); |
| 83 | + //Можно на друие частоты, но работает не на всех микроконтроллерах |
| 84 | + //Sensor.setClock(AS5600_I2C_CLOCK_100KHZ); // 100кГц |
| 85 | + //Sensor.setClock(AS5600_I2C_CLOCK_1MHZ); // 1МГц |
| 86 | + //Sensor.setClock(725000); // Пользовательское значение 725кГц |
| 87 | + |
| 88 | + // Пока не подключен датчик |
| 89 | + while (!Sensor.isConnected()) { |
| 90 | + // Выводим сообщение об отсутствии датчика |
| 91 | + Serial.println("AS5600 не обнаружен!"); |
| 92 | + Serial.println("Проверьте I2C шину"); |
| 93 | + delay(1000); |
| 94 | + } |
| 95 | + // Выводим сообщение о наличии датчика |
| 96 | + Serial.println("AS5600 обнаружен!"); |
| 97 | + |
| 98 | + // Пока датчик не обнаружил магнит |
| 99 | + while (!Sensor.isMagnetDetected()) { |
| 100 | + // Выводим сообщение об отсутствии магнита |
| 101 | + Serial.println("Магнит не обнаружен!"); |
| 102 | + Serial.println("Возможно он слабый"); |
| 103 | + delay(1000); |
| 104 | + } |
| 105 | + // Выводим сообщение о наличии магнита |
| 106 | + Serial.println("Магнит обнаружен!"); |
| 107 | +} |
| 108 | + |
| 109 | +void loop() { |
| 110 | + byte reg_map[AS5600_REGISTER_MAP_SIZE]; // Не должен быть меньше 18, AS5600_REGISTER_MAP_SIZE = 18 |
| 111 | + Sensor.getAllRegisters(reg_map, sizeof(reg_map)); // Получаем данные в массив |
| 112 | + for (int i = 0; i < sizeof(reg_map); i++) { |
| 113 | + Serial.print(desc_map[i] + " "); // Вывод названий регистров в "Монитор порта" |
| 114 | + Serial.println(reg_map[i], HEX); // Вывод значений регистров в "Монитор порта" |
| 115 | + } |
| 116 | + |
| 117 | + // Разделение и задержка |
| 118 | + Serial.println(); |
| 119 | + delay(500); |
| 120 | +} |
0 commit comments