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

Проблема с импульсными датчиками


X-shadow

Рекомендуемые сообщения

Здравствуйте. Есть 2 двигателя на которых стоят импульсные датчики для определения скорости и пройденного пути. Нужно очень часто обновлять эти данные т.е за время прохождения одного импульса мы должны сделать несколько проверок. Дело в том что я использую контроллер ATmega128 на котором висит программа и занимается не только проверкой импульсных датчиков. Поэтому у меня возникает проблема с пропусканием импульсов. Я знаю что эту проблему решают 2 способами:

1) ставят еще один контролер

2) собирают счетчик на дискретных компонентах

Вопрос: может кто знает такую схему на дискретках?? Нужно чтобы она выдавала пройденый путь и скорость в любой момент времени когда ее спросят (пройденый путь нужно мерить с последнего опроса).

Заранее спасибо.

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А таймер-то чем не устраивает ?

Прерывание, тоже не подходит ?

Изменено пользователем MaStak

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Слишком большая нагрузка для одного контроллера. Есть вероятность пропускания импульсов а след неточность

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Здравствуйте. Есть 2 двигателя на которых стоят импульсные датчики для определения скорости и пройденного пути. Нужно очень часто обновлять эти данные т.е за время прохождения одного импульса мы должны сделать несколько проверок. Дело в том что я использую контроллер ATmega128 на котором висит программа и занимается не только проверкой импульсных датчиков. Поэтому у меня возникает проблема с пропусканием импульсов. Я знаю что эту проблему решают 2 способами:

1) ставят еще один контролер

2) собирают счетчик на дискретных компонентах

Вопрос: может кто знает такую схему на дискретках?? Нужно чтобы она выдавала пройденый путь и скорость в любой момент времени когда ее спросят (пройденый путь нужно мерить с последнего опроса).

Заранее спасибо.

Если входные импульсы меньше частоты 1 МГц, то этим контроллером они измеряются легко, не затрагивая основную программу. Смотри ноги PD6(T1) и PD7(T2) - как раз под твою задачу.

Максимально используй аппаратные возможности контроллера, а программа - это второстепенное.

А иначе непонятно, почему M128 заложил...

Ссылка на комментарий
Поделиться на другие сайты

2 X-Shadow

А если всё таки хошь считать импульсы чем-то из-вне.

То тебе как мне кажется нужен самый обычный реверсивный счётчик, разрядность которого зависит от длинны измерения и точности датчика. Просто в таком случае у МК может ног не хватить.=)

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

2 X-Shadow

А если всё таки хошь считать импульсы чем-то из-вне.

То тебе как мне кажется нужен самый обычный реверсивный счётчик, разрядность которого зависит от длинны измерения и точности датчика. Просто в таком случае у МК может ног не хватить.=)

А реверсивный то за чем?...типа заднюю скорость включил, счетчик в обратную сторону защелкал?)))))

Ссылка на комментарий
Поделиться на другие сайты

А реверсивный то за чем?...типа заднюю скорость включил, счетчик в обратную сторону защелкал?)))))

Точно ;)

В одну сторону прибавляет к текущему зачению +1

в другую вычитает из текущего значения -1.

Остаётся только подобрать правильный селектор импульсов, а это зависит от конкретного типа датчика - как у него выглядят импульсы счёта.

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо большое.

У меня небольшой вопрос:

Как наиболее эфективно опросить датчики??

Прерываниями нельзя так как датчиков у нас 4 и если на них одновременно возникнет импульс то посчитается только один что плохо. Есть только один выход это использовать прерывание таймера скажем около 10 мс и опрашивать все 4 датчика. А там уже смотреть как импульсы идут.

Может есть чтонибуть более эффективное?? Заранее спасибо

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

Прерываниями нельзя так как датчиков у нас 4 и если на них одновременно возникнет импульс то посчитается только один что плохо.

:huh: Озадачил

Почему только один ? :blink:

4sensor.jpg

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

