Здравствуйте, у меня есть двигатель и атмега16, я управляю двигателем через шим(увеличиваю, уменьшаю скважность) посылая сигналы по Uart с ноутбука из программы на C#. Встал вопрос поставить тахометр на двигатель и получать данные с него в ноутбук по тому же Uart, из принтера достал оптопару, прицепил на двигатель, от него приходят когда закрыт ~0.5в и ~5в, когда открыт. Понимаю что дальше чтобы сделать тахометр нужно работать с прерываниями и таймером, но 1 таймер у меня уже занят шимом, а на других почему то не получается. Ребят пришлите пожалуйста рабочий кусок кода для мк чтобы на ноге PD5 был шим, как у меня уже сделано, и чтобы на другую какую нибудь цеплять оптопару, чтоб мк считал кол-во обротов. Или хотябы скажите, что в мастере надо поставить.
И еще подскажите почему на выходе int0 напряжение 2 вольта, настраивал прерывания по Rising edge. Подключаю оптопару, когда открыта 5в, закрыта 2в, не срабатывает прерывание.
Atmega16 Шим +Тахометр
- Реклама
- Enigm
- Говорящий с текстолитом
- Сообщения: 1663
- Зарегистрирован: Вт апр 03, 2012 20:36:41
- Откуда: Сочи
Re: Atmega16 Шим +Тахометр
Так апаратный шим не затрагивает таймер0 , на нем и делать измерения импульсов.
А что стоит сделать програмный шим на таймер2, а на таймер0 считать имульсы, или использовать модуль захвата.
А что стоит сделать програмный шим на таймер2, а на таймер0 считать имульсы, или использовать модуль захвата.
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Atmega16 Шим +Тахометр
начать надо с того что оптопара из принтера очень слабенькая и ей нужен усилитель-повторитель....тем более что скоростя будут намного бОльшими чем в принтере.... кроме того оптопара это два независимых устройства - светодиод и фототранзистор....когда на светодиод подаёш ТОК - он светит, когда свет доходит до фототранзистора то он или выдаёт ооооочень слабенькое напряжение( единицы микроампер) или ЗАМЫКАЕТ колектор с эммитером и в таком состоянии на нем падает 1-1.5 вольт при токе до миллиампера!!!
я оптопарами из мышки замерял скорость полета пульки 6мм шарика...ток светика 20 миллиампер, нагрузка оптопары 2 килоома на +5 вольт, дальше через килоом на прерывание атмеги.
Тебе же надоопределиться что у тебя за оптопара и где у неё катод-анод или колектор-эмитер если там фототранзистор.
ну а дальше всё просто, прерывание разрешаеш, в прерывании инкрементируеш любую переменную, а в таймере ШИМа включаеш прерывание по переполнению, считаеш сколько переполнений надо в секунду и в самом прерывании таймера считаеш сколько прошло переполнений - когда досчитал столько сколько надо для секунды - выставляеш флаг и записываеш переменную внешнего прерывания в буффер обработки а исходную(которая в прерывании от оптопары инкрементируется) обнуляеш.
В основном цикле проверяеш флаг, и если онравен единице(прошла секунда) сбрасываеш его сразу же и считаеш обороты в минуту, выводиш наэкран принимаеш решение что делать дальше, отсылаеш на компьютер через уарт - как душе угодно!
Но нужно понимать что если сильно много передавать то за секунду может прийти ещё одно измерение и чтобы небыло конфликтов надо использовать двойную буферизацию.
Ну вот как-то так....остальное....если хочеш чтоб ЗА ТЕБЯ ТЕБЕ КОД НАПИСАЛИ....тебе прийдётся обратиться со своей проблемой в из лап в лапы..там за денюжку выполнят всё что ты только ни захочеш и так как ты сам того захочеш
Но если хочеш научиться...и если знаком с программированием(не только МК а вообще) то проблем тут нету
я оптопарами из мышки замерял скорость полета пульки 6мм шарика...ток светика 20 миллиампер, нагрузка оптопары 2 килоома на +5 вольт, дальше через килоом на прерывание атмеги.
Тебе же надоопределиться что у тебя за оптопара и где у неё катод-анод или колектор-эмитер если там фототранзистор.
ну а дальше всё просто, прерывание разрешаеш, в прерывании инкрементируеш любую переменную, а в таймере ШИМа включаеш прерывание по переполнению, считаеш сколько переполнений надо в секунду и в самом прерывании таймера считаеш сколько прошло переполнений - когда досчитал столько сколько надо для секунды - выставляеш флаг и записываеш переменную внешнего прерывания в буффер обработки а исходную(которая в прерывании от оптопары инкрементируется) обнуляеш.
В основном цикле проверяеш флаг, и если онравен единице(прошла секунда) сбрасываеш его сразу же и считаеш обороты в минуту, выводиш наэкран принимаеш решение что делать дальше, отсылаеш на компьютер через уарт - как душе угодно!
Но нужно понимать что если сильно много передавать то за секунду может прийти ещё одно измерение и чтобы небыло конфликтов надо использовать двойную буферизацию.
Ну вот как-то так....остальное....если хочеш чтоб ЗА ТЕБЯ ТЕБЕ КОД НАПИСАЛИ....тебе прийдётся обратиться со своей проблемой в из лап в лапы..там за денюжку выполнят всё что ты только ни захочеш и так как ты сам того захочеш
Но если хочеш научиться...и если знаком с программированием(не только МК а вообще) то проблем тут нету
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
-
Taska
- Первый раз сказал Мяу!
- Сообщения: 20
- Зарегистрирован: Вт фев 09, 2010 13:37:50
- Откуда: Украина
Re: Atmega16 Шим +Тахометр
Программный шим для управления двигателем?Enigm писал(а): А что стоит сделать програмный шим на таймер2, а на таймер0 считать имульсы, или использовать модуль захвата.
Интересно как ты программный шим сделаешь на 4 кГц?
-
clawham
- Поставщик валерьянки для Кота
- Сообщения: 1957
- Зарегистрирован: Пт окт 31, 2008 09:38:55
- Откуда: Одесса
- Контактная информация:
Re: Atmega16 Шим +Тахометр
чтото слишком интересные у Вас проблемы 
данная задача вместится и в тини 13 у которого вообще один таймер и нету уарта....и ничего
люди как-то умудряются одним таймером и ШИМ и часы и счет и ртос крутить внутри
у первых компьютеров 8088 был только один аппаратный таймер и он спокойно и часы и звуки и прерывания генерировал 
Зачем цепляться к словам
что такое 4 килогерца если тактовую можно задрать до 20-ти то ещё и свободного времени хватит
если разрядность 256 например то минимально необходимый уровень 1 или максимальный 254 будут проблемой...ито...
на это у нас есть 20000000 / (4000*256) = 20000000/ 1024000 = 20 тактов!
6 тактов на вход в прерывание, 4 такта на условие что вит надо выставить, 4 такта на условие что перешли к след итерации, 8-10 тактов на инкремент чара с проверками и 3 такта на вывод нуля или единички
и это в простом варианте
и ещё остаётся вагон времени 
а ведь можно и разрешение уменьшить а водь можно ещё и переходить в другие режимы когда разрешение на грани - просто кидаться в задержки нопами....да код раздует но и скорость...в общем у меня не возникало проблем организовать 16 килоегрц 8-мибитный шим на 8 каналов имея только один аппаратный таймер и при этом и часы шли и связь по асинхронному однопроводному протоколу происходила(а-ля 1wire)
данная задача вместится и в тини 13 у которого вообще один таймер и нету уарта....и ничего
Зачем цепляться к словам
на это у нас есть 20000000 / (4000*256) = 20000000/ 1024000 = 20 тактов!
6 тактов на вход в прерывание, 4 такта на условие что вит надо выставить, 4 такта на условие что перешли к след итерации, 8-10 тактов на инкремент чара с проверками и 3 такта на вывод нуля или единички
а ведь можно и разрешение уменьшить а водь можно ещё и переходить в другие режимы когда разрешение на грани - просто кидаться в задержки нопами....да код раздует но и скорость...в общем у меня не возникало проблем организовать 16 килоегрц 8-мибитный шим на 8 каналов имея только один аппаратный таймер и при этом и часы шли и связь по асинхронному однопроводному протоколу происходила(а-ля 1wire)
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Реклама

