Autor Tópico: Agitador magnético controlado por PIC – dúvidas sobre adaptação de código asm  (Lida 6714 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline wbastz

  • Novato
  • *
  • Posts: 8
  • Sexo: Masculino
  • GUIA-CNC
Olá amigos,

Meu hobby principal é o cultivo de cogumelos e para tanto necessito construir um equipamento de laboratório chamado agitador magnético sem motor. Esse agitador é um equipamento utilizado em laboratório para promover a mistura ou agitação de líquidos por intermédio de uma barra magnética que fica imersa dentro do líquido que está sendo agitado.Este agitador tem um perfil extremamente baixo e é livre de manutenção devido á ausência de partes móveis.

Um campo magnético rotativo (criado por bobinas energizadas) atuando externamente e logo embaixo da barra magnética , faz com que essa barra se mova, agitando o líquido, conforme o seguinte esquema simplificado :

http://www.cogumelohobby.com/motor_de_passo/agitador.jpg

Foto de um equipamento industrializado, parecido com o que pretendo construir :

http://www.cogumelohobby.com/motor_de_passo/agitador_sem_motor.jpg

Poderiam por favor ajudar a alterar um código escrito em assembler publicado na Revista Elektor (vide links mais abaixo) para poder ser usado neste projeto de agitador ?
Este controlador foi originalmente projetado para controlar um motor de passo unipolar por meio de um PIC.

O que pretendo controlar então não seria um motor de passo , mas na verdade acionar sequencialmente 4 eletro-imãs (4 bobinas) montados em formato de quadrado, conforme esquema seguinte:

http://www.cogumelohobby.com/motor_de_passo/bobinas.jpg

Estas bobinas quando acionadas na sequência correta, criam um campo magnético giratório à semelhança de um motor.

Cada conjunto de 4 bobinas dentro do agitador, promove a agitação de um frasco somente.
Ao se adicionar mais conjuntos de 4 bobinas  cada , será possível agitar mais frascos no mesmo equipamento e todos sincronizados ao mesmo tempo, conforme o desenho seguinte, onde existem  6 conjuntos com 4 bobinas cada um:

http://www.cogumelohobby.com/motor_de_passo/base_com_6_bobinas_internas.jpg

Vista lateral em corte mostrando um único conjunto de 4 bobinas dentro do equipamento:

http://www.cogumelohobby.com/motor_de_passo/bobinas_dentro_da_base.jpg

Essas 4 bobinas se comportariam como um motor de passo com um passo de 90 graus, onde o rotor seria a barra magnética e o estator seria as 4 bobinas acionadas em seqüência pelo controlador do motor de passo.

O acionamento do campo magnético giratório dessas bobinas precisaria ser feito da seguinte forma :

O campo magnético precisa girar somente em um único sentido.O circuito original da revista permite girar o motor de passo nos dois sentidos.

O campo giratório deve alternar entre uma rotação mais lenta de cerca de 59 rpm por 5 segundos e uma  rotação mais rápida de cerca de 234 rpm por 45 segundos, depois retornando para os 59 rpm por 5 segundos, e assim por diante, alternando as rotações com os respectivos  tempos citados acima indefinidamente, enquanto a alimentação do circuito estiver ligada.

Essas velocidades tão específicas citadas acima são resultantes de cálculos mostrados mais adiante.

Essa diminuição por 5 segundos em rotação baixa à cada intervalo de 45 segundos na rotação alta permite recolocar em giro qualquer  barrinha magnética que não esteja mais acompanhando o campo magnético rotativo criado pelas 4 bobinas  (a barra fica apenas vibrando no lugar, sem agitar) 

Vide adiante os links para dois pequenos vídeos mostrando o funcionamento de um agitador desse tipo . Notar a diminuição temporária na rotação da barra magnética dentro do copo de vidro . Por medida de economia no tamanho dos arquivos, estou mostrando nesses vídeos apenas alguns segundos antes e depois do momento em que o agitador reduz a rotação para capturar as barrinhas “desgarradas”.

CONTROLADOR PUBLICADO NA REVISTA ELEKTOR

O controlador de motor de passo publicado no site da revista Elektor usa um PIC12C508, programado em assembler  para acionar um motor de passo unipolar de 6 fios com velocidade fixa.

Artigo da Revista Elektor em português :

http://www.cogumelohobby.com/motor_de_passo/Controlador-de-motor-de-passo-com-pic.pdf

O mesmo artigo da Revista Elektor , porém em inglês:

http://www.cogumelohobby.com/motor_de_passo/Stepper_motor_controller_with_PIC.pdf


Nesse artigo ,o código fonte permite fazer com que o motor de passo gire em uma velocidade fixa, mas essa velocidade fixa pode ser modificada pela alteração de uma constante binária (conforme tabela fornecida no artigo) no código fonte.A alteração da constante binária promove a alteração do tempo de duração de cada passo em milisegundos.

Endereço do código fonte original:

http://www.cogumelohobby.com/motor_de_passo/PasPas12C508SourceEnglish.txt


Este circuito , em teoria, poderia ser usado para o acionamento destas bobinas, porém precisaria de algumas alterações para ser adaptado para funcionar conforme descrevi acima , adicionando as duas velocidades de rotação distintas.É aqui que começam minhas dúvidas referentes à essas alterações no código, pois não tenho o conhecimento suficiente para tal.

MINHAS DÚVIDAS:

1) Gostaria de excluir uma parte do código, deixando apenas o necessário de código para girar em um único sentido , pois o equipamento deverá girar sempre em um único sentido.Seria realmente necessário excluir a parte do código que se refere ao sentido de rotação não desejado, ou não seria necessário essa exclusão ?
Do jeito que está, o código original permite girar um motor de passo nos dois sentidos.

