390 likes | 585 Views
MS1BMP. 32-bitni mikrokontroleri i primena Part 4. – Tajmeri & ADC. Autor : Nenad Jovičić. Tajmeri TIM12, TIM13, TIM14. 16-bitni brojač na gore . 16-bitni preskaler za ulazni takt.
E N D
MS1BMP 32-bitni mikrokontroleri i primena Part 4. – Tajmeri & ADC Autor: NenadJovičić
Tajmeri TIM12, TIM13, TIM14 • 16-bitni brojač na gore. • 16-bitni preskaler za ulazni takt. • 1 (tim13 I tim 14) ili 2 (tim12) nezavisna kanala koji mogu da rade u izlaznom (output comapre), ulazno (input capture), PWM ili pojedinačnom impulsnom modu. • Mogućnost sinhronizacije sa ostalim tajmerima. • Prekid zahtev za sledeće događaje: • Input capture • Output compare • Reload tajmera, inicijalizacija (softverska ili spoljašnja) • Nije podržan DMA prenos.
Tajmeri TIM15, TIM16, TIM17 • 16-bitni brojač na gore. • 16-bitni preskaler za ulazni takt • 1 (tim15)ili 2 (tim16, tim17) nezavisna kanala koji mogu da rade u izlaznom (output comapre), ulazno (input capture), PWM ili pojedinačnom impulsnom modu. • Mogućnost sinhronizacije sa ostalim tajmerima. • Prekid zahtev za sledeće događaje: • Input capture • Output compare • Reload tajmera, inicijalizacija (softverska ili spoljašnja) • Podržan je DMA prenos • Uvek postoji jedan komplementarni izlaz. • Brojač ponavljanja.
Osnovni tajmeri (Basic Timer)TIM6 i TIM7 16-bitni brojač na gore. 16-bitni preskaler za ulazni takt. Mogućnost startovanja DAC-a. Prekid i DMA zahtev overflow događaj. Podržan je DMA prenos. Uvek postoji jedan komplementarni izlaz. Brojač ponavljanja.
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.
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šću AD konvertor je podešen tako da radi u najbržem modu u kome semplovanje traje 1.5 ciklus. Vrsi se akvizicija kanala 14.
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 U zavisnosti od izabranog tajmera neki delovi se ne inicijalizuju!!! A neki se inicijalizuju... TIM_TimeBaseInit(TIM7, &TIM_TimeBaseInitStruct);
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.
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. Vrsi 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 • ....