Start

Förstasidan
Statistik

Social robot

Robotens syn
Modell/simulator
Levande modell


Arduino

Starta upp Arduino
DCcduino UNO
Pro Mini

Raspberry pi

Om Raspberry

Pic32

Om Pic32
Konstruktionen
Praktisk kom-igång
Starta upp UBW32
Installera MPLAB
Rinnande ljus
Stegmotor
Display
RS232 Pic32 - terminal
Luffarschack

Servo

Överblick
Isärmonterat servo
Styrning av servo
Mini Maestro
Bygga ett servo

Elektronik

Open Collector
Kontaktstuds
Drivsteg på utgångarna
Halleffektsensor/switch
MLX90316 (halleffekt)
Pulsbreddsmodulering

Open CV

Om OpenCV

Matematik

Linjär algebra
Olinjär länkmekanism

Kontaktstuds
Knapp kopplad till digital ingång
Ganska ofta vill man koppla en liten knapp till processorn. Det är ju inget märkvärdigt kan man tycka. En spontan skiss ser troligen ut som den till höger. Eller så gör man tvärtom, en pullup till 5V och knappen ner mot jord. Det kanske är vanligare.

Enda problemet här; det är att om man inte känner till problematiken kring kontaktstuds kommer eventuellt otroligt mystiska fel inträffa. Det kan vara så att man trycker på knappen en gång, men processorn reagerar som om man tryckte 2 gånger eller 5 gånger.

Så, vad är problemet?

Kontaktstuds
Problemet är att den mekaniska kontruktionen inuti kontakten har vissa begränsningar och att det lätt händer att kontakten "studsar" mot metallblecken. Detta ger en kaskad av till och frånslag, vilket syns tydligt om man kopplar in ett oscilloskop och studerar hur själva tillslaget ser ut. Speciellt kan detta problem inträffa ofta med billigare knappar.

Är knappen kopplad till en lampa eller elmotor, så märker man inte av detta kontaktstuds. Men är knappen kopplad till en snabb mikroprocessor kan konstiga saker hända.



Dvs, om vi gör bilden lite mer pedagogiskt tillrättalagd, så kan det se ut som nedan.


Vad vi tror är ett tillslag när vi trycker på knappen är i själva verket eventuellt ganska många till och från och tillslag.

Exempel på kontaktstuds
Säg att man är lite av en tvivlare och kanske inte tror på detta ändå, eftersom det låter lite konstigt. Okej, låt oss koppla in en knapp till arduino och se hur det fungerar. Jag kopplar in en knapp på pinne 2, vilket är INT0. Anledningen till att jag väljer denna är att jag vill att ett interrupt skall triggas när jag trycker på knappen. På arduinon kan man låta signalförändringar generera interrupt på pinne 2 (INT0) och pinne 3 (INT1). Nedanstående program skriver ut hur många knapptryck jag gjort 1 gång per sekund via seriemonitorn.
volatile int antal_knapptryck = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(2, INPUT);
  digitalWrite(2, HIGH); // aktivera intern pullup
  attachInterrupt(0, knapptryck, FALLING);
}

void loop()
{
  Serial.println(antal_knapptryck);
  delay(1000);
}

void knapptryck()
{
  antal_knapptryck++;
}


Efter att man tankat över ovanstående program så måste man öppna seriemonitorn för att ta emot siffrorna från programmet.



Hårdvarumässig lösning på kontaktstuds
...för knappar (2 anslutningar)
Den vanligaste lösningen är att fixa en viss fördröjning med hjälp av en kondensator. Utsignalen skickas sedan in i en schmitt-trigger. Denna schmitt-trigger är central för att denna lösning skall fungera. Schmitt-triggern slår till vid en viss nivå och slår av vid en viss nivå. Att koppla en kondensator direkt på processorns in-pinne och förvänta sig att den ska bete sig som en schmitt-trigger, det ska man inte göra. Underliga saker kan hända om man kopplar en konding på en ingång som inte är avsedd för detta. Risken är att man byter kontaktstuds mot någon annan typ av studs.



Uppkopplat på en labb-bräda med arduino ser det ut såhär.



...för switchar (3 anslutningar)
Ifall man har en switch med 2 ändlägen (dvs en switch med 3 ben), då är nog den optimalaste lösningen att använda en SR-latch. SR-latchen kommer göra en "set" vid första tillslag i "set" -läge. SR-latchen kommer göra en "reset" vid första tillslag i "reset" -läge.

SR-latchen utplånar helt problematiken med kontaktstuds i denna typ av switch. En SR -latch med enbart NAND -grindar ser ut som nedan.



Mjukvarumässig lösning
...pinne kopplat till interrupt
Säg att din knapp är kopplad så att ett interrupt reagerar på knappen. Detta interrupt kanske startar någonting. Om man inte tar hänsyn till detta med kontaktstuds hårdvarumässigt, så måste man isåfall ta hänsyn till det mjukvarumässigt (det bör man kanske eventuellt göra ändå). Man måste vara medveten om att det kan komma en "störtskur" med anrop till denna interruptfunktion (p.g.a. kontaktstuds). Ett sätt att lösa problemet kan vara att med en räknare hålla koll på om interruptfunktionen redan aktiverats. Denna räknare kan sedan dekrementeras (räknas ner) i lämpligt tempo och när räknaren är noll då accepterar den åter ett klick på knappen

...pollad pinne
Ponera att man har en mjukvarumässig lösning där man pollar en pinne (kopplad till en knapp) och när denna pinne är hög (eller låg) så gör man någonting. För en sådan här lösning är det troligtvis enkelt lägga en viss tidsfördröjning i koden. Dvs, en tid som är så kort som man kan acceptera mellan 2 knapp-tryck.

...timer-interrupt
En annan lösning är att med ett timer-interrupt polla en pinne kopplad till knappen. Ifall denna poll görs ett antal ggr per sekund (dvs ett ganska långsamt tempo) så är troligtvis inte kontaktstuds något problem längre, eftersim studset hinner försvinna mellan pollen.





Robot och elektronik -sidan byter namn till electro.st

Senast läst 13:31:53 20/7 2017 Texten uppdaterad 28/9 2014
footer sign