Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

#embedded

Fanatyk

w ELEKTRONIKA

9piorunów

Burza mózgów. Kalibracja żyroskopu. Robiliście kiedyś?

Bardziej chodzi o to, jak uzyskać konkretne punkty pomiarowe potrzebne do utworzenia równania kalibracyjnego. W przypadku akcelerometru sprawa jest prosta, można chociażby postawić urządzenie "w pionie" i powinniśmy na jednej osi otrzymać 1g, potem to urządzenie położyć i powinniśmy mieć 0g, potem można je położyć do góry nogami i powinniśmy otrzymać -1g. Wszystkie odchyły od tych wartości używamy do kalibracji.

Ale co z żyroskopem? Urządzenie trzeba obracać ze stałą prędkością. No i co można użyć w tym celu? Najlepiej niskim kosztem xD

Pomysły póki co są 2 - wysokiej klasy urządzenie referencyjne, ale miało być tanio, to z tanich rzeczy można położyć diwajsa na obracającej się płycie w gramofonie. Jeszcze jakby mieć płytę z której grany jest dźwięk o stałej częstotliwości, to odchyły w częstotliwości tego dźwięku przy odtwarzaniu można używać do określania rzeczywistej szybkości z jaką obraca się płyta.

Fanatyk0piorunów

@ZohanTSW Niektóre gramofony mają stroboskop, na który możesz patrzeć, albo nagrywać w celu sprawdzenia odchylenia prędkości. Z reguły takie modele mają też regulację prędkości, i możesz sobie pokrętłem ją dostosować w miarę dokładnie.

Fanatyk0piorunów

@LondoMollari no właśnie, i taki z regulacją byłby świetny do tego.

Szukam ewentualnie jeszcze innych rzeczy które się obracają ze stałą, znaną prędkością

Fanatyk0piorunów

@LondoMollari głównym powodem poszukiwania alternatyw jest brak gramofonu xDDD

Kosmonauta1piorunów

@ZohanTSW Wkrętarka? Chociaż licho wie jak to zamontować.

Lider1piorunów

@ZohanTSW

> Szukam ewentualnie jeszcze innych rzeczy które się obracają ze stałą, znaną prędkością

Silniki krokowe z talerzem z kołem zamachowym

Fanatyk0piorunów

@m_h spoko pomysł, może nawet gdzieś w dokumentacji jest napisane ile ma RPM

Fanatyk0piorunów

@Felonious_Gru to jest dobre, można otrzymać w miarę dokładne wyniki

Lider2piorunów

@ZohanTSW przede wszystkim to nie potrzebujesz kalibrować typowego imu, bo nawet takie po kilkanaście złotych są kalibrowane fabrycznie

Po drugie większym problemem jest szum pomiarowy, ktory z czasem się kumuluje. Całkowanie jest bezlitosne.

Fanatyk0piorunów

@Felonious_Gru allan variance, filtry kalmana i jakoś to będzie ( ͡° ͜ʖ ͡°)

Fanatyk0piorunów

> głównym powodem poszukiwania alternatyw jest brak gramofonu xDDD

@ZohanTSW Jakiś tani, popsuty, bez wkładki kup, byle by się kręcił.

Lider0piorunów

@LondoMollari nawet nie wiesz, jak bardzo nie trzymają tempa tanie granofony xD

Fanatyk0piorunów

@Felonious_Gru W sumie nie sprecyzowałem - tani, znaczy się stary, ale przyzwoitej firmy, a nie chińszczyzna.

Mam starego Duala, i cackałem się z nim dobrych parę dni w sumie, aby go dobrze wystroić (głównie pod kątem antiskatingu). Więc wiem, ale też wiem, że się da, o ile ktoś nie jest audiofilem.

Twórca0piorunów

Bardzo zaciekawił mnie Twój temat, po co Ci to, do czego to wykorzystujesz?

Fanatyk0piorunów

@kajak98 pozycjonowanie urządzenia. Powiedzmy, że będzie z siebie wypluwać aktualną orientację w przestrzeni, a ja będę mógł to wizualizować w komputerze. Masz na ekranie sześcian, który się obraca zgodnie z tym jak obrócisz przedmiot trzymany w dłoni. Tak działa np. PlayStation Move czy kontrolery VR. Do tego trzeba skalibrować żyroskop i akcelerometr.

Pokaż więcej komentarzy (20)

Wirtuoz

w Hydepark

8piorunów

