Laboratório de PDS
Transcript of Laboratório de PDS
Laboratório de PDS Prof. Luciano Scandelari
UTFPR/DAELN
KIT ARM F4
CPU • STM32F407VGT6 microcontroller featuring 1 MB of Flash memory, 192 KB of RAM
• ● On-board ST-LINK/V2 with selection mode switch to use the kit as a standalone
• ● Board power supply: through USB bus or from an external 5V supply voltage
• ● External application power supply: 3V and 5V
• ● LIS302DL, ST MEMS motion sensor, 3-axis digital output accelerometer
• ● MP45DT02, ST MEMS audio sensor, omnidirectional digital microphone
• ● CS43L22, audio DAC with integrated class D speaker driver
• ● Eight LEDs:
• – LD1 (red/green) for USB communication
• – LD2 (red) for 3.3V power on
• – Four user LEDs, LD3 (orange), LD4 (green), LD5 (red) and LD6 (blue)
• – 2 USB OTG LEDs LD7 (green) VBus and LD8 (red) over-current
• ● Two pushbuttons (user and reset)
• ● USB OTG with micro-AB connector
• ● Extension header for LQFP100 I/Os for quick connection to prototyping board and easy probing
Arquitetura
Exemplo
• Startup_stm32f4xx.s • Inicialização do ambiente C (stack e bss)
• Stm32f4_Discovery.c • Biblioteca de funções desta placa
• Stm32fxx_*.c • Biblioteca ST para ARM
• Main.c • Programa principal
• Stm32f4xx_it.c • Rotinas de serviço de interrupção
• System_stm32f4xx.c • Definições da CPU
Otimização de código
• Otimização pode gerar código errôneo
• Cuidado com otimização
• Começar sem otimização e prosseguir otimizando
• Otimização pode ser: • Tamanho
• Velocidade
Ligar o clock para cada periférico usado
/* Preconfiguration before using DAC----------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
/* DMA1 clock and GPIOA clock enable (to be used with DAC) */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/* DAC Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
Inicialização dos pinos
• Os pinos de I/O devem ser definidos como: • Entrada
• Saída (normal, open-drain)
• Função alternativa (serial, A/D, etc)
Configuração do Timer Systick
if (SysTick_Config(SystemCoreClock / 1000))
{
/* Capture error */
while (1);
}
Loop Principal
while (1)
{
while(Conversao==0);
STM_EVAL_LEDOn(LED3);
valor_DA = valor_AD;
Conversao=0;
STM_EVAL_LEDOff(LED3);
}
Aguarda interrupção
Liga LED3 – para medir tempo
Entrada (AD) Saída (DA)
Desliga LED3 – para medir tempo
Não mexa na interrupção por enquanto!!!
AD valor_AD
Reinicia A/D
Valor_DA DA
Sinaliza que aconteceu a interrupção para main()
Toogle do LED4 para medir tempo de amostragem
Interrupção
• Rotina feita para garantir tempo de amostragem sem jitter
• Jitter na amostragem = ruído
• Tempo de amostragem dado pelo tempo de interrupção
PROCESSAMENTO
• O processamento deve ser feito no loop principal, ENTRE DUAS INTERRUPÇÕES
• Sempre medir o tempo de processamento através do pino LED3 (PD13)
• Sempre medir o tempo de amostragem através do pino LED4 (PD12)
• O tempo de processamento deve ser menor que o de amostragem
• Se não for menor, a amostragem ficará comprometida e o resultado errado
Conversor A/D
• Conversor de 12 bits
• Valores de 0 a 2047
• Sempre mede níveis DC entre 0 e 3,3v
• PROTEJA A ENTRADA DO A/D !!!! • Máxima tensão = 3,3v
• Mínima tensão = 0v
• Sempre use um resistor de 1k em série e um zener de 3,9v em paralelo (ver circuito no quadro)
• Usar filtro anti-alias na entrada
Conversor D/A
• Saída em 12 bits
• Saída de 0 a 3,3v DC
• Baixa corrente de saída (1mA)
• Usar filtro de reconstrução (anti-alias)
Filtro Anti-Alias
• Usar um filtro de ordem 2 (filtro RC), com frequência de corte fc
• A frequência de corte fc (-3dB) deve ser acima da maior frequência do sinal que se pretende utilizar
• A frequência de corte fc deve ser inferior a frequência de amostragem
• A utilização do filtro anti-alias não deve interferir na curva de resposta do sistema (mas na prática interfere)
• O filtro na prática impõe uma frequência de amostragem superior ao Nyquist
Alias
Curva de resposta
Escolha do filtro
Filtro Ativo
Filtro ativo com amp-op
Filtro ativo com amp-op
Exp 1 – Scope Digital com trigger
• Scope Digital com entrada no A/D
• Trigger
• Frequência de amostragem (por equipe)
• Enviar os dados via interface serial
• Usar o modo “terminal” do programa de gráficos
• Teclas: + aumenta em 1kHz a frequência de amostragem
- diminui 1kHz a frequência de amostragem