TheremenVision. Первые шаги - первый результат.

Автор: Чебаков Денис Игоревич, лицей № 1571, 11 класс, РК-10 абитуриент.
В прошлой статье
Мы рассказали об очень интересном датчике, принцип работы которого унаследован у всемирно известного прибора - терменвокса. Было решено предоставить возможность любому желающему прототипировать эту штуку и проверить принцип действия. Спустя некоторое время, при небольшом моем участии как консультанта будущий бауманец, а ныне абитуриент, Денис Чебаков, выполнил прототип устройства. Теперь мы можем наглядно посмотреть рабочий вариант конструкции прибора. Существует несколько систем оценки дистанции: различные дальномеры, ультразвуковые датчики, системы машинного зрения. Их недостатками являются высокие требования к вычислительной мощности управляющего устройства (СТЗ), трудность монтирования на роботе заданной конструкции, сложность эксплуатации, необходимость использования на объекте отражателей, дороговизна и т.п. В случае, когда требуется простое, легкое и дешевое устройство, можно использовать систему определения дистанции, основанную на методе пассивной радиочастотной идентификации. Система содержит один опорный генератор электрических колебаний и несколько сенсоров. Сенсор состоит из антенны и генератора. Можно использовать штыревую антенну или лист фольгированного текстолита в качестве антенны. У опорного генератора частота жестко зафиксирована. У сенсорного генератора частота может изменяться, т.к. одна из пластин времязадающего конденсатора подключена к антенне. Емкость изменяется за счет приближения объекта (антенна и объект образуют воздушный конденсатор). Сигналы с опорного и сенсорного генераторов подаются в детектор, который выделяет разностную частоту. По степени изменения разностной частоты можно судить о наличии постороннего предмета вблизи антенны.На рис. 1 представлена блок-схема системы предотвращения столкновений, основанной на методе пассивной радиочастотной идентификации.

Рис. 1. Блок-схема системы

Число антенн N должно быть равно требуемому числу зон уверенного определения объекта. В этом случае система может идентифицировать его нахождение в N условных секторах пространства (каждый из которых связан с соответствующим ему сенсором). Управляющий модуль при помощи устройства выбора датчика последовательно переключает сенсоры. Сигналы с опорного и сенсорного генераторов поступают в устройство вычисления разности частот. Далее разностный сигнал подается на устройство уменьшения частоты (двоичный делитель), использующееся для увеличения чувствительности. С двоичного делителя сигнал подается на управляющий модуль.  3. Реализация системыОдин из вариантов реализации системы представлен на рис. 2. В качестве исполнительных элементов системы используются следующие микросхемы:

  • Генераторы сенсорной частоты на таймере IN555N (U1, U1’, …)
  • Устройство выбора датчика – мультиплексор HEF4052BP (U2)
  • Устройство вычисления разницы частот – триггер HEF4013BP (U4)
  • Устройство уменьшения частоты – двоичный делитель HEF4040BP (U5)
  • Управляющий модуль и генератор опорной частоты – микроконтроллер (МК) AVR ATmega16 (U6)

Антенна – лист фольгированного текстолита размером 10х10 см2

Рис. 2. Принципиальная схема системы

Рис. 3. Внешний вид макета системы

4. Настройка системы   4.1. Генерация опорной частоты Опорная частота генерируется самим микроконтроллером (порт B3/OC0). Дискретность генерации зависит от частоты, на которой работает МК: чем больше частота МК, тем меньше дискретность генерируемой частоты.   4.2. Настройка разностной частотыДля оптимизации работы системы разностную частоту теоретически надо сделать как можно меньше. Для этого необходимо измерить сенсорную частоту, а затем сгенерировать опорную, близкую к ней (см. п. 6). Изменением сопротивления потенциометра RV1 необходимо добиться одновременно нескольких вещей:

  • Максимально приблизить сенсорную частоту к опорной
  • Убедиться, что сенсорная частота меньше опорной
  • Добиться устойчивой генерации сенсорной частоты (при чрезмерном ее уменьшении или увеличении генерация импульсов срывается).

Однако на практике разностную частоту не удается уменьшить до значения, меньшего 30-50 кГц из-за сенсорного генератора, на стабильность работы которого влияют следующие факторы:

  1. Колебания проводника, соединяющего антенну и сенсор
  2. Масса устройства, подключенного к общему проводу схемы
  3. Наличие заземления общего провода схемы
  4. Внутренняя нестабильность таймера

