Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.
Pokazywanie postów oznaczonych etykietą Warsztat. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Warsztat. Pokaż wszystkie posty

poniedziałek, 11 kwietnia 2011

Obrotomierz na AVR ATmega8.


Autor: Dondu

Obrotomierz.
Podczas realizacji projektów wykorzystujący silniki warto mieć pod ręką przyrząd pozwalający zmierzyć prędkość obrotową silnika. Tym przyrządem jest obrotomierz zwany też tachometrem  (ang. tachometer) o czym wszyscy zapewne wiedzą :-)

Ponieważ w najbliższym czasie opublikuję cykl artykułów o silniku BLDC, stąd zamieszczam schemat oraz program prostego obrotomierza wykonanego na ATmega8. Program łatwo dostosować do dowolnego innego mikrokontrolera AVR posiadającego możliwość wykorzystania timera posiadającego funkcjonalność Input Capture Unit.


Sposób pomiaru 

Do pomiaru wykorzystamy Timer1 oraz możliwość "łapania" stanu licznika w momencie pojawienia się zbocza na pinie ICP1. Szczegółów szukamy w rozdziale Input Capture Unit. Znajdziemy tam schemat timera dla wykorzystania tej funkcjonalności.

ATmega8 (AVR) Timer1 Input Capture Unit.


Jak działa Input Capture Unit?

Przyjmijmy dla uproszczenia wyjaśnienia sposobu pomiaru, że na jeden obrót silnika, przypada jeden cykl pracy transoptora, czyli dwa zbocza - jedno narastające i jedno opadające.

W skrócie pomiar realizowany jest tak:
  • do pinu ICP1 podłączamy sygnał z transoptora, który będzie naszym czujnikiem pomiarowym,
  • na tarczy silnika umieszczamy znaczniki, na które reagować będzie transoptor,
  • puszczamy swobodnie licznik w trybie normalnym bez preskalera, by pomiar był jak najbardziej dokładny,
  • ustawiamy przerwania od wystąpienia zbocza (np. narastającego) na pinie ICP1,
  • w momencie wystąpienia odpowiedniego zbocza (moment A), w rejestrze ICR1 zostanie zapamiętany aktualny stan licznika timera (TCNT1),
  • wywołane zostaje przerwanie, w którym zapamiętujemy złapany stan licznika,
  • czekamy na następne zdarzenie,
  • w momencie wystąpienia zdarzenia (moment B) ponownie zostaje zapamiętany aktualny stan licznika, który odczytujemy w przerwaniu.
W ten sposób otrzymujemy dwa stany licznika, jeden na początku, a drugi na na końcu cyklu pomiarowego.

Metoda pomiaru prędkości obrotowej silnika.


Teraz wystarczy od stanu końcowego licznika (w momencie B) odjąć stanu początkowy (w momencie A) z uwzględnieniem, iż licznik mógł się w między czasie przepełnić (raz lub więcej razy) i znając częstotliwość taktowania timera dokonać niezbędnych przeliczeń i zaprezentować wynik na LCD.

Istotą wykorzystanie  Input Capture Unit jest fakt, iż stan timera TCNT1 przepisywany jest do rejestru ICR1, dokładnie w momencie wystąpienia zdarzenia. Dlatego ewentualne nieznaczne opóźnienie obsługi przerwania od wykrycie zdarzenia, nie ma wpływu na wynik pomiaru.

Jednakże należy wziąć pod uwagę, że zbyt późne odczytanie rejestru ICR1 może doprowadzić do sytuacji, że następne zdarzenie nadpisze poprzednią wartość ICR1, zanim zdążysz ją odczytać. Dlatego ważne jest, by w czasie pomiaru przerwania nie były zbyt długo blokowane, a odczyt ICR1 powinno się wykonać, na samym początku funkcji przerwania:



Więcej impulsów na jeden obrót

Można oczywiście zastosować enkoder, który będzie dostarczał więcej impulsów na jeden obrót silnika. Należy to uwzględnić w programie. Jednakże trzeba być świadomym tego, że dokładność pomiaru pełnego obrotu jest większa niż dokładność pomiaru fragmentu obrotu. Poza tym, mniej obciążymy mikrokontroler, gdy enkoder będzie dawał jeden impuls na jeden obrót niż w sytuacji, gdy impulsów będzie więcej.

Wszystko oczywiście zależy od konkretnego celu jaki chcesz osiągnąć.


Eliminacja szumów sygnału z transoptora

Dokładność pomiarów zależy także od poprawności pracy zespołu złożonego z czujnika i enkodera. Dla wyeliminowania ewentualnych szumów sygnału z transoptora podłączonego do pinu ICP1, możemy skorzystać z wbudowanego modułu eliminatora szumów oznaczonego na schemacie blokowym timera jako Noise Canceler. W większości przypadków nie będzie jednak takiej potrzeby.


Komparator analogowy jako sygnał zdarzenia

Przy okazji zauważ, że patrząc na schemat blokowy Input Capture Unit, źródłem zdarzeń może być także komparator analogowy. Nie jest nam potrzebny do miernika prędkości, dlatego też nie będę go tutaj omawiał, ale zasada postępowania będzie podobna do omawianej w niniejszym artykule.


Czujniki stykowe

Ten sposób pomiaru uniemożliwia wykorzystanie czujników stykowych z pominięciem sprzętowej eliminacji drgań styków. Innymi słowy jeżeli chcesz wykorzystać jako czujnik np. kontaktron, przycisk krańcowy, czy nawet do testów, zwykły przycisk, to musisz wyeliminować sprzętowo drgania jego styków.


Transoptor

Transoptor może być praktycznie dowolnym transoptorem odbiciowym lub szczelinowym.

Jeżeli zastosujesz transoptor szczelinowy, wymagane będzie wykonanie jakiegoś elementu, który będzie połączony z wirnikiem i będzie przerywał strumień światła pomiędzy diodą LED, a fototranzystorem transoptora.

