Page 3 of 11

Lądowanie Falcon Heavy od strony technicznej

W zeszłym tygodniu cały świat mówił o Elonie Musku i o SpaceX, a wszystko za sprawą startu rakiety Falcon Heavy, który odbył się 6 lutego 2018. Największe wrażenie na wszystkich wywarło synchroniczne lądowanie dwóch bocznych rakiet. Przy okazji – wiecie, że SpaceX wcale nie wykonało takiego lądowania jako pierwsze? New Shepard firmy Blue Origin należącej do Jeffa Bezosa było wcześniej, tylko widocznie mają gorszy marketing. Dzięki studiowaniu automatyki mogłem od razu docenić kunszt inżynierów projektujących system sterowania. Postaram się wytłumaczyć z jakimi problemami musieli się zmierzyć. To tylko króciutkie wprowadzenie do ogromnego tematu jakim jest teoria sterowania, więc będę stosował pewne uproszczenia. Ale na początek polecam obejrzeć jeszcze raz nagranie z lądowania.

Continue reading

Nowy projekt płytki robota

Podczas próby zamontowania wszystkich czujników ścian okazało się, że aktualny projekt płytki nie przewidywał miejsca na uchwyty z drukarki 3D. Potrzebuję więc zmian w projekcie PCB i nowej wersji płytki. Decyzję ułatwił fakt, że wylała mi się woda na biurko i oczywiście zalała robota. Po osuszeniu nie chciał działać, ale poleżał jeszcze przez noc i teraz się uruchamia normalnie. W każdym razie nowa wersja płytki jest potrzebna. Tym bardziej, że mam jeszcze kilka mniejszych zmian do wprowadzenia. Dzisiaj opiszę planowane zmiany.

Continue reading

Kalibracja czujnika ściany

Czujnik ściany, którego zamontowanie i uruchomienie opisywałem poprzednio, daje pomiary w woltach wyrażonych w jednostkach ADC (zakres 0-4095 odpowiada 0 – 3.3 V). Taka wartość nie jest szczególnie przydatna, dopiero po konwersji na odległość w milimetrach może być wykorzystana do nawigacji w labiryncie.

Continue reading

Procedura ochrony baterii LiPol

Do tej pory zepsute lipole zdarzały mi się co kilka miesięcy. Zawsze scenariusz był taki sam. Co jakiś czas sprawdzałem miernikiem napięcie na baterii i wszystko było w porządku. Nagle robot przestaje działać. Nie wiem co jest powodem i próbuję zdebugować, ale nic się nie udaje. Dopiero po jakimś czasie sprawdzam napięcie na baterii i jest już rozładowana grubo poniżej limitu. Próbuję jeszcze ją podładować, ale się nie udaje. Kolejny pakiet do wyrzucenia. Jednak od dziś to się zmieni. Teraz mój soft jest wyposażony w procedurę ochrony baterii i nie dopuści do nadmiernego rozładowania. W tym artykule opiszę dokładnie jak działa ta procedura.

Continue reading

Czujniki ścian – pierwsze starcie

Po dłuższej przerwie wracam do prac nad micromousem. Została mi do zrobienia jeszcze ostatnia część sprzętowa – czujniki ścian. Roboty jest dosyć sporo, więc nie udało mi się wszystkiego machnąć za jednym podejściem. Przy okazji jak zwykle wynikły nieprzewidziane problemy.

Continue reading

Watchdog w środowisku wielowątkowym

W poprzednim artykule omówiłem działanie watchdoga i zastosowanie w prostych aplikacjach zawierających całą obsługę w pętli głównej. Dzisiaj zajmiemy się częściej spotykanym, ale i trudniejszym, problemem – implementacją watchdoga w aplikacjach wielowątkowych.

Continue reading

Watchdog timer

Każdy, kto miał do czynienia z elektroniką wie, że jeśli urządzenie przestało działać, należy je zresetować. W niektórych systemach robienie tego ręcznie nie jest możliwe. Przyczyną może być trudny, czy wręcz niemożliwy, dostęp dla operatora np. w przypadku sondy kosmicznej. Są też przypadki, gdy czas potrzebny na zauważenie usterki i ręczny reset jest zbyt długi np. w przypadku aparatury medycznej podtrzymującej życie. W takich sytuacjach z pomocą przychodzi nam watchdog timer.

Continue reading

Estymowanie czasu

W dzisiejszym artykule omawiam tajemną sztukę estymowania czasu. Wiele osób ma do siebie pretensje, że nie potrafi poprawnie przewidzieć wymaganego czasu na zadanie i projekt. Prawdopodobnie zapominają oni jakie jest znaczenie słowa estymata. Aby rozjaśnić temat wychodzę od statystyki i pewnych faktów o estymatorach, a następnie formułuję wnioski dotyczące estymowania czasu.  Nie należy tego traktować jako żadne tezy naukowe, tylko zwykłe dostrzeżenie analogii. W dalszej części te pseudonaukowe rozważania zderzają się z rzeczywistością i opisuję częste problemy z estymacją czasu.

Continue reading

Exceptiony w mikrokontrolerach

Kiedy w programie na PC nastąpi exception, aplikacja zakończy się z błędem. W skrajnym przypadku dostaniemy blue screena i komputer się zresetuje. Wyjątki są obsługiwane przez system operacyjny. W mikrokontrolerach nie mamy dostępu do takich zaawansowanych funkcjonalności. Jednak w dalszym ciągu możemy wykonać dzielenie przez 0 lub odwołać się do null pointera. W tym artykule omówię w jaki sposób obsługiwać exceptiony w mikrokontrolerach. Zacznę od ogólnej procedury, następnie skupię się na detalach specyficznych dla procesorów PIC32 i Cortex-M.

Continue reading

O wskaźnikach i rzutowaniu w C

Zmienne programu są w pamięci reprezentowane jako pewien ciąg bitów. Dla komputera nie ma znaczenia, czy ten ciąg to liczba, string, struktura, czy cokolwiek innego. Pisząc programy definiujemy typy zmiennych i to na te typy rzutowane są wartości bitowe.

Języki wyższego poziomu jak np. C#, czy Python oddzielają tą implementację za pewną warstwą abstrakcji. Twórcy tych języków doszli do wniosku, że program nie powinien polegać na konkretnej reprezentacji bitowej. Możemy oczywiście za pomocą odpowiednich funkcji uzyskać dostęp do takiej bitowej reprezentacji, ale czynność ta celowo została utrudniona.

C jest jednak starszym językiem wyznającym zasadę, że programista wie co robi. Dlatego w C mamy łatwy dostęp do reprezentacji bitowej. Możemy używać wskaźników, czy rzutować typy na inne. Efektem jest większa wydajność wynikowych programów za cenę wolniejszego developmentu. Sprawdzanie błędów w C jest bardzo ubogie i nawet doświadczony programista może łatwo strzelić sobie w stopę.

W tym wpisie pokażę kilka potencjalnie niebezpiecznych fragmentów kodu oraz omówię jak radzi sobie z nimi standard MISRA C oraz jak to rozwiązano w C++.

Continue reading

© 2018 ucgosu.pl

Theme by Anders NorénUp ↑