Vajalikud teadmised: [HW] Mootorite moodul, [HW] LCD moodul, [AVR] Digitaalsed sisendid-väljundid, [AVR] Katkestused, [AVR] Loendurid/Taimerid, [LIB] Mootorid, [LIB] encoder, [LIB] Alfabeetiline LCD, [LIB] Viide, [PRT] Perioodiline katkestus
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…
// // 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); } }