This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| et:examples:encoder:hall_encoder [2010/02/22 13:07] – mikk.leini | et:examples:encoder:hall_encoder [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Hall'i kooder ====== | ||
| + | |||
| + | //Vajalikud teadmised: [HW] [[et: | ||
| + | |||
| + | ===== 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 ===== | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // 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 | ||
| + | |||
| + | // | ||
| + | // 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(" | ||
| + | |||
| + | // Mootori 0 seadistamine | ||
| + | dcmotor_init(0); | ||
| + | |||
| + | // Koodri 0 seadistamine | ||
| + | encoder_init(0); | ||
| + | |||
| + | // Mootori käivitamine | ||
| + | dcmotor_drive(0, | ||
| + | |||
| + | // 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, | ||
| + | |||
| + | // Teksti kuvamine LCD teise rea alguses | ||
| + | lcd_alpha_goto_xy(0, | ||
| + | lcd_alpha_write_string(text); | ||
| + | |||
| + | // Paus 500 millisekundit | ||
| + | sw_delay_ms(500); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||