Przykładowe transoptory szczelinowe.
Rys. Przykładowe transoptory szczelinowe.


Jeżeli zastosujesz transoptor odbiciowy, powinieneś na wirniku przygotować enkoder w postaci namalowanych czarnych i białych pasków. Ważne by kontrast był jak największy, co zapewni dobry poziom sygnału wyjściowego z enkodera.


Przykładowe transoptory odbiciowe.
Rys. Przykładowe transoptory odbiciowe.


Enkodery

Tarcze enkoderów (plik PDF).
Możesz skorzystać z:



Schemat

Do budowy obrotomierza zastosujemy ATmega8 w wersji, która może pracować z kwarcem 16MHz (np. ATmega8L nie może pracować z kwarcem powyżej 8MHz).

Jako LCD wykorzystamy najpopularniejszy wyświetlacz LCD 2x16 znaków kompatybilny z HD44780.

Schemat jest bardzo prosty (dbając oczywiście o podstawy podłączania mikrokontrolera):


Schemat obrotomierza na ATmega8 (AVR).


Ponieważ transoptor ma wyjście typu otwarty kolektor, stąd do podciągnięcia go do Vcc, wykorzystamy wewnętrzny rezystor pull-up mikrokontrolera, włączając go za pomocą programu.


Program

Poniżej kompletny program pierwszej najprostszej wersji obrotomierza. Wszelkie wyjaśnienia znajdziesz w opisach kodu. Program nie zawiera uśredniania wyników, ale możesz to dodać we własnym zakresie.

/*
OBROTOMIERZ v.1

Obrotomierz przeznaczony do prostych pomiarów prędkości obrotowej.
Pokazuje:
- czas jednego obrotu,
- liczbę obrotów na sekundę (rps),
- liczbę obrotów na minutę (rpm).

Szczegóły: http://mikrokontrolery.blogspot.com/2011/04/obrotomierz-diy.html 

Autor: Dondu 
Data:  2012.11.25 
*/


#include <avr/io.h>
#include <stdio.h>
#include <avr/interrupt.h> 
#include <util/delay.h>
#include "HD44780.h"

//tutaj ustaw własne zasady pomiaru
#define POMIAR_ILOSC_IMPULSOW_NA_OBROT 4  //ilość inpulsów na jeden obrót
#define POMIAR_ILOSC_OBROTOW           10 //ile obrotów ma trwać pomiar


volatile unsigned long int  pomiar_ilosc_cykli;
volatile unsigned int       ilosc_przepelnien;
volatile unsigned char      pomiar_zbocze_nr;
volatile unsigned char      pomiar_gotowy;

volatile unsigned int       ICR1_moment_A;
volatile unsigned int       ICR1_moment_B;

char  wynik[16];        //bufor wyświetlacza

//------------------------------------------------------

ISR(TIMER1_CAPT_vect){

 //Obsługa zdarzenia na ICP1 

 static unsigned int ICR1_aktualny; //wartość ICR1 złapana w aktualnie 
                                    //złapanym zboczu

 //odczytaj złapany stan licznika
 ICR1_aktualny = ICR1;

 //czy to pierwsze złapane zbocze?
 if(pomiar_zbocze_nr == 1){
  
  //tak, pierwsze zbocze pomiarowe, 
  
  //uruchamiamy zliczanie przepełnień Timer1

  //zgaś flagę przerwania od przepełnienia
  TIFR |= (1<<TOV1);
  
  //włącz przerwania od przepełnienia Timer1
  TIMSK |= (1<<TOIE1);

  //zeruj licznik przepełnień Timera1
  ilosc_przepelnien = 0;

  //zapamiętujemy stan licznika początku obrotu (moment A)
  ICR1_moment_A = ICR1_aktualny;

 }else{
   
  //każde następne zbocza pomiarowe

  //czy to ostatnie zbocze (koniec pełnego obrotu silnika)?
  if(pomiar_zbocze_nr ==  POMIAR_ILOSC_IMPULSOW_NA_OBROT 
                          * POMIAR_ILOSC_OBROTOW){

   //tak, wykryto ostatnie zbocze pomiarowe, 
   //czyli wykonał się pełny ostatni obrót tarczy

   //wyłączamy przerwania z Input Capture Unit 
   //oraz przepełnienia Timer1
   TIMSK &= ~( (1<<TICIE1) | (1<<TOIE1) );
   
   //zapamiętujemy zmienne dla main()
   ICR1_moment_B  = ICR1_aktualny;
   pomiar_gotowy  = 1;

  }
  
  //w pozostałych przypadkach nic nie robimy i czekamy na zliczanie 
  //dalszych zboczy
 
 }

 //zwiększ licznik wykrytych zboczy
 pomiar_zbocze_nr++;

}

//------------------------------------------------------

ISR(TIMER1_OVF_vect){

 //powiększ licznik przepełnień Timera1
 ilosc_przepelnien++;

}

//------------------------------------------------------


void wykonaj_pomiar(void){

 //Funkcja włącza pomiar 

 //zerujemy licznik przepełnień Timer0
 ilosc_przepelnien = 0;

 //ustawiamy nr pierwszego zbocza
 pomiar_zbocze_nr = 1;

 //zerujemy flagę gotowości pomiaru
 pomiar_gotowy = 0;

 //włącz przerwania z ICP1 Timer1
 TIMSK |= (1<<TICIE1);

}


//------------------------------------------------------