2) As principais alterações necessárias no código são as relacionadas ao ciclo de alternância de velocidades citadas abaixo , onde o motor deve realizar esse ciclo indefinidamente.

CICLO DE FUNCIONAMENTO DESEJADO:

O ciclo de funcionamento que deve ser repetido indefinidamente é o seguinte :

Ao ser ligada a alimentação do circuito, o agitador deve funcionar inicialmente à 59 rpm por 5 segundos e depois à  234 rpm , permanecendo nesta rotação maior por 45 segundos. Na sequencia, deve reduzir novamente para 59 rpm , mantendo essa rotação por 5 segundos. Retornar então á rotação maior por 45 segundos , depois ao mais lento por 5 segundos e assim por diante, fazendo isso enquanto o circuito estiver sendo alimentado .

3) Uma dúvida mais básica , gostaria de saber se todos os terminais terra dos dois circuitos (fonte de alimentação e controlador do motor de passo) devem ser ligados juntos ?

4) Segundo o projeto original , será preciso apertar sempre um botão para que o motor comece a girar , porém gostaria que o circuito voltasse a ligar automaticamente em caso de falta de energia elétrica , sem precisar apertar nenhum botão . Como fazer isso ?
 
5) Como fazer também para que o circuito seja acionado tão logo a alimentação inicial seja ligada, sem precisar acionar qualquer botão, girando em um  único sentido e na velocidade mais baixa inicialmente  ? Que alterações devem ser feitas ao código para conseguir isto ?

6) Os pontos L e R (que giram o motor para um lado ou outro) do esquema deveriam ser aterrados para conseguir que o motor sempre inicie o funcionamento quando for alimentado ?  Precisaria usar um resistor limitador nestes pontos ? Se afirmativo, qual seria o valor mais adequado ?  Ou isso poderia ser feito alterando o código ?

Dois pequenos filmes que fiz, mostrando o funcionamento de um agitador comercial , mostrando a diminuição de velocidade :

http://www.cogumelohobby.com/motor_de_passo/filme_1.wmv
     

