Olá pessoal,

Este é meu primeiro post aqui, espero que esteja tudo dentro das regras do forum.

Estou desenvolvendo um projeto que envolve a construção de pequenos robos móveis. Na verdade a parte crítica do projeto não é exatamente a construção dos robos, mas sua programação. Então pretendo usar vários microcontroladores, várias tecnologias diferentes, mas tudo conectado por uma programação padrão que aceite essas varias tecnologias misturadas no mesmo ambiente de controle.

Minha intenção com este tópico, não é exatamente resolver dúvidas, embora eu tenha muitas, mas poder discutir assuntos relacionados ao projeto com outras pessoas. Até o momento tudo foi feito baseado nas minhas pesquisas e leituras, mas não tenho ninguém com quem conversar e talvez eu esteja cometendo erros básicos sem saber. Caso alguem se interesse em participar ou ajudar, é um projeto aberto, tanto no hardware quanto no software, tudo vai ser divulgado no estilo open-source. Já comecei uma parte da divulgação na minha wiki em:

https://fperrotti.wikispaces.com/Projeto+de+robo+móvel.

No momento o que está me incomodando agora é minha opção pelos motores de passo em vez de usar motores DC como praticamente TODOS os robos móveis de pequeno porte que tenho visto pela internet. Eu pessoalmente acho os motores de passo muito mais práticos e fáceis de trabalhar do que motores DC. A gente diz quantos passos ele tem que se mover e ele vai, sem precisar de monitoramento por encoders, sem algoritmos de controle complicados e eventualmente até sem sistemas de transmissão de movimento como redutores, polias e engrenagens, em alguns casos as rodas podem ser conectadas diretamente ao eixo do motor. Além disso são fáceis de serem encontrados em sucata (tenho dezenas aqui), mas mesmo que precisem ser comprados novos, atualmente estão ficando bem mais baratos por conta da popularização das impressoras 3D. E finalmemte, são motores precisos. Como meu projeto envolve (ou pretende) navegação autônoma, a precisão nos movimentos é muito importante.

Eu considero que são argumentos bem fortes a favor dos motores de passo e não entendo porque não encontro exemplos de robôs usando motores de passo pela internet. Sei que os motores DC conseguem mais potência e velocidade com menos consumo, mas meus robozinhos com motor de passo funcionam bem, devo estar perdendo alguma coisa nesse assunto. Afinal, porque ninguém usa motores de passo pra esse fim?

Obrigado,

Perrotti

Exibições: 11369

Responder esta

Respostas a este tópico

Muito obrigado pela atualização da biblioteca e das instruções de uso Francesco.

Amanhã vou tentar dar uma olhada com cuidado nela.

Aliás, não comentei antes, mas o blog está bem detalhado e organizado.

Dei uma testada rápida no robô agora e realmente mesmo reduzindo a corrente para níveis bem baixos a vibração ainda é muito alta. Estou começando a reforçar a montagem dele (peças que retirei antes para reduzir peso), tipo colocando arruelas lisas e de pressão em tudo, para tentar reduzir o ruído (chato pacas...). Quanto a vibração estou pensando em colocar uma placa de algum material amortecedor (estou olhando para uma placa de algum tipo de espuma aqui) entre os motores e o chassi (que é de madeira).

Amanhã ou mais tarde digo se melhorou alguma coisa, hehe.

Wilmar

Wilmar,

Mudando um pouco de assunto, vc pensou como resolver a questão do overflow da função micros()? Ela dá um overflow a cada 70 minutos. Não que alguma bateria consiga mover o robô por todo esse tempo, mas seria legal descobrir alguma forma de contornar isso.

Não tentei resolver o overflow da micros(). Embora com os motores de passo menores daria para superar uma hora de movimentação, minha lógica de navegação ainda não está tão evoluída para tanto

Pelo que lí, não é possível resolver isso, tem que contornar mesmo.

Wilmar

Olá Wilmar,

Voltando ao caso das vibrações, comecei a fazer algumas experiencias pra ver se melhorava. Bom, de longe o que mais resolveu foi aplicar um pouco de WD-40 na rodinha boba dianteira... fez uma diferença imensa :). Pelo menos no barulho, a vibração do motor continuou. Também implementei as idéias que eu citei antes e tive algum sucesso, mas não como esperava.

O que eu tentei fazer foi diminuir o tempo dos pulsos sem diminuir o período deles. Por exemplo, pra pulsos de 5ms, em vez de ativar a bobina por 5ms e depois avançar para a próxima fase, a bobina fica ligada por menos tempo, por exemplo 4ms e depois fica 1 ms desligada e então avança para a proxima fase. Nesse exemplo estaria usando uma proporção de 80%. Testei com vários valores, no fim descobri com uma proporção de 90% consigo executar os movimentos do mesmo jeito, sem perder passos e com um pouco menos de vibração. Não resolve muito mas ajuda e de quebra gasta 10% menos de energia. Talvez com motores mais poderosos como os teus essa proporção possa ser menor, algo como 75% ou 80%, acho que valeria a pena testar.

