====== Hall'i kooder ====== //Vajalikud teadmised: [HW] [[et:hardware:homelab:motor]], [HW] [[et:hardware:homelab:lcd]], [AVR] [[et:avr:io]], [AVR] [[et:avr:interrupts]], [AVR] [[et:avr:timers]], [LIB] [[et:software:homelab:library:module:motor]], [LIB] [[et:software:library:module:encoder]], [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]], [LIB] [[et:software:homelab:library:delay]], [PRT] [[et:examples:timer:periodic_interrupt]]// ===== 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); } }