1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

Arduino и AVR (Atmel) микроконтроллеры

Тема в разделе "Наши другие увлечения", создана пользователем raefa, 9 мар 2016.

Реклама. Купить это место.
  1. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Последнее редактирование: 19 окт 2017
  2. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    На коптере идёт очень длинное усреднение. Обратите внимание - сколько времени занимает хотя бы установление постоянной величины напряжения :)

    С 18м винтом - ну вот совсем ничего хорошего.
     
  3. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    А сложно будет прикрутить вашу программу на компьютере к моему стенду? чтоб автоматически параметры собирать???
     
  4. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Проще взять мой скетч целиком как есть :) Тем более всё равно счётчика оборотов у вас пока нет, так что функционал фактически идентичный.
    Только поправить выбранные пины и коэффициенты.
     
  5. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Тогда нужна схема подключения всего того что установлено.
    LiquidCrystal_PCF8574.h это библиотека к шилду arduino с экраном и кнопками? если я его просто воткну в arduin ку ? ни чего менять не придется в скетче?
     
  6. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Я уже давал. Там всё расписано (часть в комментариях).
    http://forum.rcdesign.ru/blogs/249571/blog22911.html
     
  7. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    А сама программа? которая на компе? где взять?
     
  8. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
  9. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Что за библиотека такая <Key.h> найти ее не могу, те что есть не подключаются.
    --- Сообщения объединены, 25 сен 2017 ---
    В общем 2 библиотеки не подключаются
    <Key.h> и <LiquidCrystal_PCF8574.h>
    С разных мест скачивал, ни одна не подрубилась. можете свои скинуть?
    --- Сообщения объединены, 25 сен 2017 ---
    При компиляции пишет ошибку что не получается ее сделать.
     
  10. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Выкиньте две первые строки :) Это я хотел клавиатуру к нему присобачить, а потом забыл это дело удалить :)
    --- Сообщения объединены, 25 сен 2017 ---
    Можете вместо неё использовать свою
    LiquidCrystal_I2C.h
    Это абсолютно то же самое - разные форки.
     
  11. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Такс Под свою схему пины вольтметра и амперметра поменял, вольтметр заработал нормально а вот ток не получается.
    float realI = (float(inI)- 512.0)*5.0/1024/0.0133;
    в чем проблема? в моем же скетче работает а в вашем показывает 36 ампер.

    Где находится калибровочная констатнта весов? случаем не эта? const uint16_t hx_scaler = 500;
    пины на тензоодатчик тоже поменял в программе вес меняется.

    Как кнопки соединены? один пин всех кнопок объединен и соединен с gnd а второй пин каждой подключен к ардуинке. кнопки на замыкание или размыкание?
     
  12. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    А пины весов поменяли? А то у меня 6ой пин был использован для весов.
    int32_t real_weight = - (hx_curr_reading - hx_zero_value) / 810;
    вот эти 810 и есть :)
    Да. Кнопки на замыкание.
    --- Сообщения объединены, 25 сен 2017 ---
    Да, мусора там много :) Надо бы выкроить время и почистить :) Тот же hx_scaler объявлен, но не используется :(
     
  13. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Да пины весов нашел и поменял, в программе показывается, Как правильно константу поправочную расчитать? подгоном?

    про получается я спрашивал про ток. почему добавив float realI = (float(inI)- 512.0)*5.0/1024/0.0133; он показывает при ноле фактическом, 36 ампер??? при этом в моем скетче нормально работает.
    --- Сообщения объединены, 25 сен 2017 ---
    Нашел косяк, пины неправильно поставил. на вольтметре с амперметром. пошел паять кнопки.:thumbsup:
     
  14. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Как ни странно подошла моя константа только без знака минус, показания один в один по весу.
    И есче с кнопкой RUN я как бы разобрался для чего она но зачем есче 2 кнопки + и - ???
     
  15. LampGraph

    LampGraph Кандидат наук

    Регистрация:
    16 ноя 2015
    Сообщения:
    1.230
    Город:
    Абакан
    Имя:
    Вячеслав
    Коллеги, учитесь экономить машинное время, память и свои нервы. Сразу, с азов. Потом будет проще.
    Например, избавляйтесь от циклов.
    Цикл вещь хорошая и удобная, но только там где его использование оправдано. В большинстве же программ для ардуины весь код крутится в одном большом бесконечном цикле loop, вот его и нужно использовать.
    Пример:
    Основная задача этого куска кода- усреднение не выполняется и вот почему:
    10 раз выполняется один и тот же код из трех функций. Функция get_units и два раза analogRead.
    Пусть это занимает 10мс (не факт, это для примера). Вы находите среднее значение показаний за 10мс.
    Дальше выполняется остальной код программы, который занимает 50мс - и вот эти показания вы теряете. Совсем и безвозвратно. И получается все-равно не среднее.
    Если избавиться от цикла и сделать так:
    float real_w += scale.get_units(1); //Складываем предыдущее значение с новым
    float real_w /= 2; //Делим пополам, тем самым получаем среднее не за 10 последних измерений, а за все время работы программы.
    1) Избавляемся от двух лишних переменных тем самым экономим память.
    2) Расчет усредненного значения занимает не 10мс, а 1мс, соответственно главный цикл сокращается на 9мс и все работает быстрее.
    3) Теперь получаем реально усредненное значение показаний с минимальными потерями. Точнее можно реализовать только используя прерывания.
    4) Показания будут меняться намного плавнее.

    Далее, давайте понятные имена переменным и числам - через пару месяцев потом самому будет намного проще разобраться в коде. Пример:
    float real_i = (float(total_i) / 10 - 512.0)*5.0/1024/0.0133
    Гораздо лучше написать:
    В шапке (в самом верху программы):
    #define BIAS_NUL 512
    #define VREF 5
    #define KAKOETOCHISLO 1024
    #define ESCHECHEGOTO 0.0133

    В коде:
    float real_current = (float(total_current) / 10 - BIAS_NUL)*VREF/KAKOETOCHISLO/ESCHECHEGOTO

    Еще один плюс от такого подхода:
    Что бы изменить что-то, не нужно искать это в коде. Если вы используете одно и то же число в нескольких местах - поменять можно только одно значение в шапке.
    В отличие от констант и переменных - идентификаторы не жрут память. Просто компилятор подставляет их значения в текст программы.
    --- Сообщения объединены, 26 сен 2017 ---
    Самое простое для этого - взять кренку, пару кондеров и ардуину (только ардуину или ногу опорного напряжения) питать через эту кренку от основного источника. Тогда опорное напряжение не будет зависеть от нагрузки и показания будут намного точнее.
     
  16. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    Это дополнительная кренка или бек , лишняя деталь получается. Опираться на внутренний источник атмеги не проще? он уже как бы есть , или он не настолько точен??? или это замедлит программу?
     
  17. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Разумеется. Поэтому у меня в программе, например, усреднения нет вообще (точнее уже в компе усредняются вообще все измерения за 5 секунд). Но Marksheider очень хотелось усреднений, поэтому я написал - как это можно делать :) В данном случае (просто для уменьшения скачков выводимых значений - это вполне допустимо.
    Если уж вспоминать теорему Котельникова, то для корректного измерения надо вводить в тракт до АЦП еще и ФНЧ.
    Но мы же здесь люди простые, так что просто делаем N циклов измерений (нет, N-мало, возьмём M, (С) известный анекдот).
    Сглаживание довольно слабенькое получается. Данная реализация - это простейший IIR ФНЧ. Я в подобных случаях делаю чуть более длинное усреднение. Например:
    float real_w = (real_w * 0.9) + (scale.get_units(1) / 10);

    Я обычно этим занимаюсь в процессе чистки кода, когда он уже нормально работает :)

    Смысла нет. И напряжение и ток меряются от одного и того же REF. Напряжение не скачет, ток скачет. Значит дело не в REF, а ток действительно скачет. Я поэтому и порекомендовал повесить кондёр на питание ESC - ESC довольно сильно шумит по питанию.
    --- Сообщения объединены, 26 сен 2017 ---
    Величину PWM можно ручками задавать. Если работа только с компом - не нужны.
     
  18. LampGraph

    LampGraph Кандидат наук

    Регистрация:
    16 ноя 2015
    Сообщения:
    1.230
    Город:
    Абакан
    Имя:
    Вячеслав
    Я к этому времени уже начинаю путаться в цифрах, поэтому приучил себя делать сразу:)
     
  19. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    ах, да, забыл :) Должно быть
    static float real_w = (real_w * 0.9) + (scale.get_units(1) / 10);
     
  20. Marksheider

    Marksheider Научный сотрудник

    Регистрация:
    1 дек 2016
    Сообщения:
    332
    Город:
    Прокопьевск
    Имя:
    Артем
    А как с программы запускать? чето я на кнопку нажал тестирование и зажал кнопку RUN и ничего.
     
  21. An_private

    An_private Старший научный сотрудник

    Регистрация:
    6 июн 2016
    Сообщения:
    595
    Город:
    Санкт-Петербург
    Имя:
    Андрей Коробейников
    Для начала надо выбрать COM-порт, к которому присоединена ардуинка и нажать CONNECT. Пойдут данные.
    Нажать кнопку RUN на ардуинке и удерживая её нажать в программе "Начать испытание". Кнопку RUN продолжать держать до конца - отпускание кнопки RUN в любой момент сразу завершает испытание.
    Ардуинка сама генерит управляющий PWM сигнал на ESC на пине D9.
     
Реклама. Купить это место.