Однако тут есть проблема. Дело в то м что у меня есть еще таймер который каждые 20 мс попадает в свое прерывание, принимает сообщение с компа и управляет нагрузкой (шим, ацп и входы/выходы). Будет очень плохо если мы попадем в прерываение таймера а в этот момент произойдет прерывание импульсного датчика. Может есть какой-нить другой выход?

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

М-дааааааа....... :huh:

Всё интересней и интересней :)

Способ №раз: "ультрасовременный"

Каждому датчику прописывается свой адрес и флаг прерывания. Таким образом после обработки прерывания таймера, МК принимается за обработку флагов прерываний датчиков.

Способ №два: "деревянный"

В обработчике прерываний таймера через определённые промежутки выполнения программы делаем опрос флага прерываний порта на котором висят датчики, если ответ утвердительный немедля переходим к опросу датчиков (идентичный кусок кода как в обработчике) или сохранив предварительно состояние программного счётчика направляемся в сам обработчик прерываний порта собссно, после проверки датчиков ложим в счётчик сохранённое значение и возвращаемся обратно в обработчик прерываний таймера.

Способ №три: "продвинутый"

Попав в обработчик прерываний таймера, накладываем маску на регистр прерываний таким образом, что запрещаются все прерывания кроме как от того самого злополучного порта, есессенно не забываем установить глобальный бит разрешения всех прерываний. Ну и смело приступаем к делу, когда произойдёт прерывание по порту, МК вынесет из обработки таймера по адресу прерываний порта датчиков, после опроса датчиков МК вернётся на то место откуда его сорвали. После обработки прерываний по таймеру не забываем восстановить маску регистра прерываний.

Выбирай :D

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

Дело в том что если мы прервем таймер и перейдем в обработку прерывания то мы можем терять данные. Допустим таймер посылает на ком порт какие-то данные. Внезапно его прервали и мы потеряли данные. Тут помоему только опрашивать очень часто этот злополучный порт и уже оттуда смотреть что получилось :(

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

Продолжение (начал MaStak)

способ 4:

2 X-shadow. Посмотри на М128 ноги PD0-PD3 и PE4-PE7. Это восемь! ног отслеживающие прерывание по одному вектору!

На одной из ног перепад (как настроишь) - выполняется прерывание. В нем читаешь один регистр и смотришь на какой ноге это случилось.

Никаких масок, никакого геммороя.

Чтоб не терять данные от прерываний, при входе в обработку разрешаем прерывания глобально. Это нормальное "разруливание" множества прерываний. Правда, придется программно делать, чтоб одно и тоже два раза не зашло. Это флагами. Но при твоих временных данных, десятки милисек. - это не грозит.

Ссылка на комментарий
Поделиться на другие сайты

Если совсем с потерей данных критично - делается буферизация входных данных. В прерывание вошел, скинул в буфер, вышел. А в остальное время спокойно обрабатываешь их.

Ссылка на комментарий
Поделиться на другие сайты

Значит допустим мы вошли в прерывание таймера и тут у нас возникло прерывание на какой-то ноге. Мы вышли обработали прерывание на ноге и вернулись в то место откуда вышли???

А каким образом может получиться так что мы 2 раза обработаем одно и тоже прерывание?

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

Лучше, конечно, нарисовать - но лень. :)

попробую пояснить так:

Допустим, есть 2 независимых прерывания (далее П) от разных источников. При входе в одно из них аппаратно запрещаются все П (asm: CLI) и выполняется только данное, все остальные будут молчать (для М128). Можно при входе в П разрешить программно все П (asm: SEI). И соответственно, сработай еще раз это же, оно войдёт снова :) , но и второе П не будет заблокировано и тоже спокойно может сработать. Во втором П тоже разрешаешь все П и выполняя его, может спокойно сработать первое. Вот тут та и надо чтобы они не переполнили стек своими заходами.

Попробуй в инете поискать что нибуть про вложенные прерывания, я думаю это тема не на один день...

Ссылка на комментарий
Поделиться на другие сайты

О, чуть не забыл, главное:

При входе в любое П, аппаратно сбрасывается флаг этого П, тем самым, разрешая его работу. :P

Всё это приминимо к м/к AVR.