Первый фактор устраняется путем жесткой фиксации антенного кабеля или размещением сенсорного генератора на антенне. Второй и третий представляют собой систематическую погрешность, устраняемую калибровкой программы управления системой (см. п. 6). Четвертый учитывается при настройке разностной частоты, которая должна быть больше флуктуации сенсорной. При регулировке сенсорной частоты с помощью потенциометра RV1 необходимо контролировать стабильность и значение разностной частоты. Следует отметить, что осциллограф или частотомер с питанием от сети переменного тока не подойдут по вышеуказанным причинам 2 и 3. Я использовал самодельный частотомер на МК AVR ATmega16.   4.3. Настройка чувствительности Чувствительность – это максимальное расстояние обнаружения объекта. Для ее регулировки используется микросхема U5 (рис. 2) – двоичный делитель. На вход CLK подается разностная частота, которая затем уменьшается в 2n+1 раз, где n – номер выхода (Q0 … Q11). В ходе отладки системы необходимо было оценить зависимость чувствительности от диапазона изменения уменьшенной разностной частоты на всех выходах U5 при приближении или удалении предмета. Эксперименты показали, что наилучшей чувствительности можно добиться, используя выходы Q3 … Q6 (при опорной частоте 450-750 кГц). При этом уменьшенная разностная частота находится в пределах от 5 (Q3) до 0.5 (Q6) кГц.   4.4. Выбор таймера Для сенсорного генератора подойдет любой таймер типа LMC555 (NE555, IN555N, КР1006ВИ1). Однако не все они работают одинаково. Как показала практика, они отличаются верхним порогом устойчивой генерации частоты (для NE555 – примерно 1 МГц, для IN555N – более 2 МГц), а также стабильностью генерации (например, частота, генерируемая таймером IN555N, стабильнее частоты, генерируемой таймером NE555). Генерируемая частота отличается для разных таймеров даже при одинаковых значениях параметров времязадающих элементов. У меня не было возможности приобрести таймер LMC555, поэтому в качестве наилучшего варианта я предлагаю таймер IN555N.   4.5. Калибровка системыДля программной калибровки системы необходимо с помощью частотомера оценить диапазон изменения разностной частоты в зависимости от дистанции до  объекта. Полученный диапазон необходимо разделить на несколько зон (число которых определяется поставленной задачей). Как показали эксперименты, при каждом включении системы разностная частота изменяется, но абсолютный диапазон ее изменения постоянен. На графике показана зависимость изменения частоты от дистанции между антенной и объектом (массы5 кг). В легенде указан размер антенны.

5. Расчет разностной частоты             Разностная частота ƒdрассчитывается по формуле:

где ƒ0 – опорная частота, C0 = const – емкость цепи в отсутствие объекта (включает емкость между антенной и нашей системой (порядка 2 пФ), между антенной и землей (до 0,5 пФ), собственную емкость антенны, емкость времязадающего конденсатора (22 пФ)), Ce – емкость между антенной и объектом, R2 и RV1 – величины соответствующих сопротивлений в схеме на рис. 2. Коэффициент k индивидуален для каждого таймера и указан в технической документации (например, для LMC555 k = 1.4). 6. Программа управления системой             Программа была написана на языке C в среде Codeblocks 10.05 с компилятором WinAVR. Рассмотрим ее по частям. Включаем необходимые файлы:

#include 
#include 
#include

Для реализации системы нам понадобятся таймеры микроконтроллера T0 (для генерации опорной частоты) и T1 (для измерения разностной частоты). МК должен быть настроен на частоту 8 МГц. Инициализируем таймер T0:

#define SET_BIT(x,bit)    (x) |= (1 << (bit))
#define CLEAR_BIT(x,bit)  (x) &= ~ (1 << (bit))
#define IF_BIT_SET(x,bit) (x) & (1 << (bit))
 
void Timer0_Init(uint32_t freq)
{
SET_BIT(DDRB,3);
SET_BIT(PORTB,3);
TCCR0=(1 << WGM01)|(1 << COM00)|(1 << CS00)|(1 << FOC0);
OCR0=F_CPU/freq;
}

Настраиваем таймер T1 на измерение частоты по событию «захват»:

volatile uint64_t tachBuf = 0;
uint64_t tachFltr = 0;
uint8_t count = 0;
 
ISR(TIMER1_CAPT_vect)
{
TCNT1=0;
tachFltr+=(ICR1);
count++;
if(count==8)
{
tachBuf=(uint64_t)(tachFltr >> 3);
tachFltr=0;
count=0;
}
}
 
void Timer1_Init(void)
{
TIMSK=(1<

Основная функция программы (для одного сенсора):

#define S 0.1 /* !!! Коэффициент чувствительности */
 
int main(void)
{
uint64_t frequency,c; // Измеряемая и калибровочная частоты
 
DDRD = 0b00000011; // Порты ‘D2…D7’ на вход, ‘D0’ и ‘D1’ – на выход (управление мультиплексором)
PORTD = 0x00; // Активация первого сенсора
DDRA = 0xff; // Все порты ‘A’ на вход
 
Timer1_Init();
sei();
 
_delay_ms(1000);
Timer0_Init(1000000); /* !!! Генерация опорной частоты */
 
_delay_ms(1000);
frequency = Timer1_Get_F(); // Измерение частоты
c = (uint64_t)(F_CPU/frequency); // Калибровка – вычисление начального значения разностной частоты
 
while(1)
{
_delay_ms(250);
 
frequency = Timer1_Get_F(); // Измерение частоты
frequency = (uint64_t)(F_CPU/frequency); // Вычисление частоты
 
/* !!! При превышении определенного значения подать соответствующий сигнал на порты ‘A’. В данном случае на обнаружение объекта отводится три зоны (соответственно, используются порты ‘A0’ и ‘A1’) */
 
if(frequency>=(c+S*c) && frequency=(c+2*S*c) && frequency=(c+4*S*c)) // зона 3: объект близко
PORTA = 0b00000011;
	else // Объект вне зоны обнаружения
PORTA = 0x00;
}
return 0;
}

7. Практическое применение системы Система разрабатывалась для предотвращения столкновений мобильных роботов. Однако ее можно использовать для обнаружения любых объектов достаточной массы, в частности, в охранных системах. 8. Наглядно о работе датчика.

Также удалось найти пару старых видео, где видно, как датчик реагирует на человека.

Leave a Reply

You must be logged in to post a comment.