http://www.cogumelohobby.com/motor_de_passo/filme_2.wmv


Pretendo construir o circuito que utiliza  4 transistores , de acordo com o artigo da revista.Se possível gostaria de substituir por transistores TIP 120.



CÁLCULO TEÓRICO DA ROTAÇÃO DO MOTOR DE PASSO UNIPOLAR :

Em um outro site , encontrei informações sobre como calcular a rotação de um motor de passo, conhecendo o tempo de duração do pulso e o ângulo de cada passo :

http://www.radiolocman.com/shem/schematics.html?di=33475

Aqui , um trecho extraido do site acima :

On the motor it states that each step is 7.5 degrees per step, so that makes 48 steps for one full revolution.

4 phases/step x 3 ms/phase x 48 steps/revolution = 576 ms/revolution

Converting to revolutions/second we get roughly 1.736

1.736 revolutions/second x 60 seconds/minute = 104.16 RPM, not a bad speed.

Traduzindo o texto e adicionando algumas observações ficaria assim :

No motor está escrito que cada passo é de 7,5 graus por passo, de modo que são necessários  48 passos para uma revolução completa.

4 fases/passo    x     3 ms/fase    x   48 passos/revolução = 576 ms / revolução

Para converter 576ms/volta para número de voltas/segundo fazemos o seguinte:

1 volta = 576 ms = 0,576 segundos (576 dividido por 1000).

Fazendo uma regra de três temos:

1 volta ------0,576 segundos
x voltas ----  1 segundo

onde x = 1/ 0,576 = 1,736 voltas

teremos que x = 1,736 voltas/segundo.

Para converter voltas/segundo para voltas/minuto (rpm) ,multiplicar por 60 :
 
1,736 rotações por segundo x 60 segundos / minuto = 104,16 RPM .

Seguindo o raciocínio acima e usando 90 graus como valor para cada passo (4 bobinas separadas 90 graus entre si) , com 4 passos por volta, e substituindo  os diversos valores de milisegundos da tabela,  encontrei os seguintes valores de rpm:


Constante binária         Tempo em ms            Rotação final calculada
10010010                    1 ms                           3750 rpm
10010011                    2 ms                           1875 rpm
10010100                    4 ms                             938 rpm
10010101                    8 ms                             469 rpm
10010110                  16 ms                             234 rpm
10010111                  32 ms                             117 rpm
10011000                  64 ms                               59 rpm
10011001                128 ms                               29 rpm

As duas últimas constantes binárias foram calculadas por mim, pois não existem na tabela original.

Se os todos os cálculos e raciocínio acima estiverem certos, as rotações mais adequadas ao meu projeto seriam 234 rpm na velocidade alta e 59 rpm na velocidade baixa .

Minha idéia seria modificar o código original , inserindo os 5 segundos de funcionamento do controlador na velocidade mais baixa (59 rpm com 64 ms de duração do passo) mais os 45 segundos de funcionamento na velocidade mais alta (234 rpm com 16 ms de duração do passo) e fazer essas rotações com os respectivos tempos de funcionamento  ficarem se alternando em um loop infinito. Seria como usar uma constante binária por um certo tempo de funcionamento seguida do uso de outra constante binária pelo outro tempo. Meu problema seria inserir esses ciclos e fazer tudo funcionar direito depois.Qualquer outra idéia sobre como fazer isso , será bem vinda.

Alguém por favor poderia escrever todas as alterações necessárias no arquivo asm , pois não consigo alterar o código conforme gostaria e deixar esse código pronto para ser compilado apenas ?

Ou então deixar os campos para troca das constantes binárias em branco , pois talvez as duas constantes escolhidas para as duas velocidades (alta e baixa) não funcionem de acordo com o desejado e precisem ser alteradas.

Desculpem o “livro” que acabei escrevendo para fazer essas perguntas , porém pretendi ser o mais claro possível e também mostrar o máximo de detalhes.