int main(void){

 //zmienne do obliczeń
 double czas_jednego_obrotu;
 double obrotow_na_sekunde;

 PORTB |= (1<<PB0);   //włącz pullup transoptora

 LCD_Initalize();       //inicjalizacja LCD i napis początkowy
 LCD_Clear();
 LCD_GoTo(0, 0);         
 LCD_WriteText("Obrotomierz");

 //Ustawienie Timer1
 TCCR1A = 0;
 TCCR1B = (1<<CS10);   //preskaler 1, bez noise 
                             //canceler dla ICP1
 
 //lub z modułem Noise Canceler:
 //TCCR1B = (1<<CS10) | (1<<ICNC1); //preskaler 1, włącz 
                                         //noise canceler dla ICP1
 
 sei();       //włącz przerwania globalne

 wykonaj_pomiar();     //włącz pierwszy pomiar

 //pętla główna
 while(1){
  
  if(pomiar_gotowy){
   
   // gdy pomiar został wykonany

   //obliczenia
   
   pomiar_ilosc_cykli  =  65536 * ilosc_przepelnien - ICR1_moment_A 
                          + ICR1_moment_B;
   
   czas_jednego_obrotu = (double) pomiar_ilosc_cykli 
                         / POMIAR_ILOSC_OBROTOW / F_CPU ;

   obrotow_na_sekunde = 1.0 / czas_jednego_obrotu;

   //wyświetlenie wyników

   LCD_Clear();

   LCD_GoTo(13, 0);
   LCD_WriteText("rpm");

   //czas jednego obrotu
   sprintf(wynik,"%5.2fms/obr", 1000.0 * czas_jednego_obrotu);
   LCD_GoTo(0, 0);
   LCD_WriteText(wynik);

   //obroty na sekundę
   sprintf(wynik,"%5.2frps ", obrotow_na_sekunde);
   LCD_GoTo(0, 1);
   LCD_WriteText(wynik);
  
   //obroty na minutę
   sprintf(wynik,"%7u ", (int) (60.0 * obrotow_na_sekunde));
   LCD_GoTo(9, 1);
   LCD_WriteText(wynik);
      
   //pomiary co pół sekundy
   _delay_ms(500);   

   //wykonaj następny pomiar
   wykonaj_pomiar();

  }
 }
}
Do pobrania program wraz z projektem AVR Studio 4 + plik hex: OBROTOMIERZ-v1.zip


Problem znaku zapytania

Jeżeli w trakcie realizacji własnego projektu (nie opartego o powyższy plik AVR Studio 4) napotykasz na problem, że zamiast liczby wyświetla się znak zapytania, przeczytaj artykuł: Problem znaku zapytania podczas konwersji float do znaków ASCII w celu wyświetlenia na np. LCD itp.



Efekt końcowy



Akualizacje programu

Ponieważ w miarę pisania o silnikach BLDC jest prawdopodobne, że będę rozbudowywał program obrotomierza, stąd jego aktualną wersję będę zamieszczał w niniejszym temacie.

UWAGA!
Jeżeli ktoś na bazie niniejszego kodu opracuje własną wersję obrotomierza na ten, czy inny mikrokontroler i zechce się nią podzielić z czytelnikami bloga, to proszę o kontakt i z góry w ich imieniu dziękuję :-)



Artykuł wykorzystano do:


Link do artykułu na forum: Pompa perystaltyczna

... wykorzystasz artykuł, opiszesz w sieci, daj nam znać zamieścimy link :-)


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

wtorek, 29 marca 2011

Generator funkcyjny DDS

W laboratorium elektronika, nie powinno zabraknąć generatora funkcyjnego, czyli urządzenia pozwalającego uzyskać przebiegi o podstawowych kształtach:
  • sinusa,
  • piły,
  • prostokąta.



Dobrze jest także, gdy posiada możliwość generowania sygnału PWM, czyli prostokątnego o regulowanym wypełnieniu:



Szczytem marzeń jest posiadanie także możliwości generowania sygnałów modulowanych:



Można kupić gotowy, albo zbudować własny :-)


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

czwartek, 10 marca 2011

Recenzja modułu eXtrino XL z firmy Leon Instruments


Autor: tmf
Redakcja: Dondu

Właśnie dostałem ciekawą przesyłkę z firmy Leon Instruments – ich najnowszy produkt eXtrino XL – normalnie tego typu płytki leżą i czekają cierpliwie na chwilę wolnego, żeby się nimi zająć, ale coś mnie tknęło żeby otworzyć kopertę. Efekt był tak porażający, że od razu postanowiłem się podzielić wrażeniami z użytkowania tego modułu. To lećmy po kolei.

Przesyłka

Moduł przyszedł zapakowany w kopercie z folii bąbelkowej, tak jak to przy takich okazjach bywa… Po szybkim odpakowaniu w środku mamy płytkę zawierającą elementy i kilka poskładanych papierków – instrukcja i schemat modułu. Zwykle, podobnie jak większość, nie czytam instrukcji, ale ta przyciągnęła moją uwagę. Dlaczego? Bo jest krótka i… kolorowa. Na kilku stronach są przejrzyście pokazane informacje co moduł zawiera, opis parametrów granicznych, zdjęcie modułu z opisem poszczególnych elementów, kilka przydatnych wskazówek dotyczących użytkowania. W sumie instrukcję można przeczytać w dwie minuty – warto te dwie minuty na nią poświęcić. Druga kartka zawiera schemat modułu – przyda się jeśli będziemy chcieli napisać swój pierwszy program.

Płytka

Najlepsze wrażenie, a właściwie piorunujące robi sama płytka. Dlaczego? Poza funkcjonalnością wygląda po prostu niezwykle estetycznie, zresztą sami zobaczcie:


Płytka eXtrino XL

Płytka pokryta jest czarną, matową soldermaską, która wygląda naprawdę bardzo fajnie. Wszelkie styki są pozłacane, co ładnie kontrastuje z czernią soldermaski. Najbardziej rozbawił mnie pozłacany napis z tyłu płytki – Not made in China – tak, po jakości zdecydowanie widać, że to europejska robota :)

Stop China! :-)

