Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kurs STM32 - #6 - Pomiar napięcia, przetwornik ADC

Autor Wiadomość
Komentator 




Posty: 865
Otrzymał 17 piw(a)
Wysłany: 08-10-2015, 10:38   Kurs STM32 - #6 - Pomiar napięcia, przetwornik ADC

KursSTM32_6
Tym razem poznamy bliżej działanie przetwornika analogowo-cyfrowego. Za jego pomocą będziemy mogli zmierzyć napięcie na wejściu układu. Podstawowa wiedza o ADC konieczna jest nie tylko przy budowie robotów. Peryferia te używane są w większości systemów, które mają czujniki.
UWAGA, to tylko wstęp!
Dalsza część artykułu dostępna jest na darmowym blogu Forbota.

Kliknij, aby przeczytać całość!


Poniżej znajdują się komentarze naszych użytkowników powiązane z tym artykułem.


Przeczytałeś artykuł? Dodaj komentarz!
Postaw piwo autorowi tego posta
 
 
Lukaszm 



Posty: 399
Pomógł: 15 razy
Otrzymał 13 piw(a)
Skąd: Warszawa
Programuję w:
C, C++
Należę do:
Sekcja Rakietowa SKA
Wysłany: 27-02-2016, 14:57   

Mam pytanie związane z zad. 6.1, chciałbym się upewnić czy dobrze rozumiem: wzór na wyliczenie częstotliwości próbkowania ADC to

gdzie N to ilość cykli zegara ADC na pomiar, tak?

Postaw piwo autorowi tego posta
 
 
bresio95 



Posty: 2
Wysłany: 24-11-2016, 10:54   

Witam mam pytanie odnoście uzyskiwania wyników pomiaru napięcia referencyjnego.
Pobrałem program Tera Term 4.92 i po wybraniu odpowiedniego portu: COM3: STMicroelectronics STLink Virtual COM Port (COM3) otrzymuję takie wyniki:



W kursie forbota wszystko się ładnie wyświetla, a u mnie jak widać. Szukałem odpowiedzi w Internecie lecz bez skutku.

Postaw piwo autorowi tego posta
 
 
liebenthal 



Posty: 1
Wysłany: 26-11-2016, 23:30   

bresio95, maliem to samo. upewnij sie, ze w zakladce setup/serial port masz ustawione baud rate na 11520.

Postaw piwo autorowi tego posta
 
 
Lukaszm 



Posty: 399
Pomógł: 15 razy
Otrzymał 13 piw(a)
Skąd: Warszawa
Programuję w:
C, C++
Należę do:
Sekcja Rakietowa SKA
Wysłany: 27-11-2016, 08:40   

Cytat:
11520

Na pewno?

Postaw piwo autorowi tego posta
 
 
bresio95 



Posty: 2
Wysłany: 29-11-2016, 14:26   

Dzięki liebenthal i Lukaszm, działa na 115200, zabrakło jednego zera ;)

Ostatnio zmieniony przez bresio95 29-11-2016, 14:27, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
argens 



Posty: 4
Skąd: Herford
Wysłany: 13-12-2016, 08:42   Zad 6.2

Włącza diodę, jeśli pada za mało światła na fotorezystor.

Kod programu: Zaznacz cały
#include "stm32f10x.h"
#include <stdio.h>

void send_char(char c)
{
 while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
 USART_SendData(USART2, c);
}

int __io_putchar(int c)
{
 if (c=='\n')
 send_char('\r');
 send_char(c);
 return c;
}

int main(void)
{
 GPIO_InitTypeDef gpio;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

 GPIO_StructInit(&gpio);

 gpio.GPIO_Pin = GPIO_Pin_0;
 gpio.GPIO_Mode = GPIO_Mode_AIN;
 GPIO_Init(GPIOA, &gpio);

 gpio.GPIO_Pin = GPIO_Pin_2;
 gpio.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(GPIOA, &gpio);

 gpio.GPIO_Pin = GPIO_Pin_3;
 gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &gpio);

 gpio.GPIO_Pin = GPIO_Pin_13;
 gpio.GPIO_Mode = GPIO_Mode_IPU;
 GPIO_Init(GPIOC, &gpio);

 GPIO_StructInit(&gpio);
 gpio.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|
                         GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
 gpio.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOC, &gpio);

 USART_InitTypeDef uart;

 USART_StructInit(&uart);
 uart.USART_BaudRate = 115200;
 USART_Init(USART2, &uart);
 USART_Cmd(USART2, ENABLE);

 ADC_InitTypeDef adc;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
 RCC_ADCCLKConfig(RCC_PCLK2_Div6);                    //dzielnik napiecia, zeby zegar (64 MHz) zmniejszyc ponizej 14 MHz)

 ADC_StructInit(&adc);
 adc.ADC_ContinuousConvMode = ENABLE;
 adc.ADC_NbrOfChannel = 1;
 adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
 ADC_Init(ADC1, &adc);

 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_71Cycles5);    //Ustawienie kanalu wejsciowego (kanal 0 multipleksera)
 ADC_Cmd(ADC1, ENABLE);

 ADC_ResetCalibration(ADC1);                        //autokalibracja przetwornika
 while (ADC_GetResetCalibrationStatus(ADC1));

 ADC_StartCalibration(ADC1);
 while (ADC_GetCalibrationStatus(ADC1));

 ADC_TempSensorVrefintCmd(ENABLE);                    //wlaczenie napiecia referencyjnego
 ADC_SoftwareStartConvCmd(ADC1, ENABLE);

 while (1)
 {
     uint16_t adc = ADC_GetConversionValue(ADC1);        //wyslanie wyniku po UART
     printf("Adc = %d (%.3fV)\r\n", adc, adc * 3.3f / 4096.0f);

     if (adc <= 3000)                                //wlacza diode, jesli za malo swiatla pada
     {
         GPIO_SetBits(GPIOC, GPIO_Pin_0);
     }

     else
     {
         GPIO_ResetBits(GPIOC, GPIO_Pin_0);
     }

 }
}

Ostatnio zmieniony przez argens 13-12-2016, 08:47, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Qwazi 



Posty: 12
Wysłany: 18-05-2017, 09:43   

Mam dość głupie, ale ważne dla mnie pytanie.
Skąd wartość napięcia referencyjnego 1.2V? Mógłby mi ktoś to wytłumaczyć? Szukam w dokumentacji ale nigdzie tej informacji znaleźć nie mogę (zapewne szukam źle).

Postaw piwo autorowi tego posta
 
 
Elvis 



Posty: 1172
Pomógł: 83 razy
Otrzymał 212 piw(a)
Skąd: wawa
Programuję w:
C, asm
Wysłany: 18-05-2017, 10:07   


Postaw piwo autorowi tego posta
 
 
Szwagier90 



Posty: 7
Otrzymał 2 piw(a)
Programuję w:
C, C++, Python
Wysłany: 17-06-2017, 20:10   

Mam mały problem / wątpliwość. Po włączeniu konwersji VRef, wartość jaka jest odczytywana na moim DiscoveryF0 to 1690+-, gdy tymczasem tutaj jest opisane, że powinno być 1490+-. Wg noty katalogowej procesora znajdującego się na mojej płytce, napięcie VRef powinno być takie samo jak w tym kursie. Co może być nie tak?

Postaw piwo autorowi tego posta
 
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Kurs STM32 - #3 - Pł... Kurs STM32 - #5 - Ko... Kurs STM32 - #1 - Za... Kurs STM32 - #2 - Po...
lub przeszukaj forum po wybranych tagach: artykul, automatyka, elektronika, poradnik, robotyka


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki