Draiver:
Ühendustabel
A4983 viik | Mootorite plaat / Sammmootor | Kirjeldus |
---|---|---|
VMOT | Unipolar pistiku Vcc | Mootori toide 8-36 V |
GND | Enkoodri pistiku maa | Mootori toite maa |
2B | M1 Sinine mootori juhe | Mootori mähis 2 |
2A | M2 Punane mootori juhe | Mootori mähis 2 |
1A | M3 Roheline mootori juhe | Mootori mähis 1 |
1B | M4 Must mootori juhe | Mootori mähis 1 |
VDD | Enkoodri pistiku +5V | Loogika toide 3,3 - 5,5 V |
GND | Enkoodri pistiku maa | Loogika toite maa |
STEP | Enkoodri alumise pistiku signaal | Sammusignaal |
DIR | Enkoodri ülemise pistiku signaal | Suunasignaal |
RST | Kokku mootorikontrolleri SLP viiguga | Reset viik |
SLP | Kokku mootorikontrolleri RST viiguga | Sleep viik |
#include <homelab/adc.h> #include <homelab/module/lcd_gfx.h> #include <homelab/pin.h> #include <homelab/module/motors.h> #include <stdio.h> #include <homelab/delay.h> #include <homelab/module/sensors.h> #define ADC_CHANNEL 3 // Multipleskeri viik pin mux = PIN(G, 0); // Kombineeritud niiskuse ja temperatuurianduri signaali ühendusviik pin DHTpin = PIN(B,5); // A4983 step viik pin stp_pin = PIN(E, 6); // A4983 suuna viik pin dir_pin = PIN(E, 7); // Arvude skaleerimiseks sobivasse vahemikku int map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // A4983 mootorikontroller viikude seadistamine väljundiks void A4983_init(void) { pin_setup_output(stp_pin); pin_setup_output(dir_pin); } // A4983 mootorikontrolleri samm-mootori liigutamine void A4983_step(signed char dir, unsigned short num_steps, unsigned char speed) { unsigned short i; // Suuna valimine +- 1 if(dir < 0) { pin_set(dir_pin); } else { pin_clear(dir_pin); } // Sammude teostamine for (i = 0; i < num_steps; i++) { pin_toggle(stp_pin); // Pausi tegemine sammu teostamise ootamiseks sw_delay_ms(speed); } // Mootori peatamine pin_set(stp_pin); } // Põhiprogramm int main(void) { int speed; int humidity; char text[60]; // ADC muunduri seadistamine adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // LCD ekraani algseadistamine lcd_gfx_init(); // Ekraani puhastamine lcd_gfx_clear(); // Taustavalgustuse tööle lülitamine lcd_gfx_backlight(true); // Multiplekseri viigu seadistamine pin_setup_output(mux); // Mootori initsialiseerimine dcmotor_drive_pwm_init(1, TIMER2_PRESCALE_8); // Servo initsialiseerimine servomotor_init(1); // Stepperi initsialiseerimine A4983_init(); // Nuppude viikude sisendiks seadmine pin_setup_input(S1); pin_setup_input(S2); pin_setup_input(S3); // Lõputu tsükkel while (1) { // // Pumba mootori juhtimine // // Kanali 4-kordselt ümardatud väärtuse lugemine speed = map(adc_get_average_value(ADC_CHANNEL, 3), 0, 1024, 0, 255); lcd_gfx_goto_char_xy(0,0); sprintf(text," Kiirus: %2d",speed); lcd_gfx_write_string(text); // Mootorile valitud kiiruse etteandmine. dcmotor_drive_pwm(1, 1, speed); // // Mulla niiskuse kuvamine // // Multiplekseri oleku muutmine, kuna on kasutatud välist ADC viiku pin_set(mux); // Paus 10 millisekundit sw_delay_ms(10); // Kanali 4-kordselt ümardatud väärtuse lugemine humidity = adc_get_average_value(ADC_CHANNEL, 3); lcd_gfx_goto_char_xy(0,1); sprintf(text," M_Niisk: %2d%%",humidity); lcd_gfx_write_string(text); // Multiplekseri oleku muutmine tagasi, pin_clear(mux); // Paus 10 millisekundit sw_delay_ms(10); // // Kombineeritud niiskuse ja temperatuurianduri näitude lugemine // // DHTxx anduri näidu lugemine ja kuvamine LCD-l // DHT_update esimene parameeter on anduri tüüp (DHT11 või DHT22) DHT_update(DHT22,DHTpin); lcd_gfx_goto_char_xy(0,2); sprintf(text," Temp: %2dC",dht_temp/10); lcd_gfx_write_string(text); lcd_gfx_goto_char_xy(0,3); sprintf(text," Niiskus: %2d%%",dht_hum/10); lcd_gfx_write_string(text); // // Servo ja steppermootori juhtimine // if(button_read(S1)) { servomotor_position(1, 100); A4983_step(1,1000, 7); } if(button_read(S2)) { servomotor_position(1, 0); } if(button_read(S3)) { servomotor_position(1, -100); A4983_step(-1,1000, 7); } } }