对于一个科学项目,我想控制一个步进驱动的气泵。我的主要目标是相对于压力传感器读数来调节步进速度,以便可以在容器中保持恒定的压力水平。此时,我能够以恒定的速度驱动步进电机,从而在容器中建立压力,并且可以通过MCP3008 ADC和python程序通过树莓派中的Honeywell压力传感器读取容器中的压力水平。 下面是用于步进运行和压力读取的系统和python代码的简要示意图。
我想要的是
第一种情况:当容器中的压力为零时,我要以最高速度运行步进器,以便在压力水平接近所需压力时可以快速达到所需压力。达到最高压力极限时,步进速度应降低并停止。
第二种情况::从容器释放压力时,步进器应自动启动以保持所需的压力,类似于上面的方式。
作为来自传感器的传感器反馈机制,如何做到这一点?有什么办法可以通过python程序做到这一点?任何建议都非常欢迎。 并预先感谢您...
其他信息:
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, ())