-3

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

Что я хочу это

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

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

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

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

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

схема

Код 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, ())

0