Störningar på en AVR atmega I/O-pinne
Postat: 25 januari 2007, 15:08:10
Hejsan, jag har byggt ett enkelt kretskort med två drivkretsar/h-bryggor och en AVR Atmega88 som låter mig styra en stegmotor och läsa av lite sensorer via en serieport.
Jag har anslutit en metalldetektor på en I/O-pinne som är konfigurerad som en ingång, och den är sedan ansluten till en lysdiod på metalldetektorn. Spänningen från den punkten är 4.5V vid tänd lysdiod, och 0V vid släckt, så därför är den inkopplad rakt på Atmegan utan någon form av analog komparator eller så. Ful-Hack (TM). :D
Hursomhelst, dessvärre verkar det som om det genereras störningar i kabeln, eftersom Atmegan signalerar pin-change-interrupt när man kör med motorn. Tyvärr kan jag inte undersöka det närmare eftersom jag inte har tillgång till ett oscillioskop. Jag har redan undersökt möjligheten att jag helt enkelt modifierade porten i mjukvaran, men efter att ha kontrollerar assembleroutputen och kört koden i simulator är jag rätt säker på att inte det är felet.
Sladden till detektorn är lång, kanske 1.2-1.5 meter, och är en styrkabel från Elfa, oskärmad. Och den går nära en VGA-kabel och ett par nätströmskablar.
Eftersom styrkretsarna använder fyra I/O-linjer per styck trodde jag eventuellt att switchandet av dessa kunde ge rippel på övriga ben, men enligt databladet för drivsteget drar logikingångarna typiskt mindre än en microampere per linje, så det torde knappast belasta AVR-processorn i någon större utsträckning.
En annan möjlighet är ju helt enkelt att en massa störningar överförs internt på kortet, och att jag behöver stabilisera matningen där. Dock är redan logiken försörjd med separat matning, alla kretsar har en kodensator enligt tradition, och drivkretsarna har inbyggda frihjulsdioder. Dessutom uppstod aldrig några problem av detta slag under utvecklingen, inte ens när det hela var uppkopplat på en breadboard i en sjuhelsikes härva.
Så just nu lutar jag helt enkelt åt att det är störningar som plockas upp i kabeln. Eller så är det helt enkelt motorns magnetfält som tas upp av metalldetektorns spole (jag har inte hunnit testa att köra systemet med metalldetektorn avlägsnad från motorns närhet).
Hur filtrerar man bort dylika störningar lättast? Jag hade tänkt testa med en kondensator kopplad mot jord, men jag är ganska okunning om praktisk konstruktion av filter av det här slaget. Så... Någon som har lust att hjälpa mig?
Med vänliga hälsningar
Matin Persson
Jag har anslutit en metalldetektor på en I/O-pinne som är konfigurerad som en ingång, och den är sedan ansluten till en lysdiod på metalldetektorn. Spänningen från den punkten är 4.5V vid tänd lysdiod, och 0V vid släckt, så därför är den inkopplad rakt på Atmegan utan någon form av analog komparator eller så. Ful-Hack (TM). :D
Hursomhelst, dessvärre verkar det som om det genereras störningar i kabeln, eftersom Atmegan signalerar pin-change-interrupt när man kör med motorn. Tyvärr kan jag inte undersöka det närmare eftersom jag inte har tillgång till ett oscillioskop. Jag har redan undersökt möjligheten att jag helt enkelt modifierade porten i mjukvaran, men efter att ha kontrollerar assembleroutputen och kört koden i simulator är jag rätt säker på att inte det är felet.
Sladden till detektorn är lång, kanske 1.2-1.5 meter, och är en styrkabel från Elfa, oskärmad. Och den går nära en VGA-kabel och ett par nätströmskablar.
Eftersom styrkretsarna använder fyra I/O-linjer per styck trodde jag eventuellt att switchandet av dessa kunde ge rippel på övriga ben, men enligt databladet för drivsteget drar logikingångarna typiskt mindre än en microampere per linje, så det torde knappast belasta AVR-processorn i någon större utsträckning.
En annan möjlighet är ju helt enkelt att en massa störningar överförs internt på kortet, och att jag behöver stabilisera matningen där. Dock är redan logiken försörjd med separat matning, alla kretsar har en kodensator enligt tradition, och drivkretsarna har inbyggda frihjulsdioder. Dessutom uppstod aldrig några problem av detta slag under utvecklingen, inte ens när det hela var uppkopplat på en breadboard i en sjuhelsikes härva.
Så just nu lutar jag helt enkelt åt att det är störningar som plockas upp i kabeln. Eller så är det helt enkelt motorns magnetfält som tas upp av metalldetektorns spole (jag har inte hunnit testa att köra systemet med metalldetektorn avlägsnad från motorns närhet).
Hur filtrerar man bort dylika störningar lättast? Jag hade tänkt testa med en kondensator kopplad mot jord, men jag är ganska okunning om praktisk konstruktion av filter av det här slaget. Så... Någon som har lust att hjälpa mig?
Med vänliga hälsningar
Matin Persson