Ah sim, esse esquema eu aplico somente na aceleração e desaceleração, na velocidade de cruzeiro deixo como estava, já que nessa situação não tem vibração. Os teus motores vibram mesmo na velocidade máxima ou só no inicio do movimento?

Francesco,

Eu testei colocar uma espuma (dessas que embalam alguns produtos eletrônicos) entre os motores e o chassi, além de colocar arruela lisa e de pressão em todos os parafusos.
Melhorou bastante o ruído e um pouco a vibração. Isso para aprox. 50% da corrente nominal dos motores controlado pelo chopper.
Essa corrente atende a maior parte do que eu gostaria que o robô fizesse, tipo, subir em tapetes. Nesse patamar, a única coisa que fica limitada é subir rampas. Com o maior peso e minhas rodas muito duras não vai mais que uns 12%, mas os motores continuam girando aos trancos (isso na menor rotação).

Aumentando a corrente, aumenta desproporcionalmente, para mais, a vibração e o ruído. A baixas rotações ambos são maiores.
Na rotação máxima em que imagino utilizar o robô (uns 30 cm/s) ainda são significativamente maiores que com os motores anteriores.

Depois de um tempo, deu para perceber que aumentando o peso geral do robô, o ruído reduzia bastante e a vibração um pouco. Fiz um teste colocando aprox. uns 2 kg sobre o bicho. E não é que ele conseguia partir e andar normalmente, até a máxima velocidade!. Isso é meio estranho, porque dá um entendimento que poderia reduzir muito ainda a corrente, mas, fazendo isso, o robô começa a pular com as perdas de passo!.
Uma boa parte do ruído vinha da terceira roda, que com o maior peso (central) dos motores, perdeu apoio e ficava meio louca e fazendo muito barulho.


Como eu estava improvisando esta montagem, um pouco mais de massa não ser problema (embora muito contraproducente) e o problema com a terceira roda, resolvi incluir um nível inferior de chassi, com aglomerado mais espesso e tentar reduzir o apoio do chassi nos motores.

O que fiz foi unir os motores atraves de barras roscadas e apoiar todo o chassi em apenas três pequenos pontos nestas barras Nesses pontos eu coloquei a tal da espuma. Ficou assim...


Melhorou muito mesmo, tornado aceitável, embora o ruído e a vibração ainda estejam maiores
que com os motores menores.

Para a questão da terceira roda eu prolonguei um pouco o chassi, tipo uma "rabeta" e
desloquei a bateria para cima da roda. A roda agora gira certinho e não faz barulho. O que sobrou de ruído é do chassi mesmo. Ainda não fiz testes mais prolongados com curvas e rotações (eu chamo de rotação o robô girar no próprio eixo - agora dos motores), mas tenho como diminuir a descentralização da terceira roda, se necessário.

O resumo geral disso é que foi possível diminuir significativamente o ruído e a vibração no chassi e componentes, embora os motores continuem a vibrar.

Dois pontos importantes que captei nas observações são:

1 - com a limitação da corrente pelo chopper, as faixas de rotação com ressonãncia se alteram significativamente, e a ressonãncia gera muito ruído do próprio motor e no
chassi/componentes.
Sem o chopper, alimentando os motores com sua tensão nominal e utilizando half stepping, na faixa de rotação que utilizaria o robô não aparece nenhuma ressonância detectável. Em full stepping, com duas bobinas acionadas, ela é bem forte em três pontos na mesma faixa de rotação. Com o chopper ligado e em half stepping, nessa faixa de 50% da corrente, agora existem dois pontos de alta ressonãncia, e nesses pontos o ruído é bem maior, até mesmo que na menor rotação;

2 - utilizando half stepping nota-se que o robô anda aos pulinhos nas baixas rotações -
motivo até que impede a utilização de rotações menores ainda. Isso é teórico né, em passos com duas bobinas o torque é 40% maior que nos passos com uma bobina.
Nos motores antigos eu usava full stepping com duas bobinas, que era o único jeito do robô andar melhorzinho. Agora, que concluí que em half stepping dá para conseguir a rotação necessária utilizando o chopper e a ressonância é muito menor, esse problema ficou mais evidente para mim. Há um recurso mencionado em um dos paper´s da ST sobre os L297 e L298 que na teoria reduziria a corrente (e o torque) nos passos com duas bobinas para equivalência de torque com os de uma bobina. O circuito é relativamente simples, vou montar ele, talvez em protoboard mesmo, para testar. Acredito que com isso, possa reduzir ainda mais o ruído /vibração para níveis confortáveis.

