Для научного проекта я хочу управлять воздушным насосом с шаговым приводом.Моя основная задача - регулировать скорость шагового двигателя относительно показаний датчика давления, чтобы я мог поддерживать постоянный уровень давления в контейнере.На этом этапе я могу управлять шаговым двигателем с постоянной скоростью, которая создает давление в моем контейнере, и я могу считывать уровень давления в контейнере с помощью датчика давления 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, ())