150
Скоростимер wchrony
Цель
Cделать простой измеритель скорости на основе AVR (AtMega16/16MHz) с выводом на сегментный дисплей
Инструкция
- В холодную или жаркую погоду держите устройство под одеждой, т.к. результат будет меняться при изменении температуры (датчики могут быть без ущерба на холоде, солнце, под дождём)
- Подключите датчики A и B к устройству (на фотографии обозначены перемычками A,B) на расстоянии 1/8 метра (125мм) для получения измерений в метрах в секунду. Рабочий диапазон примерно 250..2500м/с.
- Подключить устройство к питанию +5V. Внимание! Защита на данный момент отсутствует! При правильном подключении на индикаторе должна загореться точка в правом нижнем углу
- Устройство начнёт самотестировани. Должны последовательно отобразиться "0123456789-_=E "
- Если разомкнута датчик A на дисплее будет отображаться символ "-" (тире). Подключите датчик А правильно и перезагрузите wchrony
- Если датчик А замкнут но разомкнут В, на дисплее будет отображаться символ "_" (нижнее подчёркивание). Подключите датчик В правильно и перезагрузите wchrony
- Если оба датчика успешно подключены, на дисплее будет отображаться символ "=". wchrony готово к измерениям
- После измерения результат будет отображаться на дисплее в виде бегущей строки вплоть до выключения питания
- Во время отображения результата можно заново подсоединять датчики, устройство не пострадает.
Реализация аппаратная
- AtMega 16
- 16MHz quartz
- 2 датчика на размыкание
- односегментный индикатор KingBright DA56-11HWA и SA56-21EWA
- дублирующий вывод на COM-порт
Фактически устройство отсчитывает количество 1/16млн. долей секунды между срабатываниями датчиков.
Математическое обоснование
Наша задача убрать пересчёт тиков в скорость
K=16000000[qty/s] (16MHz qurtz, time-to-ticks)
t[s]=N[qty]/K[qty/s]
v[m/s]=l[m]/t[s]
v=(l×K)/N (speed)
- Возможна оптимизация чтобы
l=1/8m, тогда операция l×k заменится на k>>8
В системе идёт дискретное время в "qty"="шт"="штуки".
Картинки

Реализация программная
исходник для Dia, svg
Как видно из блок-схемы алгоритма выбрана простейшая реализацая. Простота в данном случае гарантирует надёжность и предсказуемость.
Вариант программы wchrony.c и lut.h - таблица символов для 8-ми сегментного индикатора. Дублирующий вывод производится на COM-порт.
Все материалы данной страницы в виде одного файла (фотографии, web, схема для KiCAD, исходники, готовая прошивка, проект для AVRStudio/winavr/avr-gcc).