पुश-पुल / खुली नाली; खींच-अप / पुल डाउन


49

मैं एक एआरएम कोर्टेक्स चिप के डेटशीट पढ़ रहा हूं, विशेष रूप से जीपीआईओ अध्याय। अंततः, मैं SRAM के पढ़ने / लिखने के लिए "वैकल्पिक फ़ंक्शन" मोड में उनका उपयोग करने के लिए विभिन्न GPIO पिन कॉन्फ़िगर करना चाहता हूं।

उपलब्ध सभी GPIO रजिस्टरों में, मुझे दो समझ में नहीं आता है: GPIO_PUPDRऔर GPIO_OTYPEजो क्रमशः "पुल-अप / पुल-डाउन रजिस्टर" और "आउटपुट टाइप रजिस्टर" हैं।

क्योंकि GPIO_PUPDRमेरे पास तीन विकल्प हैं:

  • पुल-अप या पुल-डाउन नहीं
  • अपने आप को रोकना
  • नीचे खींचना

क्योंकि GPIO_0TYPEमेरे पास दो विकल्प हैं:

  • आउटपुट पुश-पुल
  • आउटपुट ओपन-ड्रेन

सभी विभिन्न विन्यासों में क्या अंतर है, और SRAM संचार के लिए सबसे उपयुक्त कौन सा होगा?

मैं जिस बोर्ड पर काम कर रहा हूं, उसका प्रलेखन यहां उपलब्ध है (SRAM स्कीमैटिक्स के लिए पेज 24 देखें)। एआरएम चिप के लिए संदर्भ मैनुअल यहां उपलब्ध है (जीपीआईओ रजिस्टर के लिए पेज 145 और 146 देखें)।


क्या आप अपने उपयोग के SRAM और ARM CPU के डेटाशीट के लिए मॉडल नंबर / लिंक की आपूर्ति कर सकते हैं।
डीन

@ डीन: ज़रूर। मैंने अपने प्रश्न को दो लिंक से अपडेट किया है।
Randomblue

जवाबों:


54

यह उत्तर प्रोसेसर और बाह्य उपकरणों के लिए सामान्य है, और अंत में एक SRAM विशिष्ट टिप्पणी है, जो संभवतः आपके विशिष्ट RAM और CPU के लिए प्रासंगिक है।

आउटपुट पिन को तीन अलग-अलग मोड में संचालित किया जा सकता है:

  • खुली नाली - एक ट्रांजिस्टर कम और कुछ नहीं से जोड़ता है
  • खुली नाली, पुल-अप के साथ - एक ट्रांजिस्टर कम से जोड़ता है, और एक रोकनेवाला उच्च से जोड़ता है
  • पुश-पुल - एक ट्रांजिस्टर उच्च से जुड़ता है, और एक ट्रांजिस्टर कम से कनेक्ट होता है (केवल एक बार संचालित होता है)

इनपुट पिन के साथ एक गेट इनपुट हो सकता है:

  • पुल-अप - उच्च से जुड़ा एक रोकनेवाला
  • पुल-डाउन - कम से जुड़ा एक रोकनेवाला
  • पुल-अप और पुल-डाउन - दोनों उच्च से जुड़ा एक रोकनेवाला और कम से जुड़ा एक रोकनेवाला (केवल दुर्लभ मामलों में उपयोगी)।

एक शमित ट्रिगर इनपुट मोड भी है जहां इनपुट पिन को प्रारंभिक अवस्था में कमजोर पुल-अप के साथ खींचा जाता है। जब इसे अकेला छोड़ दिया जाता है तो यह अपने राज्य में बनी रहती है, लेकिन कम से कम प्रयास के साथ नए राज्य में खींची जा सकती है।

ओपन गेट तब उपयोगी होता है जब एक (बाहरी या आंतरिक) पुल-अप के साथ कई गेट या पिन एक साथ जुड़े होते हैं। यदि सभी पिन अधिक हैं, तो वे सभी खुले सर्किट हैं और पुल-अप पिंस को उच्च ड्राइव करते हैं। यदि कोई पिन कम है तो वे सभी कम हो जाते हैं क्योंकि वे एक साथ बंधे हैं। यह कॉन्फ़िगरेशन प्रभावी रूप से एक ANDगेट बनाता है ।

एसआरएएम चलाते समय आप शायद या तो डेटा लाइनों या एड्रेस लाइन्स को उच्च या निम्न रूप में ठोस और तेज़ी से ड्राइव करना चाहते हैं ताकि सक्रिय अप और डाउन ड्राइव की आवश्यकता हो, इसलिए पुश-पुल का संकेत दिया गया है। कई मेढ़े के साथ कुछ मामलों में आप कर सकते हैं कुछ चालाक करते हैं और लाइनों, जहां एक और विधा अधिक उपयुक्त हो सकता है गठबंधन करना चाहते हैं।