Sama płytka jest ciekawie zaprojektowana – znajdziemy na niej procesor – ATXMEGA128A3U – naprawdę wypasiony AVR, taktowany nawet do 32 MHz (można przetaktować do 60-70 MHz, oczywiście tylko dla zabawy), który zawiera pełno układów peryferyjnych i sprzętowy interfejs USB. Dzięki temu ostatniemu nie zauważymy na płytce typowego układu FT232, który jest na wielu dev-boardach i umożliwia realizację szeregowego interfejsu do programowania układu. Ponieważ USB w XMEGA to pełny interfejs klasy device, stąd też możemy przy jego pomocy zaimplementować dowolne urządzenie USB.

Oprócz tego płytka zawiera:

  • złącze karty mikroSD,
  • enkoder obrotowy,
  • podstawki pod pamięci cyfrowe SPI, I2C, 18-bitowy przetwornik ADC, diodę RGB LED superflux, potencjometr cyfrowy (MCP41xxx), wzmacniacz (MCP6S91),
  • termometr (DS18x20 lub LM35),
  • kwarc taktujący procesor (nie jest potrzebny),
  • złącze pod moduł LCD zgodny z HD44780,
  • dwa złącza na które są wyprowadzone niektóre sygnały procesora (o rozkładzie kompatybilnym z modułami (shieldami) do Arduino – tylko uwaga – działającymi na 3,3V),
  • 8 LEDów sterowanych z zatrzasku 595 i 8 klawiszy typu mikroswitch podłączonych pod układ 74HC165, dzięki czemu i LEDy i klawisze nie zajmują portów IO procesora.

Warto podkreślić, że wymienione elementy są w podstawkach, jeśli ich nie używamy można je wyjąć, lub zamówić płytkę bez nich, dzięki czemu jest tańsza. Wszystkie układy są już podłączone do procesora, dzięki czemu płytka nie potrzebuje obszaru do którego lutujemy przewody lub złączy do wykonywania połączeń.

Ktoś powie, że to wada, bo mamy na stałe podłączone peryferia pod piny procesora. Tu wadą to nie jest – dlaczego? Z kilku powodów. Pierwszy jest taki, że nieużywane układy możemy wyjąć z podstawki, dzięki czemu dany pin IO procesora możemy wykorzystać do innych celów, drugi powód wynika z architektury użytego procesora. XMEGA mają sensownie poukładane układy peryferyjne, dzięki czemu jeśli np. pamięć SPI podłączymy pod SPIC0, to zmiana w finalnym układzie na inny interfejs SPI wiąże się tylko ze zmianą nazwy struktury, np. na SPID0. Nie mamy tu, pomieszanych tak jak w ATMega układów peryferyjnych. Dzięki temu płytka jest zwarta, gotowa do pracy i nie grozi nam plątanina przewodów łączących.

Zasilanie płytki

Płytkę możemy zasilać bezpośrednio z USB (jest to wygodne, gdyż przez ten sam kabel USB możemy się z płytką komunikować), lub z zewnętrznego zasilacza – 7,5-12V wg instrukcji. Tu miałbym pewne wątpliwości po co stosować zewnętrzny zasilacz. Oczywistą odpowiedzią jest, że w celu zwiększenia dopuszczalnego poboru prądu. Tyle, że stabilizator jest w obudowie SOT23, w efekcie warunki termiczne jego pracy uniemożliwią nam pobór istotnie większego niż z USB3.0 prądu, szczególnie jeśli moduł będziemy zasilać z 12V. Moim zdaniem w zupełności wystarczy możliwość zasilania z USB, z drugiej strony dodatkowa możliwość zasilania płytki nie przeszkadza.

Programowanie

Płytka umożliwia elastyczny wybór sposobu programowania – mamy do dyspozycji złącze PDI i JTAG. Dzięki temu można procesor łatwo programować i debuggować, np. przy pomocy taniego programatora/debuggera, który opisałem tutaj. Ale to nie wszystko.

Dla osób, które właśnie spłukały się kupując ten moduł mam miłą wiadomość – procesor zawiera wgrany bootloader, dzięki czemu łatwo możemy go programować wykorzystując darmowy program FLIP, który udostępnia nam firma Atmel. Ktoś powie, że programowanie z wykorzystaniem bootloadera jest uciążliwe – nic bardziej mylnego. Na module mamy dwa dodatkowe przyciski nazwane RESET i FLIP. Aby przejść w tryb bootloader wystarczy je razem nacisnąć, a następnie zwolnić najpierw RESET a potem FLIP. I to wszystko – procesor od tego momentu czeka na nowy wsad. Co ważne, dzięki zabezpieczeniom nasz program z pewnością nie skasuje bootloadera, stąd też możemy sobie bezpiecznie eksperymentować. Ponieważ testy płytki rozpocząłem od bootloadera, pokrótce opiszę jak on działa.

Bootloader


Jak już pisałem na czytanie instrukcji poświęciłem jakieś 2 minuty, prawdę mówiąc nawet nie doczytałem jak w bootloader wejść (chociaż jak później zauważyłem, jest to opisane), niemniej jest to tak intuicyjne, że szkoda czasu na czytanie – lepiej rozpocząć test. Aby ożywić płytkę wystarczy podłączyć ją do USB – potrzebny będzie kabel USB-miniUSB, którego nie ma w zestawie, ale chyba każdy elektronik ma takich kabli co najmniej kilka.

Podłączamy i… nic. Moduł zgłasza się odpalając na chwilę LEDy, po czym uruchamia się jakaś standardowa aplikacja. A jak odpalić bootloader? Ano tak, jak to się robiło w poprzednich modułach i ogólnie we wszystkich modułach z XMEGA. Naciskamy RESET i FLIP, po czym zwalniamy RESET i następnie FLIP (kolejność jest ważna). Od tej chwili procesor czeka na wgranie nowego kodu.

