====== Hall'i kooder ====== //Vajalikud teadmised: [HW] [[et:hardware:motors|Mootorite moodul]], [HW] [[et:hardware:lcd|LCD moodul]], [AVR] [[et:avr:io|Sisendid-väljundid]], [AVR] [[et:avr:interrupts|AVR katkestused]], [AVR] [[et:avr:timers|AVR loendurid]], [LIB] [[et:software:homelab:library:module:motor|Mootorite teek]], [LIB] [[et:software:library:module:encoders|Koodrite teek]], [LIB] [[et:software:homelab:library:module::lcd_alphanumeric|Alfabeetilise LCD teek]], [LIB] [[et:software:homelab:library:delay|Viite teek]], [PRT] [[et:examples:timer:periodic_interrupt|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 #include #include #include #include #include // // 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); } }