Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:pitch-shifter

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
2014:pitch-shifter [2015/01/18 20:42]
Tomáš Smatana část obsahu
2014:pitch-shifter [2015/01/18 23:31] (aktuální)
Tomáš Smatana kompletní
Řádek 41: Řádek 41:
   *12 bit AD převodník   *12 bit AD převodník
   *integrovaný audio kodek CS43L22 s DA převodníkem   *integrovaný audio kodek CS43L22 s DA převodníkem
-=== AD převodník ===+==== AD převodník ​====
 Pro převod analogového vstupního signálu na digitální je použit AD převodník integrovaný v procesoru STM32F407VGT6. Tento procesor obsahuje celkem tři dvanáctibitové převodníky,​ přičemž každý má 16 kanálů. Pro potřeby tohoto projektu zpracovávat dva vstupní signály (levý a pravý kanál) je použit převodník ADC1 s kanálem 1 (port PA1) a převodník ADC2 s kanálem 11 (port PC1). Pro převod analogového vstupního signálu na digitální je použit AD převodník integrovaný v procesoru STM32F407VGT6. Tento procesor obsahuje celkem tři dvanáctibitové převodníky,​ přičemž každý má 16 kanálů. Pro potřeby tohoto projektu zpracovávat dva vstupní signály (levý a pravý kanál) je použit převodník ADC1 s kanálem 1 (port PA1) a převodník ADC2 s kanálem 11 (port PC1).
-Protože AD převodníky zpracovávají signály s hodnotou v rozmezí mezi 0 V až napájecí napětí procesoru Vdd = 3 V a použitý vstupní signál je střídavý, je nutno zařadit před převodníky pomocný obvod, který posune stejnosměrnou složku signálu na polovinu napájecího napětí. Výsledné schéma pomocného vstupního obvodu je na obrázku. Skládá se z odporového děliče napětí, vstupním kondenzátorem pro oddělení stejnosměrné složky a ochranné zenerovy diody. Pomocný obvod je stejný pro oba zpracovávané kanály.+ 
 +Protože AD převodníky zpracovávají signály s hodnotou v rozmezí mezi 0 V až napájecí napětí procesoru Vdd = 3 V a použitý vstupní signál je symetrický kolem 0 V, je nutno zařadit před převodníky pomocný obvod, který posune stejnosměrnou složku signálu na polovinu napájecího napětí. Výsledné schéma pomocného vstupního obvodu je na obrázku. Skládá se z odporového děliče napětí, vstupním kondenzátorem pro oddělení stejnosměrné složky a ochranné zenerovy diody. Pomocný obvod je stejný pro oba zpracovávané kanály.
  
 {{ :​2014:​pitch-shifter:​schema_vstup.png?​400 |Výsledné schéma pomocného obvodu na vstupu AD převodníků}} {{ :​2014:​pitch-shifter:​schema_vstup.png?​400 |Výsledné schéma pomocného obvodu na vstupu AD převodníků}}
  
-=== Audio kodek CS43L22 === +==== Audio kodek CS43L22 ​==== 
-Po procesu zpracovaní signálu slouží pro jeho následný převod na výstupní analogový signál audio kodek CS43L22, který je integrovaný na použitém vývojovém kitu. Jeho zapojení lze vidět na blokovém schématu. Tento kodek obsahuje 24-bitový DA převodník a výstupní sluchátkový zesilovač.+Po procesu zpracovaní signálu slouží pro jeho následný převod na výstupní analogový signál audio kodek CS43L22, který je integrovaný na použitém vývojovém kitu. Jeho zapojení lze vidět na blokovém schématu ​vývojového kitu. Tento kodek obsahuje 24-bitový DA převodník a výstupní sluchátkový zesilovač.
  
 +===== Blokové schéma =====
 +Blokové schéma výsledného zařízení lze vidět na obrázku. Na vstup zařízení je připojen zdroj audio signálu. Audio analogový signál je analogově upraven v pomocném obvodu pro následné zpracování AD převodníky. Vstupní signál je dále přiveden do AD převodníků integrovaných v procesoru. Pro každý zpracovávaný kanál je použitý jeden převodník. Následuje zpracování signálu, při kterém dojde ke změně základního kmitočtu audio signálu. Po zpracování se signál pomocí DA převodníku obsažených v audio kodeku CS43L22 integrovaném na vývojovém kitu převede zpět na analogový signál, který lze napojit na elektroakustický měnič, například sluchátka. Ovládání je prováděno pomocí uživatelského tlačítka umístěného na desce vývojového kitu.
  
 +{{ :​2014:​pitch-shifter:​blokove_schema.png?​700 |Blokové schéma výsledného zařízení}}
  
 ===== Software ===== ===== Software =====
 +Program pro mikrokontrolér byl napsán v prostředí programu Em::Blocks 2.30. Pro zjednodušení práce byla kostra programu vygenerována pomocí programu STM32CubeMX.
  
-===== Blokové schéma =====+Softwarové řešení je tvořeno obsluhou AD převodníků ADC1 a ADC2. Tyto převodníky jsou nastaveny pro práci v kontinuálním módu, s maximální rychlostí 2,4 MS/s a DMA přenosem převedené hodnoty do paměti.
  
