Что за схема сенсора касания на ATtiny85?

Обсуждаем контроллеры компании Atmel.
Ответить
AlexKroll
Родился
Сообщения: 5
Зарегистрирован: Вт сен 06, 2016 21:09:54

Что за схема сенсора касания на ATtiny85?

Сообщение AlexKroll »

Приветствую.
Есть плата от деревянной игрушки. Пластина 9х9см под 12мм слоем дерева. Касанием зажигаем/гасим светодиоды.
Но схема не такая, как часто можно увидеть для ёмкостного сенсора:
Изображение

Надо повторить работу сенсора под 12мм диэлектриком, пластина та же. Но кода нет. Реализовал схему по-своему:
Изображение
Но через 12мм диэлектрик реагирует плохо. Время замера сенсора при касании и покоя близки.
Делаю на Arduino IDE. ATtiny85 на 8Мц.
Подскажите пожалуйста, как работает схема в первом варианте?
Вложения
q2.jpg
(16.65 КБ) 235 скачиваний
Реклама
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Что за схема сенсора касания на ATtiny85?

Сообщение pokk »

Гуглите по словам сенсорная кнопка своими руками.

http://chipenable.ru/index.php/how-conn ... =component
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Что за схема сенсора касания на ATtiny85?

Сообщение akl »

AlexKroll писал(а):Подскажите пожалуйста, как работает схема в первом варианте?
Возможно, используется изменение частоты генерации при касании сенсора.
AlexKroll писал(а):... через 12мм диэлектрик реагирует плохо. Время замера сенсора при касании и покоя близки.
Обычно анализ срабатывания сенсора делают не по одному периоду заряда, а по большому числу оных. Тогда и разница получается более чувствительной.
SENSOR_C.rar
тест 2'000 периодов заряда-разряда емкости сенсора и выводом на PB5 для осциллографа.
(982 байт) 160 скачиваний
Последний раз редактировалось akl Ср сен 07, 2016 10:05:49, всего редактировалось 1 раз.
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Что за схема сенсора касания на ATtiny85?

Сообщение B@R5uk »

AlexKroll писал(а):Подскажите пожалуйста, как работает схема в первом варианте?
Скорее всего емкостной делитель напряжения. При касании сенсора увеличивается его собственная ёмкость, и падает амплитуда напряжения на пине PB3, подаваемого с пина PB2 через конденсатор. Это можно измерить с помощью АЦП через вход ADC3.
Реклама
Эиком - электронные компоненты и радиодетали
AlexKroll
Родился
Сообщения: 5
Зарегистрирован: Вт сен 06, 2016 21:09:54

Re: Что за схема сенсора касания на ATtiny85?

Сообщение AlexKroll »

Благодарю. Попробую через ADC.
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Что за схема сенсора касания на ATtiny85?

Сообщение oleg110592 »

AlexKroll писал(а):Но схема не такая, как часто можно увидеть для ёмкостного сенсора
почему не такая?
Изображение
из документа Atmel QTouch Library User Guide, там теория расписана.
Есть готовая библиотека для AVR микроконтролеров
http://www.atmel.com/tools/QTOUCHLIBRARY.aspx
Реклама
AlexKroll
Родился
Сообщения: 5
Зарегистрирован: Вт сен 06, 2016 21:09:54

Re: Что за схема сенсора касания на ATtiny85?

Сообщение AlexKroll »

Приветствую.
Прошу помощи.

Сделал ёмкостной сенсор методом CVD, а точнее разностный метод. Суть его в том, что мы не просто меряем
напряжение на АЦП, а делаем два замера, поочерёдно заряжая/разряжая пластину сенсора и ёмкость АЦП. Это
вроде как самый надёжный способ. Вот его описание: http://ww1.microchip.com/downloads/en/A ... 01478B.pdf

Я его реализовал. Работает действительно очень стабильно. Но только некоторое время. Со временем лампа нагревается,
и сенсор перестаёт реагировать на касания. Т.е. я снимаю показания с АЦП, а значения такие, как в состоянии покоя,
ёмкость пластины никак не меняется.
Схема лампы следующая:
Изображение

Замер я делаю так:
Спойлер

Код: Выделить всё

uint16_t touch_probe( byte SensPin, byte SensAdc, byte RefPin, byte RefAdc )
{
	//  Зарядим конденсатор АЦП и разрядим пластину сенсора.
	ADMUX = RefAdc;
	PORTB |= _BV(RefPin);		// Charge S/H Cap 
	PORTB &= ~_BV(SensPin);		// Discharge Pad (0)
	DDRB  |= _BV(RefPin) | _BV(SensPin);

	my_delay_us(5);  //  Задержка на заряд/разряд.
	
	DDRB &= ~_BV(SensPin);	//  Сенсор на вход
	ADMUX = SensAdc; //|_BV(ADLAR);	 //  Переключим конденсатор АЦП к пластине.

	my_delay_us(5);  //  Задержка на уравнивание зарядов. Заряд с АЦП перетекает на пластину.
		
	ADCSRA |= _BV(ADSC);  //  Меряем.
	while( !( ADCSRA & _BV(ADIF) ) );
	ADCSRA |= _BV(ADIF); // Clear ADIF

	//dat1=ADCH;
	uint16_t dat1 = ADC;

	//  Зарядим пластину сенсора и разрядим конденсатор АЦП.
	ADMUX = RefAdc;
	PORTB &= ~_BV(RefPin);		// Discharge S/H Cap
	PORTB |= _BV(SensPin);		// Charge Pad 
	DDRB  |= _BV(RefPin) | _BV(SensPin);

	my_delay_us(5);  //  Задержка на заряд/разряд.

	DDRB &= ~_BV(SensPin);	//  Сенсор на вход
	PORTB &= ~_BV(SensPin);
	ADMUX = SensAdc; //|_BV(ADLAR);	 //  Переключим конденсатор АЦП к пластине.

	my_delay_us(5);   //  Задержка на уравнивание зарядов на пластине и кондере АЦП.

	ADCSRA |= _BV(ADSC);  // Меряем.
	while( !( ADCSRA & _BV(ADIF) ) );
	ADCSRA |= _BV(ADIF); // Clear ADIF

	//dat2 = ADCH;
	uint16_t dat2 = ADC;

	return dat2 - dat1;
}
Надо сказать ещё, что значения замеров при касании и покое у меня очень близки. Везде в доках на картинках
они довольно сильно отличаются. У меня разница около 80 (из 1023, разрядность АЦП 10бит). Это очень мало.
Рекалибровку тоже делаю, усложнял фильтр. Ничего не помогает. Как-будто что-то с зарядом/разрядом пластины.

Дело в коде? Или ещё в чём-то? Я пытаюсь повторить работающую схему, там этих проблем нет.
Вложения
SchemeQuest.jpg
(32.94 КБ) 546 скачиваний
Ответить

Вернуться в «AVR»