Sistemas embarcados começam a ser muito explorados em aplicações biomédicas e tendem a se expandir cada vez mais. Podemos citar, por exemplo, sistemas de controle de próteses de membros artificiais, controles de cadeiras de rodas inteligentes, tecnologias assistivas baseadas em exoesqueletos etc. Assim, o uso de dispositivos embarcados para coleta, tratamento e processamento de sinais em tempo real tem recebido cada vez mais atenção de empresas e laboratórios de pesquisa em todo mundo. Neste workshop focaremos nossa atenção nos dispositivos fabricados pela empresa ARM Holdings plc, em especial na linha de controladores Cortex M4 e M7. Além dos dispositivos, a ARM também disponibiliza um grande conjunto de funções para processamento de sinais, especificamente desenvolvida para uso otimizado do processador Cortex. Funções matemáticas básicas, transformadas, filtros digitais, funções estatísticas e de interpolação são parte desse conjunto conhecido como CMSIS-DSP (Cortex Microcontroller Software Interface Standard - Digital Signal Processing). Nesse workshop, será apresentado o CMSIS-DSP através de exemplos aplicados ao processamento de sinais biomédicos, evidenciado a sua forma de uso e vantagens. Os participantes deverão implementar pequenos sistemas de processamento em tempo real em kits contendo os controladores Cortex M.
Similaire à [7/9] Sistemas embarcados de alto desempenho para tratamento e processamento de sinais biomédicos - Plataformas ARM Cortex M e CMSIS-DSP (20)
2. Principais Periféricos
● Abordar todos os periféricos: missão impossível !
– Timers, SPI, I2C, CAN, ADC, DMA, RTC, DAC, FEMC, LCD-TFT, USB,
USART, SAI, I2C, HDMI-CEC, DCMI, ...
● Vamos fazer uma aplicação conjunta com foco em sinais analógicos,
usando timer, DAC, ADC e DMA com processamento de sinais via CMSIS
5. Geração de Pulsos
Ex: clock de 108MHz (APB1), preescalar = 107, divisor = 0,
gerando frequência de entrada de 1MHz
Período base (ARR) = 999 → frequência = 1kHz (1ms)
CC1 = 249 → CC1 = 25% duty cycle
CC2 = 749 → CC2 = 75% duty cycle
6. Usos diversos dos Timers
● Contagem de pulsos de entrada
● Medição de período e frequência
● Medição de comprimento de pulso
● Encoders em quadratura
● PWM para usos diversos, como acionamento de
motores ou controle
● Geração de pulsos únicos
● Sequenciamento na geração de pulsos
● ...
7. Timers na Família STM32
● A ST divide seus timers em grupos:
– Básicos
– Uso geral
– Avançados
– Alta resolução
– Low power
● Os timers podem ser encadeados para a geração de
eventos complexos, pode temporizar operações de DMA,
acionar periféricos como um ADC, etc.
● Em geral, os nomes são mantidos entre controladores
diferentes, isto é, um “TIM2” não deve mudar ao se trocar de
família.
● Os timers podem parar na hora do debug/breakpoint.
9. ADC no STM32F767
● Características gerais:
– 3 ADCs que compartilham até 16 canais externos, com ordem
arbitrária de amostragem
– Resolução configurável (6, 8, 10 ou 12 bits)
– Tempo de conversão configurável
– Suporte a interrupção e DMA
– Suporte a trigger externo
– Suporte a watchdog analógico
– Alimentação independente (VREF), tensão mínima de 2,4V
– Vários modos de operação (conversão contínua, conversão única,
alternada, canais injetados, etc)
– Clock máximo de 36MHz (2.4MSamples modo single ou
7,2MSamples modo triple interleave)
10. Modo de Operação
Conversão Simples
● Converte um ou mais canais, em qualquer
ordem, com tempos de conversão
individualizados.
● Pode operar por polling, interrupção ou
DMA
● Pode gerar interrupção apenas no final da
conversão de todos os canais ou um a um
11. Modo de Operação
Conversão Contínua
● Converte um ou mais canais, em qualquer ordem,
com tempos de conversão individualizados.
● O periférico é reprogramado automaticamente ao
final do ciclo
● Pode operar por interrupção ou DMA
(preferencial)
● Permite um mapeamento em memória direto na
área das variáveis
12. Modo de Operação
Conversão Dual ou Tripla
● Converte alternadamente ou simultaneamente usando ADCs
diferentes
● Existem vários modos possíveis de estratégias de uso dos
canais e ADCs
● Use DMA, é a forma preferencial para esses casos
13. Modo de Operação
Conversão Injetada
● Este modo é para uso quando a conversão é disparada por
um evento externo ou por software.
● O grupo injetado tem prioridade sobre o grupo de canais
regular.
● Ele interrompe a conversão do canal atual no grupo canal
regular.
14. Recomendações Finais
● Existem mais detalhes sobre a operação dos ADCs, foi apresentado apenas um resumo
● Outras famílias, como a STM32L433x (Cortex M4F) possuem canais que podem ser
usados de forma diferencial
● Faça uso por DMA, é a forma natural para trabalhar com ADC para a família STM32, com
baixo custo para o processador
● Associe o ADC com timers e DMA para obter taxas precisas de amostragem
● Fique atento a impedância máxima de saída do seu circuito !
k = número de períodos de amostragem
N = número de bits
fADC
= frequência do ADC (máx. 36MHz)
RAIN
= Máximo de 50kΩ
RADC
= Máximo de 6kΩ
CADC
= Máximo de 7pF
15. DAC
● O STM32F767 possui um DAC com dois canais
independentes de 12 bits
● Suporta geração de ondas triangulares e de pseudo-ruído
● Pode ser sincronizado por timers e aceita o uso via DMA
● Possui um buffer para reduzir a impedância de saída (5kΩ)
16. DMA (Direct Memory Access)
● Permite que periféricos acessem a memória
diretamente, não passando pela CPU
● Libera a CPU para outras atividades
● Tipicamente:
– Uma operação de DMA é programada entre
periférico e memória
– A operação é executada e uma interrupção
ocorre para avisar a CPU
● Operações comuns:
– Memória → memória
– Device → memória
– Memória → device
Imagem: http://is.gd/ylS6DG
17. DMA no STM32F4
● Dois DMAs (1 e 2), independentes, divididos em:
– Streams (canais de comunicação), total de 8 por DMA
– Requisições (dispositivos), até 16 possibilidades por
stream (canais, na notação do manual)
● Priorização do stream
– 4 níveis de prioridade (baixa, média, alta, muito alta)
– Mesma prioridade: vence o de menor número
● Transferências:
– Memória → Memória
– Periférico → Memória
– Memória → Periférico
20. DMA no STM32F767
● Transferências:
– Modos:
● Modo DMA direto
● Modo FIFO (first in first out) com até 4 words (16B), marcas d'água
configuráveis, dois por canal
– Tamanho dos dados:
● Byte, half word (2B) e word (4B) individualizadas para periférico e memória
(se diferentes, apenas em FIFO mode)
– O tamanho a transferir pode ser controlado:
● Pela programação do DMA (1 a 65536)
● Pelo periférico, através de sinalização
– Incremento automático dos ponteiros
– Reprogramação automática (circular mode)
– Double buffer mode !!!