Obrigado pela ajuda e se ainda tiverem qualquer dúvida sobre o que pretendo fazer, por favor escrevam, pois estou a disposição,

Um abraço à todos ,

Wilson R. Bastazini

Offline F.Gilii

  • Administrador
  • CNCMASTER
  • *******
  • Posts: 13796
  • Sexo: Masculino
  • Consultoria, Automação e Construção de Máquinas
  • Cidade - UF: Atibaia - SP
  • Nome:: Fabio Gilii
  • Profissão: Tec. Mecanica de Precisão
Olá Wilson,

Perdoe se a idéia não vai de encontro ao que deseja, mas não seria mais fácil usar o motor de passo que já está pronto e aparentemente funcionando, e acoplar no eixo dele um dispositivo com imãs, e estes arrastariam um objeto no formato que deseja, dentro do vaso onde deseja agitar um liquido?

Apesar de usar um motor de passo, estes são extremamente confiáveis, leves, pequenos, e quase não requerem manutenção.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Realmente, um motorzinho de passo ou um motor universal com um dimmer poderiam ser usados e
talvez possam ser obtidos em sucatas.

Outra opção seria montar 4 eletroimãs e acioná-los de maneira a gerar um campo magnético girante é viável. Usando:
(1) Um microcontrolador (um PIC, por exemplo) e 4 transistores
(2) Um conjunto de CIs, LM555, L-297 e L-298 e ligando os eletroimãs como se fossem os enrolamentos do motor de passo.

Concluí que isso é necessário por ser um conjunto de agitadores, não é? E aí, os eletroimãs de todos os misturadores poderiam ser acionados em conjunto (ligados em paralelo ou em série).

Supondo que os eletroimãs como os quatro pontos cardeais: N - L - S - W

O campo girante pode ser gerado acionando os eletroimãs em sequência pelo L-297 / 298 conforme a seguir:  N - NL - L - LS - S - SW - W - NW - ....

Assim, se o projeto original é para motores de passo, não precisaria mudar o software, é só posicionar e ligar os eletroimãs corretamente em sequência.
« Última modificação: 19 de Agosto de 2010, 22:13 por minilathe »

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino


Pow ! Não vi que o Wilson havia postado aqui ... eu ia mandar seu endereço pra ele Gil ...  ;D

Pra alterar / complementar o prog pro PIC ... eu gostaria de fazer mas tô até a tampa de trampo ...  :'(

Wilson, suponho que os agitadores estejam disponíveis no comércio, não ? Eu gostaria de ter um em mão pra fazer uns testes aqui ...

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Jorge,

Pow ! Não vi que o Wilson havia postado aqui ... eu ia mandar seu endereço pra ele Gil ...  ;D

Ok, estamos por aqui!!  :D

Offline wbastz

  • Novato
  • *
  • Posts: 8
  • Sexo: Masculino
  • GUIA-CNC
Olá Gil,comentando suas respostas:

Outra opção seria montar 4 eletroimãs e acioná-los de maneira a gerar um campo magnético girante é viável. Usando:

(1) Um microcontrolador (um PIC, por exemplo) e 4 transistores


Isto é exatamente o que o projeto da Revista Elektor faz com o motor de passo unipolar , com a diferença de que o motor gira apenas em uma velocidade fixa. O que eu queria , seria escolher uma velocidade (por exemplo a mais alta) e adicionar mais uma velocidade (a mais baixa) porém com dois tempos de funcionamento distintos para cada velocidade. Pensei em alterações no código, mas não sei como fazer isso.

(2) Um conjunto de CIs, LM555, L-297 e L-298 e ligando os eletroimãs como se fossem os enrolamentos do motor de passo.

Essa segunda possibilidade também é interessante, porém gostaria de saber se também é possível fazer a alternancia de velocidades com um circuito usando estes componentes ?

