मेरे पी-चैनल MOSFETs इस H- ब्रिज में क्यों मरते रहते हैं?


9

तो यह मेरा एच-ब्रिज है: यहां छवि विवरण दर्ज करें हर बार जब मैं इसका उपयोग एक दिशा में पी-चैनल MOSFET और NPN BJT से करना शुरू करता हूं जो कि इस्तेमाल की गई दिशा सेकंड में मर जाते हैं। मारे गए MOSFET और BJT एक शॉर्ट सर्किट विकसित कर रहे हैं ताकि मैं अन्य दिशा का उपयोग न कर सकूं। वे ध्यान देने योग्य गर्मी या धुएं के बिना मर जाते हैं!
नियंत्रक एक arduino uno है, और केवल N-चैनल MOSFETs PWM सिग्नल से संचालित हैं, P- चैनल सरल डिजिटल आउटपुट पिन से जुड़े हैं। डिजिटल पिंस 9 और 10 के लिए PWM फ्रीक्वेंसी 490Hz है(प्रत्येक PWM आउटपुट व्यक्तिगत है)। मैंने पहले ही 4-5 पी-चैनल MOSFET + BJT जोड़ी को मार दिया है, यह दोनों तरफ हो सकता है। (यह निर्भर करता है कि मैं पहले किस दिशा का उपयोग करता हूं।) मोटर एक 12 वी कार विंडशील्ड वाइपर डीसी मोटर है, बिजली की आपूर्ति 12 वी 5 ए है। 12 वी और 5 वी बिजली आपूर्ति के मैदान जुड़े हुए हैं।

दो चीजें हैं जो सच हो सकती हैं, लेकिन मैं 100% निश्चित नहीं हूं क्योंकि मैंने इसे पूरी तरह से नहीं देखा है:

  • पूर्व संस्करण में मैं R7 और R8 के लिए 1k रेसिस्टर्स का उपयोग कर रहा था, और मुझे कोई समस्या नहीं थी। मैं इसे फिर से कोशिश करूँगा लेकिन मैं अभी पी-चैनल MOSFETs पर कम चल रहा हूँ।
  • जब मैंने तली हुई MOSFET + BJT जोड़ी को काट दिया, तो मैं शेष MOSFET + BJT जोड़ी को मारे बिना दूसरी दिशा का उपयोग कर सकता हूं।

कृपया मेरी मदद करो, यहाँ क्या हो रहा है :)

  • क्या मुझे NPN BJT और P-चैनल MOSFET के बीच अवरोधक का उपयोग करना चाहिए?
  • क्या मुझे 2N2222 BJT के बजाय 2n7000 MOSFET का उपयोग करना चाहिए?

अद्यतन: मैं बस वाइपर मोटर के बजाय एक 12V 55W प्रकाश बल्ब के साथ एच-पुल का परीक्षण किया है। पी-एफईटी और एनपीएन परीक्षण के दौरान मारे गए थे। एन-चैनल पक्ष 40% पीडब्लूएम सिग्नल के साथ संचालित था। लोड के बिना इसमें कोई समस्या नहीं थी।

UPDATE2: मैंने R7 और R8 को 150R से 1k में बदल दिया। अब पुल फिर से बिना किसी कंपोनेंट के काम कर रहा है। (मैंने इसे दिनों के लिए नहीं चलाया था, लेकिन 150R प्रतिरोधों के साथ गलती के पुनरुत्पादन में केवल कुछ सेकंड लगे।) मैं GND और + 12V के बीच पुल पर कुछ डिकूपिंग कैपेसिटर जोड़ूंगा, जैसा कि ब्रायन ने सुझाव दिया था। सभी के जवाब के लिए धन्यवाद!


क्या आपने एक प्रोग्रामिंग गलती से इंकार किया है? क्या यह तब भी मरता है जब आप अपने एच-ब्रिज को मैन्युअल रूप से नियंत्रित करते हैं?
आर.वी.

मैंने इसे शासन करने की कोशिश की। मैंने इसे मैन्युअल रूप से आज़माया नहीं था लेकिन मैं एच-ब्रिज से जुड़े किसी भी लोड के बिना एक छोटी बिजली की आपूर्ति के साथ बहुत सारे परीक्षण कर रहा था। मैं हालांकि अगली बार पुल को मैन्युअल रूप से नियंत्रित करने का प्रयास करूंगा।
gOldie_E36

1
परीक्षण के लिए, और मौका को कम करने के लिए आप एक और मस्जिद को मारते हैं, अपने मोटर को कुछ छोटे से बदलने की कोशिश करें। एक जोड़ी सीसा, या एक छोटा खिलौना मोटर या कुछ और की तरह।
राहगीर

जवाबों:


11

आप 12V की आपूर्ति को कैसे कम कर रहे हैं?

एक संभावित विफलता मोड यह है कि मोटर चालू (पीडब्लूएम दर पर) स्विचिंग से आगमनात्मक स्पाइक को फ्लाईबैक डायोड के माध्यम से 12 वी आपूर्ति में डंप किया जाता है। जी हां, ऐसा ही होना चाहिए, लेकिन ...

यदि 12V आपूर्ति को डिकूप नहीं किया जाता है, और पीएसयू से रीचार्ज नहीं किया जाता है तो रिचार्जेबल बैटरी नहीं होती है, या एक लंबी (आगमनात्मक) केबल के माध्यम से खट्टा होता है, यह वास्तव में 12V की आपूर्ति नहीं है, लेकिन क्षण भर में उस प्रेरक एक समान वोल्टेज से संचालित होता है। जो MOSFET रेटिंग्स से ऊपर हो सकता है ...

एक तेज आस्टसीलस्कप के साथ 12V आपूर्ति की निगरानी करें। यदि यह ओवर-वोल्टेज स्पाइक्स के संकेत दिखाता है, तो इसके डिकॉउलिंग को बढ़ाएं जब तक कि यह न हो। (इसमें कम HF प्रतिबाधा के साथ-साथ एक इलेक्ट्रोलाइटिक जलाशय संधारित्र के लिए 0.1uF सिरेमिक कैपेसिटर शामिल होना चाहिए। और संभवतः मामले में 16V या 25V जेनर डायोड ...)।

मैं नहीं जानता कि यह आपकी वास्तविक समस्या है, लेकिन यह एक आधार है जिसे आप अवश्य कवर करते हैं।


1
यह सबसे प्रशंसनीय व्याख्या है। इस तरह की स्पाइक आसानी से IRV4905 के 20V निरपेक्ष अधिकतम वीजीएस विनिर्देश को पार कर सकती है। परिणामस्वरूप गेट-टू-सोर्स शॉर्ट तब एक बड़े करंट को प्रवाहित करने की अनुमति देगा, हालांकि एनपीएन चालक, इसे भी नष्ट कर देगा।
डेव ट्वीड

अच्छी बात है, मैं किसी भी डिकम्पलिंग का उपयोग नहीं कर रहा हूं। मेरे पास एक सस्ता 20Mhz आस्टसीलस्कप है मैं इसे आपूर्ति की निगरानी करने की कोशिश करूंगा। मेरे पास कुछ सिरेमिक हैं और इलेक्ट्रोलाइटिक कैपेसिटर भी हैं ताकि मैं उन्हें कनेक्ट कर सकूं। मैं zeners हालांकि नहीं है। (मुझे कुछ मिल जाएगा।)
gOldie_E36

Zeners पर पकड़ बंद; ऑटोमोटिव ऐप्स में, 16V zeners बाकी सब कुछ के कारण पर्याप्त नहीं होंगे जो आपूर्ति को बढ़ा सकते हैं (चार्ज करते समय, यह वैसे भी 16V के करीब होगा)। और अगर वे FET वास्तव में 20V VGS हैं, तो वे एक कार में लंबे समय तक नहीं रहेंगे, हालांकि वे 12V प्रयोगशाला PSU (decoupled) पर ठीक रहेंगे।
ब्रायन ड्रमंड बाद

मोटर एक कार से आ रही है, लेकिन मैं इसे 12 वी "लैब" आपूर्ति के साथ उपयोग करने की योजना बना रहा हूं (वास्तव में यह एक सस्ता चीनी एसी से डीसी स्विचिंग पीएसयू है)।
gOldie_E36 12

1
मैंने अभी तक कैपेसिटर नहीं जोड़े हैं क्योंकि मैं उत्सुक था कि एक ही सर्किट के साथ क्या होगा लेकिन इसके बजाय एक प्रकाश बल्ब के साथ आगमनात्मक भार। यह अभी भी उसी तरह व्यवहार करता है।
gOldie_E36