Problem: stacyjka w skuterze nie styka.
Rozwiązanie 1: Rozebrać stacyjkę, przeczyścić styki.
Rozwiązanie 2: Kupić nową stacyjkę.
Rozwiązanie 3: Złożyć mikrokontroler i kilka przekaźników, żeby skuter można było odpalić z telefonu xD

https://www.youtube.com/watch?v=pyHPsmfl0o4

Więcej informacji tutaj: https://crm.wyobraz.net/article-25-skuterowy-starter-wstep.html

Gruba ryba3piorunów

@shiranai wszystko super, tylko uważałbym z takimi rozwiązaniami, bo boty ruskie, chińskie i amerykańskie lubią sobie przeskanować porty i wysłać losowy payload. Chyba że jakoś inaczej się łączysz niż przez internet?

Wirtuoz4piorunów

@wombatDaiquiri Bluetooth, konieczne sparowanie, a kod do parowania wyświetla się na ekranie w tej pomarańczowej kostce. Bez fizycznego dostępu się nie uda, a jak go masz to równie dobrze możesz kabelki zewrzeć i odpalić tak.
Jestem wyczulony na bezpieczeństwo, ale dobrze, że zwracasz uwagę ( ͡° ͜ʖ ͡°)

Gruba ryba3piorunów

@shiranai najs 👌 ciężko ocenić w internecie kto się bawi bo się bawi, a kto podchodzi do tematu na poważnie, ale obu by mi było szkoda gdyby ich zabił botnet. Postaram się zapamiętać żeby w kolejnych postach raczej dopytywać niż próbować doradzać. Sama konstrukcja imponująca

Lider3piorunów
Pokaż więcej komentarzy (6)

Fanatyk

w Memy

35piorunów

Kosmonauta0piorunów

Gdzie więzienie?

Fanatyk1piorunów

@Legendary_Weaponsmith to jak upalisz klocka

Fanatyk3piorunów

@Legendary_Weaponsmith doskonałe pytanie. Nigdy nie nie zastanawiałem nad tym, bo nie projektuję PCB. Znalazłem informację że w mikrokontrolerach jako punkty odniesienia używa się VSS i VSSA czyli masa cyfrowa i masa analogowa. Pozwala to na ograniczanie zakłóceń między układami cyfrowymi i analogowymi

Pokaż więcej komentarzy (4)

Kosmonauta

w Programowanie

8piorunów

Cześć,

Jest tu ktoś z branży embedded i może podzielić się wiedzą jak teraz wygląda rynek pracy? Chciałbym zmienić pracę i obserwuję niewielką ilość ofert która trafia na rynek. Wiadomo, styczeń nie jest najlepszym miesiącem na zmianę pracy ale czy będzie lepiej?

Kosmonauta4piorunów

+14 lat doświadczenia (bring up hw od cegły do customizowalnego linuxa, c, rust inne dziadostwa). Szukałem rok temu, zajeło mi to 8 miesięcy. Teraz tylko przeglądam dla sportu ale gadając ze znajomymi mówią że jest ciężko.

Kosmonauta0piorunów

@m_h już byłem na kilku rozmowach. Pula pytań jest ogromna i dotyczy wielu obszarów. Dostaję jasną odpowiedź że dobierają kandydatów prawie na 100% dopasowanych pod stanowisko/stos/framework.

Pokaż więcej komentarzy (9)

Fanatyk

w Programowanie

15piorunów

Jest jakaś d⁎⁎a na rynku. Wysłałem ponad 10 CV i jeszcze nawet nikt nie oddzwonił xD od dwóch tygodni!

Mistrz9piorunów

@ZohanTSW trzeba było się zająć uczciwą pracą a nie klikaniem w kaputer to byś nie narzekał tera

( ͡~ ͜ʖ ͡°)

Gruba ryba3piorunów

Gdzie ten słynny rynek pracownika

Gruba ryba3piorunów

@ipoqi rynek pracownika dla juniorow i crudziarzy skonczyl sie ponad rok temu

Pokaż więcej komentarzy (16)

Inspirator

w Technologia

5piorunów

WifiManager status update