Concluí que isso é necessário por ser um conjunto de agitadores, não é? E aí, os eletroimãs de todos os misturadores poderiam ser acionados em conjunto (ligados em paralelo ou em série).

Correto

Supondo que os eletroimãs como os quatro pontos cardeais: N - L - S - W

O campo girante pode ser gerado acionando os eletroimãs em sequência pelo L-297 / 298 conforme a seguir:  N - NL - L - LS - S - SW - W - NW - ....


Assim, se o projeto original é para motores de passo, não precisaria mudar o software, é só posicionar e ligar os eletroimãs corretamente em sequência.

Sim , porém precisaria adicionar a sequencia de funcionamento conforme abaixo:

1) Ao ligar a alimentação do circuito, as bobinas começam a "girar" na velocidade mais baixa durante cinco segundos
2) Depois passasm a "girar" na velocidade mais alta por 45 segundos.
3) Retornam à velocidade mais baixa por 5 segundos
4) Retornam à velocidade mais alta por 45 segundos
5) retornam à velocidade mais baixa, etc,etc,etc
6) Efetuam esta alternância de rotações com os respectivos tempos de agitação enquanto a alimentação estiver conectada.

Para alterar o código que está na Revista , seria muito trabalhoso ? Desculpe , mas  não tenho a menor idéia de como fazer isso.

Muito obrigado,

Wilson
 

« Última modificação: 23 de Agosto de 2010, 10:41 por wbastz »

Offline wbastz

  • Novato
  • *
  • Posts: 8
  • Sexo: Masculino
  • GUIA-CNC
Olá Jorge,

O agitador comercial que citei faz parte dos equipamentos do laboratório onde trabalho e não poderia ser aberto de forma alguma. É um equipamento marca WTW - OXITOP e é usado para testes de DBO (demanda bioquímica de oxigênio). Eles já estão ligados na tomada há mais de 10 anos , 24 horas por dia sem parar.

Aqui um link contendo fotos do agitador (a base amarela menor) e dos frascos usados no teste de DBO :

http://www.merckeurolab.be/app/catalog/Catalog?parent_class_id=4&parent_class_cd=116082

O que pude extrair de informações técnicas do manual é o seguinte:

Alimentação por fonte externa - 18 VDC - 1 A
Consumo – 24 VA max
Rotação 180 à 450 rpm (acho um pouco altas para o que preciso)
Capacidade para agitar 6 frascos ao mesmo tempo ( o menor deles, pois existem para 12 frascos também)

Observando o equipamento por baixo através das ranhuras de ventilação, pude notar a existência de um CI Siemens TCA 3727, que é um drive para motores de passo bipolar.

Link para o datasheet , se puder ajudar em alguma coisa:

http://www.cogumelohobby.com/motor_de_passo/TCA3727.pdf

Obrigado,

Wilson

Offline wbastz

  • Novato
  • *
  • Posts: 8
  • Sexo: Masculino
  • GUIA-CNC
Olá Fábio,

Já cheguei a montar um agitador até mais simples usando um controlador de velocidade , uma ventoinha de computador com um imã retirado de um HD colado nela. Funciona muito bem , porém não é possível mudar a rotação de tempos em tempos conforme citei na mensagem.

Preferiria mesmo era usar as 4 bobinas acionadas por 4 transistores e um PIC programado para tal. Infelizmente, não entendo de linguagem de programação para PICs.

Valeu pela dica, obrigado

Wilson


Offline Beto_s

  • Hobby
  • ****
  • Posts: 284
  • Sexo: Masculino
  • Cidade - UF: S.José dos Pinhais-PR
  • Nome:: Alberto
  • Profissão: Téc. em Eletrônica
E aí , já resolveu seu problema ?

Tem que ser o PIC 12f ... ou pode ser um 16F628 por ex? Bem facil de achar...

Offline wbastz

  • Novato
  • *
  • Posts: 8
  • Sexo: Masculino
  • GUIA-CNC
Olá Alberto,