Os seus testes com a energização parcial das bobinas (em tempo) é mais ou menos aquela elocubração que disse que fiz mas faltava uma conclusão lógica ... e está relacionado parcialmente com a obs 2:

Eu acredito que o "excesso de torque" em alguns momentos é o causador da maior vibração, isso porque o rotor simplesmente não para no final do passo. Estando acelerado ele passa um pouco do ponto, volta, vai de novo ... Esse vai e vem é a causa da vibração. Se o motor está mais carregado (em torque) ou então em maior rotação (que não dá tempo da corrente subir tanto) essa vibração é menor, justamente porque não dá tempo para o rotor ficar indo e vindo, já que outro passo o "puxa" para adiante. É uma explicação meio tosca eu sei, mas como disse antes, escreví bastante e no final achei confuso e sem uma conclusão.
Um outro recurso que posso implementar, talvez juntamente com a variação da corrente entre os passos do half stepping, é poder alterar a corrente pelo Arduino, daí poderia ser utilizada uma menor corrente nas baixas rotações sem perder corrente nas maiores, onde é necessária para aumentar o range de rotação do motor e do torque também.

Não sei se está utilizando full ou half stepping. Considere que se estiver reduzindo o tempo de energização em half stepping, reduzirá o torque nos passos com uma bobina acionada também, e isso será o limitante de aplicação do método que desenvolveu.

Wilmar

Olá Wilmar,

Uau, teu robo tá ficando bem parrudo né, estilo pit bull? E que boa idéia vc teve, fez um amortecedor de espuma. Também gostei das barras rosqueadas unindo os motores, isso resolve problemas de alinhamento e transforma tudo num bloco só, ótima idéia, talvez eu aproveite para a próxima versão do wixel, eu vou ter que repensar o projeto do chassi de acrilico.

Quando fui cortar, a intenção é que fosse usada uma placa de 4mm para a parte de baixo, mas na loja só tinha placas de 5mm e de 3mm. Então fiz a plataforma principal com 5mm e os suportes laterais para os motores com 3mm. Nenhuma das duas partes deu muito certo, a placa de 5mm é pesada demais e a placa de 3mm não aguentou o tranco e uma das laterais acabou trincando. Agora preciso iniciar a nova versão, que será muito mais elaborada e resolver se uso o mesmo projeto de chassi apenas mudando a espessura das placas, ou se mudo a maneira como os motores são fixos no robô. Na foto abaixo as partes que foram cortadas. Quando fiz o projeto, não tinha muita certeza de que motores seriam usados, então deixei as laterais com tamanho e furação para motores Nema 14 e Nema 17.

Estas laterais são presas à plataforma principal com cantoneiras de plástico flexível, como os motores e plataforma são relativamente pesados, fica um certo jogo depois da montagem final que amortece um pouco as vibrações.

Na foto abaixo o chassi já montado. Não dá pra ver direito as cantoneiras nesta foto, mas são 4 pra cada lateral.


Abaixo um close da fixação dos motores. Veja que nada prende o motor na parte traseira dele. De início achei que isso daria um certo amortecimento de vibrações e na verdade acho que amortece mesmo um pouco, mas a lateral trincou, não sei se o projeto é que está ruim, ou se estou apenas usando uma placa fina demais para esses suportes (3mm). O ideal seria uma placa de alumínio pra essas laterais, mas aí tenho que fazer manualmente, corte a laser de alumínio tem um preço proibitivo, nem se compara com o preço de cortar acrílico.


Agora uma vista geral da parte inferior do robô. Aqui dá pra ver que a plataforma principal circunda os motores, mas sem nenhum contato com eles. A bateria está presa à plataforma por uma fita de velcro. Estou usando uma de Li-Ion de 12 volts e se for acreditar no fabricante chinês ela fornece 6800 mAh. Pessoalmente duvido que passe muito da metade disso, mas mesmo assim já resolve bem pelo preço dela, depois até comprei mais uma pra usar de backup.



Sobre as rodas, já que tava cortando acrilico, cortei as rodas também. Já sabia que ia patinar, então já cortei também um molde em acrilico pra fazer os pneus com borracha de silicone. Só que aí também errei o chute pq o molde ficou pequeno demais pro tamanho das rodas e no fim arrebentei um monte de pneus tentando instalar eles. Eventualmente consegui, até meu filho de 4 anos arrebentar um dos pneus hoje :/. De qualquer jeito vou precisar de outro molde, desta vez eu acerto no tamanho.

