Страница 1 из 1
Atmega16 Шим +Тахометр
Добавлено: Пн янв 13, 2014 14:26:29
zvezdami
Здравствуйте, у меня есть двигатель и атмега16, я управляю двигателем через шим(увеличиваю, уменьшаю скважность) посылая сигналы по Uart с ноутбука из программы на C#. Встал вопрос поставить тахометр на двигатель и получать данные с него в ноутбук по тому же Uart, из принтера достал оптопару, прицепил на двигатель, от него приходят когда закрыт ~0.5в и ~5в, когда открыт. Понимаю что дальше чтобы сделать тахометр нужно работать с прерываниями и таймером, но 1 таймер у меня уже занят шимом, а на других почему то не получается. Ребят пришлите пожалуйста рабочий кусок кода для мк чтобы на ноге PD5 был шим, как у меня уже сделано, и чтобы на другую какую нибудь цеплять оптопару, чтоб мк считал кол-во обротов. Или хотябы скажите, что в мастере надо поставить.
И еще подскажите почему на выходе int0 напряжение 2 вольта, настраивал прерывания по Rising edge. Подключаю оптопару, когда открыта 5в, закрыта 2в, не срабатывает прерывание.
Re: Atmega16 Шим +Тахометр
Добавлено: Пн янв 13, 2014 22:58:00
Enigm
Так апаратный шим не затрагивает таймер0 , на нем и делать измерения импульсов.
А что стоит сделать програмный шим на таймер2, а на таймер0 считать имульсы, или использовать модуль захвата.
Re: Atmega16 Шим +Тахометр
Добавлено: Вт янв 14, 2014 10:46:56
clawham
начать надо с того что оптопара из принтера очень слабенькая и ей нужен усилитель-повторитель....тем более что скоростя будут намного бОльшими чем в принтере.... кроме того оптопара это два независимых устройства - светодиод и фототранзистор....когда на светодиод подаёш ТОК - он светит, когда свет доходит до фототранзистора то он или выдаёт ооооочень слабенькое напряжение( единицы микроампер) или ЗАМЫКАЕТ колектор с эммитером и в таком состоянии на нем падает 1-1.5 вольт при токе до миллиампера!!!
я оптопарами из мышки замерял скорость полета пульки 6мм шарика...ток светика 20 миллиампер, нагрузка оптопары 2 килоома на +5 вольт, дальше через килоом на прерывание атмеги.
Тебе же надоопределиться что у тебя за оптопара и где у неё катод-анод или колектор-эмитер если там фототранзистор.
ну а дальше всё просто, прерывание разрешаеш, в прерывании инкрементируеш любую переменную, а в таймере ШИМа включаеш прерывание по переполнению, считаеш сколько переполнений надо в секунду и в самом прерывании таймера считаеш сколько прошло переполнений - когда досчитал столько сколько надо для секунды - выставляеш флаг и записываеш переменную внешнего прерывания в буффер обработки а исходную(которая в прерывании от оптопары инкрементируется) обнуляеш.
В основном цикле проверяеш флаг, и если онравен единице(прошла секунда) сбрасываеш его сразу же и считаеш обороты в минуту, выводиш наэкран принимаеш решение что делать дальше, отсылаеш на компьютер через уарт - как душе угодно!
Но нужно понимать что если сильно много передавать то за секунду может прийти ещё одно измерение и чтобы небыло конфликтов надо использовать двойную буферизацию.
Ну вот как-то так....остальное....если хочеш чтоб ЗА ТЕБЯ ТЕБЕ КОД НАПИСАЛИ....тебе прийдётся обратиться со своей проблемой в из лап в лапы..там за денюжку выполнят всё что ты только ни захочеш и так как ты сам того захочеш
Но если хочеш научиться...и если знаком с программированием(не только МК а вообще) то проблем тут нету
Re: Atmega16 Шим +Тахометр
Добавлено: Вт янв 14, 2014 11:20:04
Taska
Enigm писал(а):
А что стоит сделать програмный шим на таймер2, а на таймер0 считать имульсы, или использовать модуль захвата.
Программный шим для управления двигателем?
Интересно как ты программный шим сделаешь на 4 кГц?
Re: Atmega16 Шим +Тахометр
Добавлено: Вт янв 14, 2014 12:22:40
clawham
чтото слишком интересные у Вас проблемы
данная задача вместится и в тини 13 у которого вообще один таймер и нету уарта....и ничего

люди как-то умудряются одним таймером и ШИМ и часы и счет и ртос крутить внутри

у первых компьютеров 8088 был только один аппаратный таймер и он спокойно и часы и звуки и прерывания генерировал
Зачем цепляться к словам

что такое 4 килогерца если тактовую можно задрать до 20-ти то ещё и свободного времени хватит

если разрядность 256 например то минимально необходимый уровень 1 или максимальный 254 будут проблемой...ито...
на это у нас есть 20000000 / (4000*256) = 20000000/ 1024000 = 20 тактов!
6 тактов на вход в прерывание, 4 такта на условие что вит надо выставить, 4 такта на условие что перешли к след итерации, 8-10 тактов на инкремент чара с проверками и 3 такта на вывод нуля или единички

и это в простом варианте

и ещё остаётся вагон времени
а ведь можно и разрешение уменьшить а водь можно ещё и переходить в другие режимы когда разрешение на грани - просто кидаться в задержки нопами....да код раздует но и скорость...в общем у меня не возникало проблем организовать 16 килоегрц 8-мибитный шим на 8 каналов имея только один аппаратный таймер и при этом и часы шли и связь по асинхронному однопроводному протоколу происходила(а-ля 1wire)