Warto zauważyć, że tradycyjnie na modułach z firmy Leon Instruments na RESET i FLIP są mikroswitche – jest to wygodne rozwiązanie, lepsze niż na modułach Xplained, gdzie trzeba kombinować ze zworkami i wejście w tryb bootloadera jest uciążliwe. Na eXtrino XL same mikroswitche są wyposażone w duże, żółte przyciski, dzięki czemu korzysta się z nich komfortowo (jakbym miał się do czegoś przyczepić to mikroswitche RESET i FLIP mogłyby mieć inny kolor niż pozostałe). Po wykonaniu opisanej sekwencji, zauważymy, że komputer wykrył nowe urządzenie USB:


Menedżer urządzeń

Ponieważ mam zainstalowane różne programy Atmela, najwyraźniej miałem już w systemie sterownik – płytka eXtrino po prostu się wykryła i natychmiast była gotowa do pracy. Sterowniki prawdopodobnie instalują się razem z Atmel Studio, więc każda osoba, która ten program zainstalowała już ma sterowniki do modułu. No to czas na test – w tym celu odpaliłem program FLIP. Po kliknięciu na piktogram symbolizujący kabel USB następuje nawiązanie połączenia z procesorem, co jest miłe program automatycznie wykrywa, że pracujemy z XMEGA128A3U i jest gotowy do dalszej pracy:


Program FLIP

I to wszystko – jak widzimy programowanie jest banalne. Żadnych AVRDude, konfiguracji, magicznych zaklęć – po prostu działa. Samo wczytywanie nowej aplikacji jest bardzo szybkie – w ciągu paru sekund zaprogramujemy całe 128 kB pamięci FLASH – o wiele szybciej niż z wykorzystaniem zabawek typu USBasp.

Podobnie łatwo możemy zaprogramować układ korzystając z zewnętrznego programatora – np. AVR Dragon lub Atmel-ICE. Po prostu łączymy programator z gniazdem PDI lub JTAG i to wszystko. Tu mała uwaga – lepiej aby na płytce były gniazda wannowe, uniemożliwiające odwrotne włożenie wtyczki kabla programatora. Na płytce są tylko tzw. goldpiny, a prawidłowe położenie wtyczki symbolizuje rysunek z wcięciem odpowiadającym indeksowi wtyczki. Nie jest to wystarczające zabezpieczenie, z drugiej strony odwrotne włożenie wtyczki nie grozi uszkodzeniem układu – po prostu nie będzie połączenia. Sama komunikacja odbywa się bez problemu:

Programowanie w Atmel Studio


Złącze wyświetlacza LCD

Jako ciekawostkę napiszę, że moduł posiada złącze kompatybilne z modułami wyświetlaczy LCD opartych na sterowniku HD44780 – czyli najpopularniejszych wyświetlaczy alfanumerycznych. Moduł po prostu wkładamy w złącze i powinien działać:

Podłączenie standardowego LCD.

Złącze mikroSD

Na płytce znajduje się też gniazdo dla kart mikroSD. Przetestowałem jego działanie z przykładami do mojej książki „AVR. Układy peryferyjne” – wszystko działa bez najmniejszych problemów, możemy bawić się zarówno kartami SD, jak i SDHC. Testowo odczytywałem 8 GB kartę poprzez FATFS – wszystko przebiegło bez najmniejszych problemów.

Ponieważ użyty mikrokontroler posiada sprzętowy interfejs USB wraz z moimi przykładami mamy prostą emulację RS232 poprzez USB, dzięki czemu nie musimy łączyć płytki z komputerem przy pomocy jakichkolwiek dodatkowych kabli – w zupełności wystarczy nam kabel USB, który użyłem do zasilania płytki.

Tu drobna uwaga – użyte gniazdo mikroSD odsługuje detekcję włożenia karty, lecz odpowiednie piny nie są na module podłączone do mikrokontrolera, ani wyprowadzone. Znowu – nie jest to wielka wada, większość modułów zawierających gniazda dla kart SD nie wykorzystuje detekcji karty, ale mimo wszystko szkoda. Drugi potencjalny problem – wszystkie urządzenia wykorzystujące interfejs SPI (karta SD, pamięci, przetwornik ADC) współdzielą wspólną magistralę.

Z jednej strony może to być wada, ale czytelnicy mojej najnowszej książki już wiedzą, że to żaden problem. Takie rozwiązanie ma też pewne zalety – zużywamy tylko 3 piny IO mikrokontrolera (MISO, MOSI, SCK).

Działanie

Uruchomiłem na płytce kilka kodów przykładów załączonych do moich książek o XMEGA – po kosmetycznych przeróbkach związanych z pinologią wszystko ruszyło bez problemu. Na płytce ciekawy jest sposób podłączenia mikroswitchy i LEDów – przez układy rejestrów szeregowych, dzięki czemu zwalniamy 16 pinów IO, a sterowanie zapewnia nam prosty interfejs SPI.

Jeśli to dla kogoś jest problem (IMHO takie rozwiązanie jest fajne), to producent udostępnia biblioteki, które umożliwiają nam sterowanie LEDami i odczyt mikroswitchy tak jakby były one połączone bezpośrednio do portu IO mikrokontrolera. Całkiem fajne rozwiązanie.

Podsumowanie

Nabywając eXtrino XL uzyskujemy naprawdę fajną i świetnie wykonaną płytkę. W połączeniu z modułami typu shieldy do Arduino będziemy mogli za jej pomocą potestować wiele aplikacji. Dodatkowo dzięki kompatybilności w rodzinie XMEGA przeniesienie aplikacji testowanych z XMEGA128A3U na inny, docelowy mikrokontroler z rodziny XMEGA jest banalne.

