Operácie

Riadenie krokového motorčeka I.: Rozdiel medzi revíziami

Z SensorWiki

(Overenie)
 
(6 medziľahlých úprav od jedného ďalšieho používateľa nie je zobrazených)
Riadok 6: Riadok 6:
 
zadanie č. 47:   
 
zadanie č. 47:   
 
Krokový motorček - pohyb v smere a v protismere hodinových ručičiek po 90°
 
Krokový motorček - pohyb v smere a v protismere hodinových ručičiek po 90°
 +
 +
Mám naprogramovať riadenie krokového motorčeka pre posun o 90° v smere aj v protismere hodinových ručičiek.
  
 
  Riadenie [https://www.laskakit.cz/radic-uln2003-pro-krokovy-motor/ krokového motorčeka]
 
  Riadenie [https://www.laskakit.cz/radic-uln2003-pro-krokovy-motor/ krokového motorčeka]
Riadok 13: Riadok 15:
  
 
'''Literatúra:'''  
 
'''Literatúra:'''  
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
+
*[https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf Dokumentácia k doske Arduino UNO]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]
+
*[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf Dokumentácia k ATmega328p]
  
  
Riadok 22: Riadok 24:
  
  
Zapojil som si motorček podľa tejto schémy.
+
Zapojil som si motorček podľa tejto schémy(lepší obrázok som nenašiel).  
  
[[Súbor:jeboteyivot.png|400px|thumb|center|Schéma zapojenia Krokového motorčeka.]]
+
[[Súbor:Schema_zapojenia.png|400px|thumb|center|Schéma zapojenia Krokového motorčeka.]]
  
 
Potrebujem nasledovné súčiastky: Arduino UNO doska, krokový motorček, 6x káblik typu samička-samček, pinová doska so švábom  
 
Potrebujem nasledovné súčiastky: Arduino UNO doska, krokový motorček, 6x káblik typu samička-samček, pinová doska so švábom  
Riadok 228: Riadok 230:
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
 
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
 
  
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|Zdrojové súbory Martin Cíbik.zip]]
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|Zdrojové súbory Martin Cíbik.zip]]
Riadok 237: Riadok 237:
 
Po zapojení sa motorček začne otáčať. Po 90° zastaví a počká 2 sekundy. To sa zopakuje 4x a nastane otáčanie v opačnom smere. Tak isto o 90° a počká (tiež 4x).  
 
Po zapojení sa motorček začne otáčať. Po 90° zastaví a počká 2 sekundy. To sa zopakuje 4x a nastane otáčanie v opačnom smere. Tak isto o 90° a počká (tiež 4x).  
  
V prípade povolávania funkcie, treba zadať koľko krát chceme aby sa otočilo, ale funguje v rovnakom princípe.
+
V prípade povolávania funkcie, treba na do funkcie void loop() zadať koľko krát chceme aby sa otočilo (dal som 10 otočení), ale funguje v rovnakom princípe.
  
 
[[Súbor:fotka.jpg|400px|thumb|center|Aplikácia.]]
 
[[Súbor:fotka.jpg|400px|thumb|center|Aplikácia.]]
  
 
'''Video:'''
 
'''Video:'''
https://youtu.be/6TpmggueZVk
 
  
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
+
<center><youtube>6TpmggueZVk</youtube></center>
 +
 
 +
  
 
[[Category:AVR]] [[Category:MIPS]]
 
[[Category:AVR]] [[Category:MIPS]]

Aktuálna revízia z 11:58, 8. jún 2023

Záverečný projekt predmetu MIPS / LS2023 - Martin Cíbik


Zadanie

zadanie č. 47: Krokový motorček - pohyb v smere a v protismere hodinových ručičiek po 90°

Mám naprogramovať riadenie krokového motorčeka pre posun o 90° v smere aj v protismere hodinových ručičiek.

Riadenie krokového motorčeka


Vývojová doska Arduino UNO.

Literatúra:


Analýza a opis riešenia

Zapojil som si motorček podľa tejto schémy(lepší obrázok som nenašiel).

Schéma zapojenia Krokového motorčeka.

Potrebujem nasledovné súčiastky: Arduino UNO doska, krokový motorček, 6x káblik typu samička-samček, pinová doska so švábom

Algoritmus a program