Ссылка на комментарий
Поделиться на другие сайты

Ещё вспомнил :)

Способ №5: "хитрый"

Берёшь любой свободный таймер и настраиваешь на внешний тактовый сигнал. Пока лазишь в обработчике ШИМа, АЦП и т.д. этот таймер спокойненько подсчитывает все импульсы с датчиков. Выходишь из обработчика и выгружаешь значение таймера в регистр счёта импульсов.

Трабла только в том что на каждый датчик нужен свой таймер :(

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо. Пара вопросов.

1) Допустим я вошел в прерывание таймера. Сразу разрешил все прерывания. В этот момент возникло прерывание на ножках PD6 PD7. Я вышел из прерывания таймера, обработал прерывание ножки и снова вернулся в прерывание таймера и продолжил работу. За это время таймер не стал снова считать??? Т.е он стоит пока я не выйдет из обработки функции прерывания таймера?

2) Прерывание на ножках PD6 PD7 возникает при появлении высокого уровня или при перепаде?? Т.е если у меня сначала низкий уровень, потом высокий и потом снова низкий я получу 1 прерывание или 2???

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

1)Таймер нельзя остановить, он считает всегда ( и пока идёт обработка прерывания этого таймера, тоже считает ), поэтому во избежание его переполнения и как следствие нового прерывания его ( таймер ) надо обнулять.

Пожалуй единственный способ остановить таймер это отключить от него предделитель, что не очень удобно, лучше всё-таки обнулять.

2) Флаг прерывания формируется при переходе от одного лог. состояния в другое.

Условие прерывания по фронту или по срезу импульса, устанавливается битом в определённом регистре ( у PICов это OPTION_REG ), СМОТРИ ДОКУМЕНТАЦИЮ НА СВОЙ МК.

Паять не мешки ворочать.

Ссылка на комментарий
Поделиться на другие сайты

Я вот никак не могу понять что за прерывания на PD6 и PD7. На PD1 это INT0 и чет никак не могу понять че делать

Лучше сорок раз по разу чем ни разу сорок раз..

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Не паникуйте-феншуй это для китайцев, да и они на него давно наплевали-ставят что хотят, а где хотят-то и вовсе не ставят. И все у них работает. 
    • Это всё равно что сапожник без сапог.
    • Спасибо конечно. Как бы это было ясно. Наверное не так выразился, в чем разница? Аа, догадываюсь, что шунт резистор наверное подбирался для готового РГ для 10 кОм. В моём случае выбор свободен...
    • Всех приветствую. По листал форум и интернет в поисках ответа на вопрос, но ничего не смог найти. Может не умею гуглить или корректно задавать вопросы. В общем вопрос следующий.  Много раз замечал в автоусилителях (мощных) сборку блоков питания. Схем полных, естественно днем с огнем не сыщешь. Так вот задаюсь серьезным вопросом, как все же включены трансформаторы в этих уселках? Например их там может быть 4-6 штук, какиони выводят всю мощность? Отдельно каждый для одного усилителя? Или каким то способом соединены в параллель? Управляются одним шимом или для каждого свой шим? Или один шим на попарно включённые трансформаторы....  Если параллель то где? После трансформатора или уже после диодов... Не доходит до меня в общем. Если кто может и есть время, распишите пожалуйста подробно как несколько трансформаторов работают в одной системе... Мосты там или еще что прочее.    PS, помидорами не кидайтесь. Все когда то задавались вопросом, как работает лампочка....
    • Есть к чему стремиться
    • Давай вместе подумаем. Какие варианты есть? Можно прочитать заклинание. Можно прочитать молитву. Можно прочитать про то, как устроены позиционные системы счисления, и что означает наличие той или иной цифры на той или иной позиции в записи числа. Одно из этих действий должно помочь. Выбирай.
    • Да, скорее всего именно так, сомневаюсь что там была внутри какая-то начинка. Там даже пары квадратов панели не было, от силы один-полтора. Ставил на солнце (на подоконник), благо что солнце на халяву... Благо что в южных краях его хоть отбавляй...
×
×
  • Создать...