top03

Projekt Radioactive@Home

tworzony przez członków drużyny BOINC@Poland ma za zadanie stworzyć globalną mapę promieniowania gamma obejmującą jak największy obszar świata za pomocą czujników promieniowania podłączonych do komputerów i działających przy wykorzystaniu platformy BOINC.Projekt jest całkowicie niekomercyjny, udział w projekcje jest bezpłatny (z wyłączeniem kosztów detektora). A oprogramowanie będzie publikowane na licencji GNU General Public License (GPL).

Paypal Donation

Nowy projekt czujnika

Jakiś czas temu powstał pomysł zaprojektowania alternatywnej czujki do projektu Radioactive@Home. Dotychczasowa sprawiała czasem drobne problemy, więc postanowiłem zmierzyć się z problemem i zaprojektować własne rozwiązanie. Niestety jestem ostatnio dość mocno zawalony robotą i pracę odbywały się małymi kroczkami wieczorami. Aktualnie prototyp jest już na etapie, w którym była możliwość podłączenia go pod projekt, więc najwyższa pora opublikować schematy i trochę opisać jego budowę.

1.   Analiza tematu
Bolączką dotychczasowej czujki jest USB, które realizowane jest softwarowo przy pomocy bibliotek vUSB na procesor AVR. Parę razy otarłem się o to rozwiązanie i sprawiało ono problemy przy niektórych bardziej wybrednych portach USB, dlatego chciałbym zaproponować zastosowanie mikrokontrolera, który ma wbudowany interfejs sprzętowy USB. Wybór padł na PIC18F14K50, który posiada taki interfejs USB. Jest to prosty mikrokontroler microchip’a którego cena nie jest wygórowana i zasoby ma całkiem przyzwoite, dodatkowo producent udostępnia biblioteki do obsługi USB wraz z przykładami.  Bazując na przykładach możemy bardzo szybko poradzić sobie z zbudowaniem układu, który detektowanym jest po USB jako HID, nie wymagające sterowników i umożliwia sterowanie LED z aplikacji na PC. Do tych przykładów mamy dobrze okomentowane kody, warto było to wykorzystać i nie pisać z palca obsługi USB.
Kolejnym problemem dotychczasowej czujki jest przetwornica, zastosowany układ MC34063 czasem zachowuje się bardzo dziwnie w takiej konfiguracji. Przeglądając dokumentację do wybranego mikrokontrolera wpadł mi do głowy pomysł, aby sam mikrokontroler sterował kluczem przetwornicy, próby wypadły bardzo obiecująco, dlatego dalej rozwijałem to rozwiązanie.

2.   Budowa

Schemat czujnika

Aktualnie prototyp nie przewiduje innego źródła zasilania niż 5V z portu USB, z czasem zostanie dodana opcja zasilania bateryjnego. Napięcie 5V z portu USB poprzez filtry ferrytowe podawane jest na mikrokontroler VCC5CPU oraz na analogowy człon detekcji impulsów VCC5OP. Dodatkowo przez bezpiecznik polimerowy F1 napięcie 5V podane jest na człon klucza przetwornicy VCC5DCDC, bezpiecznik ten zabezpiecza nas przed przeciążeniem linii zasilnia portu USB w przypadku zablokowania się przetwornicy z włączonym kluczem, podczas pisania oprogramowania nie raz udawało mi się taką sytuację wygenerować  ;). Kondensatory C8 i C9 filtrują wewnętrzne zasilanie USB mikrokontrolera. Początkowo prototyp na zasilaniu nie posiadał filtrów ferrytowych, a kondensatory sprowadzały się do 10uF ceramika przy procku,  10u ceramika przy przetwornicy oraz 10uF przy wzmacniaczu operacyjnym, to działało stabilnie! Ale żeby nie przeginać umieściłem na schemacie trochę bardziej rozbudowane filtry.
Czujka posiada standardowy wyświetlacz LCD 2x16, oraz diodę LED, która zastąpiła brzęczyk, który robił się męczący z czasem. W kolejnym prototypie zostanie umieszczony brzęczyk. Podświetlanie LCD jest na stałe włączone, ale w kolejnej wersji pewnie pojawi się możliwość sterowania nim. Samo podłączenie tych elementów nie wymaga wyjaśnień, w kolejnej wersji aby zaoszczędzić wyprowadzenia mikrokontrolera wyświetlacz zostanie podłączony przy pomocy 74HCT595 lub podobnego rejestru przesuwnego.
Linie portu USB są podłączone standardowo wg dokumentacji, element D1 jest opcjonalny i zabezpiecza linie portu przed przepięciami. Trochę niefortunnie zastosowany mikrokontroler ma port USB współdzielony z liniami programowania ICSP, co trochę utrudniało testowanie USB. Do programowania mikrokontrolera możemy zatasować programatory ICD2, ICD3, PICkit2 lub jego klony, PICkit 3. Teoretycznie aktualizacja oprogramowania może się odbywać się poprzez port USB, ale nie testowałem tego, gdyż wymaga to umieszczenie w kodzie bootloadera, którego działanie nie jest dla mnie jeszcze jasne.