Osobiście mogę ten zakup polecić, płytka szybko się nie znudzi i z pewnością przyda się w warsztacie. IMHO jest to z pewnością bardziej atrakcyjna alternatywa od płytek Xplained XMEGA A3BU – za niższą cenę dostajemy dev-board z bogatszym wyposażeniem. Co prawda nie mamy na nim wyświetlacza graficznego LCD, lecz odpowiedni moduł można kupić za parę złotych.


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

środa, 2 lutego 2011

PCB: Metoda fotochemiczna oraz cynowanie bezprądowe


Autor: Dondu

Co jakiś czas zadajecie mi indywidualnie pytania jaką metodą wykonuję swoje niekomercyjne płytki PCB. Odpowiadam więc:


Dondu
Płytki PCB wykonuję tylko i wyłącznie metodą fotochemiczną na fabrycznie lakierowanych laminatach.


Dlaczego? Z wielu powodów, ale przede wszystkim:
  • bezproblemowe wykonywanie ścieżek o szerokości i odstępach 9mil (a nawet węższych),
  • możliwość spokojnego używania układów z wyprowadzeniami o rastrze 0,5mm,
  • mała ilość uszkodzeń ścieżek,
  • szybkość wykonania,
  • powtarzalność procesu.

9mil? Co to znaczy? To jednostka miary wynosząca 1/1000 cala. Jest ona używana do pomiarów w programach do projektowania płytek PCB, a czasami także przez producentów elementów elektronicznych w ich dokumentacji. Czasami możesz także spotkać oznaczenie mils.

Przy okazji polecam do wykorzystania program do konwersji mil na mm i odwrotnie. To malutka aplikacja "always on top" znaleziona na forum w temacie: Konwerter jednostek mils<->mm + źródło

Czasami jest bardzo pomocna:


Konwerter mils na mm.

Możesz ją pobrać w wersji skompilowanej także tutaj: Mils <-> mm konwerter (kopia)


Prawie wszystkie zdjęcia w niniejszym artykule można znacząco powiększyć wybierając "Otwórz grafikę w nowej karcie".



Case study

W niniejszym artykule nie opisuję procesu wykonywania płytek PCB tytułowymi metodami, ponieważ na ten temat jest wiele poradników w języku polskim jak i angielskim. Pokazuję natomiast efekt w postaci konkretnego przypadku, który miałem już dla Was opisać dokładnie rok temu :-)

Poniżej jedna ze stron dwustronnej płytki PCB pewnego "tajemniczego projektu kuchennego" zaprojektowana do wykonania metodą fotochemiczną w warunkach domowych, bez ponoszenia zbędnego ryzyka w zakresie ścieżek jeszcze węższych niż użyte w projekcie 11mil i odstępach między nimi (np. nóżki mikrokontrolera) około 8mil.

Polygon (rozlana masa) wykonałem w wersji hatch (siatka), a nie solid (jednolita powierzchnia) w celu umożliwienia zrobienia zdjęć podświetlonych od drugiej strony.


Projekt płytki PCB.


Projekt zawiera rozdzielne masy analogową i cyfrową:


Projekt płytki PCB - masy cyfrowa i analogowa.


co jest oczywiście zgodne z zasadami dot. pomiarów ADC.

Do wykonania projektu użyłem mikrokontroler PIC18F67K90 w obudowie TQFP 64 piny o rastrze 0,5mm. Ze wszystkich 64 pinów mikrokontrolera w projekcie wykorzystałem 62 piny.


Mikrokontroler PIC18F67K90



W dokumentacji możemy znaleźć informacje dot. wymiarów:




Na powyższym fragmencie dokumentacji (dataheet) zaznaczyłem informację dot. rastra:

Raster jest to odległość pomiędzy środkami pinów.

Raster widać na wymiarze oznaczonym małą literką e, a w tabelce gdzie wymiary podane są w milimetrach, wymiar e ma dodatkowo informację o skrócie BSC:

BSC - Basic Spacing between Centers (rozmiar pomiędzy środkami)

którą możesz często spotkać w dokumentacji różnych elementów elektronicznych.

Czyli dla naszego e=0,50 BSC [mm] oznacza raster 0,5mm, czyli 19,685mil.

W ramach ćwiczeń rozumienia rysunku i tabelek odczytaj maksymalne wymiary całego układu licząc do końców nóżek ... tak, spory to on nie jest i ma 64 piny :-)

Na podstawie rysunku i tabelki można dokładnie zaprojektować footprint (pady do przylutowania) w programie do rysowanie PCB np. Eagle. Jeżeli brakuje jakiegoś wymiaru to na pewno można go policzyć bazując na innych, zgodnie z Ogólnymi zasadami wymiarowania (kopia1, kopia2).


Footprint obudowy TQFP.




Metoda fotochemiczna

Jak już pisałem powyżej nie omawiam metody jako takiej.

Klisze wykonałem za pomocą drukarki laserowej o rodzielczości 1200dpi, na specjalnej folii do drukarek laserowych. Nie stosuj czasem zwykłej folii, bo uszkodzisz wałek drukarki!

Nie zrobiłem zdjęć płytki w trakcie jej wykonywania metodą fotochemiczną, więc załączam zdjęcie płytki wybrakowanej, której z powodu własnego błędu nie mogłem już użyć do dalszej obróbki. Tak mniej więcej wygląda płytka po naświetleniu i zastosowaniu wywoływacza:


Płytka PCB pokryta lakierem UV po naświetleniu i wywołaniu.


Wybrakowana płytka po roku czasu poniewierania się wśród odpadów na zbliżeniu wygląda następująco:


Płytka PCB pokryta lakierem UV po naświetleniu i wywołaniu.



Zastosowanie polygonu w wersji hatch pozwoliło mi na pokazanie wyglądu płytki podświetlonej od spodu:


Płytka PCB po procesie trawienia.


Na powyższym zdjęciu widać przebarwienia padów drugiej strony płytki, dokonałem więc korekty:


Płytka PCB po procesie trawienia - korekcja przebarwień.


