Skocz do zawartości

Nawyk

Użytkownicy
  • Zawartość

    2072
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    126

Posty napisane przez Nawyk


  1. No_chej, domyśliłem się o co chodzi, ale uwierz mi, że nie chcesz rad opartych na domysłach. Skoro masz problem i prosisz o pomoc, to po Twojej stronie jest zadbanie o pełen zestaw danych. Skoro wszystko jest tak samo jak w kursie, a u Ciebie jednego nie działa, to musiałeś paść ofiarą legendarnego Błędu Kompilatora, w końcu nie ma co sprawdzać innej opcji 🙂 


  2. W temacie piszesz o potencjometrze, w treści o rezystorze, potem mówisz że jak kręcisz to nic się nie zmienia, ale na porcie szeregowym masz ciągle powtarzające się zera, potem 4, 11, 24 i tak do 1023. Kodu ani schematu połączeń nie wrzuciłeś. Nawet zdjęcie mogłoby kogoś nakierować na odpowiedź. Jak więc mamy Ci pomóc?

     Przede wszystkim, jeśli robisz przykład "Prosty woltomierz", to powinienneś mieć mieć na UART wartości 0.0..5.0, a nie 0..1023. 


  3. Zgadzam się, tylko autorowi chodzi chyba przede wszystkim o aspekt edukacyjny. Metodę zawsze można potem przenieść na coś mocniejszego albo skorzystać z gotowych mechanizmów, kiedy już się zrozumie zasadę działania


  4. Ja mam jeszcze inną propozycję - co powiesz na zabawy z ArduCamem i reverse engineering bibliotek na Arduino? Biblioteki Arduino są na ogół dobrze opisane w komentarzach/w Internecie i nawet jeśli są ogólnie słabe i kiepskiej jakości, to sam proces działania można w dość prosty sposób zrozumieć na przykładzie. A potem zrobić to samemu lepiej 🙂


  5. marek1707 uprzedził mnie, kiedy szukałem zdjęć, więc nie będę się rozpisywać, tylko podrzucę foto:

    chea-line-follower-robot.thumb.jpg.659e519bb709acaf2eb856f355eba7de.jpg

    Zamiast przekładni, w "moich czasach" widywało się opony zrobione ze zwykłej gumki do ścierania. Trzeba było ją ukształtować w stożek i nadziać/nakleić na wał silnika. Bardzo mała średnica dawała wystarczający moment obrotowy, żeby ruszyć takiego małego robota.

    Przed rozkwitem Botlandu i innych tego typu sklepów, osobiście korzystałem z części Lego Technics - miałem całe kartony 🙂 Wystarczy tylko pokombinować z taką częścią:

    lego-technic-axle-pin-with-friction-ridges-lengthwise-light-bluish-gray.thumb.jpg.a00ec0026c356d8815566c852f108f93.jpg

    Czasem może się zdarzyć, że średnica wału silnika niemal idealnie pasuje w otwór powyższego adaptera. Można się nawet pokusić o klej na gorąco albo Kropelkę nalaną do środka. Oczywiście im ciaśniejsze pasowanie, tym dłużej to pochodzi. Dorobić kompatybilne z lego mocowanie i przekładnie oraz resztę napędu można zrobić w prosty sposób z klocków.

    • Lubię! 1

  6. Dnia 19.08.2018 o 12:24, mesmariusz napisał:

    Powiedz mi proszę, gdzie (żeby nie przepłacić) i jakie (żeby nie kupić, czegoś, co ani pojemności nie będzie znamionowej miało, ani nie użyję więcej niż kilka razy) kupić akumulatory ("paluszki")

    Polecam Eneloopy od Sony, tylko uwaga na podróbki z Allegro. Dostaniesz je m.in. w Media Expert. Im więcej, tym taniej.

    Jeśli chodzi o żelowe vs inne, to może Cię zainteresować mój krótki artykuł o akumulatorach w robotyce amatorskiej 😉


  7. Tylko w tych obliczeniach zakładasz, że silnik działa jak rezystor, czyli się nie obraca - czyli powinien mieć wtedy prąd szczytowy (zwarcie), a ten niby wynosi 15 A. 

    Moim zdaniem to się totalnie nie klei i można tylko gdybać co producent miał na myśli. Wkurza mnie tylko, że na stronach, które ten silnik sprzedają, nikt nie kwapił się do skorygowania opisu, spytania producenta - albo kopiuj-wklej z hobbykinga, albo strategicznie przemilczana wartość "rezystancji". 


  8. Chciałem, żeby poznanie zasady działania silnika nakierowały Cię na pewne wnioski. Jak myślisz, jak duży prąd popłynie przez uzwojenia o rezystancji rzędu 250 milionów ohmów? Odpowiedź: żaden. A raczej bliski zera. Nie wiem więc co może oznaczać taka wartość na stronie dystrybutora, bo po kiego grzyba by informowali o np. rezystancji izolacji uzwojeń, bez zaznaczenia, że to o nie chodzi? I wątpię też, żeby sprzedawali spalone silniki a w momencie reklamacji mówili "przecież parametry zgodne z opisem!" 🙂 O ile na forum nie wypowie się ktoś bardziej ogarnięty w temacie silników i nas obu nie uświadomi, to bezpiecznie bym założył, że informacja jest błędna. Rezystancja z indukcyjnością uzwojeń przydaje się do wyznaczenia tzw. stałej czasowej silnika, pomaga określić jego dynamikę (czas reakcji na zmiany prądu w uzwojeniach), możesz zasymulować jego działanie w jakimś Simulinku.


  9. Założenia całkiem słuszne, chociaż zależnie od "koszyka na baterie" możesz jeszcze potrzebować przetwornicy (stabilne źródło napięcia 5V!).

    Potrzebny moment wyliczysz z prostego mnożenia znając ciężar i długość "pałąka". Od obstawiania są inne instytucje 🙂 Pamiętaj tylko o zapasie, bo musisz pokonać m.in. tarcie i niedokładność chińskich rączek.

    Polecam zacząć od przejrzenia oferty sklepów, np. tutaj:

    https://botland.com.pl/105-moduly-radiowe

    Posortuj sobie wg ceny, bo te moduły LoRa mogą Cię niepotrzebnie odstraszyć 😉 


  10. Tak szczerze, to te pytania nie zaczynają ani nie kończą się tutaj... To są pytania, o których wiesz, a te o których jeszcze nie wiesz są znacznie gorsze 🙂 Zacząłbym od "czym jest właściwie amper i wolt" "jak działa akumulator" i "czym jest i co daje to >>Resistance<< silnika".

    Zamiast dawać Ci ryby, daję Ci wędkę i mam tylko nadzieję, że skorzystasz zamiast się zniechęcać, bo koledzy strasznie się namęczyli żeby dotarczyć względnie wyczerpujące i łatwo przyswajalne informacje jak na tacy:

    https://forbot.pl/blog/kurs-elektroniki-napiecie-prad-opor-zasilanie-id3947

    potem https://forbot.pl/blog/akumulatory-litowo-polimerowe-li-po-kompendium-id291

    https://forbot.pl/blog/silniki-elektryczne-szczotkowe-bezszczotkowe-krokowe-id2802

    To tak na start. I rozwiążą się Twoje wątpliwości.


  11. Dnia 6.08.2018 o 17:49, ThePawel1211 napisał:

    Dzięki! Niestety nie mam pojęcia co powoduje szarpanie.

    Jest kilkanaście przyczyn, jakie przychodzą mi do głowy, ale najważniejsze w Twoim przypadku to IMHO:

    • przeregulowanie w pętli sterowania pozycją (serwo za szybko chce osiągnąć zadaną pozycję, "hamuje" np. dopiero jak osiągnie pozycję - po prostu za późno)
    • szum w informacji o pozycji (potencjometry szumią i to bardzo...)
    • brak profilowania prędkości - w ramionach robotycznych o dużej inercji często stosuje się po prostu filtr na pozycję zadaną, ew. implementuje się profil trapezowy prędkości, czyli w praktyce taki "soft-start" i "soft-stop", o którym pisał MATMIC - tym się na ogół poprawia niedoróbki z punktu pierwszego 😄
    • niska sztywność konstrukcji - wyobraź sobie, ze zamiast plastikowych płytek masz gumowe pręty; w skrócie tak mniej-więcej zachowuje się każdy człon w każdym manipulatorze, tylko na mniejszą skalę; elastyczności uwzględnia się i kompensuje w modelu matematycznym manipulatora

    Na pierwszy i drugi punkt nie masz za bardzo wpływu, bo musiałbyś modyfikować samo serwo albo spróbować działać tak, jak radzi Gieneq - swoją drogą, dawno temu napisałem coś, co się może przydać, poczytaj sobie 3-ci punkt kompendium wiedzy o serwach modelarskich 🙂

    Ostatni punkt wymagałby przeróbek samej konstrukcji, a ciężko w domowych warunkach poprawić sztywność konstrukcji bez dokładania masy. Nie jesteś też raczej w stanie w domowych warunkach zrobić dokładnego modelu dla tak lekkiego manipulatora...

    Profilowanie prędkości jest jak najbardziej do zrobienia i w to bym celował na Twoim miejscu, jeśli w ogóle chcesz ten projekt rozwijać 🙂 Powodzonka!

    • Pomogłeś! 1

  12. Luzik 🙂 Pewnie masz domyślne ustawienia w PLL (dla 25 MHz zamiast dla kwarcu 8 MHz). Na APB1 (od USART2) powinieneś mieć 42 MHz

    #define PLL_M      8
    #define PLL_N      336
    #define PLL_P      2
    #define PLL_Q      7

    A tak to wygląda w całej okazałości (swoją drogą - polecam CubeMX):

    pll.thumb.jpg.80249ae47c0eacc597e195b610061ed9.jpg

    edit:

    Właśnie przyjrzałem się Twojej płytce i widzę, że tam w ogóle nie ma wlutowanego HSE 😄 W każdym razie masz coś namieszane w ustawieniach zegarka, a objawy 25/8 akurat zgadzałyby się z Twoim problemem 🙂

    • Lubię! 1

  13. Nic dziwnego, że coś takiego nie istnieje - wklejasz do M4 kod napisany dla M3. Chociaż różnic nie ma znowu tak wiele, to jednak nie uda Ci się nic zdziałać bez zaglądania do datasheeta. Porównaj sobie chociażby sposób podłączenia RCC do GPIO:

    M3 F1.thumb.jpg.4d05570db28899b08e0cce8444a2e73b.jpg

    M4 F4.thumb.jpg.01f768012176b1675bfc1d278272389b.jpg

    A tutaj masz poprawiony kod do nadawania:

    #include "stm32f4xx.h"
    
    void send_char(char c){
    	while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
    	USART_SendData(USART2, c);
    }
    
    void send_string(const char* s){
    	while (*s)
    	send_char(*s++);
    }
    
    int main(void){
    	GPIO_InitTypeDef gpio;
    	USART_InitTypeDef uart;
    
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE);
    //	RCC_APB1PeriphClockCmd(RCC_APB1Periph_AFIO, ENABLE);
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    
    
    	GPIO_StructInit(&gpio);
    	gpio.GPIO_Pin = GPIO_Pin_2;
    	gpio.GPIO_Mode = GPIO_Mode_AF;
    	GPIO_Init(GPIOA, &gpio);
    	GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
    
    	gpio.GPIO_Pin = GPIO_Pin_3;
    	gpio.GPIO_Mode = GPIO_Mode_AF;
    	GPIO_Init(GPIOA, &gpio);
    	GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
    
    	USART_StructInit(&uart);
    	uart.USART_BaudRate = 115200;
    	USART_Init(USART2, &uart);
    	USART_Cmd(USART2, ENABLE);
    
    	while (1) {
    		send_string("Hello world!\r\n");
    	}
    }

    i odbierania danych:

    #include "stm32f4xx.h"
    
    void send_char(char c){
    	while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
    	USART_SendData(USART2, c);
    }
    
    void send_string(const char* s){
    	while (*s)
    	send_char(*s++);
    }
    
    int main(void){
    	GPIO_InitTypeDef gpio;
    	USART_InitTypeDef uart;
    
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE);
    //	RCC_APB1PeriphClockCmd(RCC_APB1Periph_AFIO, ENABLE);
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    
    
    	GPIO_StructInit(&gpio);
    	gpio.GPIO_Pin = GPIO_Pin_2;
    	gpio.GPIO_Mode = GPIO_Mode_AF;
    	GPIO_Init(GPIOA, &gpio);
    	GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
    
    	gpio.GPIO_Pin = GPIO_Pin_3;
    	gpio.GPIO_Mode = GPIO_Mode_AF;
    	GPIO_Init(GPIOA, &gpio);
    	GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
    
    	USART_StructInit(&uart);
    	uart.USART_BaudRate = 115200;
    	USART_Init(USART2, &uart);
    	USART_Cmd(USART2, ENABLE);
    
    	while (1) {
    		 if (USART_GetFlagStatus(USART2, USART_FLAG_RXNE)) {
    		     char c = USART_ReceiveData(USART2);
    		     switch (c)
    		     {
    		         case 'a':
    		             send_string("Odebrano komunikat A!\r\n");
    		             break;
    		         case 'b':
    		             send_string("Odebrano komunikat B!\r\n");
    		             break;
    		         default:
    		             send_string("Nieznany komunikat:(\r\n");
    		             break;
    		     }
    		 }
    	}
    }

    Nie sprawdzałem, ale powinno działać.

    • Lubię! 1
    • Pomogłeś! 1
×
×
  • Utwórz nowe...