Ainda não. O PIC original utilizado é um PIC12C508 (não é flash e portanto não permite re-gravação) .Inclusive tive problemas na hora de gravar usando o programa fornecido na revista.

Como não entendo de programação, qualquer outro PIC que fosse regravável e que fizesse o circuito funcionar como desejo seria aplicável aqui. O que falta para mim é um código funcionando.

Um dos membros deste forum se ofereceu para fazer o projeto completo para mim (fico muito agradecido por isto) , porém a minha verba está curtíssíma e talvez na realidade, eu acabe desistindo deste projeto.

Wilson


Offline Beto_s

  • Hobby
  • ****
  • Posts: 284
  • Sexo: Masculino
  • Cidade - UF: S.José dos Pinhais-PR
  • Nome:: Alberto
  • Profissão: Téc. em Eletrônica
Vc tem o gravador de PIC ?
Grava o 16F628 ?
Uso este PIC para pequenas aplicações e então fica mais fácil tentar acertar o programa ....


Offline fh007

  • Novato
  • *
  • Posts: 20
  • Sexo: Masculino
olá,
  Tem que ser PIC?
   Você pode usar uma placa arduino junto com a biblioteca Stepper. A linguagem é fácil e só vai restar fazer a parte de potência, nada que alguns TIP122 não resolvam...
http://www.arduino.cc/en/Tutorial/Stepper
   A vantagem é que voce pode colocar quantas rpm quer e o arduino se encarrega de fazer a divisao de tempo dos passos, sem precisar configurar prescales e nem nada do tipo.
 
  Uma placa arduino aqui no Brasil custa de R$60 a R$90 reais
http://lista.mercadolivre.com.br/arduino
se a grana estiver curta, você pode fazer sua própria placa em casa e então vai gastar uns R$30
http://www.arduino.cc/en/Main/ArduinoBoardSerialSingleSided3
e fizer o arduino na protoboard gasta uns R$15.
http://www.instructables.com/id/Standalone-Arduino-ATMega-chip-on-breadboard/


http://www.arduino.cc/en/Tutorial/Stepper

Offline fh007

  • Novato
  • *
  • Posts: 20
  • Sexo: Masculino
o codigo fonte ainda meio cru:
#include <Stepper.h>

#define motorSteps 200
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11

// inicializa a biblioteca
Stepper myStepper(motorSteps, motorPin1,motorPin2,motorPin3,motorPin4);

void setup() {
 }

void loop() {
 // programa a velocidade em 59  rpm
  myStepper.setSpeed(59);

 // 59 rpm >> 59*200 / 60 = 197 passos/seg *5 seg == 983 passos
    myStepper.step(983);

// muda para 234 RPM
  myStepper.setSpeed(45);

  // 234 rpm >> 234*200 / 60 = 780 passos/seg *45 seg == 35100 passos
    myStepper.step(35100);
}

detalhe : 780 passos por segundo já é o limite para phase driver, talvez o motor de passo possa estolar.
« Última modificação: 04 de Outubro de 2010, 19:27 por fh007 »

Offline fh007

  • Novato
  • *
  • Posts: 20
  • Sexo: Masculino
talvez a melhor solução seja utilizar um motor de corrente continua com um sensor infravermelho agindo como tacômetro no eixo para controlar a velocidade por pwm e assim criar rampa de aceleração
utilizando tambem o arduino
 

Offline wbastz

  • Novato
  • *
  • Posts: 8
  • Sexo: Masculino
  • GUIA-CNC
Olá Fábio,

Muito obrigado pela sua sugestão em utilizar o Arduino, porém um amigo está trabalhando em cima de um PIC e acredito que já terei quase tudo resolvido em pouco tempo.

O Arduino é muito interessante, porém acredito que o circuito sugerido controlado por um PIC dedicado ficaria bem mais barato.

Obrigado pela sua ajuda e pelas informações.

Um abraço,

Wilson

 

/** * */