Перейти к содержанию

xrou

Members
  • Постов

    23
  • Зарегистрирован

  • Посещение

Весь контент xrou

  1. Привет, к стмке подключен датчик тока INA219. Датчик измеряет напряжение на аккумуляторе (до 16.8 вольт) и ток, потребляемый коптерным моторчиком (до 20А). Шунт заменен на шунт с сопротивлением в 0.01 Ом. При считывании напряжения выдает что-то около трех вольт и отсутствие тока (реальное напряжение на аккуме около 12, ток какой есть, максимальные обороты мотора). Мне кажется дело в том что датчик не откалиброван, подскажите какое значение калибровки нужно для правильной работы.
  2. Всем привет, есть микросхема gy9250. Нужно подключить по программному i2c. Есть такой код: #include <MPU9250.h> #include <SoftWire.h> MPU9250_<SoftWire> mpu; SoftWire sw(6, 5); void setup() { Serial.begin(115200); Serial.print("Init.... "); MPU9250Setting setting; setting.accel_fs_sel = ACCEL_FS_SEL::A16G; setting.gyro_fs_sel = GYRO_FS_SEL::G2000DPS; setting.mag_output_bits = MAG_OUTPUT_BITS::M16BITS; setting.fifo_sample_rate = FIFO_SAMPLE_RATE::SMPL_200HZ; setting.gyro_fchoice = 0x03; setting.gyro_dlpf_cfg = GYRO_DLPF_CFG::DLPF_41HZ; setting.accel_fchoice = 0x01; setting.accel_dlpf_cfg = ACCEL_DLPF_CFG::DLPF_45HZ; mpu.setup(0x68, setting, sw); Serial.println("done"); pinMode(13, OUTPUT); } void loop() { if (mpu.update()) { Serial.print(mpu.getYaw()); Serial.print(" "); Serial.print(mpu.getPitch()); Serial.print(" "); Serial.println(mpu.getRoll()); } digitalWrite(13, !digitalRead(13)); delay(20); } условие в loop никогда не выполняется. Анализатор молчит. Сигнал есть только при mpu.setup(). Помогите подключить датчик
  3. xrou

    Stm и digispark по i2c

    Полистал даташит на микросхемы attiny https://static.chipdip.ru/lib/542/DOC003542649.pdf. При питании 5 вольт, за единицу берется напряжение от 2.5 вольт (пункт 22.7). Еще и запас остается около 0.8 вольт
  4. xrou

    Stm и digispark по i2c

    Так тоже пробовал. Stm, digispark питаются от 5 вольт, линии I2C подключены на прямую. Резистор 10к на SDA и резистор 10к на SCL
  5. xrou

    Stm и digispark по i2c

    Уровни выравниваю отдельной платой, которая по сути просто несколько транзисторов. Работает в обе стороны. 3,3В <-> 5В
  6. xrou

    Stm и digispark по i2c

    Да, 10 кОм каждый к линии 5 вольт. Может надо к 3,3?
  7. xrou

    Stm и digispark по i2c

    Всем привет, собираю сеть из stm32f103c8t6 и digispark (attiny85), связь по i2c. Digispark включается с задержкой 5-6 секунд, в это время stm уже начинает слать пакеты, при включении digispark отправка происходит, но сигнал тухнет. Исправил это добавив задержку перед инициализацией периферии, в итоге код получился такой: int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ HAL_Delay(7000); /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); uint8_t I2C_Address = 0x50; uint8_t recieveData = 0; /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { uint8_t sendData = 10; HAL_I2C_Master_Transmit(&hi2c1, (I2C_Address << 1), &sendData, 1, 100); HAL_Delay(100); sendData = 20; HAL_I2C_Master_Transmit(&hi2c1, (I2C_Address << 1), &sendData, 1, 100); HAL_Delay(100); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); HAL_Delay(100); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } Но связи по прежнему нет. Для отладки поставил вместо stm ардуину - связь есть. Поставил вместо digispark ардуину - связь есть (между stm и ардуино). Digispark как будто не слышит stm. В чем проблема? Использую аналог digispark - attiny85 uno mini usb (тот же самый digispark, но с другим портом) Код digispark #include <TinyWire.h> #define SLAVE_ADDR 0x50 int potVal = 0; int led_val = 0; void setup() { pinMode(1, OUTPUT); TinyWire.begin(SLAVE_ADDR); TinyWire.onRequest(angleRequest); TinyWire.onReceive(messageReceive); digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); } void loop() { } void messageReceive(int howMany) { if(led_val == 1) { digitalWrite(1, LOW); led_val = 0; } else if(led_val == 0) { digitalWrite(1, HIGH); led_val = 1; } uint8_t receiveData = TinyWire.read(); } void angleRequest() { potVal = analogRead(3); byte high = highByte(potVal); byte low = lowByte(potVal); TinyWire.send(high); TinyWire.send(low); }
  8. Вопрос был в том, как заставить мотор приходить в нужное положение с первого раза. Энкодер я уже настроил, он работает
  9. Магнитный энкодер. Или может вы про что-то другое?
  10. Здравствуйте, имеется: мотор 60GA775 12 вольт, магнитный энкодер AS5600, stm32f103c8t6, пытаюсь сделать из всего этого серводвигатель с помощью ПИД регулятора. Но выходной вал либо не доезжает, либо колебается вокруг заданного положения. Подскажите как настроить ПИД регулятор(Что он должен регулировать? Если мощность, то какое минимальное значение - то, при котором начинает движение мотор или 0?). Слышал про OpenServo но они походу сдулись, но на алике есть другие контроллеры, но не понятно что конкретно они делают и с какой точностью. На фотке, как это все выглядит (мотор внутри трубы)
  11. Здравствуйте, пытаюсь подключить USB флешку к STM32F767ZI Включаю USB_OTG_FS - host only, (V bus и SOF не включаю), USB HOST Class for fs ip - Mass Storage host class, FATFS (USE_LFN - в стеке) - USB_Disk В настройках USB_HOST требует, как я понял, пин отвечающий за питание устройства - PC1 Код простейший, должен работать 100% а может нет. Внутренние файлы библиотек не менял Думаю что нет питания на USB устройство т.к. пробовал вставить туда ttl конвертер на котором есть светодиод питания и он не горит Ваши идеи и предположения?
  12. Я не имею больших знаний в этой области, но очень хочется что либо создавать, а в гуглах ответа на этот вопрос нет (либо я спрашивать не умею, либо все и так умные все знают)
  13. Хорошо, с джойстиком разобрались, а мне надо подключить сервопривод mg996r у которого логический уровень 4.8-7.2 вольта, как быть в таком случае? Знаю про преобразователь уровней, но будет ли он нормально работать с шим сигналом?
  14. Включил в 3.3, снова появились огромные мёртвые зоны. Думал писать но заметил что они внезапно пропали, потыкал провода, проверил все, ничего и заметил, когда я соединяю контакты USB - большой, железный, походу это земля, зоны пропадают и он начинает выдавать отличные значения. Опять все вернулось к земле спасибо!
  15. Джойстик KY-023, имеет вход 5v и gnd, 3 выхода vrx, vry, sw
  16. Здравствуйте, хочу подключить джойстик к stmке, но проблема в том что он пятивольтовый, а АЦП все, что больше 3.3 выдаёт как 4095. На ардуино есть контакт aref введённый на плату, но на stm, как я понял, он соединён с контактом питания и все что выше 3.3 вольта просто спалит кристал. Подскажите как подключить пятивольтовое устройство к stmке. P.s подключить джойстик к 3.3 не получится из-за появления огромных мёртвых зон.
  17. Ну, что я короче сделал. Увеличил буфер. Память почти резиновая, так что можно.
  18. Не, я имею ввиду статьи про то как они все сами сделали исходя только из знания как работает uart. Ну стринг это вроде библиотечный класс и его можно подключить инклудом, а delay заменяется HAL_Delay Это особенность платформы? Жаль конечно, жизнь они облегчают сильно.
  19. Вот, это я и пытаюсь сделать, но куда формировать эту строку? Пытался копировать ее в char буфер, в принципе работало, но если передавать строку размером больше указанной в ...Recieve_IT то он просто обрубает не влезший кусок, хотя я сразу после от отправки строки обратно запускаю прерывание. Подсмотрел как я реализовывал это дело в ардуино, там все проще, намного. Используется string в который можно добавлять символы пока память не треснет, а вот в STM я так и не смог подключить ни стринг, ни вектор - жалуется на дебри библиотеки iostream. Как это можно решить? Или есть какие-то ограничения не позволяющие использовать их? Я пытаюсь вытащить все доступные точки WiFi из esp, но их может быть очень много, а всего для одной сети он дает полную характеристику, что занимает кучу места в буфере. Да и данные от esp текут постоянно. Полезная штука для передачи единичных команд. Куда нужна такая скорость? Все вот говорят, что для быстрых операций, но каких толком не говорят UPD: а где про все такое можно почитать? Просто куда не посмотри все все сами пишут и рассказывают, откуда они информацию берут? Есть что нибудь (видео, книга и тд и тп) где про вот это все расписано по полочкам, что куда и как?
  20. Здравствуйте, пытаюсь обрабатывать пакеты приходящие от ESP8266 (01), но проблема в том, что пакеты всегда разной длины ведь мы не знаем, что напишет пользователь (хотя даже ответы на AT команды всегда разной длины). Знаю, что в плате F0 есть прерывание по символу, но у меня F103C8T6. Как быть? Создать массив большого размера нельзя, т.к. HAL_Recieve_IT ждет пока не наберется нужное кол-во символов. Приму любую идею и советы
  21. Проблема оказалась не в коде. Когда пытался воспроизвести ответы, захотел собрать "статистику" ошибок. И из-за того что мне надоело выдергивать 2 шнура питания, для стмки и для индикаторов, я подключил все к одному источнику иии заработало Добавил задержку в строб - 2 млс, лишней не будет. Спасибо! @BARS_ Использую такую же схему подключения, но работа с регистрами на прямую дается очень сложно - не могу воспринимать их.
  22. Здравствуйте. Собираю светодиодный индикатор. Использую stm32F103C8T6, сдвиговый регистр 74HC595 (HYC 825Z - не знаю что это значит), светодиодный индикатор на 10 светодиодов SHB10R. Подключаю по такой схеме https://cxemka.com/upload/art/74hc595_spi_stm32/connection_stm32_74hc595_spi.svg Код в Keil с использованием HAL и Cube Проблема: на индикаторе то вообще ничего не зажигается, то надо раз 10 нажать резет и только спустя какое то время оно начинает работать, но не правильно: По идее оно должно зажечь сначала весь индикатор, 4 светодиода, 2 и так по кругу. Но оно иногда проскакивает состояния, зажигает левые светодиоды. Подскажите в чем может быть проблема, изучаю stm совсем не много еще толком ничего не знаю. Можно ли вообще использовать HAL для передачи данных? или писать самому.
×
×
  • Создать...