/*
 * semestralny_projekt.c
 * zadanie č. 47: krokový motorček
 * Krokový motorček - pohyb v smere a v protismere hodinových ručičiek po 90°
 *  Author: Martin Cíbik
 */
 
#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <stdbool.h>

void loop(bool dir, char pins[]);
void cw(char c[]);
void ccw(char pins[]);
void OneStep(char pin);

int main(void)
{
	DDRB |= 0B00011110;
	char pins[] = {0x10, 0x08, 0x04, 0x02}; // zadefinované piny
		
    while (1) 
    {
		loop(true, pins); // v smere hodinových ručičiek
		loop(false, pins); //v protismere hodinových ručičiek
    }
}

void loop(bool dir, char pins[])
{
	if (dir)
	{
		for(int i = 0; i < 4; i++)
		{
			cw(pins);
			PORTB = pins[i];
			_delay_ms(2000);
		}
	}
	else
	{
		for(int i = 3; i >= 0; i--)
		{
			ccw(pins);
			PORTB = pins[i];
			_delay_ms(5000);
		}
	}
}
// void loop - zadefinovanie otáčania motorčeka, jeho rýchlosť atď

void OneStep(char pin)
{
	PORTB = pin;
	_delay_ms(10);
}

//v smere hodinových ručičiek
void cw(char pins[])
{
	for(int i = 0; i < 128; i++)
	{
		for(int j = 0; j < 4; j++)
		{
			OneStep(pins[j]);
		}
	}
	PORTB = 0x00;
}

//v protismere hodinových ručičiek
void ccw(char pins[])
{
	for(int i = 0; i < 128; i++)
	{
		for(int j = 4; j > 0; j--)
		{
			OneStep(pins[j]);
		}
	}
	PORTB = 0x00;
}
/*
 * semestralny_projekt.c
 * zadanie č. 47: krokový motorček
 * Krokový motorček - pohyb v smere a v protismere hodinových ručičiek po 90°
 *  Author: Martin Cíbik
 */ 

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <stdbool.h>

void loop(bool dir, char pins[]);
void cw(char c[]);
void ccw(char pins[]);
void OneStep(char pin);
void loopRotate(bool dir, char pins[], int times);

int main(void)
{
	DDRB |= 0B00011110;
	char pins[] = {0x10, 0x08, 0x04, 0x02}; // zadefinované piny
		
    while (1) 
    {
		loop(true, pins); // v smere hodinových ručičiek
		loop(false, pins); //v protismere hodinových ručičiek
    }
}

void loop(bool dir, char pins[])
{
	loopRotate(dir, pins, 10);	//loopRotate(dir, pins, POČET ROTÁCIÍ O 90°)
}
// void loop - zadefinovanie otáčania motorčeka, jeho rýchlosť atď

void loopRotate(bool dir, char pins[], int times)
{
	for(int t = 0; t < times; t++)
	{
		if (dir)
		{
			for(int i = 0; i < 4; i++)
			{
				cw(pins);
				PORTB = pins[i];
				_delay_ms(2000);
			}
		}
		else
		{
			for(int i = 3; i >= 0; i--)
			{
				ccw(pins);
				PORTB = pins[i];
				_delay_ms(2000);
			}
		}
	}
}

void OneStep(char pin)
{
	PORTB = pin;
	_delay_ms(10);
}

//v smere hodinových ručičiek
void cw(char pins[])
{
	for(int i = 0; i < 128; i++)
	{
		for(int j = 0; j < 4; j++)
		{
			OneStep(pins[j]);
		}
	}
	PORTB = 0x00;
}

//v protismere hodinových ručičiek
void ccw(char pins[])
{
	for(int i = 0; i < 128; i++)
	{
		for(int j = 4; j > 0; j--)
		{
			OneStep(pins[j]);
		}
	}
	PORTB = 0x00;
}

Zdrojový kód: Zdrojové súbory Martin Cíbik.zip

Overenie

Po zapojení sa motorček začne otáčať. Po 90° zastaví a počká 2 sekundy. To sa zopakuje 4x a nastane otáčanie v opačnom smere. Tak isto o 90° a počká (tiež 4x).

V prípade povolávania funkcie, treba na do funkcie void loop() zadať koľko krát chceme aby sa otočilo (dal som 10 otočení), ale funguje v rovnakom princípe.

Aplikácia.

Video: