Table of Contents

Kauglabor - Kasvuhoone

Samm-mootori ühendamine

Draiver:

Ühendustabel

A4983 viikMootorite plaat / SammmootorKirjeldus
VMOTUnipolar pistiku Vcc Mootori toide 8-36 V
GNDEnkoodri pistiku maa Mootori toite maa
2BM1 Sinine mootori juhe Mootori mähis 2
2AM2 Punane mootori juhe Mootori mähis 2
1AM3 Roheline mootori juhe Mootori mähis 1
1BM4 Must mootori juhe Mootori mähis 1
VDDEnkoodri pistiku +5V Loogika toide 3,3 - 5,5 V
GNDEnkoodri pistiku maa Loogika toite maa
STEPEnkoodri alumise pistiku signaalSammusignaal
DIREnkoodri ülemise pistiku signaalSuunasignaal
RSTKokku mootorikontrolleri SLP viigugaReset viik
SLPKokku mootorikontrolleri RST viigugaSleep viik

Näitekood

#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);
        }
	}
}