Дети решили построить балансирующего робота. Сделали модель шасси. Прикрутили плату esp32. Драйвера шаговых моторов и сами шаговики Nema17.
В качестве гироскопа использовали mpu6050.
4 аккумулятора 18650 соединенных последовательно.
Сделали небольшую програмку для управления моторами. Но похоже не хватает крутящего момента у шаговиков. Заказали коллекторные моторчики с редукторами.
Собрали все в новое шасси а вместо датчика mpu6050 установили bno055.
И вот вчера весь вечер пытались подключить этот датчик. Как только он подключается к шине i2c сразу перестает работать другой датчик vl530x (определяет расстояние). И на i2c искажается сигнал. Смотрели осцилографом при работе датчика vl530 и отдельно при подключении bno055.
BNO055 подключен на vcc, gnd, sda, scl. Другие пины не подключали. Заменили датчик и второй так же себя ведет. Кто встречался с подобной проблемой? Куда копать? Может как-то явно нужно указать тип интерфейса?
В каком месте «тележка на колёсиках» является «балансирующим роботом»? Вы хоть разницу понимаете?
Если у вас проблема с подключением какого либо датчика, то:
2.1. Называйте тему в соответствии с проблемой, так шанс получить решение кратно возрастает.
2.2. Прикладывайте к теме СХЕМУ (минимальную, но полную), которая воспроизводит проблему.
2.3. Прикладывайте к теме минимальный код, с которым воспроизводится проблема.
Если вы намерены оскорбиться первыми двумя пунктами - помощи вы тут не найдёте, не тратьте своё и наше время.
Тележка/шасси на двух колесиках.
Извиняюсь за недостаточную информацию.
Тему балансирующего робота намеренно создал. Множество вопросов появилось на первом прототипе. постараюсь подробно описать.
Контроллер Esp32. На шине i2c сейчас подключен лазерный датчик расстояния vl530. Получаем с него данные.
На ту же шину i2c подключаю датчик bno055. Как только подключается датчик bno055 - перестает работать датчик vl530. То, что удалось понять - при подключении датчика bno055 на шине i2c (scl/sda) появляются помехи и сама форма сигналов не похожа на работу шины. Как будто при подключении bno055 нарушается работа шины i2c.
Читал на зарубежных ресурсах, что есть пины которые должны переключать интерфейс датчика i2c/uart. Явных контактов не нашел. Вот тут видно что-то похожее на перемычки. Быть может в них дело
А вот тут о важности предоставления скетча и использованных библиотек: ничего что при совпадении адреса программа будет пытаться работать с гироскопом как с дальномером?!
Но хто мы такие, шобы спорить.
А можно увидеть это описание со сылкой на еспрессиф систем?
Про конфликт я думал. Отключал vl530 оставляя на шине только bno055. И как только подключал bno055 так сразу на шине появлялись сильные помехи.
Программный код взял из примеров.
/*
***************************************************************************
Euler_Streaming.pde - part of sample SW for using BNO055 with Arduino
(C) All rights reserved by ROBERT BOSCH GMBH
Copyright (C) 2014 Bosch Sensortec GmbH
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
/* Date: 2014/01/07
Revision: 1.2
*/
#include "BNO055_support.h" //Contains the bridge code between the API and Arduino
#include <Wire.h>
//The device address is set to BNO055_I2C_ADDR2 in this example. You can change this in the BNO055.h file in the code segment shown below.
// /* bno055 I2C Address */
#define BNO055_I2C_ADDR1 0x28
// #define BNO055_I2C_ADDR2 0x29
// #define BNO055_I2C_ADDR BNO055_I2C_ADDR2
//Pin assignments as tested on the Arduino Due.
//Vdd,Vddio : 3.3V
//GND : GND
//SDA/SCL : SDA/SCL
//PSO/PS1 : GND/GND (I2C mode)
//This structure contains the details of the BNO055 device that is connected. (Updated after initialization)
struct bno055_t myBNO;
struct bno055_euler myEulerData; //Structure to hold the Euler data
unsigned long lastTime = 0;
void setup() //This code is executed once
{
//Initialize I2C communication
Wire.begin();
//Initialization of the BNO055
BNO_Init(&myBNO); //Assigning the structure to hold information about the device
//Configuration to NDoF mode
bno055_set_operation_mode(OPERATION_MODE_NDOF);
delay(1);
//Initialize the Serial Port to view information on the Serial Monitor
Serial.begin(115200);
}
void loop() //This code is looped forever
{
if ((millis() - lastTime) >= 100) //To stream at 10Hz without using additional timers
{
lastTime = millis();
bno055_read_euler_hrp(&myEulerData); //Update Euler data into the structure
Serial.print("Time Stamp: "); //To read out the Time Stamp
Serial.println(lastTime);
Serial.print("Heading(Yaw): "); //To read out the Heading (Yaw)
Serial.println(float(myEulerData.h) / 16.00); //Convert to degrees
Serial.print("Roll: "); //To read out the Roll
Serial.println(float(myEulerData.r) / 16.00); //Convert to degrees
Serial.print("Pitch: "); //To read out the Pitch
Serial.println(float(myEulerData.p) / 16.00); //Convert to degrees
Serial.println(); //Extra line to differentiate between packets
}
}
При загруженной программе чтения дальномера, (и подключенном vl530) просто подключаю bno055 без программной обработки и сразу же получаю помехи на шине i2c и как следствие vl530 перестает передавать данные. Висит на ошибке инициализации/
из какого куска платы можно сделать вывод о толерантности к 5в?
на самом деле пины толерантны (есть исключения), об этом раньше было написано в даташите, потом это дело убрали от туда, защитив себя от дурака.
источник тут
как говорится, за что купил.