Essa é uma opção que vc devia considerar, fazer um molde pra pneus de borracha não é difícil. Borracha de silicone líquida não é cara e nem difícil de encontrar. No mercado livre tem de monte e com todas as "durezas", inclusive próprias pra pneus. Isso reduziu muito o chacoalho nos componentes do robô, especialmente da câmera que precisa de alguma estabilidade pra gerar imagens boas quando o robô está em movimento. E ter esse recurso na mão é bem útil. Veja o rodízio no topo da foto, entre o rodízio e a plataforma tem uma plaquinha de silicone que fiz com as sobras do silicone que preparei para os pneus, também está lá como um amortecedor. Vc poderia moldar peças de silicone "sob medida" pro teu projeto e se quiser sofisticar um pouco compre dois tipos de borracha, uma bem rígida como a preta e uma bem macia, como a azul ou verde. Misturando as duas vc consegue a consistência que quiser.

Este robô chegou no seu limite de memória para programa e de uso de pinos, não dá pra por mais nada nele, então, vou manter o wixel para a comunicação com o computador e alguns sensores mais críticos e acrescentar um arduíno pra cuidar dos motores e de sensores adicionais, ou talvez acrescentar um terceiro motor, ainda não sei mas de qualquer jeito o serviço vai ter que ser dividido entre o wixel e o arduíno pra poder acrescentar qualquer outra coisa.

Então no fim esse vai ser o uso da biblioteca que estou desenvolvendo. Mas até lá, fiz uma versão bem simplificada do robô só com arduíno que pretende matar vários coelhos. Já é um teste pra biblioteca de controle dos motores, também é uma estrutura simples o suficiente pra ser replicada várias vezes com um custo muito baixo, isso é muito bom pra classes de estudantes que precisam de várias unidades pra atender todos os alunos ou grupos e finalmente dá uma destinação a algumas dezenas de motorzinhos de impressora que tenho aqui.

No próximo post falo mais sobre esse projeto.

Abraço

Wilmar,

Agora voltando ao problema de vibrações, acho que vc tem razão, o rotor passa um pouquinho, volta, e fica no vai e vem por um tempinho até parar provocando a vibração. De qualquer maneira, isso significa que o pulso está muito longo. Sempre existe uma velocidade onde o tempo do pulso e o tempo do movimento do rotor entram em equilíbrio e quando o rotor chega em uma fase, a fase seguinte já está energizada e o rotor segue o movimento sem esse vai e volta. O problema é que eu acho que o motor não consegue partir nessa velocidade, precisa ser acelerado até ela. Outro problema é que como disse antes, essa velocidade não é fixa, depende de vários fatores. Quando vc usa o half-step vc está diminuindo o percurso do rotor pela metade, então ele chega na fase seguinte com muito menos que a metade da inércia,  diminuindo bastante a vibração. Além disso, como as fases estão mais próximas, vc precisa de menos corrente pra atrair o rotor.

Vejo o funcionamento assim: como são motores com imãs permanentes no rotor, eles tem um torque de retenção. Então mesmo com tudo desligado, o rotor vai estar sempre apontando pra alguma fase por simples atração magnética. Junto com isso existe toda a massa do robô que tem sua inércia e isso também influi no torque de retenção. Esse torque de retenção precisa ser vencido para que o rotor se mova para a fase seguinte. Usando full-step com uma bobina é facil imaginar isso acontecendo.
O rotor está estacionado na fase "a", a fase "b" é energizada e a corrente começa a aumentar nela. Em determinado momento o campo magnético fica forte o suficiente pra vencer o torque de retenção e o rotor começa a se mover e a acelerar (bastante). A corrente na fase "b" está aumentando com o tempo, então a cada instante o campo magnético está mais intenso do que no instante anterior. Apenas isso já faria o rotor acelerar durante o percurso, mas como ele está se movendo da direção da fase energizada, a cada instante ele também está mais perto e mais sujeito ao campo magnético dela. A distancia também diminui o efeito de retenção magnético da fase anterior e o movimento em curso ganha inércia com o tempo. Então o movimento do rotor de uma fase para outra é sempre acelerado, nunca em velocidade constante. Portanto quanto mais distantes estiverem as fases, maior será a velocidade de chegada do rotor e maior será o baque na chegada. O crescimento da velocidade no rotor é exponencial, então quando vc diminui o percurso do rotor pela metade usando half-stepping, vc não está apenas diminuindo pela metade a velocidade de chegada, essa velocidade vai ser muito menor, daí o movimento mais suave que vc conseguiu com half-step e também é por isso que estou experimentado vibração alta com os motores de 48 passos que estou usando, mesmo sendo motores bem fraquinhos.

Com os recursos que tenho só posso influir no tempo dos pulsos pra tentar resolver a questão, então é isso que to tentando fazer. Deve existir uma equação ou um algoritmo que permita calcular o tempo dos pulsos levando em consideração todos esses fatores, se conseguir descobrir qual é o problema está resolvido, mas acho que provavelmente é mais facil resolver isso via hardware, só que teria que ser usada uma abordagem bem diferente dos drivers que tenho visto.

