330 likes | 482 Views
32-bitni mikrokontroleri i primena - MS1BMP 6 . deo. 2013 Nenad Jovičić. ADC. 12-bitna rezolucija. Nekoliko različitih izvora prekida: End of Conversion, End of Injected Conversion, Analog Watchdog Event. Jednostruki i kontiualni mod konverzije. Automatska konverzija sekvence kanala.
E N D
32-bitni mikrokontroleri i primena - MS1BMP6. deo 2013 Nenad Jovičić
ADC • 12-bitna rezolucija. • Nekoliko različitih izvora prekida: End of Conversion, End of Injected Conversion, Analog Watchdog Event. • Jednostruki i kontiualni mod konverzije. • Automatska konverzija sekvence kanala. • Auto-kalibracija. • Vreme konverzije programabilno za svaki kanal ponaosob. • Eksterni trigeri. • Diskontinulani mod konverzije. • Vreme konverzije do 1.7uS na 24MHz taktu. • DMA prenos podržan. • Veza sa integrisanim analognim temperaturnim senzorom.
Modovi konverzije • Prema načinu startovanja konverzije modovi su: • Jednostruki mod (single conversion) • Posle svake konverzije ADC se zaustavlja uz generisanje dozvoljenih prekida ili DMA zahteva. • Kontinulani mod (continuous conversion) • Nakon konverzije generišu se prekidi ili DMA zahtevi ali se automatski startuje nova konverzija. • Diskontinualni mod (discontinuous conversion) • Može se zadati konačan broj konverzija (n<=8) nakon čijeg izvršavanja se ADC zaustavlja.
Modovi konverzije • Prema broju kanala koji se konvertuju modovi su: • Single channel – konvertuje se samo jedan kanal i to u single ili kontinualnom modu • Scan mode – konvertuje se sekvenca kanala, i to i jednostrukom modu (single conversion), kontinualnom modu ili diskontinulanom modu. U ovom modu moguće je definisati do 16 proizvoljnih rageluarnih kanala ili do 4 injektovana kanala.
Multichannel (scan), single conversion mode • Sukcesivnakonverzija više kanala, pričemu se za svakukonverziju može da se definiše različito vreme semplovanja.
Injektovana konverzija (Injected conversion) • Postoji mogućnost da se nakon ili u toku konverzije regularne grupe kanala ubaci tj. injektuje grupa injektovanih kanala. • Injekcija može da bude podešena tako da se aktivira samo na eksterni triger, ili može da se vrši nakon svake konverzije regularne grupe. Na ovaj način je moguće očitavati do 20 analognih naponskih ulaza.
Projekat ADC • Periodično se korišćenjem osnovnog tajmera TIM7 generiše prekid u kome se startuje ADC i očitava rezultat konverzije. • Osnovni tajmer radi sa učestanošću160kHz • AD konvertor je podešen tako da radi u najbržem modu u kome semplovanje traje 1.5 ciklus. Vrsi se akvizicija kanala 14.
Projekat ADC Glavni program - Inicijalizacija takt Pogledati datasheet!!! port ADC NVIC
Inicijalizacija ADC-a ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1,ADC_SampleTime_1Cycles5); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1));
Konfiguracija regularnog kanala ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_1Cycles5);
Glavni program – inicijalizacija tamjera TIM7 Inicijalizacija svih tajmera se odvija preko istih funkcija!!!!
Inicijalizacija tajmera • TIM_TimeBaseInit(TIM7, &TIM_TimeBaseInitStruct); U zavisnosti od izabranog tajmera neki delovi se ne inicijalizuju!!! A neki se inicijalizuju...
Inicijalizacija prekida tajmera • TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);
Pokretanje tajmera TIM_Cmd(TIM7,ENABLE);
DMA • 12 kanala (7 za DMA1 kontrleri 5 za DMA2 kontroler) • SMT32F100 imajedankontroler DMA1 • Mogući su prenosi u u svim kombinacijama između meorije i periferija. • Podržan prenos za tajmere, ADC, SPI, I2Cs, USART i DAC • Podržan prenos 8, 16 i 32-bitnih podataka. • Podržani cirkularni baferi!
DMA prenos • Prenos se sastoji iz 4 faze • Kanali su prioritirani sa 4 različita prioriteta.
Preklapanje DMA i CPU • DMA se preklapa sa CPU-om tako da nikada ne dolazi do potpunog blokiranja jednog ili drugog.
DMA prekidi • Svaki DMA kanal ima tri prekida: • Transfer završen • Transfer na pola • Greška u transferu • fe
Projekat ADC_DMA • AD konvertor je podešen tako da radi u najbržem modu u kome semplovanje traje 1.5 ciklus. Vrši se akvizicija kanala 14. ADC nakon svake konverzije generiše DMA zahtev. • Tajmer TIM1 radi u PWM modu i trigeruje ADC. • DMA konvertor prenosi podatke iz ADC-a u kružni bafer u memoriji.
Inicijalizacija DMA U main-u mora da se deklariše adresa, jer se simbol iz stm32f10x_adc.c ne vidi!!! Da je kojim slučajem definisan u stm32f10x_adc.h ne bi bilo potrebe
Zadatak • Podesiti DMA kontoler tako da se generiše prekid nakon prenosa celog jednog bafera. • Hint: • potražiti u fajlu stm32f10x_dma.h funkcije koje podešavaju prekid. • Napisati prekidnu rutinu • Brisati flag u prekidnoj rutini • ....