Table of Contents

Hall'i kooder

Vajalikud teadmised: [HW] Mootorite moodul, [HW] LCD moodul, [AVR] Sisendid-väljundid, [AVR] AVR katkestused, [AVR] AVR loendurid, [LIB] Mootorite teek, [LIB] Koodrite teek, [LIB] Alfabeetilise LCD teek, [LIB] Viite teek, [PRT] Perioodiline katkestus

Teooria

Hall'i kooder on magnetiline pöördkooder mis põhineb Hall'i efektil. Hall'i efekt tekitab magnetväljas asuvas vooluga juhis pinge. See pinge on küll väike kuid seda saab võimendada. Hall'i koodris on pöörleval võllil 1 või enam magnetit mis liiguvad mööda andurist.

Neid on ka veel 3 sorti…

Praktika

//
// Kodulabori Hall'i efektiga koodri demonstratsioon.
// LCD-le kuvatakse mootori reduktori pöörete arv.
//
#include <stdio.h>
#include <avr/interrupt.h>
#include <homelab/module/lcd_alpha.h>
#include <homelab/module/motors.h>
#include <homelab/module/encoders.h>
#include <homelab/delay.h>
 
//
// Mootori parameetrid
//
#define TICKS_PER_TURN 3
#define GEAR_RATIO     47
 
//
// Põhiprogramm
//
int main(void)
{	
	unsigned short rpm;
	char text[16];
 
	// LCD ekraani seadistamine
	lcd_alpha_init(LCD_ALPHA_DISP_ON);
 
	// LCD ekraani puhastamine
	lcd_alpha_clear();
 
	// Programmi nimi
	lcd_alpha_write_string("Enkooder");
 
	// Mootori 0 seadistamine
	dcmotor_init(0);
 
	// Koodri 0 seadistamine
	encoder_init(0);
 
	// Mootori käivitamine
	dcmotor_drive(0, 1);
 
	// Globaalne katkestuste lubane (koodri pärast)
	sei();
 
	// Lõputu tsükkel	
	while (true)
	{
		// Reduktori võlli rpm leidmine		
		rpm = encoder_get_rpm(0) / TICKS_PER_TURN / GEAR_RATIO;
 
		// rpm teisendamine tekstiks
		sprintf(text, "%d rpm   ", rpm);
 
		// Teksti kuvamine LCD teise rea alguses
		lcd_alpha_goto_xy(0, 1);
		lcd_alpha_write_string(text);
 
		// Paus 500 millisekundit
		sw_delay_ms(500);
	}
}