zasilanie czujnika

Czujka posiada przetwornicę DC/DC zbudowaną na mikrokontrolerze, wbudowany blok PWM steruje kluczem przetwornicy, wypełnienie PWM jest regulowane programowo na podstawie pomiaru napięcia wyjściowego, oczywiście napięcie 400V jest wcześniej zmniejszane dzielnikiem R4, R5, R6, C13 do wartości tolerowanych przez wejścia przetwornika ADC. Dodatkowo mierzone jest napięcie na rezystorze pomiarowym R18, oprogramowanie w ten sposób sprawdza prąd płynący przez klucz. Udało się też wykorzystać ciekawą funkcjonalność mikrokontrolera, ma on wbudowane komparatory, które mogą wyłączać wyjście PWM sprzętowo, jeśli napięcie przekroczy zadaną wartość. Jest to jeszcze jedno zabezpieczenie, które zabezpiecza nas przed za dużym prądem na kluczu.  Softwarowe sterowanie przetwornicą daje nam spore możliwości, można dowolnie dopieszczać algorytmy regulacji, w zależności od warunków i zastosowań. Przykładowo udało się stworzyć algorytm, który przy trochę większych tętnieniach zredukował średni prąd klucza do średnio 2,5-3mA! W kolejnej wersji, w której będzie możliwość zasilania z innego napięcia dodany będzie pomiar tego napięcia, wtedy algorytmy przetwornicy będą mogły dobierać maksymalny poziomy wypełnienia PWM, tak aby uniknąć nasycenia trafa oraz niestabilności. Pomiar 5V z USB też się przyda, gdyż będzie można będzie wykryć małą wydajność portu USB i zmienić sposób sterowania kluczem przetwornicy.
Człon detekcji impulsów jest kopią członu zastosowaną w oryginalnej czujce zwiększyłem tylko wartości C15, gdyż wydawała mi się za mała, rozbudowałem też filtr zasilania 400V. Impulsy po detekcji i uformowaniu kierowane są na wejście wewnętrznego licznika T1 mikrokontrolera.

3.   Oprogramowanie
Oprogramowanie LCD, przetwornicy nie nastręczało problemów, schody zaczęły się przy USB.  Na początku temat komunikacji po USB nie wydawał się skomplikowany, z przykładów korzystając bardzo szybko powstała wersja, która przy pomocy aplikacji okienkowej wyświetlała pomiary na PC. Problemy zaczęły się, gdy postanowiłem zrobić czujkę zgodną z dotychczasową. Przykłady microchipa wykorzystywały dodatkowe endpointy do komunikacji, a czujka projektu działała na raportach endpointa EP0. Okazało się, że bez zapoznania się ze specyfikacją USB nie uda się to zrobić. Po paru wieczorach z pomocą TJM udało się to uruchomić, ale kod bibliotek USB znam na pamięć  :). Uzyskanie zgodności z dotychczasową czujką było niezłym wyzwaniem, taki trochę „reverse engineering”, gdyż musiałem poznać kod czujki v2.01 na AVR, oraz aplikacji projektu.

4.   Co dalej
Czujka jest w fazie mocno prototypowej, działa już 4 dobę stabilnie z projektem. Na dniach postaram się zaprojektować PCB i zlecić wykonanie kilku lub kilkunastu płytek, prototypy rozdam do testowania. Po udanych testach warto będzie się zająć tematem VID/PID gdyż teraz czujka zgłasza się na takich jak oryginalana, a docelowo nie może na nich działać, temat ten krzyszp obiecał pociągnąć. W przyszłości postaram się też podjąć temat bardziej wypasionych wersji.

Ryszard Korczyk