Плата контроллера на базе STM32F7 с видеовыходом

от автора

По роду своей работы часто приходится проектировать различные виды управляющих и измерительных систем. Разумеется на базе микроконтроллеров. Сначала использовали AVR, потом следующее семейство ATxMega, в конце концов остановились на семействе STM32. Несмотря на разные функционал проектируемых устройств, масса функций остается неизменной: интерфейс с пользователем и внешними устройствами, сохранение данных, часы реального времени и т. п. Поэтому появилась идея сделать универсальную плату контроллера содержащую основные узлы, а дополнительные подключаемые платы будут расширять функционал до необходимого. Сначала это был контроллер на STM32F103, потом на 207, потом на 429. И вот на 746 кристалле.

Но главная новинка на этой плате — это видеовыход. До этого, как правило, использовался графический дисплей (монохром, 320 х 240). Но у этого подхода есть свои недостатки:

1. При переходе на цветной дисплей приличного размера > 5" с встроенным контроллером цена становится достаточной большой.
2. Использовать приходиться только один тип дисплея, так как интерфейсы, как правило несовместимы. 🙁

Но тут пришла мысль использовать стандартные автомобильные мониторы, цена которых, достаточно демократична, существует большое количество производителей и есть разные размеры.

Для этого пришлось реализовать видео выход.



После поисков на просторах Интернета был обнаружен графический контроллер S1D13746F01, который имеет встроенную память 321 кБ и композитный видеовыход.Конечно есть и S-Video, но он не планировался использоваться. Так же был обнаружен и даташит на Evaluation Board с подробной схемой подключения, правда на корпус, который имеет 100 выводов.

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

Для организации видеобуфера потребуется 320 * 240 = 76800 байт. Количество цветов при этом будет равным 256. Такой формат кодирования цвета обозначен в документации на видеоконтроллер, как RGB 3:3:2. То есть 3 бита на красный, 3 бита на зеленый и 2 бита на синий цвет. Итого 8 красных цветов различного уровня, 8 зеленых и 4 синих.

Запись в видеочип осуществляется программным способом через порт. Вот программка на Си.

void refresh_display(void) {   unsigned long   h, s;   unsigned short  out_port;       for (s = 0; s < Height_window; s++) //строки   {     for (h= 0; h < Width_window; h++) //столбцы     {       out_port = gLCD_port->ODR;       out_port &= 0xFF00;       out_port |= video_buffer[h] [s];  //данные        gLCD_port->ODR = out_port;        gLCD_color_WE_low; //запись       gLCD_color_WE_high;     }   } }  

Время записи всего видеобуфера составляет примерно 20мсек. При желании можно выводить видео 50 кадров / сек, но контроллер будет заниматься только выводом. 🙂 В реальных задачах необходимо осуществлять перезапись экрана от 3 до 10 раз в секунду.

И вот картинка на подключенном автомобильном мониторе, купленном в ближайшем магазине. Размер монитора — 7".

Это управление высоковольтным тестирующим устройством. Кроме видеовыхода на плате контроллера остался разъем для подключения монохромного дисплея Winstar WG320240C0.

Краткая характеристика основных узлов на плате контроллера:

  • 6 разъемов с комплементарными ШИМ выходами для управления полумостами
  • USB Host реализован на микросхеме VNC1L, в основном используется для записи информации на флешки.
  • USB Device — микросхема FT232RL, используется для программирования микроконтроллера с компьютера через USB
  • изолированный RS485 для связи с устройствами по MODBUS
  • Wi-Fi на базе модуля ESP8266
  • RTC — DS1307 с литиевой батарейкой, подключен по I2C
  • 2 микросхемы флеш памяти, одна используется для хранения конфигурации устройства, другая для архивных данных
  • ИОН на базе REF192
  • 2 разъема расширения на 20 пин каждый, один для аналоговых сигналов, другой для цифровых.

Вот такой контроллер получился.

ссылка на оригинал статьи https://habrahabr.ru/post/281451/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *