ዝርዝር ሁኔታ:
- አቅርቦቶች
- ደረጃ 1 የዳቦ ሰሌዳውን መዘርጋት
- ደረጃ 2 - ወደ ጫጫታ ደረጃ ምልክት ይገምግሙ
- ደረጃ 3: ያልተዋሃደ ያልተመጣጠነ እና ልዩነት አለመጣጣም
- ደረጃ 4 - የመተላለፊያ ይዘት
- ደረጃ 5: ሀሳቦችን መዝጋት
ቪዲዮ: በ ESP32: 5 ደረጃዎች የተሻለ DAC እንዴት እንደሚሰራ እና እንደሚሞክር
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:29
ESP32 2 8-ቢት ዲጂታል ወደ አናሎግ ለዋጮች (DACs) አለው። እነዚህ DACs በተወሰነ ክልል (0-3.3V) ውስጥ 8 ቢት ጥራቶች ውስጥ የዘፈቀደ ቮልቴጅን ለማምረት ያስችለናል። በዚህ Instructable ውስጥ ፣ DAC ን እንዴት እንደሚገነቡ እና አፈፃፀሙን ለይተው የሚያሳዩ እንዲሁም ከ ESP32 DAC ጋር ያወዳድሩዎታል። እኔ የምመለከታቸው የአፈጻጸም ጠቋሚዎች ያካትታሉ
- የጩኸት ደረጃ
- የመተላለፊያ ይዘት
- የተዋሃደ ቀጥተኛ ያልሆነ
- ልዩነት አልባነት
እነዚህን ጠቋሚዎች ለመፈተሽ ADS1115 ን እጠቀማለሁ።
የእነዚህ ሁሉ ጠቋሚዎች ግምገማዎ ልክ እንደ ማጣቀሻ መሣሪያዎ (በዚህ ሁኔታ ADS115) ብቻ ትክክለኛ መሆኑን ልብ ማለት አስፈላጊ ነው። ለምሳሌ ፣ የቮልቴጅ ማካካሻ እና ትርፍ ሲያገኝ ADS115 16-ቢት ትክክለኛነት የለውም። እነዚህ ስህተቶች 0.1%ሊሆኑ ይችላሉ። ለብዙ ሥርዓቶች ፣ ፍጹም ትክክለኛነት ውስን አሳሳቢ በሚሆንበት ጊዜ እነዚህ ስህተቶች ችላ ሊባሉ ይችላሉ።
አቅርቦቶች
- ADS1115
- ESP32 ቦርድ
- የዳቦ ሰሌዳ
- ዝላይ ሽቦዎች
- 5 kOhm Resistor
- 1 ማይክሮ ፋራድ ሴራሚክ capacitor
ደረጃ 1 የዳቦ ሰሌዳውን መዘርጋት
የሚከተሉትን ካስማዎች ሽቦ
በ ESP32 እና ADS1115 መካከል
3v3 ቪዲዲ
GND GND
GPIO22 SCL
GPIO21 SDA
በ ADS1115
ADDR GND (ADS115)
DAC ማድረግ
DAC ን ለመሥራት ብዙ መንገዶች አሉ። በጣም ቀላሉ የ PWM ምልክትን ከተከላካይ እና ከካፒታተር ጋር ዝቅተኛ ማጣራት ነው። እኔ እንደ ቋት እዚህ ውስጥ ኦፕ-አምፕ ማከል እችል ነበር ነገር ግን ነገሮችን ቀላል ለማድረግ ፈልጌ ነበር። ይህ ንድፍ PWM ን ከሚደግፍ ከማንኛውም ማይክሮ መቆጣጠሪያ ጋር ለመተግበር ቀላል እና ርካሽ ነው። እኔ እዚህ የንድፍ ንድፈ ሀሳብ (google PWM DAC) አልሄድም።
GPIO255 KOhm resistor 1 microFarad Capacitor gnd ን ብቻ ያገናኙ
አሁን ተከላካዩ capacitor ን ወደ ኤ 0 በ ADS115 ከሚገናኝበት ቦታ ላይ የመዝለያ ሽቦን ያገናኙ።
ደረጃ 2 - ወደ ጫጫታ ደረጃ ምልክት ይገምግሙ
የድምፅ ደረጃውን ለመገምገም በቀላሉ ከዚህ በታች ያለውን ስክሪፕት ያሂዱ። ይህንን ለመገምገም በቀላሉ DAC ን በቋሚ እሴት እንተወውና ቮልቴጁ በጊዜ ሂደት እንዴት እንደሚወዛወዝ እንለካለን።
በዲኤሲሲ ዲዛይን ምክንያት የ PWM ምልክት በ 50% የቀን ዑደት ላይ በሚሆንበት ጊዜ ጫጫታው ከፍተኛ ይሆናል። ስለዚህ እኛ የምንገመግመው እዚህ ነው። ESP32 ን በዚህ ተመሳሳይ የምልክት ደረጃም እንገመግመዋለን። እንዲሁም መለኪያው ተመጣጣኝ እንዲሆን ESP32 DAC ን በተመሳሳይ ዝቅተኛ ማለፊያ ማጣሪያ እናጣራለን።
ለእኔ ውጤቱ ግልፅ ነበር። የ PWM ንድፍ> 6dB የተሻለ SNR ነበረው (ይህ 2 እጥፍ የተሻለ ነው)። ለአዲሱ DAC ግልፅ ድል። አንድ ትንሽ ግራ የሚያጋባው በ SNC ውስጥ በእርግጠኝነት SNR ን የሚያሻሽሉ ማጣሪያዎች መኖራቸው ነው። ስለዚህ ፍጹም እሴቶች ለመተርጎም አስቸጋሪ ሊሆኑ ይችላሉ። እኔ ሁለተኛ ትዕዛዝ ማጣሪያን ብጠቀም ኖሮ ይህ አይሆንም።
ለማንኛውም ኮድ ከዚህ በታች ነው
#ያካትቱ
#አዳፍሩት_ADS1115 ማስታወቂያዎችን ያካትቱ ፤ // adafruit ቤተ -መጽሐፍት ለ adc int16_t adc0; // ባዶነት ማዋቀር (ባዶ) {Serial.begin (115200); // ተከታታይ ማስታወቂያዎችን ይጀምሩ። setGain (GAIN_TWO); // 2x ትርፍ +/- 2.048V 1 ቢት = 0.0625mV ads.begin (); // ጀምር adc float M = 0; // የመጀመሪያ አማካይ ተንሳፋፊ Mp = 0; // previouos ማለት ተንሳፋፊ S = 0; // የመጀመሪያ ልዩነት ተንሳፋፊ Sp = 0; // ቀዳሚው ልዩነት const int reps = 500; // ድግግሞሾች ብዛት int n = 256; // የናሙናዎች ብዛት ledcSetup (0, 25000, 8); // አዘጋጅ pwm frequecny = 25000 Hz በ 8 ቢት ጥራት ledcAttachPin (25 ፣ 0); // ፒኤም ፒን በ 25 ledc ጻፍ (0 ፣ 128); // ለግማሽ የቀን ዑደት (ትልቁ ጫጫታ) መዘግየት (3000) ያዘጋጁት ፤ // የመጠባበቂያ ጊዜ ተንሳፋፊ ተንሳፋፊ snrPWM [reps]; // የ PWM ተንሳፋፊ snrDAC [reps] የ snrs ድርድር; // ለ DAC (sn i = 0; i <reps; i ++) {// loope over overititions for (int k = 1; k <(n+1); k ++) {// loope over ናሙናዎች adc0 = ads.readADC_SingleEnded (0); // ንባብን ያግኙ M = Mp + (adc0 - Mp) / k; // የማሽከርከር አማካኝ Mp = M; // የቀድሞው አማካይ S = Sp + (adc0 - Mp) * (adc0 - M) ያዘጋጁ ፤ // ስሌት የማሽከርከር ልዩነት Sp = S; // የቀደመውን ልዩነት ያዘጋጁ} // snr በ dB snrPWM = 20 * log10 (3.3 / (sqrt (S / n) *.0625 *.001)); // እሴቶችን ዳግም ያስጀምሩ M = 0; Mp = 0; ኤስ = 0; Sp = 0; } ledcDetachPin (25); // PWM ን ከፒን 25 dacWrite (25 ፣ 128) ያላቅቁ ፤ // ለ DAC መዘግየት (3000) ይፃፉ ፤ // እስኪረጋጋ ይጠብቁ (int i = 0; i <reps; i ++) {// ልክ እንደ PWM loop ለ (int k = 1; k <(n+1) ፣ k ++) {adc0 = ads.readADC_SingleEnded (0); M = Mp + (adc0 - Mp) / k; Mp = M; S = Sp + (adc0 - Mp) * (adc0 - M); Sp = S; } snrDAC = 20 * log10 (3.3 / (sqrt (S / n) *.0625 *.001))); መ = 0; Mp = 0; ኤስ = 0; Sp = 0; } // በአንድ ግራፍ ላይ SNRs ያሴሩ ለ (int i = 1; i <reps; i ++) {Serial.print ("PWM_SNR (dB):"); Serial.print (snrPWM ); Serial.print (","); Serial.print ("ESP32_SNR (dB):"); Serial.println (snrDAC ); }} ባዶነት loop (ባዶ) {}
ደረጃ 3: ያልተዋሃደ ያልተመጣጠነ እና ልዩነት አለመጣጣም
ዋናው ያልተመጣጠነነት በእርስዎ DAC ውፅዓት ቮልቴጅ እና ቀጥታ መስመር መካከል ምን ያህል መዛባት እንዳለ የሚለካ ነው። ትልቁ ይህ የባሰ ነው…
ልዩነቱ ያልተመጣጠነ ሁኔታ በቮልቴጅ ውስጥ የታየው ለውጥ (ከአንድ ኮድ ወደ ቀጣዩ) ከቀጥታ መስመር ከሚጠበቀው በግምት የሚለካ ነው።
እዚህ ያሉት ውጤቶች በእውነት አስደሳች ነበሩ። በመጀመሪያ ፣ ሁለቱም ከ 0.5lsb ያነሰ ስህተት (በ 8-ቢት ጥራት) ጥሩ ነው ነገር ግን PWM በጣም የተሻሉ የተዋሃደ መስመራዊነት አለው። ሁለቱም ተነፃፃሪ ልዩነት አለመጣጣም አላቸው ፣ ግን ESP32 DAC አንዳንድ በጣም እንግዳ ጫፎች አሉት። ከዚህም በላይ የ PWM ዘዴ ለስህተቶቹ የተወሰነ መዋቅር አለው። በመሰረቱ ትክክለኛውን ቮልቴጅን በተለዋጭ ፋሽን ያቃጥላል እና ያሰላል።
የእኔ ጥርጣሬ ይህ በ ESP32 ላይ ባለ 8-ቢት PWM ምልክት እንዴት እንደሚፈጠር አንዳንድ እንግዳ የሆነ የክብደት ስህተት ነው።
ይህንን ለማስተካከል አንዱ መንገድ በሁለት ተጓዳኝ ኮዶች (ለምሳሌ 128 ፣ 129) ከ PWM ጋር በፍጥነት ማሽከርከር ነው። በአናሎግ ዝቅተኛ ማለፊያ ማጣሪያ ፣ የተከሰቱት ስህተቶች በአማካይ ወደ ዜሮ ይሆናሉ። ይህንን በሶፍትዌር አስመስዬ ነበር እና በእርግጥ ሁሉም ስህተቶች ጠፉ። አሁን የ PWM ዘዴ ለ 16-ቢት ትክክለኛ የሆነ መስመራዊነት አለው!
ውሂቡን ለማመንጨት ኮዱ ማንኛውም ከዚህ በታች ነው። ውጤቱ በ.csv ቅርጸት በተከታታይ ማሳያ ላይ ይሆናል። ለተጨማሪ ሂደት ወደ የጽሑፍ ፋይል ይቅዱ።
#ያካትቱ
#አዳፍሩት_ADS1115 ማስታወቂያዎችን ያካትቱ ፤ / * ይህንን ለ 16-ቢት ስሪት */ int16_t adc0 ይጠቀሙ። ባዶ ማዘጋጀት (ባዶ) {Serial.begin (115200); ads.setGain (GAIN_ONE); // 2x ትርፍ +/- 2.048V 1 ቢት = 1mV 0.0625mV ads.begin (); ledcSetup (0, 25000, 8); ledcAttachPin (25, 0); Serial.println (“የሚጠበቅ ፣ የታዘበ”); ledcWrite (0, 2); መዘግየት (3000); ለ (int i = 2; i <255; i ++) {ledcWrite (0, i); መዘግየት (100); adc0 = ads.readADC_SingleEnded (0); ተንሳፋፊ ይጠበቃል = (i / 256.0 * 3.3) / 4.096 * 32767; Serial.print (የሚጠበቀው); Serial.print (","); Serial.println (adc0); }} ባዶነት loop (ባዶ) {}
ደረጃ 4 - የመተላለፊያ ይዘት
የ DAC ውፅዓት በ 3 ዲቢቢ በሚቀንስበት ድግግሞሽ ልክ የመተላለፊያ ይዘትን እዚህ እገልጻለሁ። ይህ ኮንቬንሽን እና በተወሰነ ደረጃ የዘፈቀደ ነው። ለምሳሌ ፣ በ 6 ዲቢ ነጥብ ላይ ፣ ዲኤሲው አሁንም ~ 50% ስፋት ይሆናል የሚል ምልክት ያወጣል።
ይህንን ለመለካት በቀላሉ ከ DAC ወደ ADC እየጨመረ የሚሄደውን የኃይለኛ ሞገዶችን እናስተላልፋለን እና የእነሱን መደበኛ መዛባት እንለካለን። በሚያስገርም ሁኔታ የ 3 ዲቢ ነጥብ በ 30Hz (1/(2*pi*5000*1e-6)) ላይ ነው።
ESP32 በሰከንድ 1 ሜጋ ናሙና ማድረግ ይችላል። ይህ ለ ESP32 እጅ ወደ ታች ማሸነፍ ነው። በ 100Hz የመተላለፊያ ይዘት የሙከራ ክልል ውስጥ የእሱ ስፋት በጭራሽ አይበላሽም።
ከዚህ በታች ያለው ኮድ የ PWM DAC የመተላለፊያ ይዘትን ሊሞክር ይችላል።
#ያካትቱ
#አዳፍሩት_ADS1115 ማስታወቂያዎችን ያካትቱ ፤ / * ይህንን ለ 16-ቢት ስሪት */ int16_t adc0 ይጠቀሙ። int16_t adc1; ባዶ ማዘጋጀት (ባዶ) {float M; ተንሳፋፊ Mp = 0; ተንሳፋፊ S = 0; ተንሳፋፊ Sp = 0; Serial.begin (115200); ads.setGain (GAIN_ONE); // 1x ትርፍ +/- 4.096V 1 ቢት = 2mV 0.125mV ads.begin (); ledcSetup (0, 25000, 8); ledcAttachPin (25, 0); መዘግየት (5000); Serial.println ("ድግግሞሽ ፣ ስፋት"); ለ (int i = 1; i <100; i ++) {ያልተፈረመ ረጅም ጅምር = ሚሊስ (); ያልተፈረመ ረዥም T = ሚሊስ (); Sp = 0; ኤስ = 0; መ = 0; Mp = 0; int k = 1; ተንሳፋፊ ደንብ; ((T - ጀምር) <1000) {int out = 24 * ኃጢአት (2 * PI * i * (T - ጀምር) / 1000.0) + 128; ledcWrite (0 ፣ ውጭ); adc0 = ads.readADC_SingleEnded (0); M = Mp + (adc0 - Mp) / k; Mp = M; S = Sp + (adc0 - Mp) * (adc0 - M); Sp = S; ቲ = ሚሊስ (); k ++; } ከሆነ (i == 1) {norm = sqrt (S / k); } Serial.print (i); Serial.print (","); Serial.println (sqrt (S / k) / norm, 3); k = 0; }} ባዶነት loop (ባዶ) {}
እና ይህ ኮድ የ ESP32 የመተላለፊያ ይዘቱን ይፈትሻል። መያዣውን ማስወገድዎን ያረጋግጡ ወይም ውጤቶቹ ለሁለቱም ዘዴዎች ተመሳሳይ ይሆናሉ።
#ያካትቱ
#አዳፍሩት_ADS1115 ማስታወቂያዎችን ያካትቱ ፤ / * ይህንን ለ 16-ቢት ስሪት */ int16_t adc0 ይጠቀሙ። int16_t adc1; ባዶ ማዘጋጀት (ባዶ) {float M; ተንሳፋፊ Mp = 0; ተንሳፋፊ S = 0; ተንሳፋፊ Sp = 0; Serial.begin (115200); ads.setGain (GAIN_ONE); // 1x ትርፍ +/- 4.096V 1 ቢት = 2mV 0.125mV ads.begin (); መዘግየት (5000); Serial.println ("ድግግሞሽ ፣ ስፋት"); ለ (int i = 1; i <100; i ++) {ያልተፈረመ ረጅም ጅምር = ሚሊስ (); ያልተፈረመ ረዥም T = ሚሊስ (); Sp = 0; ኤስ = 0; መ = 0; Mp = 0; int k = 1; ተንሳፋፊ ደንብ; ((T - ጀምር) <1000) {int out = 24 * ኃጢአት (2 * PI * i * (T - ጀምር) / 1000.0) + 128; dacWrite (25 ፣ ውጭ); adc0 = ads.readADC_SingleEnded (0); M = Mp + (adc0 - Mp) / k; Mp = M; S = Sp + (adc0 - Mp) * (adc0 - M); Sp = S; ቲ = ሚሊስ (); k ++; } ከሆነ (i == 1) {norm = sqrt (S / k); } Serial.print (i); Serial.print (","); Serial.println (sqrt (S / k) / norm, 3); k = 0; }} ባዶነት loop (ባዶ) {}
ደረጃ 5: ሀሳቦችን መዝጋት
አዲሱ የ DAC ዲዛይን በመስመር እና በጩኸት ያሸንፋል ነገር ግን በመተላለፊያ ይዘት ላይ ያጣል። በማመልከቻዎ ላይ በመመስረት ከእነዚህ ጠቋሚዎች ውስጥ አንዱ ከሌላው የበለጠ አስፈላጊ ሊሆን ይችላል። በእነዚህ የሙከራ ሂደቶች አማካኝነት ያንን ውሳኔ በተጨባጭ መወሰን መቻል አለብዎት!
እንዲሁም ፣ እዚህ መጠቆም ተገቢ ይመስለኛል ምክንያቱም የ PWM ውፅዓት ዝቅተኛ ጫጫታ ስለሆነ ፣ በልዩ መስመራዊነት በ PWM ውፅዓት (ምናልባትም 16 ቢት ትክክለኛነት እንኳን) እጅግ የላቀ ጥራት ያለው DAC መገንባት መቻል አለበት። ያ የተወሰነ ሥራ ይወስዳል። እስከዚያ ድረስ እኔ አዲሱን እጠይቃለሁ!
የሚመከር:
ሽቦ-አልባ ቆርቆሮ-ስልክ እንዴት እንደሚሰራ! (አርዱinoኖ ዎልኪ Talkie): 7 ደረጃዎች (ከስዕሎች ጋር)
ሽቦ-አልባ ቆርቆሮ-ስልክ እንዴት እንደሚሰራ! (አርዱinoኖ ዎልኪ Talkie) - ልክ በሌላ ቀን ፣ የሙዝ ስልኬ መሥራት ሲያቆም በጣም አስፈላጊ በሆነ የስልክ ጥሪ መሃል ላይ ነበርኩ! በጣም ተበሳጨሁ። በዚያ ደደብ ስልክ ምክንያት ጥሪ ያመለጠኝ ለመጨረሻ ጊዜ ነው! (ወደኋላ መለስ ብዬ ፣ ትንሽ በጣም ተናድጄ ሊሆን ይችላል
የ LED ኩብ እንዴት እንደሚሰራ - የ LED ኩብ 4x4x4: 3 ደረጃዎች
የ LED ኩብ እንዴት እንደሚሰራ | LED Cube 4x4x4: የ LED Cube እንደ የ LED ማያ ገጽ ሊታሰብበት ይችላል ፣ በዚህ ውስጥ ቀላል 5 ሚሜ ኤልኢዲ የዲጂታል ፒክስሎች ሚና ይጫወታል። የ LED ኩብ የእይታ ጽናት (POV) ተብሎ የሚጠራውን የኦፕቲካል ክስተት ጽንሰ -ሀሳብ በመጠቀም ምስሎችን እና ንድፎችን እንድንፈጥር ያስችለናል። ስለዚህ ፣
በቤት ውስጥ የስፕሪንግ ንዝረት ዳሳሽ እንዴት እንደሚሰራ !: 5 ደረጃዎች (ከስዕሎች ጋር)
በቤት ውስጥ የስፕሪንግ ንዝረት ዳሳሽ እንዴት እንደሚሠራ !: እኔ “ድሃውን ሰው” የሚባለውን የስፕሪንግ ንዝረት ዳሳሽ የሚያካትት አዲስ ፕሮጀክት ላይ እሠራ ነበር። የፍጥነት መለኪያ/እንቅስቃሴ ዳሳሽ! እነዚህ የፀደይ-ንዝረት መቀያየሪያዎች ከፍተኛ የስሜት ህዋሳት ያልሆኑ አቅጣጫዊ ንዝረት የቀሰቀሱ መቀስቀሻዎች ናቸው። ውስጥ አንድ
ዲጂታል ካሊፐር እንዴት እንደሚፈርስ እና ዲጂታል ካሊፐር እንዴት እንደሚሰራ 4 ደረጃዎች
ዲጂታል ካሊፐር እንዴት እንደሚፈርስ እና ዲጂታል ካሊፐር እንዴት እንደሚሰራ - ብዙ ሰዎች መለኪያዎችን ለመለካት እንዴት እንደሚጠቀሙ ያውቃሉ። ይህ መማሪያ ዲጂታል መለያን እንዴት እንደሚፈርስ እና ዲጂታል ካሊፐር እንዴት እንደሚሠራ ማብራሪያን ያስተምርዎታል
ቅንጥብዎን Tek ሽጉጥ የተሻለ እንዲሆን እንዴት ማድረግ እንደሚቻል -4 ደረጃዎች
የእርስዎ ቅንጥብ Tek ሽጉጥ የተሻለ ዓላማን እንዴት እንደሚያደርግ -ስለዚህ የ Clip Tek ሽጉጥዎ የተሻለ ዓላማ እንዲኖረው ማድረግ ይፈልጋሉ? እንዴት ማድረግ እንዳለብዎ እነግርዎታለሁ። ዓላማዎን ለማሻሻል በጣም ጥሩው መንገድ የሌዘር ዓላማን መጠቀም ነው። ከ 10 ዶላር በታች ያስወጣዎታል