SRAM के डेटा इनपुट के साथ SRAM के साथ यदि RAM IC हमेशा डेटा को मुखर करता है तो बिना किसी पुल-अप के एक पिन शायद ठीक है क्योंकि RAM हमेशा स्तर सेट करता है और यह लोड को कम करता है। यदि रैम डेटा लाइनें कभी-कभी खुले सर्किट या ट्रिस्टेट होती हैं, तो आपको इनपुट पिन की आवश्यकता होगी ताकि वे अपना वैध राज्य सेट कर सकें। बहुत तेज़ गति के संचार में आप एक पुल-अप और एक पुल-डाउन का उपयोग करना चाह सकते हैं ताकि समानांतर प्रभावी प्रतिरोध समाप्त करने वाला प्रतिरोध हो, और बस निष्क्रिय वोल्टेज दो प्रतिरोधों द्वारा निर्धारित किया जाता है, लेकिन यह कुछ हद तक विशेषज्ञ है।


बस स्पष्ट होने के लिए, "एक ट्रांजिस्टर को कम और कुछ नहीं से जोड़ने" से आपका क्या मतलब है? एक ट्रांजिस्टर में 3 पिन होते हैं। प्रत्येक पिन कैसे जुड़ा है?
Randomblue

@ रैंडमब्लू - सॉरी - ट्रांजिस्टर कलेक्टर या ड्रेन जब एक आउटपुट के रूप में कार्य करता है
रसेल मैकमोहन

"पुल डाउन" पर अपना उत्तर स्पष्ट करने के लिए, "ग्राउंड", "लो" और "-वे" में क्या अंतर है?
Randomblue

मैंने आपके प्रश्न के लिए बहुत सारे संपादन किए हैं, क्या आप जाँच सकते हैं कि मैंने कोई गलती नहीं की है?
Randomblue

@ रैंडमब्लू - संपादन अच्छे लगते हैं। यह मुझे आश्चर्यचकित करता है कि मैंने शुरू में क्या लिखा था? आपको लगता है कि मैंने जो सोचा है, मैंने कहा है :-)।
रसेल मैकमोहन

17

मुझे यह जवाब STM32 अंडरस्टैंडिंग GPIO सेटिंग से मिला

  • GPIO_PuPd (पुल-अप / पुल-डाउन)

डिजिटल सर्किट में, यह महत्वपूर्ण है कि सिग्नल लाइनों को कभी भी "फ्लोट" करने की अनुमति नहीं है। यही है, उन्हें हमेशा उच्च अवस्था या निम्न अवस्था में रहने की आवश्यकता होती है। तैरते समय, राज्य अनिर्धारित होता है, और कुछ अलग प्रकार की समस्याओं का कारण बनता है।

इसे ठीक करने का तरीका सिग्नल लाइन से एक अवरोधक को Vcc या Gnd में जोड़ना है। इस तरह, यदि रेखा सक्रिय रूप से उच्च या निम्न संचालित नहीं हो रही है, तो अवरोधक एक ज्ञात स्तर तक बहाव की क्षमता का कारण होगा।

एआरएम (और अन्य माइक्रोकंट्रोलर्स) ने ऐसा करने के लिए बिल्ट-इन सर्किटरी बनाई है। इस तरह, आपको अपने सर्किट में एक और हिस्सा जोड़ने की आवश्यकता नहीं है। यदि आप "GPIO_PuPd_UP" चुनते हैं, उदाहरण के लिए, यह सिग्नल लाइन और Vcc के बीच एक रोकनेवाला जोड़ने के लिए समान है।

  • GPIO_OType (आउटपुट प्रकार):

पुश-पुल: यह आउटपुट प्रकार है जो ज्यादातर लोग "मानक" के रूप में सोचते हैं। जब आउटपुट कम हो जाता है, तो यह जमीन पर सक्रिय रूप से "खींच" जाता है। इसके विपरीत, जब आउटपुट उच्च पर सेट होता है, तो यह Vcc की ओर सक्रिय रूप से "पुश" होता है। सरलीकृत, यह इस तरह दिखता है: यहाँ छवि विवरण दर्ज करें

दूसरी ओर एक ओपन-ड्रेन आउटपुट, केवल एक दिशा में सक्रिय है। यह पिन को जमीन की ओर खींच सकता है, लेकिन यह इसे उच्च ड्राइव नहीं कर सकता है। पिछली छवि की कल्पना करें, लेकिन ऊपरी MOSFET के बिना। जब यह जमीन पर नहीं खींच रहा है, तो (निचला पक्ष) MOSFET केवल गैर-प्रवाहकीय है, जो आउटपुट को फ्लोट करने का कारण बनता है।