Udało mi się naprawić pare bugów i dodać do servera obsługę przez web socket. Dodalem funkcjonalność listowania dostępnych sieci wifi na stronce i aktualnie wygląda to jak na zdjeciu. Niestety się to nie ładuje po pierwszym wczytaniu strony a dopiero po kliknięciu przycisku "refresh". Problemem jest to że frameork twierdzi że podaje mu zły uchwyt do serwera i nie może znaleźć deskryptora soketu, który jest z nim powiązany. Dziwne ... Wiem, że w requeście, odpowiedzialny za inicjaliwoanie handshaku, który przychodzi od klienta(przeglądarki) jest uchwyt jakiegoś serwera ale zakładałem że jest to tem sam uchwyt, który został mi zwrócony jak tworzyłem instancje serwera? Czyżby to był bug frameworku ? Nie wiem. Dokumentacji do tego nie ma i zostaje mi tylko analiza kodu bibliotecznego 😒
Następnymi krokami będą:

* dodanie obsługi "custom parametrów" ( na wzór tego co oferuje wifiManager od tzapu)
* minifikacja stronki ( ogólnie liba zajmuje ponad 1mb i musze to zoptymaliwoać pamięciowo ale na początek zaczne od tego)
* dodanie logera na stronce ( taki bonus bo inne wifiManagery tego nie mają)

Jakie inne funkcjonalności moge jeszcze dodać ? Co ma konkurencja, lub czego nie ma a powinna mieć? Na koniec ankieta.

   

Czy w przypadku esp32(4mb flashu) 1mb zajęte przez wifiManagera to ZA dużo

  • Tak50%
  • Nie17%
  • Nie wiem33%

18 głosów

Gruba ryba

w Programowanie

4piorunów

Uruchamiam STM32F103C8, a konkretnie EXTI na liniach PA0 ... PA4. Siedzą na tych pinach zwykłe przełączniki typu pushbutton. Rozwikłałem reference manual na tyle, że jedno przerwanie działa, ale inne mimo takiej samej składni przy każdym pinie już nie chcą.

GPIO ustawiam:
>GPIOA->CRL &= ~GPIO_CRL_CNF0_0; // floating input to pull-down
>GPIOA->CRL |= GPIO_CRL_CNF0_1;
Puszczam zegar do EXTI (w tym procku AFIO):
>RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
Zdejmuję maskę z interesujących pinów:
>EXTI->IMR |= EXTI_IMR_MR0 | EXTI_IMR_MR1 | EXTI_IMR_MR2 | EXTI_IMR_MR3 | EXTI_IMR_MR4;
Ustawiam reakcję na zbocze narastające:
>EXTI->RTSR |= EXTI_RTSR_TR0 | EXTI_RTSR_TR1 | EXTI_RTSR_TR2 | EXTI_RTSR_TR3 | EXTI_RTSR_TR4;
Dodaję priorytety przerwania i uruchamiam przerwania (tu tylko po jednym żeby nie mnożyć):
>NVIC_SetPriority(EXTI0_IRQn, 1);
>NVIC_EnableIRQ(EXTI0_IRQn);
Przykładowe przerwanie:
>__attribute__((section(".after_vectors"))) void EXTI0_IRQHandler()
>{
>   printf("++ \\r\\n");
>   EXTI->PR |= EXTI_PR_PR0;
>}

Co bym nie robił tak działa tylko jedno przerwanie i to z PA2. Wiązać pinów z EXTI niby nie muszę (po resecie akurat się zgrywają), ale robię to dla pewności, nie widzę już gdzie szukać. W komentarzu dla czytelności wrzucam cały kod okrojony do obsługi EXTI.
Co mogę robić źle albo gdzie szukać? Do debugowania mam UART i LEDa ( ͡° ͜ʖ ͡°)

 

Gruba ryba0piorunów