A corrente não tem que ser constante, ela só precisa crescer o suficiente pra fazer o rotor iniciar o movimento, a partir daí ela pode despencar e o ideal seria que chegasse a zero no momento em que o rotor chega na fase, já ativando a fase seguinte. Dificil é detectar o inicio do movimento pra começar a baixar a corrente. Talvez seja possível monitorar a fase anterior pra isso, quando o rotor começa a se afastar da fase onde estava "estacionado", acredito que seja criada uma pequena corrente por indução nela, talvez isso possa ser usado como gatilho para iniciar a descida da corrente na fase energizada, não tenho certeza da viabilidade disso, acha que seria possível?

Pois é Francesco,

Com os novos motores e o adicional de chassi e arruelas principalmente, acrescentei aprox. umas 650 gramas no robô. Ele continua do mesmo tamanho, exceto a extensão para a terceira roda. Não é tão grande, está com 235 mm de largura e comprimento. Na verdade, com os motores de passo menores, ele era menor, aumentei o chassi devido aos motores DC (que tinham comprimento maior). Acho que agora ele deva chegar à uns 2,2 quilos. Preciso levar ele num mercadinho de novo, para pesagem, hehe.

No início, tentei fixar os motores da forma como você fez, mas realmente cortar um perfil de alumínio certinho, com furação grande para encaixe do ressalto do motor não ficou legal. Isso além da dureza do alumínio deixar a montagem bem rígida. Me pareceu que você utilizou uma "bucha" de silicone azul nesse ressalto, (boa idéia) e vc comenta utilizar cantoneiras flexíveis, que também parece ótimo para as benditas vibrações.
Um dia eu derrubei o robô e entortaram os dois suportes. Daí passei a fixar os motores com cintas plásticas utilizadas em eletricidade (Hellerman). Foi assim que iniciei os últimos testes. Só que dessa forma os motores ficam com uma grande área encostados no chassi (onde tentei a espuma) e foi isso que tentei reduzir com a nova fixação. Eu acho até que unir os dois motores com as barras roscadas não seja ideal, mas acabou melhorando bastante e como você disse mantêm os motores alinhados, coisa difícil da outra forma e ainda mais fixando com as cintas plásticas.

Uma coisa do seu chassi é que a terceira roda é bem descentralizada. Inicialmente pensei que isso seria um problema, mas depois ví vários filminhos dessa forma, andando bem. Mas até agora eu estava com o chassi simétrico e a terceira roda tinha o mesmo raio das de tração, ainda não testei bastante com a "rabeta" extra para sentir.

Eu já andei lendo sobre o uso do silicone líquido, mas achei complicado fazer os moldes com recursos caseiros. Essa idéia de fazer o pneu me pareceu excelente e o molde não seria tão complicado, algo como um recipiente qualquer para o diâmetro externo e uma roda interna para o diâmetro interno do pneu, retos mesmo. No sábado fui tentar achar uma rodinha melhor e nada, nem de carrinho de feira se acha fácil por aqui. Como eu cortei bastante as de plástico para fixar os codewheels dos encoders ela ficaram fraquinhas e agora com o maior peso estão literalmente abrindo o bico.
As poucas que achei são duras, para grandes cargas, e talvez com o pneu de silicone fiquem bem mais macias.

Como fica o atrito do silicone com pisos domésticos ?

Usando borracha de câmera de moto no externo das rodinhas plásticas, melhora o atrito, mas fica bem duro e microscópicamente com certeza irregular, daí elas escorregam com facilidade. Acho que uma roda mais reforçada e pneus feitos de silicone são uma ótima saída para o meu robô!.

Quanto a memória e pinos ainda tenho folga, porque estou utilizando dois Arduinos, mas principalmente porque com o aprendizado das facilidades necessárias para a navegação e otimização das funções fui retirando bastante código meio duplicado. Eu até procurei na internet dicas das facilidades necessárias e como estruturá-las e nada. Acha-se livros inteiros sobre navegação, mas não nesse quesito.
O complicado é que com o código ficando mais complexo, depois de um tempo fica difícil saber porque está do jeito que está, hehe. Às vezes saia mudando e pau, não dava certo porque como estava tinha um motivo.

Com o código crescendo, sentí dificuldades com a IDE do Arduino, até porque tinha juntado os arquivos de novo em um único e achar as coisas nele ficava bem complicado. Estou testando o Codeblocks for Arduino agora, na conversão que preciso fazer. Estou gostando dele, pelo menos é bastante fácil achar as coisas no código, lembrar o nome das variáveis...

Quanto à vibração, você acabou descrevendo o que andei pensando. É meio difícil descrever isso né, pelo menos fica bem longo, mas acho que realmente é isso.
Eu acrescentaria ainda outro detalhe: como no half stepping a diferença de torque é de 40% entre duas e uma bobina energizada, com duas bobinas o rotor seja no final do passo muito mais rápido do que com uma, daí, pode-se supor que a rotação instantânea do motor/roda também sejam diferentes entre os passos, o que ajuda na vibração e ao robô andar meio aos soquinhos nas baixas rotações.

