Arduino + индуктивный датчик расстояния

Тема в разделе "Arduino & Shields", создана пользователем nsiprodoer, 18 ноя 2011.

  1. nsiprodoer

    nsiprodoer Нуб

    Приветствую.

    Возникла потребность удаленно снимать показания с индуктивного датчика. Если кто не знает, это такая штука, которая в зависимости от расстояния до металлической поверхности выдает соответствующий аналоговый сигнал. Пришла в голову мысль использовать для этих целей ардуино с его АЦП + Ethernet шилд. Сразу возникает несколько вопросов.

    Во-первых, практически все индуктивные датчики дают выходное напряжение 0-10 В, в то время как ардуишный АЦП понимает лишь до 5 В, т.е. придется брать датчики с расстоянием примерно в 2 раза большим чем то, что требуется измерять. Но и это не самое интересное: данные с датчика хотелось бы снимать с точностью не хуже 0.01 мм., а это накладывает серьезные ограничения на разрешение и точность АЦП. Казалось бы, 10-ти разрядного АЦП до 5 вольт должно хватить для измерений с точностью 5В/1024~=0.005 В, но из многих отзывов понял что такая красота в силу разных причин практически недостижима. В связи с этим вопросы:

    1. Какой реальной точности измерения напряжения можно добиться от ардуиновского АЦП при его запитывании от внешнего источника?
    2. Есть ли какие-то хитрости, чтобы достичь максимальной теоретически возможной точности?
    3. Не станет ли ардуине плохо от 10 вольт, подаваемых на АЦП? (сами показания АЦП при превышении 5 вольт меня интересовать уже, естественно, не будут)

    Заранее спасибо за ответы.
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Не совсем так. 0-5В — это умолчание. Вы можете подать на специальный контакт AREF 10 В и тогда опорным напряжением станет 10 В — вы получите 1024 градации в расширенном диапазоне.

    Точность постоянна и равна 1024 градациям. Другой вопрос: насколько исказятся ваши данные пока гуляют по проводам до Arduino. Если они короткие (менее 0.5 метра) и вы работаете в квартирных условиях (без сильных наводок), можно особо не беспокоиться. Если провода длинные, а точность измерений пипец как важна, лучше поставить отдельный АЦП не относящийся к Arduino рядом с датчиком.

    При конфигурации пинов как входов на них устанавливается большой импеданс, поэтому плохо ей не станет. Тем более, что штатный Vin — до 12 В по документации, и до 15,5 В на практике.
     
  3. nsiprodoer

    nsiprodoer Нуб

    В спеках на Freeduino видел фразу о том, что АЦП на 0-5 вольт, но можно и меньше, подав опорное на AREF. Про большее ничего сказано не было, поэтому я и засомневался. Хотя может это особенность именно этого клона Arduino?
     
  4. nailxx

    nailxx Официальный Нерд Администратор

    Если честно, я никогда не проделывал этого манёвра. После вашей фразы засомневался — проверил. Исходя из документации:

    Вы правы, на AREF нельзя давать больше 5 В. Извиняюсь за введение в заблуждение. Бьюсь головой об пианину: раньше этого замечания не было.

    Но! Что вам мешает сделать элементарный делитель напряжения, скажем, попалам, и именно его выход отправлять на АЦП? Вы просто понизите уровни напряжения, но не потеряете в точности. Нужно только 2 резистора по 2 рубля.
     
  5. Dmitriy Kunin

    Dmitriy Kunin Гик

    Похоже придётся встрять в разговор :)
    За недостатком одного параметра, который уважаемый nsiprodoer не указал, тема ушла в сторону от вопроса...
    Для начала нужно знать сколько вольт на миллиметр выдаёт датчик и дальше всё станет сильно проще, так мы узнаем какое разрешение аналого-цифрового преобразователя нам нужно.
    Измерить напряжение действительно не проблема, два резистора, может и более точных, может и подстроечных (сильно сократит вычисления, а вдруг для задачи оно критично), но хоть 220 вольт в ардуино подавай, всё будет нормально, делитель вгонит их в диапазон 0 - 5 вольт.