>static void gpio_init(void)
>{
>   RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN;
>   RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
>
>   // BUT_CANC (PA0)
>   GPIOA->CRL &= ~GPIO_CRL_CNF0_0; // floating input to pull-down
>   GPIOA->CRL |= GPIO_CRL_CNF0_1;
>
>   // (PA1)
>   GPIOA->CRL &= ~GPIO_CRL_CNF1_0; // floating input to pull-down
>   GPIOA->CRL |= GPIO_CRL_CNF1_1;
>
>   // (PA2)
>   GPIOA->CRL &= ~GPIO_CRL_CNF2_0; // floating input to pull-down
>   GPIOA->CRL |= GPIO_CRL_CNF2_1;
>
>   // (PA3)
>   GPIOA->CRL &= ~GPIO_CRL_CNF3_0; // floating input to pull-down
>   GPIOA->CRL |= GPIO_CRL_CNF3_1;
>
>   // (PA4)
>   GPIOA->CRL &= ~GPIO_CRL_CNF4_0; // floating input to pull-down
>   GPIOA->CRL |= GPIO_CRL_CNF4_1;
>}
>
>static void exti_init(void)
>{
>   RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
>   EXTI->IMR |= EXTI_IMR_MR0 | EXTI_IMR_MR1 | EXTI_IMR_MR2 | EXTI_IMR_MR3 | EXTI_IMR_MR4;
>   EXTI->RTSR |= EXTI_RTSR_TR0 | EXTI_RTSR_TR1 | EXTI_RTSR_TR2 | EXTI_RTSR_TR3 | EXTI_RTSR_TR4;
>
>   // connect pin to interrupt
>   AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PA;
>   AFIO->EXTICR[1] |= AFIO_EXTICR1_EXTI1_PA;
>   AFIO->EXTICR[2] |= AFIO_EXTICR1_EXTI2_PA;
>   AFIO->EXTICR[3] |= AFIO_EXTICR1_EXTI3_PA;
>   AFIO->EXTICR[0] |= AFIO_EXTICR2_EXTI4_PA;
>
>   NVIC_SetPriority(EXTI0_IRQn, 1);
>   NVIC_SetPriority(EXTI1_IRQn, 2);
>   NVIC_SetPriority(EXTI2_IRQn, 2);
>   NVIC_SetPriority(EXTI3_IRQn, 1);
>   NVIC_SetPriority(EXTI4_IRQn, 1);
>   NVIC_EnableIRQ(EXTI0_IRQn);
>   NVIC_EnableIRQ(EXTI1_IRQn);
>   NVIC_EnableIRQ(EXTI2_IRQn);
>   NVIC_EnableIRQ(EXTI3_IRQn);
>   NVIC_EnableIRQ(EXTI4_IRQn);
>}
>
>__attribute__((section(".after_vectors"))) void EXTI0_IRQHandler()
>{
>   EXTI->PR |= EXTI_PR_PR0;
>}
>
>__attribute__((section(".after_vectors"))) void EXTI1_IRQHandler()
>{
>   EXTI->PR |= EXTI_PR_PR1;
>}
>
>__attribute__((section(".after_vectors"))) void EXTI2_IRQHandler()
>{
>   EXTI->PR |= EXTI_PR_PR2;
>}
>
>__attribute__((section(".after_vectors"))) void EXTI3_IRQHandler()
>{
>   EXTI->PR |= EXTI_PR_PR3;
>}
>
>__attribute__((section(".after_vectors"))) void EXTI4_IRQHandler()
>{
>   EXTI->PR |= EXTI_PR_PR4;
>}
Mam nadzieję, że formatowanie przetrwa.

Tytan2piorunów

Nie zeby to cos zmienilo (bo to wszystko sa zera) ale EXTI0...3 sa w AFIO->EXTICR[0] a EXTI4 w AFIO->EXTICR[1].

W ramach debugowania sprobuj wywolac przerwanie programowe ustawiajac bity w rejestrze EXTI->SWIER. To pomoze Ci znalezc czy problem jest po stronie EXTI / NVIC / CPU czy konfiguracji GPIO. Sprawdz tez, prosta petla, czy czytanie pinu GPIO i pokazywanie go na LEDzie dziala dla wszystkich pieciu. Najgorzej jest spedzic wieczor debugujac program jak problem jest sprzetowy.

Gruba ryba0piorunów

@Skylark dzięki. Jutrzejsze popołudnie zapowiada się zatem pod znakiem debugu, oby skutecznego.
EXTICR[0] i EXTICR[1] próbowałem wcześniej, ale też nie chodziło. Nie zapuściłem żadnego SVN, to tak zostało : )
Jak na razie spędziłem kilka dobrych posiedzeń nad szukaniem przyczyny całkowitego niedziałania nawet zwykłego blinky, a wyszło że to był jakiś pokopany CMSIS, choć wprost pobrany ze źródła.

Gruba ryba0piorunów

@Skylark przerwania programowanie wywołują się. Problem polega na tym, że na dwóch pinach zamiast 3V3 z pullupa rezystorem 10k pojawia mi się jedynie 0,7 V. Poprawiałem na nich diody, a że są w obudowie SOD323, to może jedną - dwie odwrotnie wlutowałem. Napięcie pasuje ładnie do złącza p-n.
No albo coś w kodzie, ale przy ctrl+c/v to raczej nie powinno tak się stać.

Pokaż więcej komentarzy (9)