O recurso que vc utilizou de desligar a bobina depois de um tempo e aguardar o final do período do passo reduz significativamente a vibração, mas não impede o rotor de chegar rapidamente lá. Pensando no seu raciocínio de achar uma rotação onde as coisas se equilibrassem e não houvesse tanta vibração, me convencí de que na melhoria de ajustar a corrente para deixar o torque igual com uma ou duas bobinas, vou pensar em um jeito simples de, pelo Arduino, poder chavear alguns patamares de corrente.

Não sei se os seus motores fazem isso, mas os meus que têm corrente menor (0,7A mas estou usando aprox. 50% disso), quando são mantidos energizados com duas bobinas fazem um chiado parecido como algo derretendo ou em curto. Em baixas rotações dá para escutar a chiadeira das bobinas nos passos com duas bobinas ligadas, parece um motor á vapor, hehe.
P. ex., para curvas, não é necessario manter a corrente utilizada em acelerações para travar o motor, daí diferentes patamares podem ajudar nisso, e a economizar bateria. Agora não tenho idéia ainda, mas acho que a autonomia caiu horrores.

Sobre a possibilidade de encontrar uma equação para esse equlíbrio, acho que além de complexa (não vejo como medir isso, teria que ser teórico) pode complicar em alguma situação de maior solicitação, uma rampa p. ex.
Acho que uma boa saída seja mesmo a utilização de aceleração e desaceleração com a menor corrente possível.

Com o L297 dá até para pensar em monitorar se o PWM atuou ou não, mas o corte pelo PWM tem a ver com a corrente nas bobinas, não indicando se o rotor chegou no final do passo ou não!. No entanto, pode indicar que é possível reduzir um pouco a corrente, mas isso na base da tentativa e erro, porque alguma matemática em cima disso é difícil, porque tanto a tensão de referência (da ordem de milivolts) quando a medição indireta da corrente das bobinas oscila muito, parecem na verdade um ruído.

Eu já cheguei a utilizar o acelerômetro que tenho em uma plaquinha que chamo de expansão, para tentar monitorar se o robô tinha empacado em algum obstáculo. Isso é possível, mas discernir uma vibração para atuar em um controle de corrente das bobinas não sei não, pois o ruído intrínseco do acelerômetro talvez se confunda com a vibração, isso se o acelerômetro captar a vibração né. Como tive que mudar várias coisas para migrar para os motores DC e eles não vibravam praticamente nada, não progredí nisso, na verdade já tinha concluído que precisava me aprofundar no estudo do Filtro Kalman para melhorias. Como estou a meses parado no software essa foi só uma das coisas que ficaram para depois...

Wilmar

Olá Wilmar,

Achei o teu robô parrudo pq ele tem quase o mesmo tamanho que o meu, na verdade o meu é um pouquinho maior, tem 25cm do comprimento, distancia externa entre rodas de 22,5 cm. Só que o teu é muitíssimo mais potente e robusto. Mas pensando que vc quer que ele ande na grama e lugares assim, suponho que isso seja necessário.

Aquela peçinha azul que vc viu é de acrílico, não de silicone, fiz pra não forçar a lateral. Esse ressalto que vc comentou estava atrapalhando a fixação e forçando a lateral de acrilico, já tinha quebrado uma antes de por essa peça. Mas agora que vc falou, se eu conseguir moldar com silicone bem rígido, tambem pode servir pra amortecer vibrações, boa idéia, vou tentar algo assim.

Não entendi direito o que vc quer dizer com terceira roda decentralizada, a função dela é ser uma roda de apoio. Sei que quanto mais distante ela estiver do eixo de tração, mais torque o robo precisa pra fazer as curvas, no movimento retilíneo não faz diferença. Na verdade esse rodizio foi meio que adaptado, antes tinha uma rodinha mais própria pra robos, do tipo esfera, mas não deu certo pq era muito pequena e o robo ficava empacando em qualquer fresta no chão. Como o chão aqui de casa é de tacos instalados a uns 20 anos, fresta tem de monte. Sendo bem maior, o rodizio passa por cima dessas frestas, mas teve que ficar meio fora de lugar. Não me preocupei muito com isso, pq como disse, tudo vai ser repensado nesse robo para a próxima versão, então pretendo fazer uma instalação mais apropriada e deixar a roda de apoio mais próxima do eixo de tração, mas não muito, pq isso tira estabilidade do robo, especialmente pra fazer curvas.

Quanto ao silicone líquido, eu achei excelente como pneus, tem uma ótima aderencia, não patina de jeito nenhum, pelo menos nos pisos internos "normais" (madeira, cerâmica), não testei em condições externas. Além disso, ele absorve muito bem as vibrações de pequenas irregularidades do chão (como as frestas dos tacos). Vc pode regular até certo ponto a rigidez ou maciez do pneu colocando mais ou menos endurecedor na mistura. Com dois tipos de silicone (duro e macio) vc consegue a consistência que quiser.