-===== Software ​=====+Časovač TIM3, je nastaven pro generování přerušení každou 1ns. V obsluze tohoto přerušení se inkrementuje počítadlo. Po dosažení určité hodnoty počítadla se použijí hodnoty získané posledním převodem AD převodníků a umístí se do jednoho prvku pole proměnné jako vzorek do kruhového bufferu. Až se postupně naplní celé pole, začne se pole plnit novými hodnotami od začátku. Tento cyklus probíhá neustále dokola. 
 + 
 +Pro přehrání dat z pole hodnot je použit integrovaný kodek CS43L22 na vývojové desce, pomocí kterého se postupně vyčítají hodnoty a to konstantní rychlostí. 
 + 
 +Pro změnu základního kmitočtu audio signálu se využívá rozdílný vzorkovací kmitočet mezi AD a DA převodem. V řešeném projektu je vzorkovací kmitočet DA převodníku konstantní a to 44 kHz. Vzorkovací kmitočet AD převodníků se volí vhodným nastavením hodnoty inkrementovaného počítadla v obsluze přerušení časovače, při které se sejme hodnota získaná AD převodem. Pro změnu této hodnoty se používá tlačítko. 
 + 
 +==== Hlavní vytvořené části programu ​==== 
 +=== main.c === 
 +<code c> 
 +int main(void) 
 +
 +  /* Reset of all peripherals,​ Initializes the Flash interface and the Systick. */ 
 +  HAL_Init();​ 
 + 
 +  /* Configure the system clock */ 
 +  SystemClock_Config();​ 
 + 
 +  /* Initialize all configured peripherals */ 
 +  MX_GPIO_Init();​ 
 +  MX_DMA_Init();​ 
 +  MX_ADC1_Init();​ 
 +  MX_ADC2_Init();​ 
 +  MX_TIM3_Init();​ 
 + 
 +  // Spusteni casovace 
 +  HAL_TIM_Base_Start_IT(&​htim3);​ 
 + 
 +  // Spusteni AD prevodu a nasledneho DMA prenosu pro oba prevodniky 
 +  if (HAL_ADC_Start_DMA(&​hadc1,​ (uint32_t*)&​ADC1hodnota,​ 1) != HAL_OK) 
 +  return 0; 
 + 
 +  if (HAL_ADC_Start_DMA(&​hadc2,​ (uint32_t*)&​ADC2hodnota,​ 1) != HAL_OK) 
 +  return 0; 
 + 
 +  // Inicializace AUDIO periferie 
 +  BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_AUTO,​ 70, 44000); 
 + 
 +  // Prehrani prvniho useku 
 +  BSP_AUDIO_OUT_Play((uint16_t*)L_kanal,​ BUFFER_SIZE*2);​ 
 + 
 +  while (1) 
 +  { 
 +    // obsluha tlačítka 
 +    while (HAL_GPIO_ReadPin(GPIOA,​ GPIO_PIN_0) == GPIO_PIN_SET) 
 +    { 
 +        HAL_Delay(50);​ 
 + 
 +        if(posun < 10) 
 +        { 
 +            posun = posun + 1; 
 +        } 
 +        else 
 +        { 
 +            posun = 5; 
 +        } 
 + 
 +        HAL_Delay(250);​ 
 +    } 
 +  } 
 +
 +</​code>​ 
 + 
 +=== obsluha přerušení časovače === 
 +<code c> 
 +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 
 +
 +    static int i = 0; 
 +    static uint16_t j = 0; 
 + 
 +    if(i < (17 + posun)) 
 +    { 
 +        i = i + 1; 
 +    } 
 +    else 
 +    { 
 +        if(j < 880) 
 +        { 
 +            L_kanal[j] = (uint16_t)ADC1hodnota;​ 
 +            P_kanal[j] = (uint16_t)ADC2hodnota;​ 
 + 
 +            j = j + 1; 
 +        } 
 +        else 
 +        { 
 +            j = 0; 
 + 
 +            L_kanal[j] = (uint16_t)ADC1hodnota;​ 
 +            P_kanal[j] = (uint16_t)ADC2hodnota;​ 
 + 
 +            j = 1; 
 +        } 
 + 
 +        i = 0; 
 +    } 
 +
 +</​code>​
  
 ===== Výsledky ===== ===== Výsledky =====
 +Bylo vyřešeno kompletní zapojení celého zařízení. Pro realizaci vstupního pomocného obvodu bylo použito nepájivé pole.
 +
 +S funkčností softwaru to nedopadlo nejlépe. Podařilo se zrealizovat pouze první část, kterou je převod vstupního audio signálu do kruhového bufferu a obsluha tlačítka.
 +
 +Zprovoznit výstupní audio kodek se nepodařilo.
 +
 +Výsledný vzhled zařízení lze vidět na obrázku.
  
 {{ :​2014:​pitch-shifter:​vysledek.jpg?​700 |Výsledná podoba realizace}} {{ :​2014:​pitch-shifter:​vysledek.jpg?​700 |Výsledná podoba realizace}}
  
 ===== Závěr ===== ===== Závěr =====
 +Při realizaci zařízení bylo příliš mnoho času stráveného nad seznámením se a zprovozněním základních periferií mikrokontroléru jako je např. AD převodník a DMA přenos, v důsledku čehož nebyly zprovozněny další potřebné periferie, jako je audio kodek. Pokud by bylo snažší zprovoznění těchto periferií, byly by lépe promyšleny a odladěny záležitosti,​ jako je třeba velikost a přesnost jednoho kroku změny základního kmitočtu nastavovaného tlačítkem.
2014/pitch-shifter.1421610123.txt.gz · Poslední úprava: 2015/01/18 20:42 autor: Tomáš Smatana