MICROCONTROLADORES (STM)

Nessa aula, os candidatos irão compreender como utilizar e configurar microcontroladores, para posteriormente controlar uma ponte H com a utilização de um microcontrolador.

Download de Programas:

Instalando STM32CUBEIDE

Material Oficial:

Comandos STM:

  • HAL_GPIO_WritePin(tipo_de_pino, numero_do_pino, estado_do_pino) - Essa função serve para mandar um pino para HIGH ou LOW. O primeiro parâmetro é se o pino é A, B, C ou D. O segundo parâmetro é o número do pino. O terceiro parâmetro é o valor, tendo GPIO_PIN_RESET para 0v e GPIO_PIN_SET para 3.3v.

  • HAL_GPIO_ReadPin(tipo_de_pino, numero_do_pino,) - Essa função serve para ler o estado de um pino, podendo ser HIGH ou LOW. O primeiro parâmetro é se o pino é A, B, C ou D. O segundo parâmetro é o número do pino. Ele retorna o estado do pino.

  • HAL_GPIO_TogglePin(tipo_de_pino, numero_do_pino,) - Essa função serve para inverter o estado de um pino, trocando de LOW para HIGH e HIGH para LOW. O primeiro parâmetro é se o pino é A, B, C ou D. O segundo parâmetro é o número do pino.

  • HAL_TIM_Base_Start_IT(timer) - Essa função serve para iniciar a contagem e interrupção de um timer. O primeiro parâmetro é o endereço do Handler do timer, ex: &htim1.

  • HAL_TIM_PeriodElapsedCallback(timer) - Essa função serve para pegar a interrupção do timer por estouro de contagens. O parâmetro recebido é o endereço do Handler do timer, tendo que checar qual timer está fazendo a interrupção (em caso de múltiplas interrupções com o timer).

  • HAL_TIM_PWM_Start(timer, canal) - Essa função serve para iniciar o pwm em um canal de um timer. O primeiro parâmetro é o endereço do Handler do timer, ex: &htim1. O segundo parâmetro serve para indicar qual canal é para ser gerado o pwm.

  • HAL_ADC_Start(adc) - Essa função serve para iniciar o ADC para poder fazer as leituras. O primeiro parâmetro é o endereço do Handler do ADC, ex: &hadc1.

  • HAL_ADC_PollForConversion(adc, timeout) - Essa função serve para aguardar a conversão do ADC. O primeiro parâmetro é o endereço do Handler do ADC, ex: &hadc1. O segundo parâmetro é o tempo limite de espera, coloque HAL_MAX_DELAY.

  • HAL_ADC_GetValue(adc) - Essa função serve para pegar o valor convertido pelo ADC. O primeiro parâmetro é o endereço do Handler do ADC, ex: &hadc1. O retorno é o valor convertido pelo ADC.

Slides da aula
Wiki da ST sobre TIMER
Wiki da ST sobre ADC
Pinagem do STM black pilll

Material Adicional:

Confira as explicações sobre os conceitos mais complexos da atividade, incluindo: Timer, Conversor A/D, PWM, Sensor VL53L0X e muitos outros:

CONVERSOR A/D

  • Um Conversor Analógico Digital é um dispositivo programável capaz de transformar um sinal analógico, em um sinal digital;

  • Quando convertido, este mesmo sinal torna-se “legível” por uma máquina (no caso o STM);

  • O Conversor, por sua vez, quantifica esses valores de conversão eletronicamente dentro de um número finito de valores inteiros, determinado pela resolução do conversor (dada em Bits);

  • Logo, um Conversor de 8 Bits, por exemplo, transforma a tensão em valores legíveis por uma máquina, isto é, valores decimais entre 0 e 256;

  • Como 100% da tensão equivale a 3.3V, pode-se afirmar que 100% da conversão A/D, em decimal, equivale a 256. Assim, 1% da conversão A/D equivale à resolução de 12.89mV / Bit;

Pense neste raciocínio, porém com um Conversor A/D de 10 Bits, como o de um PIC18F1330. Para isso, confira a Figura 1:

Figura 1 - Diagrama em Blocos do Conversor A/D (10 Bits).

Observações:

  • Observe que cada canal, desde o AN0 até o AN3, pode ser configurado tanto como entrada, quanto como saída, sendo ela analógica ou digital.

  • O valor numérico da conversão A/D (0 a 1023 - 10 Bits) pode ser manuseado pelo programador.

