POV - часы пропеллер » Программирование устройств на PIC микроконтроллерах


Логин:
Пароль:
О сайте:

Pic.Rkniga.ru - Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах.
Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств.

Меню сайта
Главная Форум по PIC микроконтроллерам Форум Статьи по PIC микроконтроллерам Статьи Справочная информаци по PIC микроконтроллерам Справочник Литература по PIC микроконтроллерам Литература Схемотехника Схемотехника устройств на PIC микроконтроллерах Микроконтроллеры Программаторы Все по программированию PIC микроконтроллеров Программы, Софт Программы Ссылки Написать нам
Опрос

Какой средой программирования вы пользуетесь?


MPLab/MPLabX
MicroC
MicroBasic
MicroPascal
Другой


Последние материалы
  • Каршеринг в Москве - это Просто, Удобно и Недорого.
  • Кнопка On/OFF на PIC12F629.
  • Часы с синхронизацией от китайского будильника
  • ШИМ регулятор на PIC16F628A.
  • Счетчики прямого и обратного счета на PIC16F628A.
  • Таймер отключения питания для мультиметра и не только.
  • Программирование на C микроконтроллеров PIC24
  • Измеритель напряжения и тока
  • Маршрутный компьютер для электровелосипеда
  • Простой двухканальный термометр на PIC16F690 и датчиках DS18B20
  • Популярные материалы
    Случайная книга
    POV - часы пропеллер
    Автор публикации: alex Просмотров: 10710 Добавлен: 13-08-2012, 20:10 Комментарии: 0

         В данном проекте часов-пропеллера используется так называемый POV (Persistence Of Vision)-эффект или говоря по русски: эффект персистенции. Эффект основан на возможности нашего мозга и глаз соединять в одно изображение быстро меняющиеся (движущиеся или мерцающие) картинки. К примеру на этом основан эффект кинематографа.
         На ютубе представлено множество различных видеороликов с POV-эффектом, однако среди них мало информации как сделать такие устройства своими руками. В нижеприведенном проекте я постараюсь описать процесс создания POV-устройства.
    Часы-пропеллер. POV
    POV-эффект. Изображение
    POV-эффект. Текст

    Цели и задачи проекта

    Целью данного проекта является создание часов-пропеллера, использующих один цвет, с использованием POV-эффекта для создания оптической иллюзии. Устройство должно отображать изображение (точнее его часть в определенной точке) по всей окружности от 0° до 360° с точностью 1°. ИК-передатчик в паре с ИК-приемником, образуют нулевую точку для отслеживания местоположения пропеллера.

    В нашем POV-девайсе используется два источника питания: один находится на плате пропеллера, второй управляет моторчиком, который вращает пропеллер. Принцип работы POV будет следующий: старт с нулевой точки, затем каждый 1° светодиоды будут загораться в зависимости от местоположения пропеллера в круге 360°.

    Используемые радиоэлементы

    PIC18F252 - микроконтроллер. Основной элемент нашего устройства.

    74LS373 (отечественный аналог 555ИР22) - регистр-защелка для управления светодиодами.

    Компьютерный вентилятор (3800 об/мин) - я выбрал вентилятор с встроенным контроллером скорости и питания. Для POV-эффект требуется вентилятор с скоростью вращения не менее 3600 об/мин.

    Инфракрасный светодиод и фототранзистор - пара этих элементов предназначена для отслеживания нулевой точки. Когда пропеллер пересекает нулевую точку, то в микроконтроллере срабатывает прерывание, по которому программа визуализации начинается с 0°.

    Также, в проекте используются:
    7805 +5В преобразователь
    47мкФ конденсатор
    40 МГц кварц
    2x 330 резисторы
    16x зеленые LED
    ИК-диод
    Фототранзистор
    Макетная плата
    Соединительные провода
    9В держатель батарейки
    PICkit2 программатор

    Принципиальная схема POV

    Схема устройства не сложная и содержит три основных компонента: преобразователь 7805 в источнике питания, микроконтроллер PIC18F252 и регистр 74LS373 для управления светодиодами и ИК-диод и фототранзистор для отслеживания нулевой точки.

    Схема POV

    Вкратце об основных модулях устройства:

    Источник питания
    Стандартные +5В для питания микроконтроллера получаем через преобразователь LM7805 (корпус Т220). Выходной конденсатор служит для фильтрации бросков напряжения.

    Управление светодиодами
    В PIC18F252 использована 8-бит шина данных с 2 линиями управления 74LS373, которые включают или выключают светодиоды, в зависимости от пришедших данных. При данном схемотехническом решении в один момент времени возможно управление только одной микросхемой 74LS373, поэтому светодиоды загораются не со 100% синхронностью.

    Отслеживание нулевой точки
    Синхронизации изображения осуществляется при помощи нулевой точки, для отслеживания которой используется ИК-диод и фототранзистор. Когда свет от диода попадает на транзистор, он открывается и +5В от коллектора идут к +0В эмиттера. Контроллер PIC обнаруживает спад сигнала и отрабатывает программу возврата к нулевой точке.

    О микросхеме 74LS373

    Микросхема 74LS373 (отечественный аналог 555ИР22) представляет собой регистр-защелку с тремя состояниями выходов, содержащая в себе 8 D-триггеров. Даташит PDF.

    Распиновка 74LS373

    Данную микросхему я использовал в качестве LED-драйвера. Выхода м/с включают или выключают соответствующие светодиоды. Каждая м/с имеет два входа управления: LE (Latch Enable) и OE (Output Enable). Ниже, я кратко опишу как применять эти входы в нашем проекте.

    Output Enable (OE) - подключает/отключает выхода микросхемы. Вход инверсный. Если на входе 1, то выхода имеет состояние высокого сопротивления, если на входе 0, то данные передаются от входа к выходу (см. таблицу истинности в даташите).

    Latch Enable (LE) - вход, в зависимости от состоянии которого м/с будет сохранять текущее состояние выходов, либо устанавливать новое состояние выходов, в зависимости от данных на входе. Если вход LE активен (логическая 1 на входе), то данные свободно передаются от входа к выходу. Если на входе 0, то данные не передаются, а выходное состояние зависит от предыдущего значения входов.

    Расчет таймингов POV

    Для того, чтобы в определенном положении POV отображать соответствующие данные, мы должны очень точно рассчитать все тайминги и задержки. К счастью, контроллер PIC содержит встроенный таймер, который мы и будем использовать.

    Частота вращения вентилятора = 3800 об/мин
    Найдем частоту вращения в секунду 3800/60 = 63.3333 об/сек.
    1 полный круг = 1/63.3333 = 0.015789 секунд
    1° вращения = 0.015789/360 = 0.000043859 секунд
    Частота выполнения инструкции 40 МГц/4 = 10 МГц
    Инструкций на 1° вращения = 43.86 мкс/10000000 = 438.6
    Получается 438 инструкций на каждый 1° вращения

    Т.о. зная частоту вращения вентилятора, мы можем найти время для поворота на 1°. У нас получилось значение 43.86 мкс, это будет интервал вызова прерывания микроконтроллера, по которому будет обновляться состояние светодиодов. Для получения полной картинки, нам нужно будет выводить для каждого из 360 градусов свое состояние светодиодов.

    Отслеживание нулевой позиции

    Для того, чтобы наш POV-проект был более точен в отображении картинки, я использовал контроль нулевой точки при помощи ИК-светодиода и фототранзистора. После того, как точка 0° пройдена, изображение сбрасывается и начинается новый цикл.

    Когда ИК светодиод включен, фототранзистор детектирует излучение и выключает красный светодиод. Такой же принцип и используется в нашем проекте для обнаружения нулевой позиции.

    Отслеживание нулевой позиции POV

    На картинке выше показано, как реализовано отслеживание нулевой точки в нашем POV-проекте. Всякий раз, когда пропеллер проходит над ИК-светодиодом, транзистор открывается соединяя +5В с коллектора к земле эмиттера. Микроконтроллер PIC обнаруживает данный переход состояния и т.о. определяет нулевую точку.

    Изготовление платформы пропеллера

    На картинке ниже я собрал все детали, которые будут нужны нам для изготовления POV. Не показан только источник питания для вентилятора и ИК-диод.

    Детали POV

    Сперва мы должны прикрепить вентилятор к основе, для этого используем 4 болта и гайки.

    Крепим вентилятор к основе

    Для этого, в основе сверлим четыре отверстия и закрепляем вентилятор в центре основы.

    Прикрученный к основе вентилятор

    Прикрепляем небольшой кусок фанеры, при помощи клея или эпоксидки, к вентилятору.

    Крепим кусок фанеры

    Обрезаем лопасти вентилятора и прикрепляем держатель 9В батарейки.

    Крепим кусок фанеры

    Далее, прикрепляем при помощи болтов кусок фанеры к вентилятору.

    Закрепленная фанера на вентиляторе

    Сверлим четыре отверстия в плате и закрепляем ее на 4-х шпильках фанеры. Стараемся соблюсти баланс.

    Крепим плату
    Крепим плату

    Откручиваем плату и делаем ее прямоугольной. Затем опять прикрепляем.

    Закрепленная плата

    Компоновка радиодеталей

    При компоновке деталей на плате необходимо соблюдать баланс, чтобы при вращении не было дисбаланса. Старайтесь размещать детали ближе к центру и равномерно, в дальнейшем можно для балансировки прикрепить грузики на плату (я так и сделал, закрепив две монетки).

    На макетной плате я использовал монтаж накруткой, так называемый олд-скул метод. Для микросхем использовал сокеты.

    Подготовка к монтажу

    Для начала я разместил все сокеты и компоненты стабилизатора.

    Размещение сокетов для микросхем

    Следующим этапом, необходимо разместить светодиоды в один ряд на противоположной стороне платы.

    Размещение светодиодов

    После того, как все установлено, скручиваем или припаиваем все выводы согласно принципиальной схеме POV

    Монтаж накруткой

    Сначала, я соединил микроконтроллер PIC и триггеры

    Соединение PIC и триггеров

    Затем, соединил светодиоды к источнику питания и схеме управления.

    Соединение светодиодов

    Последним шагом, я закрепил инфракрасный светодиод к основе.

    Крепим ИК-светодиод к основе

    ИК-светодиод должен быть закреплен очень прочно

    Крепим ИК-светодиод к основе

    ...и должен быть размещен напротив фототранзистора на плате.

    Светодиод и фототранзистор

    Наш проект POV почти готов!

    Светодиод и фототранзистор

    Осталось залить прошивку и протестировать

    Программное обеспечение

    Основные функции в программе это:
    -High Priority RB0 Interrupt
    -Low Priority Timer0 Interrupt


    High Priority RB0 Interrupt
    void InterruptHandlerHigh()
     {
        if(INTCONbits.INT0IF) //check if INT0 interrupt flag is set
        {
          led_count = 325;
          WriteTimer0( 0xFFE0 );
          INTCONbits.TMR0IF = 0; //Clear TMR0 Flag 
          INTCONbits.INT0IF = 0;
        }
     INTCONbits.GIEH = 1; 
     }
    

    Работа данной функции прерывания высокого приоритета заключается в том, чтобы сбросить timer0 и начать вывод на LED с самого начала. Когда POV-эффект формируется, его отображение происходит много раз за секунду. Переменная led_count используется как счетчик прерываний таймера, чтобы знать какой выходной набор выводить на LED для отображения. INT0 также сбрасывается.

    Low Priority Timer0 Interrupt

    void InterruptHandlerHigh()
     {
        if(INTCONbits.INT0IF) //check if INT0 interrupt flag is set
        {
          led_count = 325;
          WriteTimer0( 0xFFE0 );
          INTCONbits.TMR0IF = 0; //Clear TMR0 Flag 
          INTCONbits.INT0IF = 0;
        }
     INTCONbits.GIEH = 1; 
     }
    

    По прерыванию от Timer0 уменьшается переменная led_count. Условие if/else используется для вывода данных часов/текста и т.п.

    Тестирование POV

    Мы подошли к заключительному этапу нашего проекта POV. Осталось запустить все и наслаждаться POV-эффектом.

    Интервалы в 1° легко успевает отрабатывать 40 МГц МК. Т.о. можно выводить как графическую информацию, так и текст, флэш памяти микроконтроллера я думаю хватит для любых паттернов

    В заключении хотелось бы сказать, что это очень простой POV проект, который вы можете взять за основу для каких-либо своих улучшенных POV. А улучшать тут есть что: это может быть использование RGB-светодиодов для получения цветного изображения, или использование одного источника питания для всей системы и т.д. Данный пропеллер от 9В батарейки работает всего несколько часов
    Оригинал статьи на английском языке

    В архиве исходники и прошивка для микроконтроллера

    timerpropeller.rar [6,76 Kb] (cкачиваний: 460)


    Комментарии