Arts >> Изкуство и развлечения >  >> Магия >> Магически трикове

Как деблокирате превключвател?

Демонтажът на превключвател е решаваща техника в електрониката за предотвратяване на нежелани множество задействания от едно натискане. Ето разбивка на това какво представлява, защо е необходимо и различните методи за постигането му:

Разбиране на проблема:

* Отскачане на превключване на контакти: Механичните превключватели, когато бъдат натиснати или освободени, не преминават незабавно между отворено и затворено състояние. Те "подскачат" многократно поради механични вибрации и контактни несъвършенства.

* Множество задействания: Това подскачане може да генерира множество електрически сигнали, въпреки че потребителят е възнамерявал само едно натискане. Това може да причини нежелано поведение във веригите, особено тези, чувствителни към времето.

Защо Debounce?

* Точно тълкуване на сигнала: Предотвратява влиянието на фалшивите сигнали върху логиката или контролните функции на вашата верига.

* Надеждна работа: Гарантира, че вашата верига реагира само веднъж на едно натискане на превключвателя.

Методи за премахване на отскок:

1. Хардуерно отстраняване на отскок:

* RC верига: Най-често срещаният метод. Резистор (R) и кондензатор (C) са свързани паралелно през превключвателя. Кондензаторът се зарежда и разрежда бавно, филтрирайки бързите отскачащи сигнали.

* Как работи: Когато превключвателят се затвори, кондензаторът се зарежда през резистора. Сигналите на отскачане са твърде бързи, за да заредят напълно кондензатора, така че преминава само един чист сигнал.

* Базирани на диоди: Използва диод, за да предотврати твърде бързото разреждане на кондензатора. Това гарантира чист сигнал, дори ако отскачането е продължително.

2. Отстраняване на отскок на софтуера:

* Софтуерен таймер: Микроконтролерът може да бъде програмиран да игнорира входните промени за кратко време след натискане на превключвател. Всички промени в рамките на това време се считат за отпадане.

* Как работи: Таймерът се стартира при първото натискане на превключвателя. Всякакви допълнителни промени в рамките на продължителността на таймера се игнорират. След като таймерът изтече, новото състояние на превключвателя се приема.

* State Machine: Използва машина за състояние за проследяване на състоянието на превключвателя. Машината променя състоянията само след забавяне, филтрирайки отскачащите сигнали.

3. Специализирани интегрални схеми за отблъскване:

* Интегрални схеми за отстраняване на отскок: Проектиран специално за отстраняване на сигнали, осигурявайки стабилни и надеждни решения.

Избор на правилния метод:

* Хардуерно разбиване: Най-добър за прости вериги и когато рентабилността е важна.

* Софтуерна защита: Предлага по-голяма гъвкавост и може да се справи с по-сложни сценарии.

* Специализирани интегрални схеми за отблъскване: Идеален за приложения, изискващи висока точност, скорост или когато пространството е ограничено.

Основни съображения:

* Време за отстраняване на отскок: Закъснението или времевият прозорец, използван за премахване на отскок, трябва да бъде по-дълъг от продължителността на отскачането на превключвателя, но по-кратък от очакваното време за реакция на потребителя.

* Сложност на веригата: Избраният метод за отстраняване на отскок трябва да е подходящ за сложността на веригата и наличните ресурси.

Примерен код (Софтуерно обезсърчаване с Arduino):

```c++

const int switchPin =2; // Пин, свързан към превключвателя

int switchState =0; // Първоначално състояние на превключвателя

unsigned long lastDebounceTime =0; // Последният път, когато ключът промени състоянието

const unsigned long debounceDelay =50; // Закъснение в милисекунди

void setup() {

pinMode(switchPin, INPUT_PULLUP); // Конфигуриране на щифта за въвеждане

Serial.begin(9600);

}

void loop() {

int четене =digitalRead(switchPin);

// Ако превключвателят се промени, нулирайте таймера

if (четене !=switchState) {

lastDebounceTime =millis();

}

if ((millis() - lastDebounceTime)> debounceDelay) {

// Ако забавянето е достатъчно дълго, считайте промяната за валидна

switchState =четене;

// Обработка на състоянието на превключвателя

if (switchState ==LOW) {

Serial.println("Превключвател натиснат!");

} иначе {

Serial.println("Превключвателят е освободен!");

}

}

}

```

Този код на Arduino прилага премахване на отскок на софтуера чрез проверка на състоянието на превключвателя и сравняването му с предишното състояние. Ако бъде открита промяна, тя нулира таймера. Само след известно забавяне (debounceDelay) промяната се счита за валидна и се обработва.

Магически трикове

Съответните категории