150

Скоростимер wchrony

Цель

Cделать простой измеритель скорости на основе AVR (AtMega16/16MHz) с выводом на сегментный дисплей

Инструкция

  1. В холодную или жаркую погоду держите устройство под одеждой, т.к. результат будет меняться при изменении температуры (датчики могут быть без ущерба на холоде, солнце, под дождём)
  2. Подключите датчики A и B к устройству (на фотографии обозначены перемычками A,B) на расстоянии 1/8 метра (125мм) для получения измерений в метрах в секунду. Рабочий диапазон примерно 250..2500м/с.
  3. Подключить устройство к питанию +5V. Внимание! Защита на данный момент отсутствует! При правильном подключении на индикаторе должна загореться точка в правом нижнем углу
  4. Устройство начнёт самотестировани. Должны последовательно отобразиться "0123456789-_=E "
  5. Если разомкнута датчик A на дисплее будет отображаться символ "-" (тире). Подключите датчик А правильно и перезагрузите wchrony
  6. Если датчик А замкнут но разомкнут В, на дисплее будет отображаться символ "_" (нижнее подчёркивание). Подключите датчик В правильно и перезагрузите wchrony
  7. Если оба датчика успешно подключены, на дисплее будет отображаться символ "=". wchrony готово к измерениям
  8. После измерения результат будет отображаться на дисплее в виде бегущей строки вплоть до выключения питания
  9. Во время отображения результата можно заново подсоединять датчики, устройство не пострадает.

Реализация аппаратная

  1. AtMega 16
  2. 16MHz quartz
  3. 2 датчика на размыкание
  4. односегментный индикатор KingBright DA56-11HWA и SA56-21EWA
  5. дублирующий вывод на COM-порт

Фактически устройство отсчитывает количество 1/16млн. долей секунды между срабатываниями датчиков.

Математическое обоснование

Наша задача убрать пересчёт тиков в скорость

  1. K=16000000[qty/s] (16MHz qurtz, time-to-ticks)
  2. t[s]=N[qty]/K[qty/s]
  3. v[m/s]=l[m]/t[s]
  4. v=(l×K)/N (speed)
  5. Возможна оптимизация чтобы l=1/8m, тогда операция l×k заменится на k>>8

В системе идёт дискретное время в "qty"="шт"="штуки".

Картинки

Реализация программная

исходник для Dia, svg

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

Вариант программы wchrony.c и lut.h - таблица символов для 8-ми сегментного индикатора. Дублирующий вывод производится на COM-порт.

Все материалы данной страницы в виде одного файла (фотографии, web, схема для KiCAD, исходники, готовая прошивка, проект для AVRStudio/winavr/avr-gcc).