Witam,
Mam problem z wysterowaniem silnika bipolarnego (4 przewody idące do cewek). Dokładnie jest to aktuator liniowy.
Program, który napisałem powinien działać, ale niestety nie działa, jak to w życiu bywa... Nie wiem, czy problem w sprzęcie, czy jednak...w moim programie.
Generalnie w skrócie: mam 5 wejść do układu scalonego odpowiedzialnego za sterowanie aktuatorem: ENABLE (włącz/wyłącz silnik), DIR (kierunek lewo/prawo), CLK (zegar nadający prędkość silnikowi), STEP0/STEP1 (określenie na 2 bitach rodzaju pracy: full step, half step itd).
STEP0 oraz STEP1 sobie darowałem i mam ustawione bez podłączenie do zasilania, co daje mi na stałe logiczne zera - wystarcza mi praca full step, więc faktycznie używam wejść sterujących ENABLE, DIR oraz CLK.
Pod tym linkiem dokumentacja układu A3967, który służy do sterowanie moim silnikiem
http://www.datasheetcatalog.org/datasheet/allegromicrosystems/3967.pdf
a to kod programu do sterowania silnikiem:
Tak w skrócie - ten "cudowny" układ A3967 ma w sobie wbudowany translator, dzięki czemu nie muszę przejmować się bezpośrednim wysterowywaniem cewek jedna po drugiej.
Z góry wielkie dzięki za pomoc od doświadczonych kolegów
Pozdrawiam
Poprawiłem tytuł, dodałem znaczniki [code].
[zumek]
Mam problem z wysterowaniem silnika bipolarnego (4 przewody idące do cewek). Dokładnie jest to aktuator liniowy.
Program, który napisałem powinien działać, ale niestety nie działa, jak to w życiu bywa... Nie wiem, czy problem w sprzęcie, czy jednak...w moim programie.
Generalnie w skrócie: mam 5 wejść do układu scalonego odpowiedzialnego za sterowanie aktuatorem: ENABLE (włącz/wyłącz silnik), DIR (kierunek lewo/prawo), CLK (zegar nadający prędkość silnikowi), STEP0/STEP1 (określenie na 2 bitach rodzaju pracy: full step, half step itd).
STEP0 oraz STEP1 sobie darowałem i mam ustawione bez podłączenie do zasilania, co daje mi na stałe logiczne zera - wystarcza mi praca full step, więc faktycznie używam wejść sterujących ENABLE, DIR oraz CLK.
Pod tym linkiem dokumentacja układu A3967, który służy do sterowanie moim silnikiem
http://www.datasheetcatalog.org/datasheet/allegromicrosystems/3967.pdf
a to kod programu do sterowania silnikiem:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
int main (void)
{
while(1)
{
DDRD = 0xE0;
PORTD |= 0<<PD7; //ENABLE
PORTD |= 1<<PD6; //obrót w lewo
_delay_us(100);
for(int i = 0; i < 4000; i++) //generowanie zegara - obrót w jedną stronę
{
PORTD |= 0<<PD5;
_delay_ms(100);
PORTD |= 1<<PD5;
_delay_ms(100);
}
PORTD |= 0<<PD6; //obrót w prawo
_delay_us(100);
for(int i = 0; i < 4000; i++) //generowanie zegara - obrót w drugą stronę
{
PORTD |= 0<<PD5;
_delay_ms(100);
PORTD |= 1<<PD5;
_delay_ms(100);
}
}
}Tak w skrócie - ten "cudowny" układ A3967 ma w sobie wbudowany translator, dzięki czemu nie muszę przejmować się bezpośrednim wysterowywaniem cewek jedna po drugiej.
Z góry wielkie dzięki za pomoc od doświadczonych kolegów
Pozdrawiam
Poprawiłem tytuł, dodałem znaczniki [code].
[zumek]