Управляем нагрузкой по USB с помощью ПК и ATMega8
В наше время все больше находят применение устройства, позволяющие управлять нагрузками с помощью ПК. Обычно это некий коммутатор силовых нагрузок, подключаемый к компьютеру и специальное программное обеспечение.
Встречаются готовые образцы, которые позволяют управлять нагрузками удаленно через интернет, например, давая возможность включать свет, ТЭНы в бане, различные клапаны и т.д. Современные технологии позволяют делать устройства миниатюрными и быстродействующими.Описанное в статье устройство создавалось в рамках учебного курса университета в виде курсового проекта, поэтому начну с самого начала.
Содержание / Contents
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно братьОпробовано в лаборатории редакции или читателями.
↑ Анализ
Для решения задачи я решил применить микроконтроллер, который должен иметь на борту приемопередатчик UART и минимум три свободных порта для трёх каналов управления (количество их может быть увеличено и зависит от числа нагрузок). Вполне подходящим оказался микроконтроллер семейства AVR - ATMega8, как самый распространенный и недорогой.
Для создания связи устройства через USB-порт с ПК я использовал аппаратный преобразователь USB-UART с использованием микросхемы FT232RL.
↑ Схема структурная
Тут все очень просто и почти не требует пояснения. Вся электрическая часть устройства состоит из следующих элементов:a) Блок управления включения/выключения нагрузкиb) Микроконтроллерc) Преобразователь USB – UARTd) ПК и программа управления устройством
После подключения устройства к ПК пользователь запускает программу управления устройством. При удачном подключении от устройства придёт сообщение, после чего можно будет управлять нагрузкой. Данные о включении или выключении выводятся в окне программы.
↑ Схема электрическая принципиальная
↑ А как же это все должно работать?
После включения микроконтроллера (его подключения к ПК), инициализируется его работа, устанавливается режим работы приемо-передатчика UART, после чего разрешаются прерывания и МК ждет приема данных от программы, запущенной на ПК.
При запуске программы и удачном подключении устройства, программа обменивается с МК данными иполучает сообщение об удачном подключении. При повторном подключении программы к уже включенной плате, устройство посылает сообщение о количестве и номере включенных устройств. Работает МК в режиме ожидания, пока не произойдет прерывание по приему данных. Описанный выше цикл повторяется бесконечно, пока включено питание устройства.
↑ Прошивка для МК
> "make.exe" all-------- begin --------avr-gcc (WinAVR 20100110) 4.3.3Copyright (C) 2008 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Size before:AVR Memory Usage----------------Device: atmega8
Program: 1666 bytes (20.3% Full)(.text + .data + .bootloader)
dаta: 581 bytes (56.7% Full)(.data + .bss + .noinit)
Compiling C: ra1.cavr-gcc -c -mmcu=atmega8 -I. -gstabs -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./ra1.lst -std=gnu99 -MMD -MP -MF .dep/ra1.o.d ra1.c -o ra1.o
Linking: ra1.elfavr-gcc -mmcu=atmega8 -I. -gstabs -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=ra1.o -std=gnu99 -MMD -MP -MF .dep/ra1.elf.d ra1.o --output ra1.elf -Wl,-Map=ra1.map,--cref -lm
Creating load file for Flash: ra1.hexavr-objcopy -O ihex -R .eeprom -R .fuse -R .lock ra1.elf ra1.hex
Creating load file for EEPROM: ra1.eepavr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \--change-section-lma .eeprom=0 --no-change-warnings -O ihex ra1.elf ra1.eep || exit 0
Creating Extended Listing: ra1.lssavr-objdump -h -S -z ra1.elf > ra1.lss
Creating Symbol Table: ra1.symavr-nm -n ra1.elf > ra1.sym
Converting to AVR Extended COFF: ra1.cofavr-objcopy --debugging --change-section-address .data-0x800000 --change-section-address .bss-0x800000 --change-section-address .noinit-0x800000 --change-section-address .eeprom-0x810000 -O coff-ext-avr ra1.elf ra1.cof
Discarding local symbol outside any compilation unit: .do_copy_data_startDiscarding local symbol outside any compilation unit: .do_copy_data_loopDiscarding local symbol outside any compilation unit: .do_clear_bss_startDiscarding local symbol outside any compilation unit: .do_clear_bss_loopavr-objcopy: --change-section-vma .eeprom+0xff7f0000 never usedavr-objcopy: --change-section-lma .eeprom+0xff7f0000 never usedavr-objcopy: --change-section-vma .noinit+0xff800000 never usedavr-objcopy: --change-section-lma .noinit+0xff800000 never used
Size after:AVR Memory Usage----------------Device: atmega8
Program: 1666 bytes (20.3% Full)(.text + .data + .bootloader)
dаta: 581 bytes (56.7% Full)(.data + .bss + .noinit)
> Process Exit Code: 0> Time Taken: 00:04
↑ Программа для ПК
В общем, программа получилась такой как я хотел, хотя осталась еще пара идей, которые хотелось бы реализовать позднее. Для работы программы COM-порт необходимо настроить следующим образом:Baund Rate - 9600Data bits - 8Stop Bits - 1
↑ Сборка
Проект был собран на монтажной плате, ПП не разрабатывалась. Прилагаю к статье файл модели в Proteus 7.6 SP4.
↑ Заключение
В заключении хочется сказать, что работа над проектом продолжается. В планах:• реализация FIFO, • наращивание числа коммутаторов,• доработка управляющего ПО