Mam mały problem z liczeniem impulsów pochodzących z TCCR2.
Potrzebuje dokładnie 200 impulsów aby wał silnika krokowego obrócił się w prawo o jeden obrót. Jeden 360 stopni obrót wału silnika to 200 kroków po 1.8 stopnia każdy.
Poniżej przedstawiam kod w języku C który napisałem do tej pory.
Nie jestem jakimś orłem w programowaniu uP. Chciałbym państwa prosić o nakierowanie na rozwiązanie bądż też wskazanie linków które opisują podobne problemy.
Ogólnie wszelka pomoc mile widziana
Już szukałem sporo i z przykrością stwierdzam że chyba nie wiem jak szukać licznika na pwm pochodzącego z 7 nóżki portu D
Potrzebuje dokładnie 200 impulsów aby wał silnika krokowego obrócił się w prawo o jeden obrót. Jeden 360 stopni obrót wału silnika to 200 kroków po 1.8 stopnia każdy.
Poniżej przedstawiam kod w języku C który napisałem do tej pory.
Nie jestem jakimś orłem w programowaniu uP. Chciałbym państwa prosić o nakierowanie na rozwiązanie bądż też wskazanie linków które opisują podobne problemy.
Ogólnie wszelka pomoc mile widziana
Już szukałem sporo i z przykrością stwierdzam że chyba nie wiem jak szukać licznika na pwm pochodzącego z 7 nóżki portu D
/*
Program do sterowania silnikami.
Sterowanie dwoma silnikami z uzyciem ukladu L298 i l297
uC AVR ATMEGA32 12MHz
*/
#define F_CPU 12000000L
#include <avr/io.h>
#include <util/delay.h>
/*** ZDEFINIOWANIE PORTÓW ***/
/* Silnik oś Z */
#define SET_IN0 PORTB |= _BV(0) /* PB0 -> ENA //1-załaczenie silnika */
#define CLR_IN0 PORTB &= ~_BV(0) //0-wyłaczenie silnika
#define SET_IN0_OUT DDRB |= _BV(0)
#define SET_IN1 PORTB |= _BV(1) /* PB1 -> DIR //1-obroty w prawo */
#define CLR_IN1 PORTB &= ~_BV(1) //0-obroty w lewo
#define SET_IN1_OUT DDRB |= _BV(1)
#define SET_IN3 PORTB |= _BV(3) /* PB3 -> H/F //1-sekwencja pólkroku */
#define CLR_IN3 PORTB &= ~_BV(3) //0-sekwencja pełnego kroku
#define SET_IN3_OUT DDRB |= _BV(3)
/* Wyjścia sygnałów PWN */
#define SET_CLKZ_OUT DDRD |= _BV(7) /* PD7 (OC2) - sygnal PWM -> CLK oś Z L298 */
#define SET_CLKXY_OUT DDRD |= _BV(5) /* PD5 (OC1A) - sygnal PWM -> CLK oś XY L298 */
/*** FUNKCJE ***/
/* Wstepne ustawienia */
void ustawienia(void)
{
/* Ustawienie kierunku uzytych portow jako wyjscia */
SET_IN0_OUT;
SET_IN1_OUT;
SET_IN3_OUT;
SET_CLKZ_OUT;
/* Ustawienie tajmera do pracy w trybie PWM */
TCCR2 = 0xF4;
OCR2 = 127;//wypełnienie 50%
}
/* Wstrzymuje program w petli na czas t setnych czesci sekundy */
void delay_10ms(unsigned long t )
{
while(t)
{
_delay_ms(10);
--t;
}
}
void obrotwprawo(void)
//void obrotwprawo( int a, int b)
{
SET_IN0; /* załączenie silnika */
SET_IN1; /* obrót prawo */
CLR_IN3; /* pełny krok */
}
/*** PROGRAM ****/
int main(void)
{
ustawienia();
//obrotwprawo(0,3);
//delay_10ms(500);
obrotwprawo(); /* jazda wprzod, pelna moc obu silnikow */
//delay_10ms(500); /* przez 5 sekund */
//SET_IN0;
//delay_10ms(20);
while(1){}; /* KONIEC PROGRAMU */
}