6

आर 1 आर 2 सभी के लिए बहुत बड़ा है, लेकिन सबसे छोटा कोई भी नहीं है। यह मतलब है कि वे बहुत धीमी गति से चालू कर रहे हैं, इसका मतलब है कि भले ही आपको लगता है कि आपने कुछ समझदार समय सीमा को शामिल किया है, फिर भी आपको गोली मार दी जाएगी। खाने fets.I एक अतिरिक्त ट्रांजिस्टर का उपयोग करने के लिए एक तेजी से बंद, इसके लायक है।


मैं दिशा बदलने के बीच 100ms मृत समय का उपयोग कर रहा था, लेकिन आखिरी कोशिश में मुझे दिशा बिल्कुल नहीं बदली गई थी। (बदलते दिशाओं के माध्यम से शूट की संभावना का पता लगाने के लिए।) और ट्रांजिस्टर वैसे भी तले हुए होते हैं। आर 1 और आर 2 के लिए आप किस आकार के प्रतिरोधक की सलाह देते हैं? और मुझे बंद करने के लिए अतिरिक्त ट्रांजिस्टर कैसे कनेक्ट करना चाहिए?
gOldie_E36

5

शीर्ष पी चैनल MOSFETs में से एक सक्रिय है - यह दिशा निर्धारित करता है। जब आप दोनों N चैनल MOSFETs (जैसा कि आपके सर्किट में निहित है) में PWM लागू करते हैं, तो आपको H ब्रिज के आधे हिस्से पर शूट-थ्रू मिलता है।

आपको PWM को दोनों N चैनल डिवाइस पर लागू नहीं करना चाहिए - केवल इसे नीचे दाईं ओर लागू करें जब शीर्ष बाएँ P चैनल डिवाइस सक्रिय हो या केवल ऊपरी बाएँ P चैनल डिवाइस के सक्रिय होने पर इसे नीचे बाईं ओर लागू करें।

EDIT - भी, आपका P चैनल MOSFETs उल्टा है।


1
और अगली बार, इसे एक वर्तमान सीमित बिजली की आपूर्ति के साथ परीक्षण करें ताकि यदि किसी कारण से आपको कोई त्रुटि हो, तो कम से कम आपके ट्रांजिस्टर स्वयं को नष्ट न करें।
बिम्पील्रेकी

मैं एक ही समय में दोनों एन-चैनल को पीडब्लूएम लागू नहीं करता हूं। एक समय में केवल एक के लिए। मैं पहली बार दोनों दिशाओं का उपयोग कर सकता हूं, लेकिन ऑपरेशन के दौरान पी-चैनल MOSFET और BJT जो कि इस्तेमाल की गई दिशा मर जाते हैं।
gOldie_E36

कोई शूट-थ्रू नहीं हो रहा है, और पिछले कुछ समय से मैं बिजली की आपूर्ति के साथ श्रृंखला में 12V 55W प्रकाश बल्ब का उपयोग कर रहा था। इसलिए मैं शूट-थ्रू (बल्ब उज्ज्वल हो जाता है) का पता लगा सकता हूं और उसी समय मैं अपने MOSFETs को शूट-थ्रू स्थिति से बचा सकता हूं। समस्या यह है कि सामान्य ऑपरेशन के दौरान ट्रांजिस्टर मर जाते हैं।
gOldie_E36

@ gOldie_E36 यदि ऐसा है तो आपने यह क्यों कहा "एन-चैनल MOSFETs PWM सिग्नल से संचालित हैं" और आपका डायग्राम "PWM" दोनों N चैनल MOSFETs पर एक नाम के रूप में क्यों दिखाता है? इसके अलावा, आपका P चैनल MOSFETs उल्टा है।
एंडी उर्फ

1
यदि आप सटीक जानकारी प्रदान करते हैं तो लोग केवल आपकी सहायता कर सकते हैं। यदि आप बुरी जानकारी प्रदान करते हैं तो आप लोगों का समय बर्बाद करते हैं। यह देखते हुए कि क्या हुआ है कि कोई कैसे भरोसा कर सकता है कि आपके घटकों का भौतिक प्लेसमेंट आपके आरेखों की तुलना में अधिक सटीक है?
एंडी उर्फ

