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?
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por