Управление скоростью шагового двигателя по показаниям обратной связи датчика с помощью программы Python - PullRequest
0 голосов
/ 28 февраля 2019

Для научного проекта я хочу управлять воздушным насосом с шаговым приводом.Моя основная задача - регулировать скорость шагового двигателя относительно показаний датчика давления, чтобы я мог поддерживать постоянный уровень давления в контейнере.На этом этапе я могу управлять шаговым двигателем с постоянной скоростью, которая создает давление в моем контейнере, и я могу считывать уровень давления в контейнере с помощью датчика давления Honeywell в программе Raspberry Pi с помощью программы АЦП и Python MCP3008.Ниже приведена краткая схема системы и кода Python для работы шагового двигателя и чтения давления.

Что мне нужно, это

Первый сценарий: приДавление в контейнере равно нулю, я хочу запустить шаговый двигатель на максимальной скорости, чтобы можно было быстро достичь желаемого давления, а когда уровень давления близок к желаемому давлению, скорость шагового двигателя должна уменьшиться и остановится, когда достигнет определенного предела давления..

Второй сценарий: Когда давление из контейнера сбрасывается, степпер должен запускаться автоматически, чтобы поддерживать желаемое давление аналогично тому, как описано выше.

Как это можно сделатьбыть сделано как датчик обратной связи с механизмом?Есть ли способ сделать это через программу Python?Любые предложения приветствуются.И заранее спасибо…

Дополнительная информация:

  • Я не использую штифт DIRECTION в Easy Driver, поскольку для меня обратное вращение не требуется.
  • Мое желаемое давление в терминах вольт составляет 3 В, и когда оно опускается ниже 2,5 VI, я хочу запустить шаговый двигатель медленно, а когда он опускается до 2 VI, хочу запустить шаговый двигатель на полной скорости, чтобы давлениеможно поддерживать быстро.
  • Я могу изменить скорость шагового двигателя (на постоянную скорость), изменив время ожидания в STEP-контакте ВКЛ-ВЫКЛ

Схема

Код Python

#!/usr/bin/python

import spidev
import time
import os
import RPi.GPIO as GPIO
import _thread

# Open SPI bus
spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz=1000000

#Stepper pin setup
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO_pins = (6, 13)
step = 19

GPIO.setup(step, GPIO.OUT)
GPIO.setup(GPIO_pins, GPIO.OUT)
GPIO.output(GPIO_pins, False)

# Function to read SPI data from MCP3008 chip
# Channel must be an integer 0-7

def ReadChannel(channel):
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data

# Function to convert data to voltage level,
# rounded to specified number of decimal places. 

def ConvertVolts(data,places):
  volts = (data * 3.3) / float(1023)
  volts = round(volts,places)  
  return volts

# Define sensor channels
pressure_channel = 0

# Define delay between readings
delay = 1

def SensorRead():
    while True:
        # Read the pressure sensor data
        pressure_level = ReadChannel(pressure_channel)
        pressure_volts = ConvertVolts(pressure_level,2)

        # Print out results
        print ("--------------------------------------------")
        print("pressure : {} ({}V)".format(pressure_level,pressure_volts))

        # Wait before repeating loop
        time.sleep(delay)

def StepperRun():
     while True:
         # Stepper run
         GPIO.output(step, False)
         time.sleep(.008)
         GPIO.output(step, True)
         time.sleep(.008)
         GPIO.cleanup

_thread.start_new_thread(SensorRead, ())
_thread.start_new_thread(StepperRun, ())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...