Não achei nada complicado trabalhar com silicone. Meu primeiro contato com silicone foi pra fazer moldes de engrenagens, até postei um tutorial sobre isso em:

https://fperrotti.wikispaces.com/Como+duplicar+polias+e+engrenagens

Alí mostra como fazer isso só com recursos caseiros, embora não seja o caso pra moldar pneus, aí o problema é outro, mas se resume a conseguir o molde, só isso, e como vc disse não é dificil. Uma dica, se for usar qualquer coisa que não seja plástica no molde (como uma rodela de madeira) cubra com aquele filme de pvc para alimentos, assim o silicone não adere ao molde. Se tiver problemas de aderência, um jato de óleo de silicone em spray no molde antes de jogar o silicone líquido facilita a desmoldagem. Tenho certeza que vc vai ter resultados muito melhores do que com a camera que está usando agora.

Sobre a programação, a IDE do arduino é horrível, serve pra pequenos programas, mas não dá pra desenvolver uma aplicação mais elaborada nela, mas agora existem várias opções de IDE's bem mais sofisticadas, ultimamente eu tenho usado um plug-in do sublime text muito bom, to gostando muito, aquilo é uma IDE de verdade, embora não seja realmente uma IDE, se é que me entende. Não conheço esse Codeblock, mas se é o que estou pensando, programação encaixando blocos, duvido que vc consiga fazer algo realmente avançado com isso, mas deve ser muito bom pra coisas mais básicas. Um programa grande tem que ter alguma organização no código, não importa se usa codeblock ou c++, precisa ser separado em módulos, senão acaba ficando impossível de administrar, então como professor de programação te aconselho a investir em técnicas de modularização e programaçao orientada a objeto. Pode ser mais dificil agora, mas vale a pena investir nisso. E abuse dos comentários no código, isso nunca é demais.

Quanto à vibração, estava pensando no caso do hal-stepping, vc acha que nos passos com duas bobinas ativadas o rotor anda mais rápido, eu não tenho essa certeza, na verdade acho que é o contrário. Supondo um motor de 4 fases: a, b, c e d. No half-stepp a gente liga as fases na sequencia: a, ab, b, bc, c, cd, etc. Agora imagine a posição do rotor em cada uma dessas fases. Quando a fase 'a' está ativada, o rotor aponta para ela, quando as fases 'ab' estão ativadas, o rotor fica apontado no meio das fases 'a' e 'b', essa é uma posição que ele só assume porque tem forças dos dois lados "puxando" o rotor, como são forças com a mesma intensidade ele fica no meio.

Mas pensando no que acontece nessa transição: a fase 'a' está ativada, então o rotor aponta pra ela, no passo seguinte a fase 'a' continua ativada, mas a fase 'b' também é ativada, isso vai levar o rotor a ficar no meio das duas, mas a fase 'a' continua atraindo o rotor, o rotor irá se posicionar no meio, mas esse movimento vai contra a atração que a fase 'a' exerce, então o movimento vai ser mais lento porque tem duas forças opostas puxando o rotor. No passo seguinte, o rotor já está no meio do caminho e então a fase 'a' é desligada e apenas a fase 'b' exerce atração sobre o rotor, aí ele se move pra fase 'b' muito mais rápido, ainda mais considerando que como essa fase já estava ligada desde o passo anterior, a corrente já está em um nivel alto, não está subindo. Então, acho que se for pra diminuir a corrente deveria ser nos passos com uma bobina, não nos passos com duas.

Agora pensando no caso de full-step com duas bobinas. As fases são ligadas na sequencia: ab, bc, cd, da, ab, etc. A qualquer momento o rotor está sempre entre duas fases. Supondo uma situação inicial onde o rotor está entre a fase 'a' e a fase 'b'. No passo seguinte a fase 'a' é desligada e a fase 'c' é ligada. Até chegar na fase 'b', o rotor anda rápido porque tem duas bobinas atraindo ele, quando o rotor passa pela fase 'b' a composição de forças muda completamente, agora a fase 'b' vai agir contra o movimento, freando o rotor, a partir daí ele se move mais devagar até chegar no meio das fases 'b' e 'c'. Então acho que nessa situação existem dois 'baques' no motor, um quando ele passa pela primeira fase e outro quando chega na posição final entre as duas fases, por isso a vibração é bem maior. O que acha disso?

Francesco,

Pois é, o meu robô (DUWI) era mais esbelto e acho até leve.
Eu acabei aumentando o diâmetro das barras roscadas que fixam os diferentes níveis, e colocando o nível inferior bem mais espesso, tudo para tentar reduzir a vibração e o ruído. Mas realmente, os motores é que assustam.

