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.
Last updated
Was this helpful?
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.
Last updated
Was this helpful?
Download de Programas:
Acesse o .
Clique no botão Get Software para ir pros instaladores.
Veja o instalador para o seu sistema operacional e clique em Get latest.
Se não estiver logado, a página irá pedir para criar uma conta ou logar com a já existente. Caso não possua conta clique em criar uma nova e preencha de forma padrão.
Após isso aguarde até que o download seja feito e depois descompacte o arquivo.
Clique no instalador dentro da pasta, ex: st-stm32cubeide_versão...
Siga as etapas de instalação aceitando os termos de uso e tudo que puder instalar. Aparecerá uma janela solicitando a instalação de um driver e você deverá aceitar.
Após a conclusão, haverá um ícone azul escrito IDE, ao clicar nele o CUBEIDE será aberto.
Material Oficial:
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.
Material Adicional:
Mas afinal, o que é um Conversor A/D? No que consiste esse mecanismo interno do microcontrolador? Qual a sua principal função?
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;
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.
Mas afinal, o que é um Timer? No que consiste esse mecanismo interno do microcontrolador? Qual a sua principal função?
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;
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.
Mas afinal, o que é um sinal PWM? No que consiste esse sinal? Como sintetizá-lo adequadamente?
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;
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.
Mas afinal, como é a comunicação do Sensor VL530X? No que consiste esse componente? Como ele funciona?
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).
Seu funcionamento consiste na emissão e recepção de um feixe de lu infravermelha como no diagrama abaixo:
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.