Zdjęcie jest zrobione z umieszczoną w dolnej części przezroczystą linijką, która jest nieco porysowana stąd wydaje się, że płytka np. w obszarze oznaczonym cyfrą 5 płytka zawiera uszkodzenia (rysy). W rzeczywistości tak nie jest co widać na kolejnych zdjęciach.

Proces trawienia wykonywałem nadsiarczanem sodu (B327) przetrzymując płytkę w kąpieli nieco dłużej niż wymagał tego proces. Mierząc za pomocą programu graficznego ścieżki (na powyższym zdjęciu) i odnsząc się do 1 mm wg linijki najcieńsze ścieżki mają 9mil pomimo, że w projekcie miały 11mil. To jest efekt dłuższego przetrzymania w wytrawiaczu.

Footprint mikrokontrolera w maksymalnym zbliżeniu jakie mogłem wykonać wygląda następująco:


Płytka PCB po procesie trawienia - footprint mikrokontrolera.


a po korekcie przebarwień:


Płytka PCB po procesie trawienia - footprint mikrokontrolera po korekcji przebarwień.


Gdy powiększysz zdjęcie znajdziesz kilka uszkodzeń związanych z zarysowaniem podczas procesu od wydruku do wytrawienia oraz pojedyncze kropki wytrawione na ścieżkach.

Zarysowania kliszy lub lakieru UV:


Płytka PCB po procesie trawienia - zarysowania kliszy lub lakieru UV.



Problemy tonera na kliszy lub lakieru na laminacie:


Płytka PCB po procesie trawienia - problemy kliszy lub lakieru UV.


z czego tylko jeden jest krytyczny (strzałka czerwona). Pozostałe należy obserwować w szczególności po cynowaniu.



Cynowanie chemiczne

Kolejnym procesem jest pokrycie płytki warstwą cyny w procesie cynowania bezprądowego. Używam do tego środka AGT-086. Nie opisuję tutaj tej metody, ale polecam stronę kol. manekinen, który bardzo szczegółowo ją przedstawia.

Bezwzględnie istotne jest wypolerowanie powierzchni przed cynowaniem - używam do tego pasty polerskiej. Po tym procesie należy płytkę dokładnie odtłuścić tym bardziej, że część past polerskich zawiera wosk lub inne tłuste substancje. Zobacz krótki artykuł: Bezprądowe cynowanie laminatu

Po wykonaniu cynowania (około 5 minut w świeżo rozrobionej kąpieli) efekt jest następujący:


Płytka PCB po procesie cynowania.


podświetlając od spodu:


Płytka PCB po procesie cynowania.
Po prawej i lewej przebarwienia z taśmy klejącej
przytrzymującej płytkę podczas wykonywania zdjęcia.


pady mokrokontrolera i jego okolice oraz porównanie wcześniej wskazanych problemów:


Płytka PCB po procesie cynowania chemicznego - zaznaczone problemy.


Przerwana ścieżka (strzałka czerwona) oczywiście nie uległa naprawie. Niektóre (strzałki niebieskie) nadal są potencjalnymi problemami, ale niektóre z nich pokryły się warstwą cyny, która jest na tyle gruba, że w warunkach hobbystycznych możemy uznać ścieżkę za naprawioną (strzałki zielone).



Przylutowany mikrokontroler

A tak wygląda mikrokontroler przylutowany zwykłą lutownicą grotową z użyciem pasty do lutowania z drobinkami cyny:

PCB - przylutowany mikrokontroler.


Widać nieco zabrudzeń (włoski itp.) których do zdjęcia nie usunąłem. Montaż można oczywiście wykonać także lutownicą na gorące powietrze (hot air), ale należy uważać ponieważ powłokę cynowana chemicznie łatwo przegrzać.

Jeżeli podczas lutowania piny zostaną zwarte cyną należy użyć plecionki miedzianej, by nadmiar cyny zebrać. Czasami warto dodać nieco więcej topniku (żel lutowniczy bez cyny np. flux).

Na zdjęciu widać jak istotne jest odpowiednie wyskalowanie wydruku (na danej drukarce) np. w Eagle.


Porównanie do płytki fabrycznej

Dla porównania zestawiłem płytkę (tym razem fragmentem jej drugiej strony) z oryginalną, czytaj fabrycznie wykonaną płytką uniwersalną, o tym samym rastrze dodatkowo pokrytej soldermaską:


Porównanie płytki PCB wykonanej w warunkach domowych z płytką fabryczną - raster 0,5mm.


oczywiście linijka wprowadza dodatkowe rysy, co widać na zbliżeniu:


Porównanie płytki PCB wykonanej w warunkach domowych z płytką fabryczną - raster 0,5mm.





Podsumowanie

Metoda fotochemiczna nie jest metodą trudną. Spokojnie można ją opanować w kilka dni wykonując wstępne próby na malutkich kawałkach PCB (około 15x6mm).


Próbki różnych etapów procesu wykonywania płytki PCB.


Często dodatkowo robię footprint-y na kliszy, by móc odciąć wiele malutkich fragmencików laminatu i dokonywać prób z naświetlaniem, wywoływaniem i trawieniem.

Próby robić warto w szczególności po dłuższym okresie przerwy w wykorzystaniu rozrobionych kąpieli. Warto to także zrobić, gdy laminat jest stary lub zakupiłeś nową partię. Takie zabiegi pozwalają oszczędzić rozczarowań i dodatkowych kosztów, bo laminat z lakierem UV nie jest tani.

Skoro już o kosztach mowa, to metoda ta jest oczywiście droższa od metody termotransferu (żelazkowej), jednakże ma zalety, które opisałem na wstępie. Niewątpliwą zaletą wartą podkreślenia jest możliwość minimalizowania opracowywanych urządzeń poprzez używanie mikrokontrolerów w znacznie mniejszych obudowach i generalnie montażu SMD. To nieco redukuje koszty wykonania ponieważ relatywnie mniej laminatu zużywasz, ale nie jest to argument najistotniejszy.



