Страница 1 из 1

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

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

Надо повторить работу сенсора под 12мм диэлектриком, пластина та же. Но кода нет. Реализовал схему по-своему:
Изображение
Но через 12мм диэлектрик реагирует плохо. Время замера сенсора при касании и покоя близки.
Делаю на Arduino IDE. ATtiny85 на 8Мц.
Подскажите пожалуйста, как работает схема в первом варианте?

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

Добавлено: Ср сен 07, 2016 03:43:13
pokk
Гуглите по словам сенсорная кнопка своими руками.

http://chipenable.ru/index.php/how-conn ... =component

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

Добавлено: Ср сен 07, 2016 08:44:25
akl
AlexKroll писал(а):Подскажите пожалуйста, как работает схема в первом варианте?
Возможно, используется изменение частоты генерации при касании сенсора.
AlexKroll писал(а):... через 12мм диэлектрик реагирует плохо. Время замера сенсора при касании и покоя близки.
Обычно анализ срабатывания сенсора делают не по одному периоду заряда, а по большому числу оных. Тогда и разница получается более чувствительной.
SENSOR_C.rar
тест 2'000 периодов заряда-разряда емкости сенсора и выводом на PB5 для осциллографа.
(982 байт) 162 скачивания

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

Добавлено: Ср сен 07, 2016 10:02:04
B@R5uk
AlexKroll писал(а):Подскажите пожалуйста, как работает схема в первом варианте?
Скорее всего емкостной делитель напряжения. При касании сенсора увеличивается его собственная ёмкость, и падает амплитуда напряжения на пине PB3, подаваемого с пина PB2 через конденсатор. Это можно измерить с помощью АЦП через вход ADC3.

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

Добавлено: Ср сен 07, 2016 10:20:10
AlexKroll
Благодарю. Попробую через ADC.

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

Добавлено: Ср сен 07, 2016 12:00:52
oleg110592
AlexKroll писал(а):Но схема не такая, как часто можно увидеть для ёмкостного сенсора
почему не такая?
Изображение
из документа Atmel QTouch Library User Guide, там теория расписана.
Есть готовая библиотека для AVR микроконтролеров
http://www.atmel.com/tools/QTOUCHLIBRARY.aspx

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

Добавлено: Вс окт 02, 2016 20:07:15
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бит). Это очень мало.
Рекалибровку тоже делаю, усложнял фильтр. Ничего не помогает. Как-будто что-то с зарядом/разрядом пластины.

Дело в коде? Или ещё в чём-то? Я пытаюсь повторить работающую схему, там этих проблем нет.