Skocz do zawartości

skibos

Użytkownicy
  • Zawartość

    15
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O skibos

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Tak wiem, Piny odpowiadające za czujniki zadeklarowałem jako przerwania, przerwania zostały włączone w cubemx. Chodzi o kwestię programową aby program w kółko wykonywał funkcję left() tzn. robot kręcił się w lewo a gdy zobaczy przeszkodę na przednim czujniku przerwanie tak jakby zatrzyma te kręcenie i dopóki będzie na czujniku stan niski to będzie wykonywał funkcję forward(), identycznie z czujnikiem prawym tylko funkcja right(). Jeśli stan urośnie z niskiego na wysoki na przerwaniu to funkcja znów wróci do pierwotnego działania tzn kręcenia w lewo ( wykonywania funkcji left()).
  2. Witam, czy jest ktoś mi w stanie objaśnić idee przerwań w stm32? Mam czujniki które zmieniają stan pinu z wysokiego na niski kiedy czujnik będzie widział jakiś obiekt, jeśli nie pin będzie w stanie wysokim. Mam napisane funkcje do mostka ustawiające odpowiednio stany pinów aby silniki jechały w odpowiednim kierunku te funkcje to: forward(), right(), left(). Chciałbym aby cały czas wykonywała się funkcja left(), natomiast gdy czujnik zauważy przeszkodę tzn. pin zmieni się ze stanu wysokiego na niski to program się przerwał i jeśli np. zauważy czujnik przedni to wykonał funkcję forward(),
  3. skibos

    STM32 F042K6 przerwania

    No niestety chyba tak jak to napisałeś nie działa. Znalazłem coś takiego: void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET){ if (PIN==1) {//Rising so pressed /* do something */ } if (PIN==0) {//Falling so released /* do something else */ } EXTI_ClearITPendingBit(EXTI_Line0); } } jednak jak to zaimplementować pod te konkretne piny ? Dodam że czujnik jeśli wykryje obiekt daje na pinie stan niski , jeśli nic nie wykrywa pozostaje na stanie wysokim. Do tego wszystkiego chciałbym później jeszcze móc się odwoływać poprzez przyciski z np taktykami tzn
  4. /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics. * All rights reserved.</center></h2> * * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy
  5. skibos

    STM32 F042K6 kontrola PWM

    Tak na arduino wszystko działa perfekcyjnie, stby ustawiony na wysoki zaraz na początku. /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics. * All rights reserved.</center></h2> * * This software component is licensed by ST under BSD 3-Clause license, * the "License"
  6. skibos

    STM32 F042K6 kontrola PWM

    Podłączyłem diodę, napisałem fora żeby wypełnienie sygnału rosło od 0 do 100%, a następnie malało od 100% do 0%. Działa to bo dioda się płynnie rozjaśnia i gaśnie. Jednakże po przełączeniu się na silniki i mostek TB6612FNG nie działa to jak dioda. Korzystam z CubeMX i generalnie tylko dopisałem to i dioda działała tak jak miała: /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); /* USER CODE END 2 */ for: for (int pwm=0;pwm<=255;pwm++) { __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pwm); HAL_Delay(10); } HAL_Delay(400); for (
  7. Witam. Chciałbym uzyskać częstotliwość PWM około 31250Hz. Jakie wartości Prescaler, Period oraz Pulse powinienem przypisać aby otrzymać taką częstotliwość. Dodam że chciałbym zarządzać wypełnieniem w zależności od warunku instrukcji warunkowej z wykorzystaniem makra _HAL_TIM_SET_COMPARE, jednakże chciałbym aby były to wartości od 0 do 100 odpowiadające od 0% do 100% wypełnienia. Czy da rade coś takiego zrobić ? Załączam screen z konfiguracji zegarów z MX Cube. Czy zegary są ustawione dobrze ? Dodam że zależy mi na tym aby układ przeliczał wartości z czujników szybciej niż arduino aczkolwi
  8. na F446RE również próbowałem i również nic.
  9. Próbowałem również podłączyć do TIM1 kanał 1 na pinie PA8 i TIM1 kanał 4 na pinie PA11. Niestety żaden z silników nie wystartował. #include "stm32f0xx.h" int main(void) { HAL_Init(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef gpio; gpio.Pin = (GPIO_PIN_0 | GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5); gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &gpio); while (1) { forward(); } } /* FUNKCJE OBSŁUGUJĄCE KIERUNEK SILNIKÓW */ void forward(){ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GP
  10. Ok. Napisałem program do punktu drugiego jak napisałeś. #include "stm32f0xx.h" int main(void) { HAL_Init(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef gpio; gpio.Pin = (GPIO_PIN_0 | GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5); gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &gpio); while (1) { forward(); } } /* FUNKCJE OBSŁUGUJĄCE KIERUNEK SILNIKÓW */ void forward(){ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET); HAL_G
  11. Próbowałem jednakże nie działa to tak jak powinno. Może zacznę od początku. Posiadam: - mostek L298N - https://botland.com.pl/sterowniki-silnikow-moduly/3164-l298n-dwukanalowy-sterownik-silnikow-modul-12v2a.html?search_query=l298n&results=6 - STM32 F042K6 - https://www.st.com/en/evaluation-tools/nucleo-f042k6.html Kwestia podłączenia: Na płytce od mostka są piny ENA, In1, In2, In3, In4, ENB. Domyślnie na ENA i ENB są zworki żeby silniki zachowywały prędkość 100% na stanie wysokim i 0% na stanie niskim. In'y podłączam sobie do PB0, PB7, PB6, PB1. Czy na ENA i ENB mają by
  12. #include "stm32f0xx.h" TIM_HandleTypeDef tim3; TIM_HandleTypeDef tim2; int main(void) { HAL_Init(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef gpio; gpio.Pin = (GPIO_PIN_0 | GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_1); gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &gpio); gpio.Pin = GPIO_PIN_6 | GPIO_PIN_0; gpio.Mode = GPIO_MODE_AF_PP; gpio.Pull = GPIO_NOPULL; gpio.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &gpio); __HAL_RCC_TIM3_CLK_ENABLE(); tim3.Instance = TIM3; tim3.
  13. Działa bo najpierw bawiłem się tym mostkiem w arduino i wszystko działało, następnie zacząłem czytać właśnie ten kurs i tym sposobem stworzyłem ten kod w workbenchu który również działa bo go testowałem. Gdy podłączyłem do stma i na te dwa piny z PWM dałem zworki, wgrałem kod to z 100% szybkością kręciły się do przodu. Czytałem ten artykuł który wkleiłeś jednakże wiele mi on nie mówi. Z której dokładnie części powinienem skorzystać aby uzyskać możliwość sterowania prędkością od np. 1 do 100 jednostek? Rozumiem, że ta część kodu jest stała: GPIO_InitTypeDef gpio; gpio.Mode = GPIO_MOD
  14. Witam, są to dopiero moje początki z STM32 Nucleo więc na wstępie proszę o wyrozumiałość. Posiadam model Nucleo 32 F042K6 oraz mostek L298n. Na mostku znajduje się 6 pinów ( ENA, In1, In2, In3, In4, ENB). Powiem na przykładzie arduino, gdy na ENA i ENB jest zworka prędkość jest albo 100% albo 0% w zależności od stanów. Gdy wyjmę zworki podłączałem te 2 piny do analogowych ( ENA, ENB), In'y do cyfrowych i wywoływałem funkcje w arduino: void forward(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ENA, 200); //wartosc od 100 do 255 digitalWrite(in3, HIGH); digitalWrite
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.