АЦП Ардуино НАНО .. странная оцифровка.
- Войдите на сайт для отправки комментариев
Ничего не могу понять второй день, может кто сталкивался.
Есть самопальные аналоговые ИК-датчики линии, собраны примитивно: ИК-светодиод с гасящим сопротивлением 120ом + ИК-фотодиод, включен встречно с нагрузочным сопротивлением 750кОм и выход подается напрямую на вход АЦП по "витой паре" (провод заплетен в косичку с землей) длинной 20см. Таких есть 8шт.
Из них 5шт собраны в линейку с шагом 16мм .. перезасветка от соседнего датчика - минимальна. Далее все цифирьки приведены с учетом перезасветки в линейке.
Замер китайским прибором показывает, что уровень белого виден от 450 до 800 мВ, в зависимости от конкретного датчика (может свето- фото- диоды где-то косо стоят, может разброс сопротивлений 5% .. хз.), а на черном стабильно показывает 40..90 мВ в зависимости от датчика, но в любом случае, динамический диапазон датчиков не хуже 9 крат и почти у половины лучше 10.
1. analogRead() без перенастройки порогов стабильно при этом кажет значения 30-70 на черном и 120-250 на белом .. то есть динамический диапазон падает до 4-х крат .. это первое что "непонятно" каким способом происходит.
2. Питание платы от USB = 4.3в (Ардуино Нано) и от аккумуляторов 4.92в, если правильно понимаю - это и есть "опорное" напряжение для АЦП .. но, в этом случае должно быть: "белое" = 107 .. 190 попугаев и "черное" = 9 .. 22 попугая - это для питания от USB и "чуть больше" при питании от аккумуляторов .. а вот нифига! Попугаи совсем иные.. как так? Это второе чего не понимаю. "Черное" и "белое" - поверхность одна и та же, освещение одинаково .. что за чертовщина?!?
3. Есть программа движения по линии, которая имеет "автоподстройку" уровней до начала движения: пока моргает блинк(13 пин) - можно покатать тележку над белым и черным и программа сама найдет "мин/макс" .. работает на ура. Однако, далее начинаются причуды:
3а) При вставке в программу вывода на монитор данных замеров, вычислений и др. вывода - все датчики показывают несколько странные попугаи (см. выше), но тем не менее работают стабильно. Очень стабильно, за серию замеров в 5-10 минут - ни единой ошибки.. что на USB, что на совмещенном питании. Понято что отцепить питание USB в этом режиме "никак".
3б) При самостоятельной работе программы, датчики работают несколько "странно" - пропадает положение "0" (средний датчик на линии) .. совсем пропадает. Такое ощущение, что один из датчиков (+- первый отсреднего) все время видит черное, причем "попеременно": то правый, а то вдруг левый ..
Вопрос: может ли Нано оцифровывать по-разному, в зависимости от питания, от частоты замеров (паузы на вывод в монитор - стабилизируют ситуацию) и т.д.? В какую сторону стоит копать (за 2 дня уже сломал весь моск) .. может ли это быть связано с исчерпанием ресурса флеша и заливка проги без отладочного вывода укладывает чтение датчиков в "битую область"? Нане всего 1.5 месяца .. маловероятно .. может ли это быть связано с тем, что она изначально "битая" (второй сейчас нет под руками) поскольку у неё изначально не работал А3 в АЦП блоке?
Я опять что-то заумное спросил, никаких идей?
сам столкнулся с непоняткой, показания зависят от delay(2-50) после чтения из порта, объяснить причину почему пока не могу, тоже на nano )))
Архат! Ты же инженер! Следовтельно знаешь, что чудес на свете не бывает.
Следовательно нужно провести обычно инженерное исследование типа "поймать льва в пустыне". (напоминаю, что для этого нужно перегородить пустыню пополам, далее - рекурсивно)
1. проверка датчиков - ты это проделал мультиметром.
2. проверка нанки - ставишь ее на стол, подключаешь обычный лаборатонрый БП с индикатором. и Гоняешь ее с выводом измерений на монитор на всех ногах. Если и тут все нормально, то подключаешь какой-нибудь экран и гоняешь без питания от USB. Если опять все нормально, то проверяешь алгоритм в своей программе. После смены ног в мультиплексоре нужна пауза перед измерением.
Поскольку, с твоим опытом, я не верю в ошибки в программировании (только если ты не игрался в воспитателя с сыном и сам писал программу), то, скорее всего, у тебя битый контроллер. (паял, надедюсь, тоже сам?)
АЦП имеет мультиплексор на входе. Его емкость надо перезаряжать преред измерением, поэтому даташит требует выходного сопротивления не более 10к для выходов на АЦП. У вас 750k. Иначе будут артефакты от соседних каналов. Или надо долго заряжать емкость. Что у вас видно как стабилизация после задержки. Самая простая рекомендация - поставить повторители на операционнике. Пары четырёх канальных много места не займут, а все проблемы исчезнут.
Пасибки. Попробую посмотреть за задержку, поскольку менять конструктив датчиков сейчас уже нет никакой возможности - все залито в корпуса и приделаны лего-детальки и запас таких "на исходе".. Да и габарит не позволит. Датчик размеров 8х16мм, высота без светозащитной юбки и диодов - 4мм.
Что уже сделал:
1. Вернул свою 2-ю нану, у которой выгоревший 12-й порт, и которая успешно побывала на пред. соревнованиях и аналоговые каналы там отработали нормально без задержек и на тех же 750ком, правда только 2шт. Результат тот же.
2. Поменял расширительные шилды (они тоже самопальные с питаловом на базе LM2596-ADJ, второй настроен на 5.01в, первый был 4.92в) - без изменений.
3. Внезапно, при п.1. выяснилось (ребенка залил "не тот" скетч), что "ноль есть" и достаточно стабильный. Задержек в проге тоже нет, но она "тупая": если есть черное (уровень ниже заданного порога) справа/слева и пофиг какой из датчиков сработал, хоть все разом - тормозим свое колесо .. работает нормально, линию по центру видит устойчиво. Линейка датчиков одна и таже.
В общем, пока грешу на помехи внутри АЦМ блока Нано...
Программный цикл устроен так:
1. Замер датчиков 5шт х трижды = около 1.4мсек., через analogRead() с усреднением "скользящим средним" по 1/2;
2. Вычисление величины ошибки и формирование управлений моторами - около 100мксек;
3. Упрравление моторами около 20мксек;
4. Пауза для выдерживания "реакции моторов" - 320 мксек.
5. Если можно измерять расстояние (прошло 40мсек с предыдущего замера), то замер узв. датчиком = 2.09мсек.; Иначе замер холостой (без управления) датчиков и вычисление ошибки, чтобы не пропустить чего... (Предсказатель поворотов использует анализ предыдущих состояний)
6. Если расстнояние меньше заданного - принудительный останов тележки.
.. и т.д по циклу. Итого среднее время выполнения loop() - около 4мсек.
попробуй сделать по дополнительному измерению и первое просто выкинь. Должно помочь. И про повторители на ОУ от ник182 - это очень неплохо бы!!!!
Реально две четырехканалки вообще места не займут и обвязки никакой им не нужно. Хоть навесным их припаяй, если плата уже разведена. На ножках от диодов - они длинные и толстые ;).
Платы нет. Каждый датчик - законченное устройство в своем корпусе. Просто все крепится на одну длинную ось лего, а поскольку каждый датчик шириной 1 лего-дырка (8мм), то минимально их можно расположить хоть вплотную с шагом 8мм или через втулку 4мм (шаг 12мм) или через 2 таких, то есть с шагом 16мм. Вот последний случай и реализован. У нас есть ещё 1/2 мин втулки для шага в 10мм :)
Если делать через ОУ, то как понимаю, их надо втыкать непосредственно на каждый датчик близко от съема выходного сигнала, а датчики уже заделаны в корпуса .. есть ещё запас свето- фотодиодов и есть LM358 - 50шт .. можно напаять ишшо, но у нас уже "дефицит" разъемов и проводов (последние могу нарезать от мышиных хвостов, а вот с разъемами - уже реальная беда .. остаточки, едут, но уже не поспеют, точно).
В общем, проверил. Да, наводки от соседнего канала и строго в порядке опроса датчиков. Полностью объяснились "откуда такие попугаи" .. наводка до +25% от предыдущего сигнала, если он "белый" (близко к максимальной датчика) и около -15% если предыдущий датчик кажет "черное".. *опа. Странно, что явление обнаружилось "только сейчас" .. гоняем их уже больше месяца.
Причем забавно, измерение с усреднением: В цикле замеряем последовательно каждый датчик (АЦП 0,1,2,4,5 каналы) и делаем 3 прохода .. если последний, 5-й канал кажет "черное" (близко к миниуму), то А0 даст заниженное значение на след. проходе на те же самые проценты, если А0 установлен на черное, а А5 кажет белое .. получаем завышение и можно получить даже "белее белого", то есть беле того, что он показывает на белом поле в одиночестве ..
Почему такого не было обнаружено раньше?!? Почему в "тупом скетче" (проверил) работает гораздо устойчивее? В смысле наводка тоже наблюдается (когда знаешь что смотреть!), но .. в 2-3 раза меньше. Нихт панимайт..
Время разряда входа АЦП .. афигеть! Вставка задержки внутрь цикла между замерами до 10мсек .. мало что изменила .. и? "полчаса на замер и щас как поеду" ... :(
1.ОУ LM358 можно впаять около нанки, на 5 датчиков их три корпуса получится. На макетку мелкую напаять проще всего и поверх нанки разместить. Это же всего 8ми ногие чипы. Грубо 30х35 мм хватит. а можно один на другой эпоксидкой и ноги распрямить? Так, хоть и некрасиво, но надежнее и технологичнее. Тебе же ни одного резистора припяивать не нужно. 5 входов, 5 выходов и питание.
А к следующим соревнованиям (через год или когда там?) сделаешь уже в датчике, один ОУ - усилитель, другой - тригер Шмидта, и в СМД корпусе на плате датчика, которую фоторезистом вытравишь, и в МК уже в цифровой вход пойдет сигнал. Стильно, модно, молодёжно, нет?
2. Попробуй все-таки не задержку, а именно сделать и выкинуть первое измерение.
И вот еще полезная идея:
Если есть свободные цифровые выходы, то соедини их с аналоговыми и разряжай защелки, просто подав 0 на разряжающий выход, а потом его в INPUT. В принципе хватит одного вывода, если диодами развязать. Такой способ очистить защелки перед измерениями применен в "Транзистор тестере", а его разрабатывал ОЧЕНЬ не глупый человек.
О как! Пасибки за идею .. разряжать тогда можно и "своим" цифровым выходом .. тупо переводить в цифру, выводить 0, переводить на ввод и читать АЦП .. надо попгобовать.
В целом, пока решил программной коррекцией. Теперь надо как-то завтра "заяснить" сыну "что це такэ" и какова причина глюков .. надо чтобы он сам дошел. Программа-то - его полностью. Не, у меня конечно есть "почти" такая же своя.. тоже, но эта infernalChariot.abp - его. :)
Дело не в разрядке,а в порезарядке. Т.е если на одном входе было 10 мВ а на другом 200мВ, то при быстром переключении с первого на второй получим менбше 200. Тут нельзя пользоваться analogRead. Нужно внутрь этой поцедуры вставить задержку после выбора канала. И пускать оцифровку после задержки. Из общих соображений задержка должна быть около 50 микросекунд. Этого должно хватить на перезаряд. Заметте - в святцах она тоже была с соответствующим коментарием, но её закоментили.
Такой способ очистить защелки перед измерениями применен в "Транзистор тестере", а его разрабатывал ОЧЕНЬ не глупый человек.
Немецкие радиолюбители в этом плане очень даже, но антенны мы делаем лучше )))
Такой способ очистить защелки перед измерениями применен в "Транзистор тестере", а его разрабатывал ОЧЕНЬ не глупый человек.
Немецкие радиолюбители в этом плане очень даже, но антенны мы делаем лучше )))
А порнуху - лучше они! ;) ;) ;)
Такой способ очистить защелки перед измерениями применен в "Транзистор тестере", а его разрабатывал ОЧЕНЬ не глупый человек.
Немецкие радиолюбители в этом плане очень даже, но антенны мы делаем лучше )))
А порнуху - лучше они! ;) ;) ;)
Я мастер тактильных практик, в виртуальных вопросах не силён, и сказать то более нечего )))
О как! Пасибки за идею .. разряжать тогда можно и "своим" цифровым выходом .. тупо переводить в цифру, выводить 0, переводить на ввод и читать АЦП .. надо попгобовать.
При переключении в цифру - конденсатор защелки отключится от входа. Нужно именно подключить землю ко входу, а потом отключить.
Проще всего от сигнала прикряться небольшим токоограничивающим резистором и затем собрать все аналоговые выходы в одну точку диодами Шотки и присоединить эту точку к цифровому выходу. Подавать на него 0 на 100 мкс, и затем переводить его в высокий импеданс - в INPUT. Лучше 5 выводов, если есть, так как на диоде, даже Шотки, останется 0.3-0.4 В.
-------
тут есть еще решения - можно поиграться. Сходу идея - линейка полевиков, там нет pn переходов, открывать - цифровой ногой. Короче ищите и обрящете, толцыте, и да отверзеццо вам! ;) ;) ;)
А если задействую всего один аналоговый вход, тоже разряжать или обойдётся?
А если задействую всего один аналоговый вход, тоже разряжать или обойдётся?
должон сам, при каждом новом измерении. Иначе нет смысла в режиме свободного измерения. Поэтому я и говорю Архату, чтобы он не паузу, а просто измерение сделал. Проблемма в созранении заряда от старого состояния ТОЛЬКО в момент переключения мультиплексора. Это в даташите есть, но не подробно. Типа делайте паузу.
А про низкоимпедансные источники сигнала, о чем ник182 говорил, написано аглицким-по-белому
28.6.1.
Analog Input Circuitry
The analog input circuitry for single ended channels is illustrated below. An analog source applied to
ADCn is subjected to the pin capacitance and input leakage of that pin, regardless of whether that
channel is selected as input for the ADC. When the channel is selected, the source must drive the S/H
capacitor through the series resistance (combined resistance in the input path).
The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less. If such
a source is used, the sampling time will be negligible. If a source with higher impedance is used, the
sampling time will depend on how long time the source needs to charge the S/H capacitor, with can vary
widely. The user is recommended to only use low impedance sources with slowly varying signals, since
this minimizes the required charge transfer to the S/H capacitor.
Signal components higher than the Nyquist frequency (f ADC /2) should not be present for either kind of
channels, to avoid distortion from unpredictable signal convolution. The user is advised to remove high
frequency components with a low-pass filter before applying the signals as inputs to the ADC.
Взьмите 2 штуки lm224 В soic. Вы же в нану втыкаете контакты? Между ними поставте две lm224. Всё. Места минимум.
Если мешает заряд от старого измерения, что вполне возможно при высокоомном источнике сигнала, то логично делать переключение на новый вход после измерения старого, затем естественная пауза (зачем вобще частить с измерениями? Период легко прикинуть по размерам и скоростям) и потом измерение по тому входу, на который переключились. Потребуется прямая работа с регистрами.
Для исключения засветки от соседа выбрать правильный порядок опроса датчиков. Не 1-2-3-4-5-1... а например 1-3-5-2-4-1...
Порядок опроса не играет роли. Емкость одна. В каком порядке её перезаряжать не имеет ни какого значения. Достаточно в analogRead раскоментировать delay(1). Но терять милисекунду на каждом преобразовании.
///Порядок опроса не играет роли. Емкость одна.
А читать внимательно?
Для исключения засветки от соседа выбрать правильный порядок...
//раскоментировать delay(1)
))) Изучаем класику - http://arduino.ru/tutorials/BlinkWithoutDelay
Если мешает заряд от старого измерения, что вполне возможно при высокоомном источнике сигнала, то логично делать переключение на новый вход после измерения старого, затем естественная пауза (зачем вобще частить с измерениями? Период легко прикинуть по размерам и скоростям) и потом измерение по тому входу, на который переключились. Потребуется прямая работа с регистрами.
Для исключения засветки от соседа выбрать правильный порядок опроса датчиков. Не 1-2-3-4-5-1... а например 1-3-5-2-4-1...
Прямо как с охлаждением цилиндров 1-3-2-4
А если задействую всего один аналоговый вход, тоже разряжать или обойдётся?
должон сам, при каждом новом измерении. Иначе нет смысла в режиме свободного измерения. Поэтому я и говорю Архату, чтобы он не паузу, а просто измерение сделал. Проблемма в созранении заряда от старого состояния ТОЛЬКО в момент переключения мультиплексора. Это в даташите есть, но не подробно. Типа делайте паузу.
А про низкоимпедансные источники сигнала, о чем ник182 говорил, написано аглицким-по-белому
28.6.1.
Analog Input Circuitry
The analog input circuitry for single ended channels is illustrated below. An analog source applied to
ADCn is subjected to the pin capacitance and input leakage of that pin, regardless of whether that
channel is selected as input for the ADC. When the channel is selected, the source must drive the S/H
capacitor through the series resistance (combined resistance in the input path).
The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less. If such
a source is used, the sampling time will be negligible. If a source with higher impedance is used, the
sampling time will depend on how long time the source needs to charge the S/H capacitor, with can vary
widely. The user is recommended to only use low impedance sources with slowly varying signals, since
this minimizes the required charge transfer to the S/H capacitor.
Signal components higher than the Nyquist frequency (f ADC /2) should not be present for either kind of
channels, to avoid distortion from unpredictable signal convolution. The user is advised to remove high
frequency components with a low-pass filter before applying the signals as inputs to the ADC.
RE Составляющие сигнала выше частоты Найквиста (Ф АЦП /2) не должны присутствовать
Интересно, подозреваю, что у меня с датчика тока присутствуют частоты кратные 300Кгц, и чё, ставить фильтр НЧ (да асилографа и милипильметра еще не добрался)
Не парится. Прерывания и впервую очередь системного таймера, создают "дрожание" моментов дискретизации (джитер) что сводит проблему до уровня шумов на входе
Не парится. Прерывания и впервую очередь системного таймера, создают "дрожание" моментов дискретизации (джитер) что сводит проблему до уровня шумов на входе
я на второй зацепил, каждые 5 миллисекунд получаю 16 измерений
///Порядок опроса не играет роли. Емкость одна.
А читать внимательно?
Для исключения засветки от соседа выбрать правильный порядок...
//раскоментировать delay(1)
))) Изучаем класику - http://arduino.ru/tutorials/BlinkWithoutDelay
Взаимно по всем пунктам. Нельзя правильным порядком исключить засветку. Всёравно надо перезаряжать емкость. К засветке датчиков перезарядка отношения не имеет. Надо иметь точное значение каждого датчика.
Выше я приводил код analogRead. В нем есть закоментированная строка с delay(1) и приписка - что бы не читать чужой канал. Как раз для случая с большой входной ёмкостью заготовили :-) Только вок как блинк без делея использовать в этом месте ума не приложу. Тем более, что 1 милисекунда. А по хорошему и 50 микросекунд должно хватить.
Спасибо за цитаты и полезное обсуждение вопроса, почерпнул много интересного для себя.
Поясню, почему ряд советов "не подходит" в конкретно моем случае:
1. Предельная скорость тележки по трассе - около 1.5м/сек согласно расчетам по массово-габаритным характеристикам тележки и трассы, а также имеющемуся к-ту трения. Обсуждалось несколько ранее в теме "скоростное движение по линии...". В этом случае, на 1 миллисекунду движения имеем 1.5 пропущенных миллиметра трассы. Чисто по теории имеем 15kbps АЦП у мег всех мастей и 5 датчиков. Даже однократный опрос датчиков снижает теоретическую скорость оцифровки уже до 3 тыс/сек. = 3 шт/мсек или 333 микросекунды сек на цикл. .. или полмиллиметра трассы. Для усреднения показаний минимально требуется 2 измерения, а лучше 3-4 .. у нас использовано 3 замера на датчик. .. примерно тут же лежат проблемы с организацией "пауз" тем или иным способом .. хотелось бы быстрее как-то.
2. Все пожелания "поставь это.." предполагают или неограниченный склад у вопрошающего или неограниченный ресурс по времени для приобретения .. нет такой роскоши. Как правило, и в нашем случае это именно так, ресурс склада - "частная коллекция деталек", накопленная "по случаю" и жесткий цейтнот по времени подготовки (есть ещё и иные дела тоже, не забываем) .. в общем .. может быть, когда-нибудь но не сейчас.
3. Да, на прямом управлении регистрами можно сделать много чего .. программу пишет ребенок в "возраст 9-11лет" с соответствующими объемами знаний математики (не проходят отрицательные числа, частично только доли, а даже НЕ дроби, нет понимания десятичных чисел, деление только без остатка и т.д. .. чем-то сильно похоже на Мегу: только целая арифметика, нет деления даже нацело .. :), да, ещё и с применением весьма ограниченного по возможностям "Ардублока" .. так что, тоже все советы в этой области, увы пока не про нас. Сожалею..
P.S. В целом вариант программной коррекции показаний ребенок сегодня предложил сам после разъяснения ему причин "почто все так не кузяво".. Сделал - работает успешно.
Кому интересно: сегодня побывали на настоящей трассе для соревнований. Гл.судья готовил команду леговцев или просто вел занятие, уж не знаю, ну и разрешид нам проверить тележку. На трассе будет 2 препятствия: "балка поперек" и "горка", и если балку смоделировать дома мы в состоянии, то горку на домашней трассе разместить банально некуда .. вот и пришлось напроситься. Итог, более чем нас устроил, но пока результат озвучивать не стану по понятным причинам. Жаль что наша тележка на трассе умещается "в притык", будем что-то придумывать меньшее по габаритам. Сейчас имеем 195х190мм при допустимых 200х200 по регламенту.
P.S. могу только сказать, что "горка" по сути - трамплин высотой 50мм .. летаем, но низенько-низенько.. :)
.. программу пишет ребенок в "возраст 9-11лет"
Та ладно. Знаем мы кто что пишет;)
У меня на ногу АЦП с датчика тока прилетает 50 милливольт разных шумов от 400гц до 900кгц, кто и как с этим борется?
?!? .. не понятное обвинение непонятно в чем, в том что ребенок планирует выступать с МОЕЙ программой? Вы, или должны извиниться или приехать и убедиться воочию. Приглашаю, если не желаете выглядеть тупо завистливой дрянью в глазах всех, читающих тему. Почта в доступе, как соберетесь - пишите. А обвинять огульно и за глаза своего сына, я Вам - не позволю.
Вы зря взерошились. Напомнить сколько раз Вы тему про софт и железо тачки подымали? А сколько раз Ваш сын? Отож...
Не выдавайте желаемое за действительное. Я оч понимаю что Вы хотите видеть в сыне. Но так же понимаю, что осмысленое написание того же ПИД- регулятора просто невозможно при изложеном Вами факте:
И это правда, у самого такой растет. Кстати деление таки уже с остатком, недавно выучили, 3 класс.
Вы можете вдалбливать сыну в голову что желаете - Ваше право. Скажете "пишем if" ну напишет он чего скажете. Это не значить что он пишет программу, это он записывает чего скажут. И требовать от кого либо признания его выдающихся способностей, при том что весь форум видит как Вы лично, а не сын, долбетесь над проектом, просто смешно.
ПС. Как воспитывать ребенка, ваше личное дело, но ИМХО такие ранние "накачки" черезвычайно вредны, посмотрите на судьбы вундеркиндов 80-х. Они не сильно на слуху, ниче выдающегося не вышло, а поломаных среди них очень много, сильно больше чем в среднем.
понимание, что родители через детей пытаются реализовать СВОИ не реализованные мечты приходит с годами...
...Пушкин был прав...
...учил его всему шутя, не докучал моралью строгой, слегка за шалости бранил и в летний сад гулять водил...
Да. Всему свое время, и ценно не то чему научили а чему научился.
Сожалею, но ему запрещено писать на любых форумах самостоятельно, после того как он завел себе ник у линуксистов, когда впервые сам переставлял себе Убунту, и не найдя возможности (в интерфейсах гуя, конечно жеж) ускорить как-то третий гном на своем стареньком пеньке, нашел в гугле, что всему виной некий "компиз" и "юнити" и завел себе ник для получения ответа "как отключить сие чудо" .. после того как я пришел домой и обнаружил, что ребенка сидит и плачет из-за того, что его взрослые дядьки обматерили на форуме вместо того чтобы просто помочь или сказать что этого ему сделать не удастся - запретил регистрироваться на любых программистких форумах во избежании чтения срачей разных полоумных идиотов. Увы. Даже тут - не редкость. В т.ч. и сам срывался неоднократно, и даже с Вами, Logik.
Ну и по "сколько Вы тут возитесь" .. ровно столько, сколько требуется в процессе любого процесса обучения. Не больше, но и не меньше. Каждый, уважающий себя преподаватель предварительно прорешает задачу сам и 100500 разными способами, прежде чем поставить задачу ученику. Все его вариации решений .. просчитаны задолго "до". Мне это хорошо запомнилось по своему обучению .. "курс №4, взял задачу проектирования снайперского прицела .. поковырял литературу .. везде одно и тоже решение .. а как-бы извратиться вот так .. придумал, афигеть .. поискал .. нигде нет .. времени потеряно много, договорился в первом отделе забрать домой курсовик и .. посеял пояснительную записку в автобусе вместе с чумоданом .. блин, посодют .. за 3 дня и 3 ночи, пересчитал (МК-61 дома, до сих пор пашет), переписал, перерисовал все ... принес сдавать, гордый как удав .. а в ответ слышу: угу, молодец, интересное решение, его уже считали .. вот если ты эту бандуру придумаешь как закрепить в прицеле - поставим в производство, а так .. ну делал я себе такой на охотничье ружжо .. кажет .. до первого выстрелу и только" .. через 2 недели нашелся "тот ПАЗик" .. ты этто, не боись, я только первый листок прочел, остальное не стал .. я тут уже вторую неделю дежурю .. через год после окончания ВУЗа, уже работая программистом, то бишь по совсем иной специальности, случайно придумал КАК закрепить эту бандуру, приехал, поделился .. прошло 20 лет, слет выпускников и тот же Итигин ещё живой .. "О .. ну здравстуй, здравстуй .. кто это? Ну как же, ты же на охоту ездишь? Прицел такой у тебя там есть? Вот, это он считал и сделал". Таки поставили видимо..
и, к чему это? Да все просто: Я - считал эту байду из желания "извернуться", а оказалось что мой препод не только считал такое, но даже и делал.. Так и тут .. если есть вопрос в покатушках тележек, то я просто обязан знать на него ответ .. даже если он и не спросит.
В общем, вопрос можно закрыть, пасибки всем за подсказки.
Да, использование ОУ для снижения вых. сопротивления датчика решает задачу полностью. Проблема во встроенном мультиплексоре и входной емкости встроенного АЦП .. "ну и гадость эта ваша заливная рыба" :) Впрочем, программная коррекция тоже сильно снижает эффект, может кому пригодится.
В общем, вопрос можно закрыть, пасибки всем за подсказки.
Да, использование ОУ для снижения вых. сопротивления датчика решает задачу полностью. Проблема во встроенном мультиплексоре и входной емкости встроенного АЦП .. "ну и гадость эта ваша заливная рыба" :) Впрочем, программная коррекция тоже сильно снижает эффект, может кому пригодится.
а я, чтобы уйти от встроенного АЦП сегодня буду переделывать По своего чёрного ящика на INA219 (получение по I2C)
В свое время читал, не было времени ответить.
Чисто по теории имеем 15kbps АЦП у мег всех мастей и 5 датчиков. Даже однократный опрос датчиков снижает теоретическую скорость оцифровки уже до 3 тыс/сек. = 3 шт/мсек или 333 микросекунды сек на цикл. .. или полмиллиметра трассы. Для усреднения показаний минимально требуется 2 измерения, а лучше 3-4 .. у нас использовано 3 замера на датчик. .. примерно тут же лежат проблемы с организацией "пауз" тем или иным способом .. хотелось бы быстрее как-то.
Если проблема в скорости оцифовки, могу порекомендовать MCP3008 - те же 10 разрядов, но с максимальной скоростью 200ksamples per s. Что соответствует 3.6 МГц. Но практика показывает, что работает и на 4МГц. Хотя, думаю, и 2-х вполне должно хватить: за то же время, пока встроенный АЦП Атмеги выдает 1 отсчет, здесь можно легко получить все 8.
PS. И по поводу возникшего здесь спора. Я считаю, с ребенком нужно заниматься. Чем больше, тем лучше. Если Вы работающий человек и не можете все 24 часа в сутки заниматься с ребенком, то чрезмерно много все равно не получится. И, естественно, все занятия требуют и большой самостоятельной работы. Например, я, когда начинал учить ребенка программировать вообще не знал Паскаля, но решил, что на Фортране учить не следует. В результате сам выучил очередной язык. И считаю, что это во-первых - нормально, а во вторых - приводит к благоприятным результатам.
Я делал для джойстика логический анализатор нажатых кнопок, собранных с разными резисторами последовательно. Меня беспокоило, что показания на аналоговом входе сильно гуляют, из-за чего приходилось подбирать резисторы так, чтобы разница их влияния сильно превышала самоколебания входа. А резиков у меня всего-то чуток.
Оказалось, что если выключить внутреннюю подтяжку и взять внешнюю, то колебания составят не сотни единиц, а всего 2-3.
Я сделал скетчик, сначала пустой вход и без подтяжки - показания в плоттере порта гуляют от 0 до 1023 с периодом около секунды. Второй вариант был с подтяжкой pinMode(A0,INPUT_PULLUP); - вырисовывает очень забавную модуляцию и она изменяется если водить близко руками или воткнуть проводок. Третий вариант с внешней подтяжкой: результаты равны 1020-1023.
Экспериментально доказано: на аналоговом входе подтяжку только внешнюю.
Я делал для джойстика логический анализатор нажатых кнопок, собранных с разными резисторами последовательно. Меня беспокоило, что показания на аналоговом входе сильно гуляют, из-за чего приходилось подбирать резисторы так, чтобы разница их влияния сильно превышала самоколебания входа. А резиков у меня всего-то чуток.
Оказалось, что если выключить внутреннюю подтяжку и взять внешнюю, то колебания составят не сотни единиц, а всего 2-3.
Я сделал скетчик, сначала пустой вход и без подтяжки - показания в плоттере порта гуляют от 0 до 1023 с периодом около секунды. Второй вариант был с подтяжкой pinMode(A0,INPUT_PULLUP); - вырисовывает очень забавную модуляцию и она изменяется если водить близко руками или воткнуть проводок. Третий вариант с внешней подтяжкой: результаты равны 1020-1023.
Экспериментально доказано: на аналоговом входе подтяжку только внешнюю.
А как по умолчанию? Внешняя подтяжка на аналоговых входах выключена?
А как по умолчанию? Внешняя подтяжка на аналоговых входах выключена?
А как по умолчанию? Внешняя подтяжка на аналоговых входах выключена?
ОФФТОП:
О! В нашем полку прибыло. Я давно хотел сказать - гоу к нам, на темную сторону, у нас есть печеньки!
-----
2 Kolaha:
Я тут уточнить хочу, как лучше делать внешнюю подтяжку на аналоговом входе: к земле или к питанию?
И как посоветуете выбирать номинал подтягивающего резистора?
wdrakula, только хардкор, исключительно 5-ваттные резисторы и не более 0,1Ом. Лучше сразу и к земле, и к питанию.
wdrakula, только хардкор, исключительно 5-ваттные резисторы и не более 0,1Ом. Лучше сразу и к земле, и к питанию.
bwn, но что, если я использую, в качестве источника питания, сварочный инвертор? Стоит ли установить дополнительные помехозащищающие емкости? 68 мкФ будет достаточно, как Вы думаете?
Я тут уточнить хочу, как лучше делать внешнюю подтяжку на аналоговом входе: к земле или к питанию?
И как посоветуете выбирать номинал подтягивающего резистора?
А номинал 10к. Меньше 125 Ом нельзя, точнее можно, но под свою ответственность, ибо горелые ардуинки нынче не в цене.
Я бы поставил 68000 мкФ х 16В, чтобы инвертор возбудился.
А номинал 10к. Меньше 125 Ом нельзя, точнее можно, но под свою ответственность, ибо горелые ардуинки нынче не в цене.
То есть, если аналоговый вход просто замкнуть на питание, то все сгорит? Вот прям с дымом?
А номинал 10к. Меньше 125 Ом нельзя, точнее можно, но под свою ответственность, ибо горелые ардуинки нынче не в цене.
То есть, если аналоговый вход просто замкнуть на питание, то все сгорит? Вот прям с дымом?
А как по умолчанию? Внешняя подтяжка на аналоговых входах выключена?
Это я зарапортовался ))) Естественно внутренняя
Уточняю вопрос, надо ли при спользовании ацп в коде обязательно отключать внутреннюю подтяжку или она по умолчанию выключена?
По идее ацп начинаться должен с операционника, то-есть можно на вход любое сопротивление... или в ардуино "всё не так, всё не так ребята"
По идее ацп начинаться должен с операционника, то-есть можно на вход любое сопротивление... или в ардуино "всё не так, всё не так ребята"
А номинал 10к. Меньше 125 Ом нельзя, точнее можно, но под свою ответственность, ибо горелые ардуинки нынче не в цене.
То есть, если аналоговый вход просто замкнуть на питание, то все сгорит? Вот прям с дымом?
Этот дурень до сих пор не понимает, что над ним глумятся!
Родное сердце, перестань позориться!
Возможно ты и не дурак совсем, но просто по утру, с похмела, перепутал аналоговые и цифровы входы... бывает.
Нет понятия подтяжки, для аналоговых входов. И быть не может, как явления, иначе что ты мерять станешь?
И, если нет желания оставлять "висеть ногу в воздухе", то можно определить ей потенциал, но резистором ВО МНОГО РАЗ БОЛЬШИМ, чем выходное сопротивление источника сигнала. То есть никак не 10К, а 1-2 М.
====================================
Все! Завязываем, граждане, над новичком издеваться. Повторю, может он и не такой дурень, просто заклинило на том, что он по складам, со-словарем, прочел в даташите о цифровых входах.
====================================
Ты эт, не обижайся... я третьего дня SMT32 подключал.... так прежде, чем понял, что перепутал данные и синхру в проводках, пять часов все типы поддержки STLink у себя на Линухе по 4 раза переставил. ;).... бывает, что клинит.