3

एक बात जो मेरे सामने है, वह है आपके FET में फ्लाईबैक डायोड की कमी। जब आपकी मोटर एक आगमनात्मक भार है, तो यह आपके FETs में उच्च वोल्टेज को आसानी से उत्पन्न कर सकता है जब एक प्रारंभ करनेवाला (V = L dI / dT) में परिवर्तन होता है। ये वोल्टेज आपके FET में आसानी से सोर्स-ड्रेन जंक्शन के ब्रेकडाउन रेटिंग को पार कर सकते हैं।

इसे हल करने के लिए, वोल्टेज के समान रखने के लिए जंक्शन के समानांतर एक डायोड आमतौर पर रखा जाता है:

एच ब्रिज डायोड

(छवि इससे: http://www.modularcircuits.com/blog/articles/h-bridge-secrets/mosfets-and-catch-diodes/ )

यह FET में वोल्टेज को "क्लैम्प" करता है।


आह क्षमा करें यह मेरा बुरा है। मैं इसे तस्वीर से भूल जाता हूं। स्रोत और नाली के बीच MOSFETs में से प्रत्येक के लिए फ्लाईबैक डायोड हैं। सही दिशा में लक्ष्य 1N4007 डायोड। मैं तस्वीर को अपडेट करूंगा। मैंने पहले ही पी-चैनल MOSFETs में डायोड का परीक्षण और प्रतिस्थापित किया है लेकिन स्थिति समान है। :(
gOldie_E36

MOSFETs में अंतर्निहित डायोड होते हैं जो आमतौर पर पर्याप्त होते हैं। 1N4007 एक कम आवृत्ति वाला रेक्टिफायर डायोड है जो फास्ट स्विचिंग के लिए उपयुक्त नहीं है। यदि आप बाहरी डायोड का उपयोग करते हैं, तो उन्हें Schottky प्रकार होना चाहिए।
ब्रूस एबट

तो MOSFEts को फ्लाईबैक डायोड की बिल्कुल भी जरूरत नहीं है? मैं केवल ~ 490Hz का उपयोग कर रहा हूं, क्या यह 1N4007 डायोड के लिए बहुत तेज है?
gOldie_E36

1

@Autistic R1 और R2 के बारे में सही है - इस व्यवस्था से P fets पर बहुत धीमी गति से स्विचिंग समय आएगा। आप BJT + Pullup के बजाय एक समर्पित P Fet ड्राइवर चार्ज पंप का उपयोग करने पर विचार कर सकते हैं।

कुछ पवित्रता की जाँच करता है

क्या आप ड्राइविंग सिग्नल की जांच कर सकते हैं? यह बहुत महत्वपूर्ण है जो एफईटी चालू या बंद है।

forward: 
p1 on    p2 off 
n1 off   n2 on

backwards: 
p1 off    p2 on 
n1 on     n2 off

brake: 
p1 off    p2 off
n1 on     n2 on

अनुसरण करने की कोशिश करें:

  • किसी भी PWM को रोकें
  • किसी भी लोड को डिस्कनेक्ट करें
  • अपने कोड से ड्राइव करें: p1 on n1 ऑफ, 500ms प्रतीक्षा करें, p1 ऑफ n1 ऑफ 100ms (डेड टाइम), p1 ऑफ n1 500ms पर, p1 ऑफ n1 ऑफ 100 ms (डेड टाइम) और दोहराएं। यह एक परीक्षण संकेत पैदा करता है जो डिबग करना आसान है।
  • अब h-ब्रिज का p1 n1 आउटपुट GND से 12V तक अच्छी तरह से स्विच हो जाएगा। इसका परीक्षण करने के लिए एक दायरे का उपयोग करें, या आप एक छोटे से प्रकाश बल्ब का भी उपयोग कर सकते हैं । GND और p1 n1 आउटपुट के बीच बल्ब को कनेक्ट करें - यह पलक झपकेगा इसलिए p1 अच्छा है। इसे 12V और p1 n1 आउटपुट से कनेक्ट करें - यह ब्लिंक करेगा इसलिए n1 अच्छा है।
  • यदि आपके पास कोई गुंजाइश है, तो सत्यापित करें कि p1 और n1 क्रॉस-कंडक्टिंग नहीं है। इस सिग्नल की जाँच करने पर आपको 100 GND डेड टाइम में क्लीन GND, क्लीन 12V, और कुछ फ्लोटिंग GND के अलावा कोई और वैल्यू नहीं दिखाई देगी।
  • यदि आपके पास कोई गुंजाइश नहीं है, तो आप एक बहुत बड़ा मृत समय निर्धारित कर सकते हैं, जैसे 500ms - यह चोट नहीं पहुँचा सकता है :) लेकिन आपके पी भ्रूण को बचा सकता है।
  • अब प्रकाश बल्ब के बजाय अपनी मोटर को कनेक्ट करें, यह चलेगा और बल्ब की तरह धीमा / बंद हो जाएगा। यह सत्यापित करता है कि ठीक हैं।

समस्या

  • उपरोक्त PWM व्यवस्था के बारे में बहुत सतर्क रहें। आप बहुत आसानी से अपने फ्राई कर सकते हैं। N साइड स्विच करते समय आप P को चालू कर सकते हैं, इसलिए आप शॉर्ट्स बनाते हैं (छोटे या बड़े - यह आपके पावर स्रोत की गुणवत्ता के आधार पर 20% PWM के साथ जीवित रह सकता है)।

आम तौर पर, माइक्रोकंट्रोलर्स के पास डेडबैंड कंट्रोल के साथ एक समर्पित 4 आउटपुट पीडब्लूएम ड्राइवर होता है। 4 पीडब्लूएम सिग्नल 4 फेट्स ड्राइव कर सकते हैं, और ये सिग्नल सिंक्रनाइज़ और उल्टे हैं, साथ ही मृत समय को ध्यान में रखा जाता है। अधिक के लिए PIC माइक्रोकंट्रोलर्स PWM देखें। http://www.ermicro.com/blog/wp-content/uploads/2009/01/picpwm_03.jpg

चूंकि Arduino उस उद्देश्य के लिए नहीं बनाया गया है, आप सही PWM संकेतों का उत्पादन करने के लिए कुछ बुनियादी तर्क का उपयोग करना चाह सकते हैं। लक्ष्य यह सुनिश्चित करना है कि एन 1 और पी 1 हमेशा पूरक हैं, साथ ही साथ एन 2 और पी 2 भी हैं। आप कुछ और BJTs: http://letsmakerobots.com/files/YG_H-Bridge1.jpg का उपयोग करके इसे प्राप्त कर सकते हैं तब आपके पास दो पिन होते हैं जिन्हें आप PWM ड्राइव कर सकते हैं।

आप कुछ तर्क गेट्स का उपयोग कर सकते हैं, जैसे: https://e2e.ti.com/blogs_/b/motordrivecontrol/archive/2012/03/03/26/so-which-pwm-technique-is-best-part-2 और फिर आपके पास एक क्लीन फॉरवर्ड / रिवर्स है, साथ ही एक PWM पिन है जो स्पीड को ड्राइव करता है।

यह लेख जाँच के लायक हो सकता है: http://www.modularcircuits.com/blog/articles/h-bridge-secrets/h-bridge_drivers/


जवाब के लिए धन्यवाद। यह हिस्सा अभी भी मेरे लिए स्पष्ट नहीं है: "ऊपर पीडब्लूएम व्यवस्था की कोशिश मत करो। यह सिर्फ गलत है। आप एन साइड स्विच करते समय पी पक्ष को नियंत्रित नहीं कर सकते हैं, इसलिए आप शॉर्ट्स बनाते हैं।" क्या यह अभी भी मान्य है अगर मैं पीडब्लूएम को केवल एन साइड से स्विच नहीं कर रहा हूं, और यदि मैं बदलते दिशाओं के बीच एक बड़े समय सीमा का उपयोग करता हूं? यदि हां, तो कैसे?
gOldie_E36

1
सॉरी मुझे उस पर सख्त होना था। PWM को चलाने के कई तरीके हैं। मानक तरीका एक पूरक PWM आउटपुट से P1 N2 को ड्राइव करना है, और पूरक PWM आउटपुट की एक और जोड़ी से P2 N1 को ड्राइव करना है, इस तरह से आपको सब कुछ ठीक से चलाने के लिए 4 pwm आउटपुट की आवश्यकता है। आपका समाधान काम कर सकता है, यदि आप बहुत सतर्क हैं, और मोटर को ब्रेक करने की आवश्यकता नहीं है। जैसे पी 1 ऑन, एन 1 ऑफ, पी 2 ऑफ, एन 2 पीडब्लूएम एक मान्य व्यवस्था है - यद्यपि आप मोटर को ब्रेक नहीं दे सकते हैं, और अंतिम मोटर गति पीडब्लूएम प्लस मैकेनिकल लोड पर निर्भर करेगी। (यदि पीडब्लूएम के दौरान n2 बंद है, तो मोटर पर कोई ड्राइव वोल्टेज नहीं है।)
जी बी

मैंने अपना जवाब फिर से दे दिया है। यदि यह एक शैक्षिक कार्य नहीं है, तो मैं एक तैयार किए गए एच-ब्रिज नियंत्रक, या बाहरी एफईटी के साथ एक एच-ब्रिज नियंत्रक का उपयोग करने का सुझाव दूंगा।
जी बी

0

क्या आप सुनिश्चित हैं कि आप शीर्ष बाएँ P-FET पर स्विच कर रहे हैं जब आप PWM को नीचे दाएं N-FET पर लागू कर रहे हैं?

आपको अपने P-FET ओरिएंटेशन की दोबारा जांच करनी चाहिए। ऐसा लगता है कि पी-एफईटी पीछे की ओर है और पी-एफईटी बॉडी डायोड का संचालन करने पर आपको अत्यधिक बिजली अपव्यय हो रहा है। अपनी गलती की शर्तों के तहत पी-एफईटी भर में वोल्टेज को मापें। यदि आप 2N2222 चालू होने पर FET के चारों ओर 0.6 V देखते हैं, तो P-FET उलट है। यह भी गलती की स्थिति के दौरान पी-एफईटी गेट वोल्टेज की जांच करें यह सुनिश्चित करने के लिए कि यह 0.2 वी से कम है।

यदि आप अपनी मोटर को सर्किट से हटाते हैं, तो क्या आप अभी भी गलती को देखते हैं?


नमस्कार, आपके जवाब के लिए धन्यवाद। मैं फिर से अभिविन्यास की जांच करूंगा। समस्या यह है कि मैं वास्तव में प्रजनन के दौरान कुछ भी नहीं कर सकता, क्योंकि MOSFET को मारने में केवल कुछ सेकंड लगते हैं (चुपचाप, बिना किसी अत्यधिक गर्मी के)। और निश्चित रूप से यह मुझे एक MOSFET खर्च करता है :) मोटर के बिना और 1 ए बिजली की आपूर्ति के साथ मैंने बहुत माप किया। यदि मैं पी-एफईटी चालू करता हूं, तो नाली-स्रोत के पार वोल्टेज न्यूनतम है (0.01 V जैसा कुछ)। मैं शाम को 5A बिजली की आपूर्ति और आगमनात्मक भार (मोटर) के साथ सर्किट को फिर से तैयार करूंगा। मैं इसके बजाय सिर्फ एक प्रकाश बल्ब का उपयोग करने की योजना बना रहा हूं।
gOldie_E36

P-FET को चालू न करने का प्रयास करें (2N2222 ड्राइव न करें) और देखें कि क्या आपने N-FET को PWM करते समय वर्तमान सीमा को मारा है। यदि हां, तो P-FET बॉडी डायोड का संचालन कर रहा है। 100 ओम अवरोधक के साथ अपने मोटर लोड को बदलने की कोशिश करें और बिजली की आपूर्ति और अपने सर्किट के बीच 10 ओम या इतने अवरोधक डालें। यदि N-FET ग्राउंड पर P-FET बॉडी डायोड को छोटा कर रहा है तो आप करंट को सीमित कर देंगे। प्रतिरोधक आपको ओवर हीटिंग से पहले कुछ माप लेने का समय भी देंगे।
user2661956

परीक्षण के लिए अच्छे विचार, धन्यवाद। मैं पहले से ही पीएसयू और एच-ब्रिज के बीच सुरक्षा के लिए एक अवरोधक का उपयोग कर रहा था।
gOldie_E36 15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.