sitemap link mailform link home

Schrittmotorsteuerung

Die Ansteuerung passiert über den Parallelport.

Interner Link Hier gibt es den Beitrag ausführlicher - mit Hardware und Theorie.

In MS Visual C# gestalten wir eine kleine Benutzeroberfläche mit "Windows Forms":

Screenshot

 


 

Für die Combobox müssen noch die Anzeigewerte eingetragen werden über "Eigenschaften - Auflistung":

Screenshot

 


 

Hier nun das C#-Programm:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; // Für DLL-Import benötigt

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // LPT1 bei meiner PCMCIA-Karte ist FEE8 HEX!
        // Öffnne Systemsteuerung - System - Hardwaremanager und schaue nach!
        public int LPT_PORT_ADRESS = 0;
        public int[] BackwardStepArray = { 9, 10, 6, 5 }; // Bitmuster der Einzelschritte rückwärts
        public int[] ForwardStepArray = { 5, 6, 10, 9 }; // Bitmuster der Einzelschritte vorwärts
        public int StepCounter = 0; // Zum Abrufen der Werte aus dem StepArray

        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            CParallelPort.Output(LPT_PORT_ADRESS, 0x00);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int Wert = ForwardStepArray[StepCounter]; // Auslesen eines Wertes
            CParallelPort.Output(LPT_PORT_ADRESS, Wert); // Ausgabe an Parallelport
            StepCounter++; // Schrittzähler erhöhen
            // Insgesamt sind nur 4 Werte im Array
            // Deshalb muss der StepCounter schließlich wieder auf Null gesetzt werden
            if (StepCounter > 3)
            {
                StepCounter = 0;
            }
        }

        // Timer1 Start
        private void button4_Click(object sender, EventArgs e)
        {
            if (LPT_PORT_ADRESS == 0)
            {
                label3.Text = "Fehler: Bitte LPT-Port auswählen!";
            }
            else
            {
                label3.Text = "Alles okay!";
            }
            timer1.Enabled = true;
        }

        // Timer1 Stopp
        private void button5_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
           // LPT_PORT_ADRESS =
            switch (comboBox1.SelectedIndex)
            {
                case 0: LPT_PORT_ADRESS=0x378;
                    break;
                case 1: LPT_PORT_ADRESS = 0x278;
                    break;
                case 2: LPT_PORT_ADRESS = 0xFEE8;
                    break;
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            int Ausgabewert = 0x9;
            CParallelPort.Output(LPT_PORT_ADRESS, Ausgabewert); // Ausgabe an Parallelport
            int Testwert = CParallelPort.Input(LPT_PORT_ADRESS); // Einlesn vom Parallelport
            if (Ausgabewert == Testwert)
            {
                label3.Text = "Der gewählte Port existiert.";
                CParallelPort.Output(LPT_PORT_ADRESS, 0x00); // Ausgabe an Parallelport / Zurücksetzen
            }
            else
            {
                label3.Text = "Fehler: Der gewählte Port existiert nicht!";
            }
        }

       
    }
}

class CParallelPort
{
    // inpout32.dll muss im /bin/ebug-Ordner vorhanden sein!
    // Dieser Code funktioniert nur mit Windows XP
    // Für Windows 7 wird eine 64-Bit-DLL inpoutx64.dll benötigt!
    [DllImport("inpout32.dll", EntryPoint = "Out32")]
    public static extern void Output(int adress, int value);
    [DllImport("inpout32.dll", EntryPoint = "Inp32")]
    public static extern int Input(int adress);
}

 


Die Idee zu diesem Grundlagenversuch stammt von Wolfgang Back (www.wolfgang-back.com).

Letzte Änderung:
March 23. 2023 21:04:40
«    top    »