Глава 1. Немного предистории, или как я люблю отечественный Автопром.
После того, как на моей машине, а машина прямо скажем почти эксклюзивная (в смысле запчасти фиг найдешь), благополучно скончался очередной спидометр, то ли седьмой, то ли восьмой, я решил замутить электронный девайс, чтоб и скорость показывал и километры щелкал.
Как обычно, начал поиск того, что уже натворили собратья по разум и коллеги по несчастью обладания данным типа авто. Пролистав не одну страницу и посетив не один форум, обнаружил что ничего подходящего для моего авто нет, либо девайс собран на PICе, у меня даже программатора нет и приходится просить друзей-знакомых, да и AVRки мне как-то роднее, либо состоит из 2х отдельных блоков, и у всех значения пробега пишутся во внутреннюю EEPROM, что не есть гут. Пораскинув мозгами, не широко так, чтобы потом можно было собрать в кучу, решился на отчаянный шаг - лепить самому. Что из этого получилось - решать вам, многоуважаемые коты.
Фото 1. Общий вид:
Фото 2. Основной блок:
Фото 3. Датчик ДСА-9 + "двигло":
Глава 2. О выборе компонентов, или "я его слепила из того, что было".
Итак, за источник сигнала о продвижении авто по тернистому пути наших автодорог был выбран ДСА-9, имеющий: 6 импульсов на 1 метр пути, выход ОК и резьбовое соединение М22 х не помню на сколько, как раз по размеру, НО можно использовать любой датчик скорости с 6имп/метр, в зависимости от авто.
С проциком было труднее. Любимой меге48 не хватало пары ног, но тут на глаза попалась старая макетка с мегой16, что ж так тому и быть. Итого: МП=ATmega16-16PI
С выбором тактовой частоты долго мучаться не пришлось, после не больших подсчетов выяснилось, что период повторения импульсов при скорости 250 км/ч составляет 2,4 мс, или 2400 тиков при тактовой частоте в 1 МГц, маловато будет, было решено использовать кварц на 8 МГц, это уже 19200 тиков процессора, а для удобства подсчета, с помощью таймера Т1, использовать "предделитель на 8".
Для отображения всего, что будет измерятся и подсчитыватся предназначены:
KingDright BA56-12GWA (можно любые с ОА) - для отображения текущей прыткости
МЭЛТ MT-08S2A-2YLG (опять же можно любой 8х2 LCD с аналогичным контроллером и тактовой не ниже 250 кГц) - для подсчета того, что будет пройдено по тем направлениям, что в России гордо именуется дорогами.
Ну и AT24C04B (наследство от той самой макетки, но можно любую из серии 24Схх), чтобы "помнить" от тех незабываемых километрах пути.
Глава 3. О самом главном, или без теории ни туды, и ни сюды.
Переходим, собственно, к методике определения скорости. Как всем известно, если автомобиль движется, то с датчика скорости поступают импульсы, если никуда не движется - то и импульсов тоже не дождетесь! И что самое поразительное - частота (или кому удобнее - период повторения) прямо пропорциональна (обратно пропорциональна, для периода повторения) скорости движения, вот тут-то, не при котах будь она упомянута, собака и порылась. Что такое частота - это количество импульсов в секунду (просто гениально, спасибо Герцу) N(в секунду)=Fп, поэтому получаем:
V=Fп/6 (м/сек) (мы же помним, что на 1 метр приходится 6 импульсов)
Но минуточку, где вы видели спидометры со шкалой "М/СЕК"? Да и ГАИшники, (ДАИшники - это чтобы для тех, кто в Украине проживает, было понятно) штрафуют за лишние км/час. Отсюда вывод - надо пересчитать, а как? Все гениальное просто: умножаем на 3600 (это столько секунд в 1 часе) и делим на 1000 (столько метров в 1 км) после сложнейших математических преобразований получаем волшебную формулу:
V=0,6*Fп (км/час) - то что доктор прописал.
Из это формулы следует гениальное (жаль, что не я первый додумался) умозаключение - если организовать "временные ворота" длительностью 0,6 сек, в которые проталкивать импульсы от датчика, на выходе получим скорость! 1 импульс - 0,6 км/час, 10 импульсов - 6 км/час, 100 импульсов - 60 км/час и т.д. Но, опять это "НО", как сказал один из главных героев любимого фильма из детства "Айболит-66" - "Нормальные герои всегда идут в обход", вот этим путем пойдем и мы, т.е. заменим в формуле Fп на Тп (оно же 1/Fп), в результате получим:
V=0,6/Тп (км/час)
Возникает законный вопрос - "ЗАЧЕМ?". Напрашивается еще одна цитата: "А я объясню!" ("Ирония судьбы, или с легким паром"). Дело в том, что как любой цифровой прибор, нашему спидометру присущи те же недостатки - погрешность. Может кто помнит, обычно пишут: "+/- 2 знака мл.разряда" (например). Так вот, чтобы уменьшить, всякие там, погрешности умные люди придумали "складывать и умножать" (шучу), накапливать и усреднять.
Теперь посмотрим, сколько нужно времени, чтобы усреднить 2 показания, ну скажем на скорости 60 км/ч.
При первом способе получается: 2 временных отрезка по 0,6 сек - итого 1,2 сек, авто при этом проедет примерно 33м. (временем выполнения сложения-деления можно пренебречь)
Второй способ нам дает: 2 интервала по 10 мс - итого 0,02 сек, авто проедет - 0,33м.
Вот поэтому в программе происходит накопление и усреднение 8-ми отсчетов скорости. Почему 8? Просто удобнее усреднять, не мне - микропроцику.
Тогда зачем я тут подробно описывал первый способ расчета? А чтоб было, вдруг кому-то понадобится!
Что? Забыл про одометр? Ну, там все просто: считаем импульсы, делим на 6 - получаем метры, потом делим на сто - сотни метров (нужны для учета суточного пробега), еще на 10 получили - км. Как вы поняли в девайсе всего два счетчика пробега: полный и суточный.
Опять же, количество счетчиков ограничено только моей фантазией (или ее отсутствием) и теми самыми 19200 тиками (по секрету скажу - тиков ушло примерно 1/3), можно конечно добавить счетчиков, прицепить часы на DS1307 и считать км за 1 час, скажем, или расстояние от работы до магазина с пивом, но зачем?
Глава 4. Описание работы, или "а оно вам надо?"
Основная часть схемы изображена на рис.1.
И так, что у нас в наличии:
таймеры: Т0, Т1, Т2 - отлично,
аппаратный TWI - пригодится,
1 свободная нога от АЦП - вполне достаточно,
есть еще ноги для организации внешних прерываний,
ну еще куча всего - оно нам не пригодится, по крайней мере в этом проекте.
Основную работу выполняет Т1, заполняет время между 2-мя нарастающими фронтами от приходящих импульсов датчика скорости, импульсами 1МГц (считать удобно: 1 импульс - 1 мкс) попутно подсчитывая их (импульсы от датчика). Работает он в режиме ICR, и использует 2-а прерывания, собственно Input Capture1 Interrupt Vector и Overflow1 Interrupt Vector, второй нужен только для расчета скоростей ниже 10 км/ч, к сожалению на таких скоростях Т1 успевает переполняться и не один раз, поэтому и переменная 3-х байтовая.
На счетчике Т2, работающем в нормальном режиме, организовано формирование интервалов времени для динамического отображения информации на 7-ми сегментных индикаторах и вывода данных на LCD (здесь все понятно, пояснить нечего).
Т0 - тоже, ничего особенного режим Fast PWM, управляет ключем регулирующим яркость свечения индикаторов. АЦП - меряет напругу на переменном резисторе R7, выравнивает результат влево, и записывает его в OCR0.
Ну что еще? Гальваническая развязка входов МК от бортовой сети авто, так проще, ключ на элементах VT5,VT6 (если кому-то больше нравятся полевики, пожалуйста - можно и на полевике) нужен только для того, чтобы процик успел записать данные по километражу в 24С04, после выключения зажигания. Забыл пояснить Vп - цепь питания постоянно находящаяся под напряжение ботовой сети , Vз - цепь питания, на которой напряжение бортовой сети появляется после включения зажигания и соответственно пропадающее после отключения оного.
Для эстетов на выводах PC3, PC4 организован вывод скорости до 200км/ч с дискретностью 2,5км/ч на линейку светодиодов (рис.3), всего-то: 10 - 74ALS164, 81- светодиод (один светится постоянно изображая "0км/ч), но это на любителя (кто надумает лепить сие безобразие - не забудьте поменять источник питании на более мощный, а если и яркость регулировать захотите - то и транзистор на ШИМе.)
Питается все это безобразие от преобразователя (рис.2) на МС33063А, заменять на, что-то типа 7805, не рекомендую. Девайс кушает около 0,2А и на 7805 будет рассеиваться мощность около (14,5В-5В)*0,2А = 1,9Вт, многовато, греться будет как "собака", плюс еще тепловой режим под панелью авто, без радиатора не обойтись.
Эпилог.
Вот в принципе и все. Работка скромненькая, но я честно старался.
Не пинайте слишком сильно - в конкурсе участвую первый раз, да и "писатель" я начинающий.
С надеждой на вашу благосклонность.
Файлы:
Прошивка МК.