Wasze doświadczenia?

Ciekawią nas Wasze doświadczenia z tą metodą oraz linki do poradników, czy filmów YT.


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

niedziela, 23 stycznia 2011

Wąsy cynowe - problem spoiw lutowniczych Pb free


Autor: shaslyk135
Redakcja: Dondu

1 lipca 2006 r. weszła w życie dyrektywa RoHS (ang. Restriction of Hazardous Substances), która miała na celu zmniejszenie ilości niebezpiecznych substancji w elektronice.

Zgodnie z nią ilość materiałów takich jak np. ołów, kadm i rtęć musi być zmniejszona do minimum (nie dotyczy to urządzeń wojskowych, lotniczych i medycznych).  Zawartość ołowiu w zwykłym stopie lutowniczym wynosi nawet  ponad 50%. W bezołowiowym nie może być to więcej niż 0,1%. Przyczynia się to do powstawania cynowych wąsów.


Czym one są?

Cynowe wąsy (ang. tin whiskers) są strukturami tworzącymi się spontanicznie na powierzchni cyny (i wielu innych metali). Zjawisko to było znane już w latach 40 XX w. i poradzono sobie z nim dodając ołów do stopu (już 3% ołowiu hamuje ich rozwój).

Wąsy mogą zewrzeć sąsiadujące ścieżki powodując wiele komplikacji i awarii. Ich kształtu nie da się konkretnie określić, czasami są proste, czasem zwinięte, innym razem zagięte.


Średnica whiskerów to średnio 1µm, długość dochodzi aż do 10mm, a obciążalność nawet ponad 10mA.


Tak rosną wąsy pod mikroskopem w zaledwie 46 godzin (!):





a tak na zdjęciach:


Wzrost wąsów cynowych.
Wzrost wąsów cynowych.
Źródło: NASA


Okoliczności powstawania cynowych wąsów nie zostały jeszcze do końca zbadane. Ich rozwój może zacząć się nawet kilka godzin po lutowaniu, choć najczęściej występuje po kilku latach. W przypadku sprzętu RTV może to mieć duże znaczenie i być przyczyną częstego psucia się urządzeń, ponieważ nie został jeszcze wynaleziony stop bezołowiowy na którym nie rosną wąsy.


Wyrastające wąsy (źródło Wikipedia).


Najgłośniejsze awarie spowodowane whiskerami

Jedną z głośniejszych spraw było zablokowanie pedałów gazu w samochodach Toyota. Powodowało to dziwne przyśpieszanie samochodów i niewielkie wypadki. Nikt nie chciał uwierzyć poszkodowanym do momentu, gdy zbadano sterownik pod mikroskopem:


Wąsy znalezione w Toyota-ch.


Okazało się, że winny był włosek o długości 1,9 mm! Zwierał on układ potencjometru powodując fałszywe odczyty. Tyle wystarczyło, żeby spowodować kolizję i narazić na utratę zdrowia lub życia.

Kolejnym znanym przypadkiem była pseudo awaria w elektrowni atomowej Millstone w Waterford. Karta pomiarowa systemu reaktora atomowego wykryła zbyt niskie ciśnienie w przewodach. Awaryjnie wyłączono reaktor, po późniejszym sprawdzeniu okazuje się, że ciśnienie jest w normie. Rozwikłanie zagadki następuje dopiero po zbadaniu karty pod mikroskopem. Winny oczywiście cynowy wąsek.


To mogło się źle skończyć.

Wszystkie te wypadki całe szczęście okazały się niegroźne, ale łatwo sobie wyobrazić co by się mogło stać, gdyby whisker wyrósł gdzie indziej.

NASA od wielu lat napotykała na problemy z wąsami i zajmowała się ich badaniem. Duża ilość zdjęć dostępna jest pod adresem: http://nepp.nasa.gov/whisker/photos/index.html



Kondensator radioodbiornika obrośnięty whiskerami.
Źródło NASA

Wąs cynowy łączący wtyk z pinem. Źródło NASA
Wąs łączący wtyk z pinem.
Źródło NASA


Gdyby nie strzałka, nie łatwo byłoby go zobaczyć nawet na powiększeniu rzędu 45x:


Wąs pomiędzy pinami złącza ZIF. Źródło: NASA


powiększmy więc do 200x:


Wąs pomiędzy pinami złącza ZIF. Źródło: NASA
Wąs pomiędzy pinami złącza ZIF.
Źródło: NASA

... i zwarcie gotowe, gdyby poszło w kierunku drugiego pinu, a nie obudowy.

A tutaj piękne zwarcie:

Zwarcie pinów. Źródło: NASA
Zwarcie pinów.
Źródło: NASA



Jak się przed tym ochronić?
  • stosować tradycyjne spoiwo zawierające Pb, czyli postępować niezgodnie z europejskim prawem :-)
  • po uszkodzeniu sprzętu dokładnie obejrzeć płytkę pod lupą i przetrzeć pędzelkiem, ponieważ whiskery łatwo się kruszą, 
  • z tego samego powodu (łatwe kruszenie) można używać myjek utrladźwiękowych,
  • można także wykorzystać sprężone powietrze,
  • mieć się na baczności i ... wykupić polisę ubezpieczeniową,
  • ... złożyć w ofierze ... tylko co lub kogo i komu?  Macie jakieś pomysły? :-) 

A tutaj ciekawostka - zniszczenie wąsa za pomocą multimetru:




I pomyśleć, że całej "wąsatej" afery by nie było, gdyby nie dyrektywa RoHS, ale oceńcie sami.

Na koniec jeszcze raz ku przestrodze:


Ciekawe, czy na PCB, ktoś zauważyłby ludzki włos
w szczególności blond? :-)


Ciekawe materiały



Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.