1 | ||||||
Подсчет оборотов двигателя на ATmega 4813.05.2014, 12:55. Показов 11195. Ответов 46
Метки нет (Все метки)
Требуется сосчитать обороты ДВС и вывести на экран. Для этого я решил присобачить схему простейшего стробоскопа (pdf вложение) к микроконтроллеру ATmega48, работает на частоте 1 МГц. То что получилось, видно на схеме, и оно не работает. Помогите разобраться в чем тут проблема? Может импульс настолько короткий, что МК не успевает запустить прерывание?
0
|
13.05.2014, 12:55 | |
Ответы с готовыми решениями:
46
понижение оборотов двигателя Регулятор оборотов бесколлекторного двигателя ПИД - регулятор оборотов двигателя Вывести индикацию оборотов вала двигателя Стабилизация оборотов DC двигателя 300W 24-52V |
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
16.06.2014, 16:44 | 41 |
sserg_ey, ему уже также писали, что этот алго неточный. Вы и сами, наверное, увидите, что шаг приращения результата в предложенном вами варианте - 3000об/мин. Многовато погрешности, как по мне.
При отлаженном (мною описанном чуть выше) алгоритме удавалось получить точность ~0,1%. ЗЫ: напомню: предлагается считать с помощью таймера время, за которое произойдет определенное количество импульсов.
0
|
16.06.2014, 17:22 [ТС] | 42 |
Voland_, ваш вариант интересен, но вы писали, что требуется отсутствие других внешних прерываний. у меня же есть прерывание для подсчета оборота колеса, чтобы вычислить скорость. Ну и точность 0.1% не требуется, это же не станок какой нибудь. Тут одну секунду одни обороты, затем уже совсем другие. Аналоговый индикатор был бы предпочтительнее конечно, но боюсь не реализуемо для меня. Да и обороты же не строго постоянны, они плавают, тем более двигатель карбюраторный. За секунду на холостых разброс может быть как раз 60 оборотов (сужу по показаниям бортового компьютера автомобиля с инжекторным двигателем), так что моя погрешность не так уж и критична.
0
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
16.06.2014, 23:39 | 43 |
очевидно, я неправильно акцентировал на этом внимание. Прерывания раз в 10мс не являются критичными, и в 1мс - в принципе, тоже. Особенно, если в них выполняется с десяток тактов задачи + 12 тактов - вход/выход из прерывания. Но наступает некий критичный момент, когда внешних прерываний может появиться слишком много, и тогда проц просто не будет справляться и почти всегда "жить" в прерываниях, не выполняя главный поток. В вашей задаче прекрасно все получится и по моему методу.
Идея примерно такая: - внешнее прерывание: 1) Проверяем флаг старта замера. Если это первый импульс - обнуляем таймер 0 и запускаем его на счет. Запускаем также таймер 2 с прерыванием через 200мкс. Отключаем внешнее прерывание. Инкриминируем счетчик EXTCNT внешних прерываний. Если счетчик EXTCNT==10 (например): сбрасываем флаг режима замеров, выключаем прерывание по таймеру 2. И сохраняем значение таймера 0 в переменную TIME. Прерывание таймера 2: (алгоритм фильтра дребезга контактов) выключаем таймер 2. включаем внешнее прерывание в главном потоке остается включать внешнее прерывание когда требуется замер и ожидать, когда сам установится, а потом сам сбросится флаг замеров. В итоге вы получите данные EXTCNT=10 и TIME. Считаем: один импульс у нас происходит за время t = TIME/EXTCNT/freq0. где freq0 - частота таймера 0. Соответственно, частота импульсов - f= 1/t = EXTCNT*freq0/TIME. Результат будет в херцах. Думаю, в об/мины переведете самостоятельно. Добавлено через 2 минуты ...да, чем выше частота таймера 0, тем выше будет точность. Но... необходимо помнить о возможном переполнении этого таймера (за время импульсов EXTCNT), и это учитывать в расчетах.
1
|
17.06.2014, 13:36 [ТС] | 44 |
Voland_, попробую сегодня вечером реализовать. к сожалению, запорол один датчик Холла когда пробовал, его намотало на вал вместе с проводом и раскрошило. думаю стоит вытравить небольшую платку для датчика (благо есть один запасной), и прикрутить ее возле магнита генератора, конструкция генератора позволяет, фото есть выше в треде. а провод прицепить например с помощью разъема WF-03MR.
0
|
12 / 12 / 0
Регистрация: 05.11.2011
Сообщений: 31
|
||||||
17.06.2014, 15:55 | 45 | |||||
Я бы сделал есче проще-
Но это все при условии, что на INT0 - заведен сигнал с цифрового униполярного датчика Холла! PS программу не проверял, но должна работать.
1
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
17.06.2014, 22:07 | 46 |
sserg_ey, можно. Просто разброс данных от замера к замеру будет весьма внушительным. Ибо джиттеры не дремлют, да и "дребезги" вы не убираете...
0
|
12 / 12 / 0
Регистрация: 05.11.2011
Сообщений: 31
|
|
17.06.2014, 23:06 | 47 |
По идеи, датчик холла сеет все не поперечные поля, плюс выдает чистый меандр. то есть, если правильно расположить датчик, развести плату, снабдить ее хорошим фильтром по питанию. Счастье наступит.
0
|
17.06.2014, 23:06 | |
17.06.2014, 23:06 | |
Помогаю со студенческими работами здесь
47
Регулировка оборотов двигателя на 220 вольт Датчик для контроля оборотов двигателя Регулятор оборотов DC двигателя 220В [на основе U2010B] регулятор оборотов двигателя 12в плюс стабелизация Стабилизация оборотов для двигателя ~220В, 350Вт Выключение двигателя через определенное количество оборотов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |