Analogno-digitalna pretvorba Vgrajeni sistemi 2015/16 Rok Češnovar
STM32F4 in ADC imamo 3 ADC naprave (ADC1, ADC2, ADC3) vsaka naprava ima 16 vhodov 8 vhodov je vezanih na vse 3 naprave 8 vhodov je vezanih na ADC1 in ADC2 8 vhodov je vezanih samo na ADC3 vse tri naprave so povezane na vodilo APB2
Kje začeti? na kateri pin bomo povezali vhod? user manual strani 20-29 Pin PC2 je povezan na vse 3 naprave na kanalu 12 odločimo se katero napravo bomo uporabljali
Inicializacija & uporaba 1. Nastavimo pin na analogni način brez pullup uporov glej vaje prejšnjega tedna 2. Vklopimo uro naprave, nastavimo init strukturo in kličemo init funkcijo 3. uporabimo nabor funkcij, ki se nahaja v stm32f4xx_adc.c
Inicializacija Vklopimo uro RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADCx, ENABLE); Opravimo skupno inicializacijo za vse 3 naprave struktura ADC_CommonInitTypeDef ADC_Mode ADC_TwoSamplingDelay ADC_DMAAccessMode ADC_Prescaler void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct)
ADC_Mode če uporabljamo zgolj 1 ADC napravo Independent Mode Ostali načini so namenjeni skupnemu delu/prekrivanju vseh treh ADC naprav
ADC_TwoSamplingDelay Zamik (delay) med dvema vzorčenjema signala Odvisno od vrste vhodnega signala
ADC_DMAAccessMode Uporaba DMA DMA moramo še spoznati zaenkrat Disabled
ADC_Prescaler Nastavimo delilnik ure odvisno od vrste signala in želja
Inicializacije posamezne naprave Struktura ADC_InitTypeDef ADC_Resolution ADC_ScanConvMode ADC_ContinuousConvMode ADC_ExternalTrigConvEdge ADC_DataAlign ADC_NbrOfConversion Init funkcija void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct) prvi argument: ADC1, ADC2, ADC3 -> kazalec na strukturo
ADC_Resolution Izberemo število bitov za pretvorbo odvisno od signala
ADC_ScanConvMode & ADC_ContinuousConvMode Scan conversion mode beremo več kanalov ENABLE beremo 1 kanal - DISABLE ContinuousConvMode analgno-digitalno pretvorbo izvedemo samo ob klicih funkcije DISABLE analgno-digitalna pretvorba se v ozadju dogaja neprenehoma ENABLE
Ostale lastnosti ADC init strukture ADC_ExternalTrigConvEdge namenjena zunanjemu proženju ADC pretvorbe zaenkrat ADC_ExternalTrigConvEdge_None ADC_DataAlign poravnava podatkov pri pretvorbi ADC_NbrOfConversion število pretvorb (običajno enaka številu uporabljenih kanalov)
Funkcije ADC knjižnice ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) 1. argument: ADC1, ADC2, ADC3 2. argument: ADC_Channel_0,, ADC_Channel_15 3. argument: zaporedna številka pretvorbe izbranega kanala 4. argument: čas vzorčenja signala (odvisno od signala)
Funkcije ADC knjižnice ADC_Cmd(ADCx, ENABLE/DISABLE); vklopimo ADC napravo ADC_SoftwareStartConv(ADCx); startamo konverzijo(e) če uporabljamo Continuous mode kličemo samo enkrat, sicer vsakič ko želimo novo vrednost ADC_GetConversionValue(ADC1) vrne zadnjo vrednost pretvorbe
Funkcije ADC knjižnice ADC_GetFlagStatus(ADCx, Flag) vrne stanje zastavice zaenkrat nas bo zanimala zastavica, ki označuje konec zadnje zahtevane pretvorbe ADC_FLAG_EOC Primer uporabe: ADC_SoftwareStartConv(ADC1); while(!adc_getflagstatus(adc1, ADC_FLAG_EOC)) ; a=adc_getconversionvalue(adc1);
Naloga Ob pritisku gumba preberi vrednost analognega senzorja in spremeni stanje na led diodah glede na prebrano vrednost photoresistor: glede na jakost svetlobe spreminjaj št. prižganih LED merilec razdalje: glede na razdaljo spreminjaj št. prižganih LED Vezava gumba in photoresistorja je prikazana na naslednji prosojnicah
Gumb 3.3V
photoresistor +3.3V