Подключение датчика Холла SS49E к Atmega328 при Vcc 3 вольта

Тема в разделе "Микроконтроллеры AVR", создана пользователем SavvaRem, 31 янв 2018.

  1. SavvaRem

    SavvaRem Гик

    Приветствую участников форума.

    Возникла проблема с подключение датчика Холла SS49E при питании его от 3.3 вольта и ниже.
    Суть проблемы. Датчик подключен через дифференциальный усилитель на ОУ LM258 ко входу AIN1 аналогового компаратора Atmega 328p, вход AIN0 подключен к внутреннему ИОН на 1.1 вольта. Разрешены прерывания по заднему фронту, когда напряжение на AIN1 превышает опорное на AIN0, в них ведется подсчет количества поступающих импульсов для определения скорости вращения оси с магнитом. Данные передаются в монитор серийного порта. Теперь собственно суть проблемы. Схема генерит какие-то нереальные цифры. Есть подозрение, что это из-за дребезга самого датчика. Или же ошибка в коде. Пожалуйста, помогите разобраться.

    п.с. Подключить выход дифф.усилителя напрямую ко входу внешнего прерывания INT0 или INT1 не могу, так как наибольшее напряжение на выходе усилителя, которое получается при питании ОУ от батареи CR2032 что-то около 1.6 вольта, чего явно не хватает для логической 1 (0.6 от Vcc по даташиту). Возможно, дело в том, что ОУ устаревший и к категории rail-to-rail не относится и проблема в этом, но уверенности нет. Еще есть мнение, что у компаратора отсутствует петля Гистерезиса и шумы от датчика приводят к частой генерации прерываний.

    Схема подключения датчика и код прилагаются.

    Спасибо!
     

    Вложения:

    Последнее редактирование: 31 янв 2018
  2. parovoZZ

    parovoZZ Гуру

    У тебя ж усилитель как компаратор работает из-за высокого коэффициента усиления. Тестером не смотрел, что творится на его выходе при медленном вращении магнита? Магнит полюсами правильно сориентирован?

    Зы на питании от батарейки я бы смотрел в сторону геркона.
     
  3. SavvaRem

    SavvaRem Гик

    В этой схеме ОУ работает как дифференциальный усилитель, который усиливает разницу между инвертирующим и неинвертирующим входами. Он тут нужен, что бы получить лог 0 и лог 1 для генерации прерывания. Беда в том, что 1.5 вольта мало для лог 1 и МК просто не видит единицы, поэтому приходится громоздить прерывание по компаратору. При отсутствии магнита на выходе ОУ 0.08 вольта, при поднесенном магните 1.5 - 1.6 вольта. За наводку на геркон спасибо. Один только вопрос - насколько чувствительные они бывают и какой лучше выбрать для работы от 3,3 вольта?
     
  4. parovoZZ

    parovoZZ Гуру

    У тебя коэффициент усиления десятка или около того. К тому же схема является УПТ со всеми вытекающими. Из ОУ можно сделать настоящий компаратор и не парится с мк.
    Что-то ты не то говоришь. У датчика холла на выходе половина напряжения питания. В зависимости от поднесённого полюса, у него напряжение изменяется в сторону питания либо земли пропорционально приложенной индукции. У мк раздел 0 и 1 также половина питания. Поэтому задача немного оттянуть напряжение у датчика от середины и смело подавать на вход мк.
     
  5. SavvaRem

    SavvaRem Гик

    Делать из ОУ компаратор не самая лучшая идея, особенно на таком, как у меня на схеме. Что касается реакции Холла на магнит, то тут ты прав, как раз для того, что бы получить околонуля и размах, применяется ОУ в дифференциальном включении, повнимательнее на схему посмотри. И у МК лог 1 это не полпитания, а от 0.6 Vcc в зависимости от рабочего напряжения на МК, и чем напряжение ниже, тем выше должен быть порог лог 1.

    Если тягать напряжение, то как? Было бы у меня +5 вольт, я бы не парился - подал бы выход датчика прямо на вход INT0 и получал бы искомые прерывания, но у меня нет возможности работать с таким напряжением.
     
  6. parovoZZ

    parovoZZ Гуру

    0.6 - это гарантированный уровень срабатывания. А вообще, т.к. схемотехника на КМОП, то ровно посередине.
    Вариантов море:
    геркон (самое идеальное для 2032 батаерйки или какая у тебя там. Датчик холла со своими 5 мА высосет её в момент). У МК выключить вообще всё и в сон. Перед этим подписаться на прерывание по фронту на пине. На аттиньке со своей батарейкой работать будешь долго.
    цифровой датчик холла вместо аналогового. Но надо смотреть индукцию - чтоб магнит вытянул.
    Выкинуть всю ООС на усилке и превратить его в настоящий компаратор. Либо навернуть цепь смещения, чтобы получить триггер шмидта. В сети схемы есть.
    Вместо ОУ поставить специализированный компаратор.
    Ну и заюзать АЦП, в конце концов.
    Но первый вариант это маст хэв. Во всех беспроводных счетчиках используется именно он. Если это вода, газ, то батарейка быстрее на саморазряде сдохнет. Через 10 лет.
     
  7. SavvaRem

    SavvaRem Гик

    спасибо за наводку, буду курить герконы =)
     
  8. SavvaRem

    SavvaRem Гик

    кстати, может есть на примете какой-нибудь?
     
  9. parovoZZ

    parovoZZ Гуру

    Заходишь в любой лабаз ( в местном почему-то нет) и выбираешь любой подходящий по габаритам. Подключать просто - включаешь пин на вход с подтяжкой, а геркон вторым концом на землю. Единственный нюанс - необходимо давить дребезг контактов. Там просто - взводишь таймер на пару миллисекунд по приходу фронта и в течение этого времени выключаешь прерывания. Таймер оттикал-прерывание включил. Да, обязательно покрути магнитом и герконом, чтобы найти максимальное расстояние срабатывания геркона.
     
    SavvaRem нравится это.
  10. SavvaRem

    SavvaRem Гик

    Спасибо
     
  11. ostrov

    ostrov Гуру

    Можно и без отключений прерываний. Создать кольцевой буфер глубиной два (можно больше), сравнивать каждое прерывание состояние текущее с бывшими, если фронт есть - обработать, иначе - игнорировать.
     
  12. SavvaRem

    SavvaRem Гик

    Код можете показать для примера? У меня есть подозрение, что в моем коде нужно добавить активацию таймера-счетчика по прерыванию, возможно это поможет от бредогенерации в терминале.
     
  13. parovoZZ

    parovoZZ Гуру

    Нафига что-то делать, если в это время можно спать? У автора батарейка и при чем не самая емкая.
     
  14. SavvaRem

    SavvaRem Гик

    Ну в моем девайсе все малость посложнее, чем кажется. Это метеостанция на датчике BMP180 с возможностью кое-какую математику дергать (рассчитывать параметры воздуха и на их основе некоторые данные). Она в рабочем режиме крутит энергосберегающий режим idle (потребление вместе с ОЛЕД-экраном 14 мА), а через 15 секунд простоя сохраняет настройки в ЕЕПРОМ и переходит в спящий режим powerdown с побудкой по внешнему прерыванию на пине INT0 (это с десяток микроампер). Так же в спячку отправляется и контроллер ОЛЕДа. CR2032 вполне хватает, хотя у нее сильная зависисмость рабочего напряжения от ее температуры. Можно опционально некоторые регистры подергать, что бы еще меньше потребление сделать. Посмотрим...
    Теперь вот пытаюсь добавить ветромер на основе раскуроченного китайского анемометра, в котором измерения были бы реализованы в виде отдельной функции, при этом питание на датчик Холла и на усилительный ОУ подавалось бы только на время входа в эту функцию. Если здесь будет "потерплена полная фитяска", то ветромер попробую сделать на германиевых диодах. Hot-wire так называемый. И так же включаемый только на время измерений. Батарейки должно хватить. А если не хватит, то есть CR2450 как вариант, но у нее та же болячка с зависимостью напряжения от тепературы.
     
  15. parovoZZ

    parovoZZ Гуру

    Перед уходом в спячку выполни инструкцию

    power_all_disable();

    А прерывание кто даёт?
     
  16. SavvaRem

    SavvaRem Гик

    к пину INT0 кнопка подключена, которая с землей его соединяет
     
  17. parovoZZ

    parovoZZ Гуру

    А, ну я понял. Утром встал, окно кнопка нажал, да?
    Передатчика нет?
    У меня с nrf24, каждые 10 секунд посылка (планировалось 10 минут). Батарея CR123 в -15 свои 3.2 держала.
     
  18. SavvaRem

    SavvaRem Гик

    утро встал окно кнопка нажал да))) вах!
     
    Последнее редактирование: 2 фев 2018