इस प्रकार के आउटपुट के लिए, सर्किट में एक पुल-अप रोकनेवाला जोड़ा जाना चाहिए, जो कम चालित होने पर लाइन उच्च हो जाएगा। आप बाहरी भाग के साथ या GPIO_PuPd मान GPIO_PuPd_UP पर सेट करके ऐसा कर सकते हैं।

नाम इस तथ्य से आता है कि MOSFET का नाला आंतरिक रूप से किसी भी चीज से जुड़ा नहीं है। MOSFET के बजाय BJT का उपयोग करने पर इस प्रकार के आउटपुट को "ओपन-कलेक्टर" भी कहा जाता है।

  • GPIO_Speed

मूल रूप से, यह आउटपुट सिग्नल के स्लीव रेट (वृद्धि समय और गिरावट का समय) को नियंत्रित करता है। जितनी तेजी से स्लीव रेट होता है, उतना ही शोर सर्किट से होता है। यह बहुत अच्छा अभ्यास है कि स्लीव रेट को धीमा रखें, और केवल एक विशिष्ट कारण होने पर इसे बढ़ाएं।


3

एक और थोड़ा सा tid-bit: ऐसे माइक्रोकंट्रोलर्स के लिए, जिनके पास एक स्पष्ट "ओपन ड्रेन" मोड नहीं है, जैसे कि AVR और Arduino ATmega328- आधारित बोर्ड जैसे कि Uno, इस "ओपन ड्रेन" मोड को रैपर फ़ंक्शन लिखने के लिए अनुकरण किया जा सकता है जब आप इसे भेजते हैं तो बस "आउटपुट लो" पर एक पिन सेट करते हैं 0और जो पिन को "इनपुट एलओडब्ल्यू" (उच्च प्रतिबाधा मोड, आंतरिक पुलअप-रेज़र नॉट ऑन) के रूप में कॉन्फ़िगर करता है जब आप इसे भेजते हैं 1। इस तरह आपको एक ही प्रभाव मिलता है। इन आधुनिक 32-बिट एआरएम-कोर माइक्रोकंट्रोलर्स के पास अभी बहुत अधिक विकल्प हैं।

इसके अलावा, उपरोक्त वर्णित STM32 संदर्भ पुस्तिका का p146 निम्नलिखित बताता है कि [मेरे अतिरिक्त वर्ग कोष्ठक में हैं] :

- ओपन ड्रेन मोड: आउटपुट रजिस्टर में एक "0" एन-एमओएस को सक्रिय करता है [जिससे पिन को GND से जोड़कर सक्रिय रूप से ड्राइविंग करता है] जबकि आउटपुट रजिस्टर में "1" हाय-जेड (P-) में पोर्ट छोड़ देता है। MOS कभी भी सक्रिय नहीं होता है] [उच्च प्रतिबाधा मोड - बिना किसी पुल-अप या पुल-डाउन प्रतिरोधों के साथ एक फ्लोटिंग इनपुट के समान]

- पुश-पुल मोड: आउटपुट रजिस्टर में एक "0" N-MOS को सक्रिय करता है [पिन को GND से जोड़कर सक्रिय रूप से ड्राइव करता है] जबकि आउटपुट रजिस्टर में "1" P-MOS को सक्रिय करता है [सक्रिय रूप से कनेक्ट करके उच्च ड्राइव करता है] पिन को VCC]


Arduino कोड में "रैपर फंक्शन" को इस तरह लागू किया जा सकता है:

digitalWriteOpenDrain(byte pin, bool state)
{
    // Actively drive LOW
    if (state==LOW)
    {
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW);
    }
    // High impedance mode 
    // (note that an internal or external pull-up resistor can optionally be added if you like, according to your requirements)
    else //state==HIGH
    {
        pinMode(pin, INPUT);
        digitalWrite(pin, LOW);
    }
}

या सरलीकृत:

digitalWriteOpenDrain(byte pin, bool state)
{
    digitalWrite(pin, LOW);

    // Actively drive LOW
    if (state==LOW)
    {
        pinMode(pin, OUTPUT);
    }
    // High impedance mode
    // (note that an internal or external pull-up resistor can optionally be added if you like, according to your requirements)
    else //state==HIGH
    {
        pinMode(pin, INPUT);
    }
}

ध्यान दें कि आप एक Arduino पर आंतरिक पुलअप रोकनेवाला चालू कर सकते हैं:

pinMode(pin, INPUT_PULLUP);

या (एक ही बात):

pinMode(pin, INPUT);
digitalWrite(pin, HIGH);

अतिरिक्त पढ़ने:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.