Instrutables Controle de velocidade do motor VHDL Decida a direção e a velocidade Controlador de velocidade esquerdo e direito

OBSERVAÇÃO: Esta página é uma parte de uma compilação maior. Certifique-se de começar AQUI, para entender onde o seguinte se encaixa no projeto maior
Sobreview
O controle de velocidade e direção do motor é uma das duas principais divisões do robô fotodetector, a outra é o fotodetector ou a divisão do detector de luz. Enquanto a divisão do fotodetector se concentra na visão do robô, a divisão de controle de velocidade e direção do motor se concentra no movimento do robô. Os dados do processo de controle de velocidade e direção do motor fornecidos pela divisão do fotodetector e fornecem uma saída física na forma de movimento do motor.
O objetivo desta divisão é controlar a velocidade e a direção do motor esquerdo e direito do robô de busca de luz. Para decidir esses valores, você precisará do tamanho e da posição da luz que foi capturada pela câmera e processada por limiarização. Você também precisará da velocidade medida em cada um dos motores. A partir dessas entradas, você poderá emitir o valor PWM (modulação por largura de pulso) para cada um dos motores.
Para conseguir isso, você precisará criar esses módulos VHDL (também vinculados abaixo):
- O controle
- O cálculo do erro
- A conversão binária
- A ausência de uma fonte de luz
Você pode ver o código VHDL para esta divisão aqui.
Suprimentos
Recomendamos codificar com o ISE Design Suite 14.7, pois também pode ser usado para testar o código em VHDL. No entanto, para carregar o código no BASYS 3, você precisará instalar o Vivado (ver. 2015.4 ou 2016.4) e escrever a restrição com a extensão .xdc.
Controle de velocidade do motor VHDL: decida a direção e a velocidade, controlador de velocidade esquerdo e direito: página 1
ETAPA DE INSTRUÇÃO
Etapa 1: o controle
Para entender como controlar o comportamento do robô de busca de luz, explicaremos o comportamento desejado do robô quando ele vê uma fonte de luz. Este comportamento será controlado de acordo com a posição e tamanho da fonte de luz.
O algoritmo usado é análogo a um controlador de robô RC, com uma alavanca que pode ser girada para a esquerda ou para a direita e outra alavanca que pode ser girada para frente ou para trás.
Para buscar a luz, você deseja que este robô se mova em linha reta se a posição da fonte de luz estiver bem na frente do robô. Para fazer isso, você deseja a mesma velocidade nos motores esquerdo e direito. Se a luz estiver localizada no lado esquerdo do robô, você deseja que o motor direito se mova mais rápido que o motor esquerdo para que o robô possa virar para a esquerda em direção à luz. Por outro lado, se a luz estiver localizada no lado direito do robô, você deseja que o motor esquerdo se mova mais rápido que o motor direito para que o robô possa virar para a direita em direção à luz. Isso é análogo à alavanca esquerda de um controlador RC, onde você pode controlar se deseja mover o robô para a esquerda, direita ou reto.
Em seguida, você deseja que o robô avance se a fonte de luz estiver longe (fonte de luz pequena) ou retroceda se a fonte de luz detectada estiver muito próxima (fonte de luz grande). Você também quer que quanto mais longe o robô estiver da fonte de luz, mais rápido o robô se move. Isso é análogo à alavanca direita de um controlador RC, onde você pode controlar se deseja avançar ou retroceder e com que rapidez deseja que ele se mova.
Você pode então derivar uma fórmula matemática para a velocidade de cada um dos motores, e nós escolhemos a faixa de velocidade entre -255 a 255. Um valor negativo significa que o motor irá girar para trás, enquanto um valor positivo significa que o motor irá girar para frente.
Esse é o algoritmo básico para o movimento deste robô. Para saber mais sobre este módulo, clique aqui.
Etapa 2: o cálculo do erro
Como você já tem a velocidade e a direção desejadas para os motores, também deve levar em consideração a velocidade medida e a direção dos motores. Se atingiu a meta de velocidade, queremos que o motor se mova apenas em seu momento. Se não tiver, queremos adicionar mais velocidade ao motor. Na teoria de controle, isso é conhecido como sistema de controle de realimentação de malha fechada.
Para saber mais sobre este módulo, clique aqui.
Etapa 3: a conversão binária
A partir de cálculos anteriores, você já conhece a ação necessária para cada um dos motores. No entanto, os cálculos são feitos usando binário assinado. A finalidade deste módulo é converter esses valores sinalizados em um valor que possa ser lido pelo gerador PWM, que são a direção (seja no sentido horário ou anti-horário) e a velocidade (variando de 0 a 255). Além disso, como a realimentação do motor é medida em binário sem sinal, outro módulo é necessário para converter os valores sem sinal (direção e velocidade) em um valor com sinal que pode ser calculado pelo módulo de cálculo de erro. Para saber mais sobre este módulo, clique aqui.
Etapa 4: A ausência de fonte de luz
Você fez um robô que se move para buscar luz quando a luz é detectada pelo robô. Mas o que acontece quando o robô não detecta a luz? O objetivo deste módulo é ditar o que fazer quando tal condição estiver presente.
A maneira mais fácil de buscar uma fonte de luz é o robô girar no lugar. Depois de girar por um determinado número de segundos, se o robô ainda não encontrou uma fonte de luz, você deseja que o robô pare de se mover para economizar energia. Após outro número definido de segundos, o robô deve girar no lugar novamente para buscar a luz. Para saber mais sobre este módulo, clique aqui.
Etapa 5: como funciona
Você pode consultar a imagem acima para esta explicação. Conforme mencionado no início deste instrutível, você precisará das entradas “tamanho” e “posição” da divisão de limite. Para certificar-se de que essas entradas eram válidas (por example, quando você recebe size = 0, size é realmente zero porque a câmera não detecta luz, e não porque a câmera ainda estava inicializando) você também precisará de algum tipo de indicador, que chamamos de “READY”. Esses dados serão processados pelo controle (Ctrl. vhd) para determinar a velocidade alvo de cada motor (9 bits, assinado).
Para uma saída mais estável no motor, você deseja usar realimentação em um sistema de malha fechada. Isso requer as entradas “direção” e “velocidade” de cada motor da divisão de medição de velocidade do motor. Como você deseja incluir essas entradas em seus cálculos, terá que converter esses valores sem sinal em binário com sinal de 9 bits. Isso é feito pelo conversor binário não assinado para assinado (US2S.vhd).
O que o cálculo de erro (error. vhd) faz é subtrair a velocidade medida da velocidade-alvo para determinar a ação de cada motor. Isso significa que quando ambos têm o mesmo valor, a subtração torna-se zero e o motor se moverá apenas em seu momento. Você também pode adicionar um fator de multiplicação para que o robô alcance a velocidade desejada mais rapidamente.
Como o controlador do motor precisa da velocidade e direção de cada motor, você deve traduzir os valores com sinal da ação em dois valores sem sinal separados: velocidade (1 bit) e direção (8 bits). Isso é feito pelo conversor binário assinado para não assinado (S2US.vhd) e se tornará entradas para a divisão de controle do motor.
Também adicionamos um módulo para determinar o que fazer quando a luz não é detectada (sem contador de luz. Bhd). Como este módulo é basicamente um contador, ele contará quanto tempo o robô precisa para girar ou ficar parado. Isso garantirá que o robô “veja” seu ambiente em vez de apenas o que está à sua frente e economize energia da bateria quando nenhuma fonte de luz estiver realmente disponível.
Passo 6: Combine o Files
Para combinar o files, você precisa conectar os sinais de cada módulo. Para fazer isso, você deve criar um novo módulo de nível superior file. Insira as entradas e saídas dos módulos anteriores como componentes, adicione sinais para as conexões e atribua cada porta ao par correspondente. Você pode consultar as conexões na ilustração acima e ver o código aqui.
Etapa 7: teste
Depois de terminar com todo o código, você precisa saber se o seu código funciona antes de carregá-lo no quadro, especialmente porque partes do código podem ser feitas por pessoas diferentes. Isso requer um testbench, onde você inserirá valores fictícios e verá se o código se comporta da maneira que queremos. Você pode começar testando cada módulo e, se todos funcionarem corretamente, você poderá testar o módulo de nível superior.
Etapa 8: experimente no hardware
Depois que seu código foi testado em seu computador, você pode testar o código no hardware real. Você tem que fazer a restrição file no Vivado (.xdc file para BASYS 3) para controlar quais entradas e saídas vão para quais portas.
DICA IMPORTANTE: Aprendemos da maneira mais difícil que os componentes elétricos podem ter um valor máximo de corrente ou voltages. Certifique-se de consultar a folha de dados para os valores. Para PMOD HB5, certifique-se de definir o volumetage da fonte de alimentação em 12 volts (já que este é o volt necessáriotage para o motor), e a corrente tão pequena quanto necessária para o motor se mover.
Passo 9: Combine-o com outras peças
Se as etapas anteriores foram bem-sucedidas, combine o código com os outros grupos para que o código final seja carregado no robô. Então, voilá! Você criou com sucesso um robô buscador de luz.
Passo 10: Colaboradores
Da esquerda para a direita:
- Antonius Gregorius Deaven Rivaldi
- Félix Wiguna
- Nicholas Sanjaya
- Richard Medyanto

Muito legal: Controle de velocidade do motor VHDL: decida a direção e a velocidade, controlador de velocidade esquerdo e direito: página 6
Obrigado por reviewing! Este projeto é, na verdade, apenas uma parte de um projeto de classe (Robô Light Seeking com placa BASYS 3 e câmera OV7670), então adicionarei o link para o instrutível da classe em breve!
Incrível: Estou ansioso para ver tudo montado.
Documentos / Recursos
![]() |
Instrutables Controle de velocidade do motor VHDL Decida a direção e a velocidade Controlador de velocidade esquerdo e direito [pdf] Instruções Controle de velocidade do motor VHDL Decide direção e velocidade Controlador de velocidade esquerdo e direito, Velocidade do motor VHDL, Controle Decide direção e velocidade Controlador de velocidade esquerdo e direito |





