2017-09-03 9 views
7

पर जटिल संकेत मैं की GIPO के उत्पादन पर एक संकेत की जरूरत है लगभग इस आकार। (पल्स में उप नाड़ी) enter image description hereमिलाना सभी GPIO

यह कैसे पीआई पर PWM का उपयोग कर कार्यान्वित किया जा सकता? मैं आरपीआईओ के साथ ऐसा करने की कोशिश कर रहा हूं, लेकिन शायद उसका प्राचीन जीपीआईओ पिनआउट मेरे आरपीआई 3 बी + के लिए काम नहीं कर रहा है।

from RPIO import PWM 
servo = PWM.Servo() 
servo.set_servo(12, 10000) 
PWM.add_channel_pulse(0, 12, start=200, width=2000) 

पिन पर सिग्नल नहीं। enter image description here मैं इसमें उलझन में हूं और पीडब्लूएम के साथ काम करने के लिए अंतर्निर्मित लाइब्रेरी को आजमा देना चाहता हूं, लेकिन मुझे उप-चक्रों की संभावना नहीं मिली। मैं इस फॉर्म का सिग्नल अलग-अलग जीपीआईओ से आउटपुट कैसे कर सकता हूं?

+0

एरम, आपके कोड में जीपीओ पिन हर 2 एमएमएस टॉगल किया जाता है, ताकि 500 ​​हर्ट्ज-आईएसएच संकेत उत्पन्न हो और निश्चित रूप से 1000 हर्ट्ज न हो। मैं 500 हर्ट्ज-आईएसएच कहता हूं क्योंकि टाइम स्लीप केवल न्यूनतम देरी की गारंटी देता है, अधिकतम नहीं - लिनक्स रीयलटाइम ओएस नहीं होने के कारण, मिलीसेकंद स्तर में नींद की सटीकता की अपेक्षा बहुत आशावादी है। ओह और आपका कोड 'time.sleep (0.1)' 500Hz-ish सिग्नल 0.1s के लिए बंद करता है, 0.01s आपके टेक्स्ट में बताए अनुसार नहीं। – barny

+0

सही! धन्यवाद! फिक्स्ड! – Dmitrii

+0

बीटीडब्ल्यू। यदि आप किसी भी प्रकार की आवृत्ति सटीकता चाहते हैं, तो आप 'time.sleep()' की बजाय [PWM] (http://pythonhosted.org/RPIO/pwm_py.html) का उपयोग करके जांच करना चाहेंगे। – SiHa

उत्तर

1

ऐसा लगता है, आपको इस तरह के कोड का उपयोग करना चाहिए। दुर्भाग्य से, मुझे इसका परीक्षण करने का कोई मौका नहीं है क्योंकि मेरे पास आवृत्ति मीटर या ऑसीलोग्राफ नहीं है।

import time 
import pigpio 

GPIO=12 

pulse = [] 

#       ON  OFF MICROS 
pulse.append(pigpio.pulse(1<<GPIO, 0,  5)) 
pulse.append(pigpio.pulse(0,  1<<GPIO, 5)) 
pulse.append(pigpio.pulse(1<<GPIO, 0,  5)) 
pulse.append(pigpio.pulse(0,  1<<GPIO, 1e7)) 

pi = pigpio.pi() # connect to local Pi 

pi.set_mode(GPIO, pigpio.OUTPUT) 

pi.wave_add_generic(pulse) 

wid = pi.wave_create() 

if wid >= 0:  
    pi.wave_send_repeat(wid) 
    time.sleep(60) # or another condition for stop processing 
    pi.wave_tx_stop() 
    pi.wave_delete(wid) 

pi.stop() 
2

documentation सुझाव देता है कि केवल GPIO.setup और GPIO.output दोनों के लिए पहला तर्क के रूप में चैनलों की एक सूची उत्तीर्ण कर रहे हैं जो आप पूछ रहे हैं।

chan_list = [11,12] # add as many channels as you want! 
         # you can tuples instead i.e.: 
         # chan_list = (11,12) 
GPIO.setup(chan_list, GPIO.OUT) 
GPIO.output(chan_list, GPIO.LOW)    # sets all to GPIO.LOW 
+0

आपके उत्तर के लिए धन्यवाद। लेकिन स्वतंत्र रूप से! मल्टीथ्रेडिंग या कोरआउट माबे – Dmitrii

1

आरपीआई.जीपीआईओ की तुलना में मेरे पास पिगपी के साथ बहुत बेहतर पीडब्लूएम अनुभव है। वायरिंगपी भी अच्छा है लेकिन पिगियो का पीडब्ल्यूएम समर्थन आईएमओ बेहतर है।

http://abyz.co.uk/rpi/pigpio/python.html#set_servo_pulsewidth http://abyz.co.uk/rpi/pigpio/python.html#set_PWM_dutycycle

आप * है * RPi.GPIO उपयोग करने के लिए है:

प्रलेखन किसी भी पिन पर PWM पैदा करने के लिए कुछ कार्य करता है? मैं समझता हूं कि यह सही जवाब नहीं है, लेकिन मुझे आशा है कि कम से कम आपको सही दिशा में इंगित करें।

+0

कृपया, इस तरंग के लिए पाइथन कोड जोड़ें - 5 खट्टे, प्रत्येक 10 एमएस (100 हर्ट्ज) पर बंद करें, हर 10 सेकंड (0,1 हर्ट्ज) पर बंद करें। मुझे यह पुस्तकालय पता है, लेकिन यह समझ में नहीं आता कि यह तरंग कैसे है। – Dmitrii

संबंधित मुद्दे