TIMER (TEMPORIZADOR)

  • Um Timer (ou temporizador) é um mecanismo registrador, de natureza programável, responsável por realizar contagens com base na frequência do microcontrolador, seja ela interna ou externa;

  • Assim como o Conversor A/D, o Timer também constitui um módulo interno dentro do STM e, por essa razão, sua medida é dada em Bits;

  • Para efetuar a contagem, o Timer, precisa, em tese, ter todas as suas “entradas” configuradas para obter o desempenho desejado;

  • Para que o Timer 0 funcione, é preciso definir os valores de frequência, a transição de borda (subida ou descida), o tipo de oscilação (interna/externa), o número de Bits (8 ou 16), etc;

Figura 2 - Diagrama em Blocos do Timer 0 (8 Bits)

Observações:

  • Quando o Timer 0 estiver configurado, ele será capaz de realizar diversas contagens: as mais simples (de 0 até 255 - 8 Bits), até outras mais complexas, partindo de valores diferentes de zero ou interrompendo-as para não atingir o valor máximo suportado pelo módulo;

  • Essa interrupção, ou esse “estouro” do Timer, só pode ser viabilizado pela Flag desde mesmo registrador, isto é, pela “bandeira” que sinaliza não somente o início, mas também o fim dessa mesma contagem.

PWM (Modulação por Largura de Pulso)

  • O PWM é um recurso muito utilizado na programação para alterar o comportamento de uma determinada saída do microcontrolador;

  • Normalmente, o PWM é utilizado em robôs para comunicação entre módulos ou para controles de potência;

  • Há diversas formas de gerar um sinal PWM em um microcontrolador, todos têm uma coisa em comum, eles utilizam um timer para medir o tempo entre as variações do sinal;

  • Em baixos níveis de abstração pode-se configurar os módulos do timer para isso ou, se estiverem disponíveis, os módulos de PWM do microcontrolador;

  • Em abordagens de alto nível de abstração, pode se encontrar funções que realizam toda essa configuração de uma forma mais dinâmica;

Figura 3 - Características de um sinal PWM.

Observações:

  • Nesse sentido, quanto MAIOR a largura do período em que o sinal PWM estiver EM NÍVEL ALTO, MAIOR a intensidade do LED aceso. Se o circuito utilizasse uma carga potente, um motor por exemplo, mais rápida seria a sua rotação;

  • Por outro lado, quanto MENOR a largura do período em que o sinal PWM estiver EM NÍVEL ALTO, MENOR a intensidade do LED aceso. Se o circuito utilizasse uma carga potente, um motor por exemplo, mais lenta seria a sua rotação.

SENSOR VL530X

  • Os Sensores VL530X são responsáveis pelo direcionamento e orientação do robô e detectar a distância do robô adversário;

  • O sensor VL53L0X é um sensor do tipo ToF (Time of Fligth). Este tipo de sensor mede a distância à sua frente enviando um sinal infravermelho e medindo o tempo até a reflexão do mesmo;

  • O VL530X possui um rápido tempo de reação e um alcance de, aproximadamente, 2m de distância;

  • Sua interface conta com 6 pinos:

    • Dois referentes à alimentação do sensor (VCC e GND);

    • Dois referentes à comunicação I2C (SDA e SCL);

    • Um de configuração do endereço de comunicação (XSHUT);

    • Um de interrupção, não utilizado pela equipe (GPIO01).

    Figura 4 - Módulo do sensor VL53LL0X
  • Seu funcionamento consiste na emissão e recepção de um feixe de lu infravermelha como no diagrama abaixo:

Figura 5 - Diagrama de funcionamento do Sensor VL53L0X

Comunicação I2C

A comunicação I2C (Inter-Integrated Circuit) é um protocolo de comunicação serial que permite a troca de dados entre dispositivos eletrônicos de maneira simples e eficiente. Este protocolo utiliza duas linhas principais:

  • SDA (Serial Data Line): Responsável pela transmissão de dados entre os dispositivos.

  • SCL (Serial Clock Line): Fornece o sinal de clock que sincroniza a transferência de dados.

A comunicação I2C permite a conexão de múltiplos dispositivos em um barramento compartilhado, utilizando endereços para identificar cada dispositivo participante. Com suporte nativo em muitos microcontroladores e sensores, como o VL530X, a I2C é amplamente utilizada em aplicações de sistemas embarcados devido à sua flexibilidade e simplicidade.

Last updated

Was this helpful?