Easy Scan - получение информации об окружающих базовых станциях без подключения SIM-карты;
PING - проверка доступности адреса в Internet посредством обмена ICMP пакетами.
Прошивка с поддержкой технологии Embedded AT позволяет записывать в
память модуля и исполнять пользовательский код, написанный на языке С.
.5 Wi-Fi модуль
В качестве Wi-Fi модуля приёмо-передачи данных
используется модуль HLK-RM04 (рис. 4).
Рисунок 4.4. Модуль HLK-RM04.
RM04 - это новый недорогой встраиваемый UART-Ethernet-WiFi модуль, разработанный компанией Shenzhen Hi-Link Electronic co., Ltd. Модуль поддерживает последовательный интерфейс, стек протоколов TCP/IP, сеть Ethernet, беспроводные сети (Wi-Fi). Основная особенность - любые обычные устройства, работающие с последовательным портом, могут передавать данные через HLK-RM04 в сеть Интернет без какой-либо дополнительной настройки. Также, обеспечивает простое и быстрое решение для передачи данных с пользовательских последовательных устройств в сети Ethernet.
Особенности:
совместимость с 802.11b/g/n 2,4ГГц;
поддержка 802.3 и 802.3u;
Wi-Fi: клиентский режим, режим точки доступа (WAP), режим роутера;
поддержка WPS/WDS;
диапазон скоростей передачи данных: 1200~500000 бит/c;
поддержка прозрачного режима передачи;
поддержка множества механизмов обеспечения безопасности при аутентификации:
o WEP64/WEP128/ TKIP/ AES
o WEP/WPA-PSK/WPA2-PSK;
- поддержка беспроводного роуминга;
поддержка множества сетевых протоколов:
o PPPOE/TCP/UDP/DDDNS
o DHCP/DNS/HTTP/Firewire;
распознавание команд AT+
два метода настройки - через последовательный интерфейс или по WEB;
размеры: 29мм*40мм* 8.8мм.
Преимущества:
хорошее решение для WiFi-роутера;
может использоваться во множестве различных продуктов;
сокращает время разработки готовых продуктов;
нет завышенных радиочастотных требований;
совместимость со стандартами CE и FCC (часть 15)
Области применения:
индикаторы состояния WiFi-подключения;
выключатели питания WiFi-устройств;
системы умного дома и автоматизации;
системы беспроводной диагностики (по протоколу OBDII);
системы радиочастотной идентификации;
периферия для игровых устройств;
промышленные системы;
телеметрия;
дистанционное управление.
|
Электрические характеристики |
Примечание |
||||
|
Ток потребление при включенном Wi-Fi |
140 мА |
Работающий в любом из трех режимов Wi-Fi |
|||
|
Ток при одном включенном разъеме RJ-45 |
120 мА |
Последовательный в RJ45 |
|||
|
Ток при двух включенных разъёмах RJ-45 |
135 мА |
Один разъём для LAN, другой для WAN |
|||
|
Работают Wi-Fi и 2 разъёма RJ-45 |
160 мА |
Режим работы по умолчанию |
|||
|
Радиочастотные характеристики |
Примечание |
||||
|
Чувствительность приёма |
-70 дБм |
|
|
||
|
Максимальная мощность передачи |
18 дБм/15дБм/13.5 дБм |
802.11b/g/n |
|
||
|
Сопротивление антенны |
50 Ом |
2.4 - 2.5ГГц |
|
||
|
VSWR (max) |
2:1 |
2.4 - 2.5ГГц |
|
||
|
Точность центральной частоты |
±25ppm |
Дополнительно разрешается ±15ppm |
|
||
|
Периферия |
Примечание |
||||
|
UART |
2 шт. |
1200-500 Кбит/с |
|||
|
Разъёмы RJ-45 (WAN) |
4 шт. |
Поддержка PPPOE |
|||
|
Разёемы RJ-45 (LAN) |
4 шт. |
Поддержка DHCP |
|||
|
Выход 3.3 В |
1 шт. |
300 мА/3.3В |
|||
|
Выход 1,8 В |
1 шт. |
300 мА/1,8В |
|||
4.6 Источник резервного питания
В качестве источника резервного питания используется литий-ионный
аккумулятор повышенной ёмкости TrustFire 18650 (рис. 4.5).
Рисунок 4.5 Аккумулятор TrustFire 18650.
Технические характеристики аккумулятора:
напряжение: 3,7 В;
ёмкость: 2400 мАч;
габариты, мм: 67 х 18,5;
напряжение заряда: 4,2 В.
Защита от перезаряда: есть. Защищённые аккумуляторы TrustFire 18650 / 2400 мАч оригинальный аккумулятор, с фирменной платой защиты, прошедший множество заводских тестов, и на сегодняшний день является лидером продаж среди аккумуляторов Li-ION 18650. Содержат электронную плату контроля внешнего/внутреннего напряжения. Она автоматически отключает зарядку батареи при превышении напряжения 4,20 В, а также при глубокой разрядке элемента (ниже 2,75 В). Кроме того, система контроля убережет TrustFire 18650 от случайного короткого замыкания.
Методика заряда LION аккумуляторов остаётся неизменна. Аккумуляторы Li-ION не любят сильного разряда и максимального заряда. Аккумуляторы 18650 Li-ION не требуют так называемого "разгона". Ими можно пользоваться сразу, достав из упаковки.
Аккумулятор устанавливается на модуле в специальный отсек (рис. 4.6)
Рисунок 4.6. Отсек для Li-ion аккумулятора форм-фактора 18650.
5. Описание функциональной схемы
Функциональная схема блока управления шлагбаумом изображена на плакате №2.
GSM модуль SIM900 подключён к интерфейсу USART2 микроконтроллера. Wi-Fi модуль HLK-RM04 подключён к USART1 микроконтроллера и работает в режиме USART-моста. Bыход данных приёмника XY-MK-5V подключён к порту таймера 4, который работает в режиме захвата и измерения временных интервалов входящего сигнала. Вход данных передатчика FS1000A подключён к выходу таймера 2, который работает в режиме формирования временных интервалов. В качестве памяти для хранения телефонных номеров абонентов используется EEPROM 24С512, имеющая следующие технические характеристики:
- тип организации памяти: 64k x 8 <#"863934.files/image010.jpg">
Рисунок 7.1 Пакет данных с битом синхронизации
Перед посылкой каждого пакета данных передаётся «бит синхронизации», преамбула. Когда передатчик молчит, на выходе приёмника присутствует случайный шум в виде частых случайных переключений «0»/«1». Для начала приёма полезных данных необходимо определить молчание на выходе приёмника - «бит синхронизации».
За битом синхронизации передаются сами данные. Здесь у разных микросхем - разная трактовка. Например, у RT1527 - короткий импульс = бит «0», длинный импульс = бит «1» (рис. 7.2),
Рисунок 7.2 Формат пакета данных микросхемы RT1527
а у SC2272 - последовательность двух коротких = бит «0», последовательность
двух длинных = бит «1», последовательность короткого и длинного - бит «F» (рис.
7.3).
Рисунок 7.3 Формат пакета данных микросхемы SC2272
Но в любом случае соотношение времён импульсов имеет закономерность: если принять время короткого импульса за 1t, то при передаче короткого импульса - соотношение импульса и паузы 1t/3t, при передаче длинного импульса - соотношение импульса и паузы 3t/1t. Время передачи «бита синхронизации» будет 32t.
При таком соотношении таймингов в БУШ реализован следующий алгоритм приёма с автоматическим определением «биттайминга»:
ожидание длительности паузы (уровень «0») больше чем 4мс - «бит синхронизации»;
измерение длительности этой паузы, и по ней расчёт времён длинного и короткого импульса последующих передаваемых данных.
после приёма «бита синхронизации» переход в режим принятия всего пакета. Контроллер следит, чтобы импульсы примерно попадали в рассчитанные времена, и учитывает, что за коротким импульсом следует длинная пауза, за длинным импульсом - короткая пауза, после передачи пакета следует «бит синхронизации».
Если при приёме что-то не попало в своё время - сбрасывает приём и возвращается к ожиданию преамбулы.
После успешного приёма принятые биты сохраняются в массив, их количество и временные характеристики.
Далее массив битов преобразуется в массив байтов статического кода
пульта, который может быть воспроизведен с помощью передатчика.
.3 Работа блока управления шлагбаумом в режиме редактирования массива
телефонных номеров в памяти
При приходе с терминальной программы команды на чтение EEPROM микроконтроллер через интерфейс USART2 последовательно передает в Wi-Fi модуль содержимое ячеек памяти EEPROM. При этом считываются только те ячейки памяти,
которые содержат информацию, пустые ячейки игнорируются (пустыми считаются те
ячейки памяти, в которых все 4 байта номера телефона содержат нули). Структура
записи телефонных номеров в EEPROM:
|
Номер телефона 1 |
Номер телефона 2 |
||||||
|
Байт1 |
Байт2 |
Байт3 |
Байт4 |
Байт1 |
Байт2 |
Байт3 |
Байт4 |
|
Адр.0 |
Адр.1 |
Адр.2 |
Адр.3 |
Адр.4 |
Адр.6 |
Адр.7 |
|
При записи телефонных номеров в память терминальная программа передает в БУШ только измененные номера телефонов вместе с индексами. Это необходимо для сокращения количества циклов перезаписи EEPROM, т.е. увеличения ресурса её работы.
. Описание конструкции блока управления шлагбаумом
Сборочный чертеж БУШ изображен на плакате 5.
Плата с радиоэлектронными компонентами размещается в пластиковом влагозащищенном корпусе. Размер корпуса 156х68х43.6 мм.
На передней панели корпуса имеются индикаторы питания (Power), зарядки аккумулятора, (Charge) режима ожидания (Standby), активности Wi-fi сети (Wi-Fi act), наличия и статуса GSM сети (GSM net и GSM status).
На боковых панелях с одной стороны выведен разъём питания +5В, с другой - антенна сети Wi-Fi.
На корпусе предусмотрены также отверстия для крепления его на стену.
Габариты корпуса позволяют устанавливать БУШ практически в любом удобном месте, в том числе в стойку с автоматикой шлагбаума.
Энергопотребление БУШ не превышает 2А.
9. Описание ПО блока управления шлагбаумом
Управляющая программа для микроконтроллера БУШ написана на языке С++ c использованием среды программирования CooCox IDE для микроконтроллеров ARM Cortex M3.
Главный модуль программы:main (void)
{
u8 i;
//Инициализация тактирования системы
RCC->CR |= 0x00010000; //включение внешнего источника тактирования
while((RCC->CR&0x00020000) == 0); //ждем пока источник тактирования не готов
RCC->CFGR |= 0x001C0200; //умножитель на 9
RCC->CR |= 0x01000000; //включаем блок умножения
while((RCC->CR&0x02000000) == 0); //ждём пока блок умножения не готов
RCC->CFGR |= 0x00000002; //выбираем внешний источник как источник тактирования
while ((RCC->CFGR&0x0000000C) != 0x00000008); //ждём пока источник не запустится
//Инициализация частот тактирования периферии
RCC->APB2ENR |= 0x501D; //AFIO; GPIO A,B,C; USART1 enable
RCC->APB1ENR |= 0x18260002; //TIM3; PWR; BKP; I2C1; USART2, enable>AHBENR |= 0x0001; //DMA1 enable
//Инициализация USART1
//PA9 - USART1_TX - режим AF PP 50
//PA10 - USART1_RX - режим IN FLOATING 50>CRH &= 0xFFFFFF0F;>CRH |= 0x000000B0;->BRR = 0x0271; //baudrate - 115200(0x0271)->CR1 = 0x202C; //mode TX and RX, RX interrupt enable, USART1 on->CR3 |= 0x00C0; //USART1 DMA TX and RX enable
//Инициализация USART2
//PA2 - USART2_TX - режим AF PP 50
//PA3 - USART2_RX - режим IN FLOATING 50>CRL &= 0xFFFFF0FF;>CRL |= 0x00000B00;->BRR = 0x004E; //baudrate - 115200(0x004E)->CR1 = 0x202C; //mode TX and RX, RX interrupt enable, USART1 on
//Инициализация модуля I2C1 (EEPROM)
//adressing mode 7-bit slave adress, interface adress = 1
//PB7 - I2C1 SDA - режим AF OD 50 (or SD CS)
//PB6 - I2C1 SCL - режим AF OD 50>CRL &= 0x00FFFFFF;>CRL |= 0xFF000000;C1->CR2 |= 0x0009;C1->TRISE = 0x10;C1->CCR = 0x002D;C1->OAR1 = 0x4001;
//конфигурирование контроллера прерываний NVIC>ISER[0] |= 0x2003C048; //Timer 3 interrupt enable,RTC, DMA1 channel 4,5,6,7, exti line 0 interrupt enable>ISER[1] |= 0x00000160; //USART1, USART2,
//Инициализация контроллера DMA для USART1 TX
DMA1_Channel4->CCR |= 0x00001092;
//read from memory, memory inc mode, priority medium, TC int enable_Channel4->CPAR = (u32)&(USART1->DR);_Channel4->CMAR = (u32)&TxBuffer;
//Инициализация контроллера USART1 RX DMA init
DMA1_Channel5->CCR |= 0x00001082;
//read from pheripherial, memory inc mode, priority medium, TC int enable_Channel5->CNDTR = 6;_Channel5->CPAR = (u32)&(USART1->DR);_Channel5->CMAR = (u32)&RxBuffer;
__enable_irq();_CODE = 5;_CPBF();(1);
}
Процедура записи сектора в EEPROM:
void EEPROM_PageWrite(u8 *data, u16 WriteAddr, u16 N_data)
{i;C1->CR1 |= 0x0401; //I2C1 acknowledge enable, I2C1 enable(I2C1->SR2&0x02); //wait while bus busyC1->CR1 |= 0x0100; //send signal START((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00030001) != 0x00030001); //check EV5=0x00030001C1->DR = 0xA0; //send EEPROM adress((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00070082) != 0x00070082); //check EV6=0x00070082C1->DR = (u8)((WriteAddr&0xFF00)>>8); //send Hi adr((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00070084) != 0x00070084); //check EV8=0x00070084 (ACK)C1->DR = (u8)(WriteAddr&0x00FF); //send Lo adr((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00070084) != 0x00070084); //check EV8=0x00070084 (ACK)(i=0;i<N_data;i++)
{C1->DR = data[i]; //send data((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00070084) != 0x00070084); //check EV8=0x00070084 (ACK)
}C1->CR1 |= 0x0200; //send signal STOPC1->CR1 &= 0xFFFE; //I2C1 disable(5);
}
Процедура чтения сектора из EEPROM:
u8 EEPROM_SecRead(u8 *data, u16 ReadAddr, u16 N_data)
{i;C1->CR1 |= 0x0401; //I2C1 acknowledge enable, I2C1 enable(I2C1->SR2&0x02); //wait while bus busyC1->CR1 |= 0x0100; //send signal START((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00030001) != 0x00030001); //check EV5=0x00030001C1->DR = 0xA0; //send EEPROM adress((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00070082) != 0x00070082); //check EV6=0x00070082C1->DR = (u8)((ReadAddr&0xFF00)>>8); //send Hi adr((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00070084) != 0x00070084); //check EV8=0x00070084C1->DR = (u8)(ReadAddr&0x00FF); //send Lo adr((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00070084) != 0x00070084); //check EV8=0x00070084C1->CR1 |= 0x0100;((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00030001) != 0x00030001); //check EV5=0x00030001C1->DR = 0xA1;((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00030040) != 0x00030040); //check EV6=0x00030040(i=0;i<N_data;i++)
{[i] = I2C1->DR;((((I2C1->SR1|(I2C1->SR2)<<16)&0x00FFFFFF)&0x00030040) != 0x00030040); //check EV6=0x00030040
}C1->CR1 &= 0xFBFF; //I2C1 acknowledge disableC1->CR1 |= 0x0200; //send signal STOPC1->CR1 &= 0xFFFE;//I2C1 disable(1);
return data;
}
Процедура записи/чтения терминалом номеров телефонов из EEPROM с использованием канала 5 DMA контроллера:
void DMA1_Channel5_IRQHandler(void)
{mas_ind[2];(DMA1->ISR&0x00010000)
{->IFCR = 0xFFFFFFFF;_Channel5->CCR &= 0xFFFE;(rx_flag)
{_ind[0] = (u8)index;_ind[1] = (u8)(index>>8);_PageWrite(mas_ind,0,2);_PageWrite(RxBuffer,2,index*4);_Channel5->CNDTR = 3;_Channel5->CCR |= 0x0001;_flag = 0;;
}(RxBuffer[0])
{0x03:_SecRead(TxBuffer,0,index*4+2);_Channel4->CNDTR = index*4+2;_Channel4->CCR |= 0x0001;;0x01:_flag = 1;= (u16)RxBuffer[1] | (u16)RxBuffer[2]<<8;_Channel5->CNDTR = index*4;_Channel5->CCR |= 0x0001;
break;
}
}
}
Процедура считывания и анализа входящего телефонного номера:
void USART2_IRQHandler(void)
{S_inc_tel[9], ATH0[] = {65,84,72,48,13};j;mas_tel[4];inc_n_tel;(USART2->SR&0x0020)
{[k] = USART2->DR;((RxBuffer[k]=='"')&N_tel_flag)
{_tel_flag = 0;= 0;(j=0;j<9;j++) S_inc_tel[j] = RxBuffer[j];_n_tel = str_to_u32(S_inc_tel);= 2;(j<=ind*4+2)
{_SecRead(mas_tel,j,4);(inc_n_tel == ((u32)mas_tel[0] | (u32)mas_tel[1]<<8 | (u32)mas_tel[2]<<16 | (u32)mas_tel[3]<<24))
{->CR1 |= 0x0001; //play code
//trans_flag = 1;_Text(0,0,"Numer accepted",14,0xFFFF,0);
//TS_dec(l,15,0,15,0xFFFF,0);(50);(j=0;j<5;j++)
{((USART2->SR&0x0080)==0);->DR = ATH0[j];
};
}= j+4;
};
}((k>3)&(RxBuffer[k-2]=='+')&(RxBuffer[k-1]=='7')&(RxBuffer[k++]=='9'))
{= 0;_tel_flag = 1;
}
}
}
10. Описание ПО терминала
Данный программный модуль написан на языке программирования С# в среде программирования Microsoft Visual Studio 2012.
Вид окна программы изображен на рис. 10.1.
После запуска программы необходимо выбрать номер виртуального COM - порта, к которому подключен модуль Wi-Fi БУШ (работающего в режиме UART-моста).
При нажатии экранной кнопки «Загрузить» программа считывает из EEPROM БУШ перечень номеров телефонов
абонентов и отображает их в виде перечня.
Рисунок 10.1 Окно терминальной программы.
Экранные кнопки «Добавить» и «Удалить» служат для добавления или удаления номеров из списка.
Экранная кнопка «Сохранить» служит для записи перечня номеров в EEPROM БУШ.
Данная программа дополнительно обладает функцией переключения БУШ в режим считывания статического кода пульта шлагбаума. Данный режим активируется нажатием экранной кнопки «считать код пульта». После окончания процесса считывания БУШ автоматически возвращается в прежний режим работы.