Controlador de motor de passo unipolar simples e barato.

Pessoal, controlar um motor de passo de forma ideal é utilizar algum circuito mais complexo, com chopper e varias coisas que as vezes, se tornam caras.
O que pretendo com a ajuda de alguém por aqui, é construir uma placa simples, capaz de rodar aquele motor de passo que você tirou de uma impressora e jogou em uma gaveta.
Minha ideia inicial é usar um pic12f675 e 4 mosfets / transistores para isso.
A placa é infinitamente menor que uma necessária para abrigar um L297+7409+mosfets+diversos resistores e tudo mais:
O esquema:

A placa:

Agora preciso da ajuda de algum mestre em PIC para botar para funcionar :) Podemos fazer alguma versão para ATMEGA tbm.
Alguém se habilita?

Exibições: 889

Responder esta

Respostas a este tópico

Cinesio, legal, mais ou menos o que quero fazer, meu problema é na aquisição dos pulsos ainda. Quero utilizar os comandos "STEP/DIR" que são genéricos para uma gama enorme de componentes/placas/controladoras/clp's....

Achei um projeto com o nome de 3axispic, problema que é de 2008 e não acho o código fonte para analisar.

Só quero lembrar o pessoal, que esse projeto é para motores unipolares pequenos (geralmente menores que 1kg de torque), onde um controle de corrente não é tão necessário.

Achei para Attiny, vou tentar converter para PIC.

/********************************** ABSOLUTELY TESTED AND WORKING ***********************************/

volatile byte curStep = 0;
byte coils[] = {0, 1, 3 ,4};

/* ATTINY85 PINOUT */
#define stepPin 0 //pin7 - PORTB 2 (interrupt 0) --Used as Interrupt (so 0)
#define dirPin 0 //pin1 - PORTB 5 (analog 0) - Reset pin --

/*
* The threshold that identifies if a signal is high or low. It is inside [0, 1023].
* More likely to be higher than the middle-interval value.
*
* For Attiny 85 this has to be the reset pin connected to a Transistor and resistors. It has to read the "low"
* but not Reset your microcontroller...
*/
#define highThreshold 829

/*
* Stepper motor coil states.
* States with more than one HIGHs are halfsteps.
*
* Dead state is the state that no current is sent to the motor.
*/
/*

*/
byte steps[8] ={
0b00100001,
0b00100011,
0b00100010,
0b00101010,
0b00101000,
0b00111000,
0b00110000,
0b00110001,
};
byte dead = 0b00100000;

void setup() {

DDRB = 0b00011011;

/* Triggers the count() function whenever a step signal is received */
attachInterrupt(0, count, RISING);
}

void loop() {}

void count(){

if (analogRead(dirPin) > highThreshold)
PORTB = steps[--curStep % 8];
else
PORTB = steps[++curStep % 8];

}

Então José, desmontei o motor apenas para fins didáticos, com todo cuidado tirei o rotor dele e deixei mais ou menos umas 2 horas parado na mesa, montei tudo de acordo e passei um fio de óleo nos 'mancais'.

Com o motor não aberto, eu junto todos os fios e deixo todos em contato e tento girar o eixo, é necessário fazer uma certa força, com o motor que foi aberto, essa força é bem menor. Agora acredito que deixar o rotor fora da carcaça faz ele perder o fluxo magnético mesmo.

ps: Montei tudo de acordo, com uma pequena bucha plástica em cima do rotor e outra em baixo, tudo na mesma ordem que estava.

Quando você junta todos fios e tenta girar é normal o prendimento. 

Você esta usando o motor como se fosse um freio. 

Sobre perder magnetismo, não consigo entender como o motor poderia perde-lo se somente abri-lo.

Para mim isso é novidade. Irei pesquisar se tem algum fundamento. 

Só irei acreditar nisso , se algum fabricante afirmar isso.

Eu realizei o teste e acho que isso é valido, pode ser impressão minha, mas vou tentar fazer algum teste com carga mensurável ou algo do tipo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço