Skocz do zawartości

Kamilekkk

Użytkownicy
  • Zawartość

    10
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O Kamilekkk

  • Ranga
    2/10
  1. @Gieneq klamrowe, chociaż na początku były też takie z wysuwanym haczykiem i też się nic nie działo
  2. @Treker Być może jest taka opcja, ale raczej bardzo mało prawdopodobna. Jakie mogą być inne przyczyny takiej sytuacji?
  3. @Treker Tak, był podłączony kabel do tego pinu oraz do pinu od uziemienia w celu zobaczenia tego sygnału na oscyloskopie
  4. Dzień Dobry, Piszę w związku z dość nietypowym pytaniem - czy możliwe jest spalenie mikrokontrolera poprzez próbę nadania "za dużego" sygnału sinusoidalnego na jednym z pinów? Dokładnie chodzi o to, że skonfigurowałem odpowiedni pin w swojej płytce (pin PA4, SMTM32F429ZIT6) aby móc wysłać sygnał sinusoidalny na rampie (w celu odpowiedniego zasilania lasera). Płytkę kilkukrotnie podłączałem na oscyloskop aby móc podejrzeć ten sygnał i nic złego się nie działo, aż pewnego razu 3-4 sekundy po podłączeniu płytki do zasilania przestała ona świecić i stała się niewykrywalna przez komputer na każdym wejściu USB. WIem, że gdybym próbował podać za duże napięcie z jakiegoś zewnętrzengo urządzenia na jakiś pin to na pewno mógłbym spalić płytkę, ale czy próba generacji podobnego sygnału jak wspomniałem wyżej również mogła spowodować uszkodzenie? Czy może przyczyną mogło się okazać coś innego?
  5. /* 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 of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; DAC_HandleTypeDef hdac; DMA_HandleTypeDef hdma_dac1; TIM_HandleTypeDef htim6; /* USER CODE BEGIN PV */ uint16_t PomiarADC; float vsense; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_Init(void); static void MX_ADC1_Init(void); static void MX_DAC_Init(void); static void MX_TIM6_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ const uint8_t sineTable [256] = { 127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240, 242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223, 221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78, 76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31, 33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124}; /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ 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_DMA_Init(); MX_ADC1_Init(); MX_DAC_Init(); MX_TIM6_Init(); /* USER CODE BEGIN 2 */ HAL_ADC_Start(&hadc1); const float supplyvoltage = 3.0; const float adcresolution = 4095.0; HAL_TIM_Base_Start(&htim6); HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)sineTable, 256, DAC_ALIGN_8B_R); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) { PomiarADC = HAL_ADC_GetValue(&hadc1); vsense = (supplyvoltage*PomiarADC)/adcresolution; HAL_ADC_Start(&hadc1); } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 25; RCC_OscInitStruct.PLL.PLLN = 168; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /** * @brief ADC1 Initialization Function * @param None * @retval None */ static void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init 0 */ /* USER CODE END ADC1_Init 0 */ ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init 1 */ /* USER CODE END ADC1_Init 1 */ /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV8; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. */ sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ /* USER CODE END ADC1_Init 2 */ } /** * @brief DAC Initialization Function * @param None * @retval None */ static void MX_DAC_Init(void) { /* USER CODE BEGIN DAC_Init 0 */ /* USER CODE END DAC_Init 0 */ DAC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN DAC_Init 1 */ /* USER CODE END DAC_Init 1 */ /** DAC Initialization */ hdac.Instance = DAC; if (HAL_DAC_Init(&hdac) != HAL_OK) { Error_Handler(); } /** DAC channel OUT1 config */ sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO; sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN DAC_Init 2 */ /* USER CODE END DAC_Init 2 */ } /** * @brief TIM6 Initialization Function * @param None * @retval None */ static void MX_TIM6_Init(void) { /* USER CODE BEGIN TIM6_Init 0 */ /* USER CODE END TIM6_Init 0 */ TIM_MasterConfigTypeDef sMasterConfig = {0}; /* USER CODE BEGIN TIM6_Init 1 */ /* USER CODE END TIM6_Init 1 */ htim6.Instance = TIM6; htim6.Init.Prescaler = 42-1; htim6.Init.CounterMode = TIM_COUNTERMODE_UP; htim6.Init.Period = 0; htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim6) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM6_Init 2 */ /* USER CODE END TIM6_Init 2 */ } /** * Enable DMA controller clock */ static void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Stream5_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ @FlyingDutch oto kod mojego programu na podstawie poradnika z YT, do którego podałem wyżej link. Co do nadania tego sygnału to istotne jest to co znajduję się przy "User Code Begin 0" oraz "User Code Begin 2" (tutaj nie wszystko - niektore linie jak się pewnie domyślacie są od pomiaru napięcia.). Reszta jest od wspomnianego napięcia, do którego póki co nie mam pytań. Jak zwykle z góry dziękuję za pomoc!
  6. @FlyingDutch bardzo dziękuję za pomoc oraz opisanie jasno co mogę zrobić by taką sinusoidę uzyskać! Na pewno w wolnej chwili skorzystam z rozwiązania, które mi podałeś! Na ten moment jednak mam inne pytanie - chcąc uzyskać syngał sinusoidalny o częstotliwości 5kHz posłużyłem się poradnikiem, który znalazłem na YT (link: watch?v=uIoAkbAtc2s). Niestety, w 4:25 kiedy Pan tłumaczy ustawienia timera zgubiłem się. W "Clock Configuration" na APB1 mamy 42MHz. W ustawieniach timera Pan z poradnika w "Prescaler" wspisuje 42-1 po czym mówi, że to minus 1 jest konieczne, ze względu, że oznacza ono dzielenie przez dwa. Koniec końców wspisuje 42-1 i mówi, że to będzie 42 podzielić przez 42 i wychodzi 1MHz. On tam dalej jeszcze zmienia "Counter Period" aby uzyskać ostatecznie 100kHz (czyli wpisuje 10-1). Ja "Counter Period" zostawiłem bez zmian (pozostawiłem zero) oczekując, że będę miał ten 1MHz na wjściu z tego względu, że dalej według poradnika moja częstotliwość będzie zależeć od liczby wartości w tablicy. Ja mam w swojej tablicy 256 wartości, a więc 1MHz = 1000000Hz. Czyli mając w tablicy 256 wartośći powinienem uzyskać częstotliwość sinusa mniej niż 4kHz. (Według poradnika dzielę to co mam na wyjściu przez liczbę elementów w tablicy). Po bezproblemowym skompilowaniu kodu, wgraniu na płytkę i podłączeniu do oscyloskopu, aby zobaczyć sygnał, nic nie byłem w stanie ujrzeć. Co pominąłem ważnego w tej kwestii? Mam nadzieję, ze wystarczająco jasno się wyraziłem, jeżeli nie proszę o reprymendę w razie wypadku, oraz o pomoc i wyjaśnienie co jest nie tak. Z góry dziękuję!
  7. Rozumiem, że muszę skonfigurowac odpowiedni pin na DAC oraz ustawić zegar procesora tak, aby podał na ten pin sygnał o częstotliwości, którą ustawię? W jaki sposób mogę to zrobić? Syngnał, który chcę otrzymać na pinie skonfigurowanym pod DAC (PA4) to 5kHz (sinusoida). Posępując w ten sposób, że z panelu "pinout & configuration" odszukuję w zakładce "system core" RCC i ustawiam HSE na "crystal/ceramic resonator", później w panelu "clock configuration" zaznaczam opcję HSE przy "PLL source mux", a przy "system clock mux" zaznaczam PLLCLK" i ostatecznie w okienku pod HCLK wpisuje 0.005, ponieważ podaję tam w MHz, to wyskakuje że nie można w ten sposób - zostają zmienione ustawienia w tym palenu i najmniejsza częstotliwość, jaką mogę ustawić to 31.25kHz. Jeżeli coś napisałem niejasno, lub to co zrobiłem to totalne błądzenie - proszę o reprymendę Bardzo proszę o pomoc, z góry dziękuję!
  8. Dzień dobry, Posiadam mikrokontroler STM32F429ZIT6. Potrzebuję wygenerować sygnał sinusoidalny o zadanej częstotliwości oraz amplitudzie na jednym z pinów, tak aby podłączony zewnętrzy układ (laser) zaświecił się. Jeżeli chodzi o kwestie elektroniki i jej programowania jestem całkowicie zielony. Staram się posiłkować kursem odnośnie STM32F4, który jest dostępny na forum, lecz niewiele mi to rozjaśnia. O ile dobrze rozumiem przy pomocy PWM jestem w stanie wygenerować sygnał, ale prostokątny. Czy jest jakaś możliwość, aby móc zrobić z niego sygnał sinusoidalny? A jeżeli nie, w jaki sposób mógłbym tego dokonać? Druga sprawa, to taka, że potrzebuję odebrać sygnał (w tym przypadku zmierzyć napięcie) z zewnętrzengo czujnika, który również chcę podłączyć do któregoś z pinów. Tutaj powinienem skonfigurować odpowiedni pin na ADC zgadza się? Bardzo prosiłbym o udzielenie pomocy, z góry dziękuję!
  9. @Treker mój plik .hex waży 12kb. Od razu przepraszam, że dopiero teraz wspominam o tym, ale w poprzednim poście totalnie o tym zapomniałem. Posiadam płytkę STM32F429ZIT6, taka z wyświetlaczem od razu. Domyślam się, że juz w Cube powinienem wybrać właśnie taką. Tak też zrobiłem, dalej praktycznie to samo co w poradniku robiłem - PD15 na output i dalej ten sam kod w odpowiednim miejscu do tego przeznaczonym. Nie napotkałem żadnych błędów po drodze. Po wgraniu programu na płyktę również nie pokazały się żadne błędy, ale dioda nie świeci się. Mam rozumieć, że inny pin należy skonfigurować aby zaświecić jakąś diodą w mojej płytce? Czy błąd może leżeć gdzieś indziej?
  10. Dzień dobry Dokładnie postępując jak to jest pokazane w kursie napotkałem pewien problem. Jak wyżej ktoś pisał, można wgrywać plik .hex, więc tak też uczyniłem. Nie zauważyłem po drodze żadnych błędów, jednak nie zauważyłem aby jakakolwiek dioda zaświeciła się na niebiesko. Nie mam pojęcia gdzie może być błąd, spróbować postąpić z tym co pisali inni wyżej - zainstalować starszą wersję Cuba i wtedy spróbować?
×
×
  • Utwórz nowe...