O comentário sobre a terceira roda descentralizada foi apenas mais uma constatação pelo seu robô, de que isso não é um problema como eu pensei quando comecei o meu. Como meus primeiros motores eram fraquinhos de dar pena, achei que uma descentralização dessa roda muito alta exigisse muito torque e ele não fizesse as curvas e rotações. Agora coloquei a "rabeta" no meu na marra, porque o rodízio ficava muito louco e fazia um ruído enorme.

Vou comprar um pouco desse silicone para tentar fabricar umas rodas, já que não acho nada por aqui nem nos sites, no diâmetro externo que preciso. Assim, além de melhorar um pouco mais a vibração, melhoro a tração que agora ficou capenga devido ao maior peso.
Eu havia lido no seu blog sobre o silicone, mas como disse, achei complicado os moldes. Obrigado pelas dicas sobre a aderência do silicone no molde, vou me lembrar delas, hehe.

Sobre o Codeblocks, ele é uma IDE para C/C++ e Fortran, pelo que me lembro, é open souce e aparentemente é um produto com continuidade, já que está na revisão 12.xx. A versão que estou testando é uma meio capada, específica para Arduino. A dica eu peguei no fórum aqui do LdG. O link é este . 

Eu não tenho familiaridade com nenhuma IDE mais parruda, portanto ainda não sei muita coisa dessa, mas ela tem trocentos recursos, com certeza e é leve. A única chatice, se bem que de acordo com o standard do C e/ou C++, é que não se pode chamar uma função antes de definí-la. Dá uma trabalheira danada converte do original Arduino, pelo menos deu aqui, pois numca me liguei com a sequência das funções. Eu as arrumava por grupos ... Por outro lado, se acha facilmente as funções e variáveis com o Codeblocks, assim a arrumação "visual" não é importante.


Quanto a vibração em half stepping, eu pressumí que a rotação possa ser maior nos passos com duas bobinas energizadas, porque, teoricamente, nos passos com uma única bobina, perde-se 30% de torque. Assim, se o torque é maior nos passos com duas bobinas, acho que a velocidade também seja. E porque a velocidade seria maior ? Porque com o maior torque e mesma carga, supostamente o rotor chegue no final do ângulo do passo mais rápido.

Não tenho 100% de certeza disso não, mas acho coerente o raciocínio. Eu até procurei informações sobre isso, mas é daquelas difíceis ...

Eu estava lendo até agora um fórum americano (AVR Freaks) sobre uma dúvida que surgiu para aquela implementação de diferenciação de corrente no half stepping e seleção do nível de corrente pelo Arduino e estou até meio tonto de tanta elocubração deles também, hehe.

Lendo o seu raciocínio sobre a sequência das bobinas, realmente me pareceu correto, daí não sei mais... me bateu uma dúvida cruel agora!!. Acho que vamos ter que recorrer aos universitários, hehe. Não sei, talvez em função exatamente do seu raciocínio é que o torque só seja 30% menor e não 50%!! Mas o fato é que é maior com duas bobinas.

Na verdade eu comecei a suspeitar disso agora, observando o meu robô em baixas rotações. Ele até oscila para frente e para trás um pouco. Como ele não está travando, suponho que o torque nos passos com uma bobina esteja suficiente, assim o motivo dessa oscilação não seria torque e sim velocidade (rotação). Antes eu só usei full stepping com duas bobinas e não tinha esse comportamento.

Tá certo que quando eu digo baixas rotações, estou dizendo baixa mesmo, com 30 mS de período. Essa era a minha rotação baixa, e a utilizava em situações onde ocorria colisão, só detectada pelos parachoques com microswitch, pois o ultrasônico que tenho aqui (HC-SR04) não detecta objetos muito esbeltos.
Como meu projeto é para um robô autônomo que ande em um ambiente caseiro, uma mesa e cadeiras é exatamente o local onde ele mais empacava. Daí instalei os parachoques e reduzí a rotação nessa condição, tentando manobrar e sair da enrascada.

Vou tentar refrescar a cabeça aqui para tentar entender melhor essa questão do half stepping. Se eu conseguisse implementar logo os recursos que falei anteriormente sobre controle de corrente dava para concluir logo isso, mas apareceram umas dúvidas lendo o material da própria ST (fabricante dos L297 & L298).

Wilmar

Andei melhorando a biblioteca e cheguei a algumas conclusões sobre a movimentação, depois ponho os detalhes aqui.

Coloquei um vídeo no youtube como o robô testando os movimentos implementados na biblioteca:

http://youtu.be/Q-9cnJ0gP5Q

Prof Perroti , gostei demais do seu Wikispace!

Parabéns ! Ja tinha divulgado-o no Lab de garagem?

Precisa divulga-lo mais.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço