Skocz do zawartości

Cała aktywność

Strumień aktualizowany automatycznie     

  1. Wczoraj
  2. @Zealota Oj sorki, mój błąd przy spakowaniu plików. Zaraz poprawię. UPDATE: Teraz załącznik powinien już zawierać wszystkie pliki projektowe.
  3. W załącznikach nie ma żadnych plików źródłowych. W treści nie ma wypełnionej struktury dla timerów. W ten sposób nie da się nic wymyślić
  4. @Gieneq Hej, dostałem ale tylko potwierdzającego ze zarejestrowałem sie na forum. Powiedz gdzie szukać ściąg tych które powinny być dostępne po wpisaniu kody z zestawu? Dzięki za info S.
  5. Cześć wszystkim, Walczę co nieco z serwonapędami na płytce Discovery z STM32F407VG na pokładzie (stary model, z programatorem poprzedniej generacji). Sprawa wygląda tak, że mam serwo wieloobrotowe z enkoderem w postaci czujnika szczelinowego i tarczy (sygnał dubluję 3 razy, na razie tylko do testów, później każdy kanał sterowany będzie oddzielnie). Dokładność pozycjonowania taka sobie, ale do potrzeb projektu wystarcza. Kwestia jest taka, że serwo poruszać się ma wg wyliczonej prędkości z regulatora (jeszcze nie zaimplementowany, dopiero w planach) w przerwaniu od timera systemowego. Wartość aktualnego sterowania serwem będzie zapisywana do zmiennej globalnej. No i teraz kluczowa sprawa - chciałbym, żeby timer, na którym jest sterowane to serwo, samoczynnie zmieniał swoje wypełnienie na wartość zmiennej globalnej z obliczonym sterowaniem. Idealnym rozwiązaniem moim skromnym zdaniem byłoby użycie DMA w kierunku Memory -> Peripheral w trybie kołowym (half-word). Niestety, całość nie chce zadziałać - startuje tylko pierwszy kanał timera i w dodatku z ustawieniem domyślnym, nie zmienia swojego wypełnienia przy zmianach zmiennej przypisanej do kanału w DMA, a pozostałe nawet nie startują z domyślnymi wartościami. W załączniku wrzuciłem okrojony tylko do tej kwestii projekt testowy i projekt z CubeMXa. Poniżej kod main'a: /* Private variables ---------------------------------------------------------*/ TIM_HandleTypeDef htim4; DMA_HandleTypeDef hdma_tim4_ch2; DMA_HandleTypeDef hdma_tim4_ch1; DMA_HandleTypeDef hdma_tim4_ch3; /* USER CODE BEGIN PV */ volatile uint16_t PwmPulse = 199; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM4_Init(void); static void MX_DMA_Init(void); /* USER CODE BEGIN PFP */ (...) int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM4_Init(); MX_DMA_Init(); /* USER CODE BEGIN 2 */ // HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); // TIM4->CCR1 = PwmPulse; // HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2); // TIM4->CCR2 = PwmPulse; // HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); // TIM4->CCR3 = PwmPulse; // HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); // TIM4->CCR4 = PwmPulse; HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_1, (uint32_t*)&PwmPulse, 1); HAL_Delay(100); HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_2, (uint32_t*)&PwmPulse, 1); HAL_Delay(100); HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_3, (uint32_t*)&PwmPulse, 1); HAL_Delay(100); //HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_2, (uint32_t*)&PwmPulse, sizeof(PwmPulse)/2); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { // TIM4->CCR2 = PwmPulse; // HAL_Delay(100); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } Zakomentowana frakcja kodu bez DMA działa bez problemu i generalnie jest to awaryjna opcja, której użyję, jeśli nic z DMA nie uda mi się sensownego wypracować. No i jeszcze wygenerowane z CubeMXa funkcje konfiguracyjne dla timera i DMA: static void MX_TIM4_Init(void) { /* USER CODE BEGIN TIM4_Init 0 */ /* USER CODE END TIM4_Init 0 */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM4_Init 1 */ /* USER CODE END TIM4_Init 1 */ htim4.Instance = TIM4; htim4.Init.Prescaler = 839; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; htim4.Init.Period = 1999; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 99; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } sConfigOC.Pulse = 189; if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } sConfigOC.Pulse = 199; if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } sConfigOC.Pulse = 0; if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM4_Init 2 */ /* USER CODE END TIM4_Init 2 */ HAL_TIM_MspPostInit(&htim4); } /** * Enable DMA controller clock */ static void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Stream0_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); /* DMA1_Stream3_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); /* DMA1_Stream7_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn); } Podobny problem miałem też wcześniej, gdy rozwiązywałem zadania z kursu STM32, ale tam była to kwestia złej kierunkowości w DMA, tutaj ją sprawdziłem w Cube'ie chyba z 3 razy. Będę baaaardzo wdzięczny za wszelką pomoc w tym zakresie, przejrzenie kodu / projektu. Środowisko: SW4STM32 + STM32CubeMX Pozdrawiam Wrk_03_SERVO_LIB.zip
  6. @Overwatch witam na forum! Możesz mieć rację, bo przyczyna leży gdzieś w tym obszarze. Trzeba tylko porobić testy. Może być też problem z gniazdem na karty SD - u mnie w laptopie bywa że czegoś nie wykrywa i też trzeba posiłkować się innymi programami. Na wszelki wypadek spróbowałbym wgrać Rasbiana Strecz bo on był dedykowany do RPi3B+ i sprawdzić czy czysta karta ruszy.
  7. Ja ze swojej strony polecam pyImageSearch. Jest tam wiele darmowych materiałów, programów, głównie w obszarze Pytona i OpenCV. Jest też kurs za jedyne 500$
  8. Stawiam Pi-Hole na Raspberry Pi Zero W i postanowiłem w ramach ćwiczeń własnoręcznie stworzyć adapter USB w oparciu o dostępne na rynku rozwiązania. Znajdzie się ktoś, kto rzuci okiem, czy płytka jest zaprojektowana zgodnie ze sztuką? Poniżej załączam materiały, na których się opierałem podczas projektowania.
  9. Problem w testerze rozwiązany. Zapomniałem, że trzeba podłączyć sygnał sterujący na 0 w płytce. Ostatnie pytanie- jeśli mam taki warunek: if((digitalRead(10)==LOW && digitalRead(9)==LOW && digitalRead(7)==LOW)) { servo.attach(3); servo.write(86); delay(15);} //servo zamyka przesłone else { servo.write(90);} //servo nie działa W tym przypadku, gdy nie naciskam włącznika, serwo nie porusza się, ale cały czas płynie przez nie prąd. Czy dla serwa taka sytuacja jest bez znaczenia (pracowałoby ciągle do kilku godzin), czy lepiej pomyśleć nad tym by odłączyć zasilanie/sygnał z serwa?. edit. Ustawiłem pin serwa jako wyjście, i zamiast "ustawiać" serwo na 90 stopni to wyłączyłem sygnał. Wszystko działa idealnie i nie występują drgania. Dziękuję wszystkim za pomoc.
  10. µprog-V1.1_schematic.pdf https://www.elektroda.pl/rtvforum/topic2016257.html Witam. To mobilny programator wgrywa wsady z karty do programowanego układu a na wyświetlaczu jest postęp i menu wyboru akcji
  11. Dziś przyszło do mnie serwo- PowerHD LF-20MG-360 standard. Stworzyłem prosty program do przetestowania motoru i pojawił się problem. Przy włączeniu programu serwo chwile czeka, rusza się o kilkanaście stopni i następnie znowu czeka. Przy testowaniu zwykłego serwa analogowego zmieniało ono prawidłowo zadaną pozycję, gdy było zasilane z płytki arduino, ale gdy było zasilanie z zasilacza to się trzęsie . Do zasilania użyłem zasilacza 5,5V, 2000mA. Wcześniej, gdy chciałem przetestować serwo na moim docelowym programie to efekt był podobny. Jedynie gdy na zasilaczu zmieniłem napięcie zasilania na 2v to wtedy serwo zaczęło równo się kręcić. Czy problem z moim nowym serwem może wynikać z zasilacza? Dla pewności wstawiam kod do testowania #include <Servo.h> Servo servo; void setup() { servo.attach(9); } void loop() { servo.write(55); }
  12. Kiedyś miałem takie objawy jak opisujecie (brak bootowania, brak obrazu, czegokolwiek oprócz świecącej diody) na RPi 3B+, gdy bawiłem się we wgrywanie różnych distro na kartę pamięci. Czasami Etcher nie wgrywał obrazu dobrze, a za to obraz wgrany Rufusem śmigał bez problemu. Nie wiem czy to komukolwiek tutaj pomoże, ale warto spróbować pierw sformatować kartę Rufusem, a potem wgrać obraz którymś z tych dwóch. // o ile działacie na Windowsie.
  13. Witajcie, Skąd się uczyć jeśli chodzi o dziedzinę machine learning? są jakieś gotowe kursy?
  14. @Treker jeśli brać by tylko pod uwagę ten jeden punkt : 2) Develop a low-cost, low-powered soil sensing architecture: current precision agriculture solutions are expensive and out-of-reach to many farmers in the developing world. To zastosowanie na pewno by się znalazło. Natomiast co do GMO to jeszcze za czasów moich studiów obowiązek zamieszczania informacji na etykiecie produktu występował jeśli zawartość GMO przekraczała 5% poniżej tej wartości nie było takiego obowiązku. Obecnie dochodzi do tego , że forsowany jest projekt w , którym informacja o GMO w składzie produktu miała by nie być wymagana. Wyjątkiem miały by być produkty pochodzące z gospodarstw ekologicznych aczkolwiek w tym wypadku należało by rozgraniczyć produkty , które posiadają certyfikat gospodarstwa ekologicznego od wszelkiej maści produktów eko bio itp. Swoją drogą w ubiegłym miesiącu o ile dobrze pamiętam można było się wpisać do ankiety , w której można było wyrazić swój sprzeciw wobec takich praktyk. Osobiście nie jestem zwolennikiem GMO.
  15. Cześć Forbotowicze Nazywam się Dawid, zawodowo zajmuję się usługami IT w dużej korporacji przemysłowej. Zainteresowałem się elektroniką głównie dzięki kursom dostępnym tutaj. W końcu coś co zawsze było zawiłe wydaje się proste W poszukiwaniu nowego hobby i potencjalnie nowych umiejętności zawodowych wtłaczam sobie wiedzę do głowy w nadziei, że ładnie ogarnę ten temat. Może kiedyś uda mi się uciec z bezdusznego biura i naprawiać rzeczy. Pozdrowienia z Krakowa.
  16. @carbonitium witam na forum! Fajnie, że udało Ci się uporać z tym problemem. Czasem zdarza się, że przy produkcji coś się nie tak połączy. Zdecydowanie tak nie jest chyba że mowa o szybkości dokonywania pomiarów, to może tam być niewielkie opóźnienie.
  17. Na pożytek innych nowicjuszy zgłoszę tylko, że sondy od mojego miernika nie działały na dzień dobry. Problem rozwiązany rozebraniem (żyletką) sondy czerwonej i przelutowaniu. Okazuje się, że przy zagumowanym łączniku kątowym była naderwana i raz łączyła a raz nie. Także, miernik nie potrzebuje czasu żeby zacząć mierzyć po włączeniu np. (moja pierwsza myśl)
  18. Tak, masz rację, trochę w nietypowy sposób podałem ten luz, ale zasugerowałem się faktem, że kiedyś na innym forum ktoś rozmawiał na ten temat i właśnie tak podawali luzy przekładni i każdy wiedział o co chodzi. Wydawało mi się to zrozumiałe. Wbrew pozorom dużo łatwiej jest podać w mm, bo wystarczy na końcu promienia linijkę przystawić, aby widzieć przesunięcie. W domowych warunkach zwykłym kątomierzem raczej ciężko i bardzo niewygodnie to zmierzyć z dużą dokładnością i dlatego własnie podałem wynik w mm. Następnym razem będę bardziej szczegółowy Niestety silniki póki co muszą być DC12V ze zintegrowaną przekładnią. Przy poborze prądu do 1A moc jest wystarczająca praktycznie dla każdego modelu silnika z przekładnią jaka mnie interesuje (na wyjściu około 80-100obr/min) - układ mechaniczny jest wyważony i nie potrzebuje dużo mocy. Obroty wirnika min 6000 pozwalają na dużo bardziej elastyczne zarządzanie prędkością (czym wyższe obroty tym szerszy zakres regulacji). Projekt, w którym wykorzystuje te silniki (na razie RH158) to poniższy potworek... Tu efekt działania: Sterownik: I jako ciekawostka jak sobie do tej pory radzę z luzami przekładni: (pogłośnić audio przy oglądaniu)
  19. W tym pdfie co podesłałem na końcu jest shcemat, co prawda inna wersja Nucleo ale myslę, że będzie to podobne. Jest tam regulator opisany jako LD50, który odpowiada układowi 1117. Ale tak patrząc na schemat to nie ma możliwości aby uszkodzić coś samym zasilaniem, bo zastanawiałem się czy jednoczesne podłączenie USB i czegoś na Vin mogło spowodować uszkodzenia ale wygląda na to że nie da się. Edit: może zobacz czy zwora SB2 jest w dobrym stanie.
  20. Patrzę na schemat zasilania, poszukam jeszcze opisu "test pads" i posprawdzam napięcia może coś mi się wyklaruje. Nie mam takiej możliwości sprawdzenia karty. Ale "coś" mi mówi że to nie jest problem z kartą.
  21. Jednak znalazłem to złącze i pasuje. Ma ono średnicę wewnętrzną około 2mm, Arduino ma złącze koncentryczne 5,5/2,1 mm. Także będzie działać W razie problemów chętnie pomożemy, powodzenia w eksperymentach.
  22. To jest nucleo. Dokladnie stm32f303re. Wiem ze trzeba przelozyc zworke tylko jeszvze musze sprawdzic ktora. Chcialem sie tylko upewnic czy napiecie powyzej 5V nic nie uszkodzi i czy poprawnie podlaczam bo w sumie nie moglem znalezc nic w necie nic na temat polaczenia a czytanie dokumentacji jeszcze srednio mi idzie. Dzieki wielkie za pomoc
  23. No to faktycznie nie wygląda to najlepiej. Jeżeli ta sama karta działałaby na innym Raspberry to by potwierdzało, że z tym jest coś nie tak. Jeżeli patrzeć na zieloną diodę to może to oznaczać wiele rzeczy, tu jest lista typowych przyczyn pod śródtytułem "Red power LED is on, green LED does not flash, nothing on display". Jest tam dość sporo przyczyn ale skupiają się wokół 2 problemów: coś jest źle z kartą SD, obrazem, slotem na karty lub coś jest źle z zasilaniem - nierównomierne, niewłożona wtyczka do końca. Wydaje mi się, że może zasilacz nie jest najlepszy albo coś się stało z układem zasilającym.
  24. Niestety to wtyk 2.1 mm a Arduino ma 2.5 mm. Przepraszam. Chodzi a Warszawską inicjatywę edukacyjną. Pozdrawiam serdecznie i liczymy na obfitą pomoc ze strony Państwa.
  25. Po włączeniu zasilania zapala się dioda PWR (czerwona). Przy włożonej karcie sd pobór prądu to około 0,2A i nie dzieje się nic. Świeci się tylko czerwona dioda PWR. Żadnego sygnału wideo ani aktywności diody ACT. Porty usb bez zasilania. Przy wyjętej karcie po kilku sekundach od włączenia prąd na zasilaniu wzrasta z 0,2A do około 0,4A i na gniazda USB pojawia się +5V. Poza tym zero "aktywności". To chyba nie rokuje najlepiej.
  1. Załaduj więcej aktywności
×
×
  • Utwórz nowe...