Riadenie krokového motorčeka I.: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 240: | Riadok 240: | ||
'''Video:''' | '''Video:''' | ||
Link na video https://youtu.be/6TpmggueZVk | |||
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte. | ||
[[Category:AVR]] [[Category:MIPS]] | [[Category:AVR]] [[Category:MIPS]] |
Verzia z 22:20, 6. 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°
Riadenie krokového motorčeka
Literatúra:
Analýza a opis riešenia
Zapojil som si motorček podľa tejto schémy.
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;
}
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: Zdrojové súbory Martin Cíbik.zip
Overenie
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
Video: Link na video https://youtu.be/6TpmggueZVk
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.