Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функция оконного компаратора
Помимо двух режимов преобразования, АЦП поддерживают функцию оконного компаратора, которая заключается в генерации прерывания при выходе результата преобразования за пределы заданных пользователем нижней и верхней границ (условия снижения и превышения напряжения, соответственно). Оконный компаратор может использоваться для мониторинга выбранного регулярного или инжектированного канала, или же всех регулярных или инжектированных каналов. Помимо мониторинга напряжения, функция оконного компаратора может использоваться в качестве детектора пересечения нуля.
Функция оконного компаратора предназначена для мониторинга одного или всех каналов на предмет выхода за пределы заданной пользователем верхней и нижней границ
Оконный компаратор У каждого модуля АЦП имеется оконный компаратор, который генерирует прерывание при выходе контролируемого напряжения за заданные верхнюю и нижнюю границы.
Базовая конфигурация АЦП
Регистры АЦП разделены на шесть групп. Конфигурация работы АЦП осуществляется через регистры управления и статуса
АЦП имеет блоки регистров для настройки: индивидуального времени преобразования, регулярных и инжектированных последовательностей преобразований, значений смещения для инжектированной группы и пороговых значений оконного компаратора. Вся настройка АЦП выполняется через регистры управления и статуса.
Режим работы АЦП задается через два регистра управления. Ниже показан пример конфигурации преобразования одного канала с генерацией прерывания.
//разрешение прерывания АЦП
NVIC->Enable[0] = 0x00040000; //разрешение прерывания АЦП
NVIC->Enable[1] = 0x00000000; В процедуре обработки прерывания результат преобразования считывается из регистра результата и выводится на линии порта ввода-вывода.
void ADC_IRQHandler (void) { GPIOB->ODR = ADC1->DR<<5; // копирование результата АЦП в ПВВ } Вместо процедуры обработки прерывания, для передачи результата АЦП в ПВВ можно использовать канал ПДП. DMA_Channel1->CCR = 0x00003A28; //кольцевой режим,
У АЦП должна быть включена поддержка ПДП.
ADC1->CR2 |= 0x0100; Режимы сдвоенных преобразований АЦП микроконтроллеров STM32, как для недорогих МК общего назначения, является чрезвычайно многофункциональным. Не следует жалеть времени на изучение всех возможностей АЦП, т.к. после соответствующей настройки он может аппаратно выполнять те же действия, выполнения которых при использовании обычного модуля АЦП можно добиться только написанием дополнительного кода программы. Мало того, в семействе STM32 имеются МК с двумя интегрированными АЦП, которые поддерживают дополнительные режимы сдвоенных преобразований
В Режимы сдвоенных преобразований позволяют синхронизировать работу двух встроенных АЦП, предоставляя восемь дополнительных режимов. В режимах сдвоенных преобразований АЦП2 подчинен АЦП1, обеспечивая поддержку восьми дополнительных режимов преобразования. Режимы одновременного преобразования инжектированных групп и одновременного преобразования регулярных групп
В первых двух режимах сдвоенных преобразований синхронизируется преобразование регулярной и инжектированной групп преобразования двух АЦП. Этот режим полезен при необходимости одновременного измерения двух физический величин, например, ток и напряжение. Комбинированный режим одновременного преобразования регулярных/инжектированных групп Данный режим предоставляет возможность синхронизировать преобразование, как регулярных, так и инжектированных групп обоих АЦП.
Режимы быстрых и медленных преобразований со смещением во времени В режимах быстрых и медленных преобразований со смещением во времени синхронизируется работа регулярных групп преобразования обоих АЦП, однако в отличие от режима непрерывных преобразований, здесь перед запуском преобразования АЦП1 вводится небольшая задержка. В режиме быстрого преобразования со смещением во времени эта задержка равна семи циклам синхронизации АЦП и исчисляется по отношению к моменту запуска преобразования АЦП2. В режиме медленных преобразований со смещением во времени задержка равна 14 циклам синхронизации АЦП. Каждый из этих режимов может использоваться для увеличения частоты дискретизации за счет комбинирования работы двух преобразователей. Режим поочередного запуска
В режиме поочередного запуска аппаратный запуск АЦП1 вначале приведет к запуску преобразований инжектированной группы АЦП1, а затем - к запуску преобразований инжектированной группы АЦП2. Комбинирование режима одновременного преобразования регулярной группы и режима поочередного запуска
Режим поочередного запуска можно скомбинировать с режимом одновременного преобразования регулярных групп. Вследствие этого, преобразования регулярных групп обоих АЦП будут выполняться синхронно, а инжектированных групп - поочередно. Комбинирование режима одновременного преобразования инжектированной группы и режима со смещением во времени.
В последнем режиме преобразования преобразование регулярных групп обоих АЦП выполнятся со смещением во времени, а инжектированных - одновременно. АЦП в линейке STM32F10x. Каналы АЦП микроконтроллеров STM32 делятся на две группы: регулярные каналы (regular) и инжектированные (injected). Количество регулярных каналов для одного АЦП равняется 18, среди них 16 внешних и два внутренних — опорное напряжение и температурный датчик. Количество приоритетных каналов равняется четырем. Регулярные каналы подразумевают сохранение результатов преобразования через DMA-контроллер в памяти микроконтроллера, а инжектированные каналы имеют собственные регистры для хранения результата. Существует возможность настраивать работу каналов АЦП в произвольном порядке, несколько раз преобразовывать подряд одни и те же каналы, использовать внешние и программные события для старта преобразования. Особенность АПЦ семейства STM32 — многообразие режимов как в одиночном, так и в парном режиме двух АЦП с различными конфигурациями регулярных и инжектированных каналов. В общем случае возможны два варианта: независимая и парная работа. В семействе STM32 также существует вариант работы АЦП в качестве аналогового сторожевого таймера, т.е. задаются верхний и нижний пороги чувствительности, и происходит отслеживание сигнала в фактически созданном окне. При выходе сигнала за один из порогов генерируется прерывание.
- есть два АЦП (ADC1 и ADC2) регулярные каналы (regular channels) У регулярных каналов всего одна ячейка на всех. То есть если каналы РА0, РА1, РА2, РА3 настроить как регулярные, то результат работы каждого канала будет записываться в одну и ту же ячейку, затирая предыдущие данные. Своевременно забирать результаты нам поможет DMA.
инжектированные (Injected channels) Любой аналоговый вход можно настроить как инжектированный. Инжектированных каналов может быть не больше четырёх (РА0, РА1, РА2, РА3), результаты будут сохранены в четыре разные ячейки. Настройте тактирование ADC (ADC Prescaler) … Частота АЦП не должна превышать 14МГц. 1.5 такта (заряд конденсатора)+12.5 тактов (алгоритм расчета)=14 тактов. При частоте 12 МГц получается примерно 1,5 микросекунды на 1 измерение. АЦП после завершения преобразования отдает сырые данные в регистр DR, который содержит значение от 0 до 4095 (212). Чтобы пересчитать данное значение в напряжение нужно умножить его на шаг квантования. В моем случае напряжение на выводе VDDA, с которого АЦП берет опору, составляло 3,3072В и соответственно шаг равен 3,3072В / 4096 = 0,000807В, я его округлил до 0,0008. Чтобы получить напряжение на входе устройства, полученное напряжение нужно умножить на коэффициент делителя напряжения, в моем случае резистор в верхнем плече 100 кОм, а в нижнем 4,7 кОм, что дает делитель 22,2765. Исходя из этого напряжение на входе устройства, то есть напряжение АКБ, находится с помощью формулы: float voltageDivider = 22.2765; adcVoltageResult = (float)adcData * voltageReference * voltageDivider; Независимая работа 1. Одноканальный (Single-channel) 2. Многоканальный (Scan) 3. Одноканальный продолжительный (Single continuous) 4. Многоканальный продолжительный (Scan continuous) 5. Прерывистый (Discontinuous)
Парная работа 1. Одновременный для обычных и приоритетных каналов 2. Быстрый попеременный 3. Медленный попеременный 4. Переменный по триггеру 5. Комбинированный одновременный режим для регулярных/инжектированных каналов (combined regular/injected simultaneous mode). Происходит преобразование обоих групп каналов. Но особенность заключается в том, что инжектированная группа каналов может прервать регулярную группу (рис. 1). Данный режим может быть полезен в системах с критичным временем реакции на измерение каких-либо параметров, например — в управлении двигателями. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП. 6. Комбинированные одновременный регулярный и переменный по триггеру режимы (combined regular simultaneous + alternate trigger mode). Регулярная группа каналов может быть прервана поочередным запуском инжектированных каналов. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.
7. Комбинированные инжектированный одновременный режим и режим со смещением каналов (combined regular simultaneous + alternate trigger mode). Преобразование регулярных каналов осуществляется со смещением по времени и происходит одновременное преобразование двух групп инжектированных каналов. Немаловажная часть — задание времени преобразования для каждого канала. Всего можно задать восемь значений времени для каждого канала в диапазоне 1,5…239,5 циклов тактирования модуля АЦП. Независимая работа Этот режим имеет место, когда в составе МК имеется только один АЦП, или когда несколько АЦП настроены на работу без взаимодействия друг с другом. В этом случае возможны следующие режимы работы. 1. Одноканальный (Single-channel) АЦП исполняет одно преобразование одного канала, записывает полученное значение в собственный выходной регистр и останавливается. Данный режим может быть применен для однократной проверки определенного параметра и принятия некоторого решения на его основе. Например, проверяем напряжение батареи, и если она разряжена, то не запускаем прибор, а только выдаем пользователю сообщение о необходимости замены элементов питания.
2. Многоканальный (Scan) В этом режиме возможно сконфигурировать АЦП для выполнения определенного количества (например, 16) последовательных преобразований значений из различных каналов в любой последовательности (например, Канал1-Канал7-Канал12-Канал12-Канал5…). Делается это с помощью записи в специальный регистр последовательности номеров каналов в том порядке, в котором мы желаем осуществить преобразование. Время преобразования также настраивается отдельно для каждого канала. После обработки указанного числа каналов (от 1 до 16) АЦП останавливается. Этот режим может быть полезен, например, при периодическом оценивании среды или обстановки с помощью нескольких датчиков.
3. Одноканальный продолжительный (Single continuous) Этот режим аналогичен первому, за тем исключением, что после окончания однократного преобразования АЦП не останавливается, а продолжает выбирать отсчеты из одного определенного канала. Широко применяется при непрерывном мониторинге аналоговых сигналов. Для хранения результатов всех обычных каналов выделен один и тот же регистр. Поэтому перед получением следующего значения необходимо позаботиться о сохранении в памяти предыдущего (например, с помощью контроллера DMA).
4. Многоканальный продолжительный (Scan continuous) То же самое что многоканальный (Scan), только АЦП не останавливается после опроса всех каналов, а снова продолжает выбирать отсчеты, начиная с первого.
5. Прерывистый (Discontinuous) Особенность этого режима в том, что будут просканированы не все каналы за раз, а лишь их некоторое заранее установленное число. В следующий раз при наступлении события, запускающего преобразование, будет просканирована следующая группа каналов и т.п.
uint16_t offsetVoltage = 72; float voltageReference = 0.0008; float voltageDivider = 22.2765; adcVoltageResult = ((float)(adcData+offsetVoltage))*voltageReference*voltageDivider; Парная работа Необходимо отметить, что парный режим работы возможен, если в составе МК имеются два или более АЦП. Это значительно расширяет возможности по оцифровке сигналов и добавляет несколько более сложных режимов работы. После этих несложных манипуляций мое устройство начало точно измерять напряжение и данные перестали плавать. До этого же момента оно врало на 72 * 0,0008В * 22,2768 = 1,28В, что в случае контроля одного АКБ очень критично. Свинцовый АКБ конечно не взрывается как Li-ion, но все равно быстро выходит из строя, особенно если его разряжать постоянно не до 10.2В, а до 8,92В.
1. Одновременный для обычных и приоритетных каналов При наступлении внешнего события первый АЦП будет сканировать каналы начиная с 0 до 15 для регулярных каналов или с 0 до 3 для инжектированных, а второй — наоборот, с 15 до 0 или с 3 до 0. Таким образом, каждый канал за тот же период времени будет обработан дважды. Необходимо обеспечить, чтобы период между событиями, запускающими преобразование, был как минимум в два раза больше, чем время, необходимое на само преобразование. Нужно вовремя извлекать результаты из регистра данных АЦП в оперативную память. Причем результат преобразования для АЦП2 будет содержаться в старшем полуслове регистра данных, а для АЦП1 — в младшем.
2. Быстрый попеременный Доступен только для одного выбранного регулярного канала. При наступлении внешнего события АЦП2 стартует немедленно, а АЦП1 — с задержкой в семь тактов. Если установлен продолжительный (continuous) режим, то такая последовательность будет повторяться далее, что дает возможность удвоить частоту семплирования входного сигнала.
3. Медленный попеременный Все как в предыдущем режиме, только АЦП1 стартует с задержкой в 14 тактов, а после окончания первого преобразования АЦП2 тоже выдержит задержку 14 тактов перед повторным стартом.
4. Переменный по триггеру Доступен только для инжектированных каналов. При наступлении внешнего события АЦП1 начинает последовательно преобразовывать все инжектированные каналы. При наступлении следующего внешнего события АЦП2 начинает делать то же самое. Если установлен прерывистый (discontinuous) режим, то будет преобразован только один следующий канал на каждое наступившее событие. Этот режим позволяет получить два значения выборки, максимально близкие друг к другу (вплоть до 1…1,5 такта).
5. Комбинированный одновременный режим для регулярных/инжектированных каналов (combined regular/injected simultaneous mode) Происходит преобразование обоих групп каналов. Но особенность заключается в том, что инжектированная группа каналов может прервать регулярную группу (рис. 1).
Рис. 1. Комбинированный одновременный режим
Данный режим может быть полезен в системах с критичным временем реакции на измерение каких-либо параметров, например — в управлении двигателями. При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.
6. Комбинированные одновременный регулярный и переменный по триггеру режимы (combined regular simultaneous + alternate trigger mode) Регулярная группа каналов может быть прервана поочередным запуском инжектированных каналов (рис. 2.). При завершении преобразования группы останавливаются все остальные преобразования обеих групп, и результаты обработки сохраняются в регистрах данных каждого АЦП.
Рис. 2. Комбинированные одновременный и переменный по триггеру режимы
7. Комбинированные инжектированный одновременный режим и режим со смещением каналов (combined regular simultaneous + alternate trigger mode) Преобразование регулярных каналов осуществляется со смещением по времени и происходит одновременное преобразование двух групп инжектированных каналов (рис. 3).
Рис. 3. Комбинированные инжектированный одновременный режим и режим со смещением каналов
Заключение Несомненно, множество режимов работы совместно с высокими собственными параметрами обеспечивают отличную перспективу применения 32-битных микроконтроллеров компании ST. Причем с каждой следующей серией заметна тенденция к дальнейшему повышению как частот семплирования, так и разрядности встроенных в МК АЦП. По предварительным данным, в новых линейках STM32 на ядре ARM Cortex-M4 будет доступен 16-битный сигма-дельта АЦП с дифференциальными входами. Это делает его не просто дополнением для приблизительной оценки каких-либо параметров, но и полноценным измерительным инструментом. АЦП в STM32. Разрядность 12 бит Опорное напряжение от 2.4 до 3.6 Вольта Скорость оцифровки до 1MSPS 18 каналов(16 внешних и 2 внутренних – опорное напряжение и температурный датчик) Прерывание по окончании регулярных и инжектированных преобразований Прерывание от оконного компаратора(Analog watchdog) Отправка данных по DMA для регулярных преобразований Одиночное и непрерывное преобразование Режим сканирования каналов по заданному списку Самокалибровка Выравнивание результата по выбранному краю Время преобразования –12.5 цикла, время захвата – программируемое
Режим регулярных преобразований. Регистр ADC_SR. Статусный регистр. Тут хранятся флаги – например, флаг, сигнализирующий об окончании преобразования.
Регистр ADC_CR1. Контрольный регистр. Тут всякие биты, разрешающие или запрещающие те или иные события. Например, включение Analog Watchdog для регулярных каналов, аналогично для инжектированных, включение различных прерываний – все это сидит здесь, в этом регистре.
Регистр ADC_CR2. Еще один контрольный регистр. А что вы хотели? Много режимов, нужно больше контроля) Здесь спрятались биты, отвечающие за использование АЦП совместно с DMA, а также за запуск преобразования от внешнего источника. Кроме того, тут можно разрешить или запретить использование датчика температуры. Важный бит – SWSTART, который запускает преобразование регулярных каналов.
Регистры ADC_SMPRx отвечают за время выборки. В ADC_SQR и ADC_JSQR выбираем номера нужных нам каналов. Про регистры для Analog Watchdog уже упоминалось ранее. Подробнее в даташите)
И, наконец, регистр данных – ADC_DR – там и только там мы будем забирать наши драгоценные, полученные с огромным трудом результаты. ADC_CR1 (ADC control register 1) JEXTSEL[2:0] (External event select for injected group) – выбор внешнего источника запуска инжектированных каналов.
JEXTTRIG (External trigger conversion mode for injected channels) — разрешение запуска инжектированного преобразования внешним сигналом, 1 — разрешить, 0 — запретить. EXTTRIG (External trigger conversion mode for regular channels) — разрешение запуска регулярного преобразования внешним сигналом, 1 — разрешить, 0 — запретить.
В SMPR2 с 0 по 9-й канал.
Длительность преобразования составляет 12.5 цикла, для того чтобы найти период выборок надо к длительности преобразования прибавить значение SMPx[2:0].
Т = время между выборки + 12.5 цикла
Номер секции SQx определяет номер в группе регулярных преобразований, а число записанное в секцию определяет номер канала.
А битами L[3:0] в регистре SQR1 задаётся длина регулярной последовательности Например Номер секции JSQx определяет номер в группе инжектированных преобразований, а число записанное в секцию определяет номер канала. JDR(x = 1...4) Ниже пример кода для запуска АЦП. #include "stm32f10x.h"
unsigned temp;
void ADC1_2_IRQHandler(void) { if(ADC1->SR & ADC_SR_EOC) { //записываем результат в переменную temp =ADC1->DR; } //сбрасываем все флаги в регистре статуса ADC1->SR=0; } int main(void) { //разрешаем тактирование порта А RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; //настраиваем вывод для работы АЦП в режим аналогового входа GPIOA->CRL &= ~GPIO_CRL_CNF1; //так как тактовая частота АЦП не должна превышать 14MHz RCC->CFGR |= RCC_CFGR_ADCPRE_DIV8; //разрешаем тактирование АЦП RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //в комментах подсказали, что в 17 ревизии указано, что перед калибровкоц АЦП надо включить ADC1->CR2 = | ADC_CR2_ADON; //запускаем калибровку и ждем пока завершится, в симуляторе это не работает, в железе делать обязательно /* ADC1->CR2 |= ADC_CR2_CAL; while (ADC1->CR2 & ADC_CR2_CAL)*/ // разрешаем прерывание от АЦП NVIC->ISER[0] |= NVIC_ISER_SETENA_18; //для первого канала между выборками 7.5 цикла ADC1->SMPR2 = ADC_SMPR2_SMP1_0; //разрешаем прерывания по окончанию преобразования ADC1->CR1 = ADC_CR1_EOCIE; //разрешаем запуск от SWSTAR, разрешаем работу АЦП, разрешаем запуск внешним сигналам, непрерывное преобразования ADC1->CR2 = ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG | ADC_CR2_CONT; //длина последовательности равна 1, первый канал ADC1->SQR1 = 0x00000000; ADC1->SQR2 = 0x00000000; ADC1->SQR3 = 0x00000001; //запускаем АЦП ADC1->CR2 |= ADC_CR2_SWSTART; while(1) { /*остановить проект, в командную строку записать include sine.ini затем записать ADC1_IN1_Sine ()*/ } }
Понятно, что проверить работает ли проект, в симуляторе не получится, так как на вход АЦП ни чего не приходит. Также возникает вопрос, что за строчки закомментированы в цикле while. Проверить проект в симуляторе можно, а закомментированые строчки напоминают как это сделать. Для начала создаём текстовый документ, записываем в него следующий код и сохраняем его с названием sine.ini
SIGNAL void ADC1_IN1_Sine (void) { float volts; // peak-to-peak voltage float frequency; // output frequency in Hz float offset; // voltage offset float duration; // duration in Seconds float val; long i, end;
volts = 1.5; offset = 1.5; frequency = 50; duration = 0.01;
printf ("Sine Wave Signal on AD Channel 1.\n");
end = (duration * 1000000000); for (i = 0; i < end; i++) { val = __sin (2 * 3.1415926 * frequency * (((float) STATES) / STCLK)); ADC1_IN1 = (val * volts) + offset; swatch (0.00001); // in 10 uSec steps } } DEFINE BUTTON "ADC1_IN1 Sin","ADC1_IN1_Sine()"
Перемещаем sine.ini в папку проекта, после запуска отладки выполняем то, что написано в закомментированной строчке, в итоге на входе АЦП получаем синус, теперь данные АЦП будут меняться.
ADC (analog to digital converter) — это аналого-цифровой преобразователь (АЦП). Модули ADC предназначены для оцифровки аналоговых сигналов, то есть позволяют измерять аналоговые величины и представлять результаты измерений в цифровой форме. В stm32 таких модулей может быть до 3-х штук. Фактически ADC контроллера stm32 умеет измерять только напряжение и только в диапазоне от Vref- до Vref+, при том, что эти величины не могут выходить за пределы 0..+Vdd. В корпусах c количеством ног <100 внешние выводы Vref- и Vref+ вообще отсутствуют, а внутри аппаратно соединены с выводами GND и Vdd. Так что все измеряемые величины придётся каким-то образом преобразовывать в форму напряжения и вталкивать в диапазон 0..+3,3В. Для этого можно использовать самые разные схемы - делители напряжения, токоизмерительные резисторы, усилители на операционниках и так далее. В рамках этой статьи такие способы рассматриваться не будут, поскольку это совершенно отдельная тема. Сейчас же мы сосредоточимся на возможностях и особенностях самих модулей АЦП. Возможности и особенности модулей ADC контроллеров stm32: · разрешение 12 бит · скорость оцифровки до 1 мкс при частоте 56 МГц или до 1,17 мкс при частоте 72МГц · до 18 физических каналов (16 внешних и 2 внутренних) · программируемое время сэмплирования для каждого канала · две группы — обычная (до 16 каналов) и инжектированная (до 4-х каналов) · предельный компаратор · прерывания по различным событиям · режим одиночных или непрерывных преобразований · режим сканирования заданного списка каналов · самокалибровка · автоматическое выравнивание результатов к старшему или младшему биту регистра · прерывистый режим (оцифровка подгруппы каналов по триггеру) · двойной режим (спаренная работа двух модулей ADC) · использование DMA
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2019-12-14; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.184.162 (0.225 с.) |