ዝርዝር ሁኔታ:
ቪዲዮ: በአርዱዲኖ ምክንያት ላይ የተመሠረተ 3 ደረጃ ሳይን ሞገድ ጄኔሬተር - 5 ደረጃዎች
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:31
የዚህ ድርሻ ዓላማ የላልትን የላቀ አፈፃፀም + የማጣቀሻ እጥረት + አጋዥ ያልሆነ የውሂብ ሉህ ለመጠቀም የሚሞክርን ሰው መርዳት ነው።
ይህ ፕሮጀክት በዝቅተኛ ፍሪፍ (<1kHz) እና 16 ናሙናዎች / ዑደት @ ከፍተኛ ፍሪክ (እስከ 20kHz) ድረስ እስከ 3 ደረጃ ሳይን ሞገድ @ 256 ናሙናዎችን / ዑደትን ማመንጨት የሚችል ሲሆን ይህም በቀላል LPFs እና በጥሩ ሁኔታ ለማለስለስ በቂ ነው። ውፅዓት ማለት ይቻላል ፍጹም ነው።
እኔ የተያያዘው ፋይል የእኔ ተጨማሪ ስሪት አልነበረም። አንዳንድ ተጨማሪ ባህሪያትን ጨምሬ ነበር ፣ ግን ዋናው ለዚያ ተመሳሳይ ነው። ናሙናዎች/ዑደት ከላይ ከተጠቀሰው መግለጫ በታች እንደተቀናበሩ ልብ ይበሉ።
በአባሪው ፋይል ውስጥ በሚታየው አቀራረብ የሲፒዩ አቅም ከፍ ስለሚል ፣ የአርዲኖኖን የውጭ መቋረጫ የሚጠቀምበትን የአርዲኖኖን የውጭ መቋረጫ ተጠቅሞ የተደጋጋሚነት እሴቱን ለአርዱዲኖ ፋንታ ለማስተላለፍ እጠቀም ነበር። ከድግግሞሽ ቁጥጥር በተጨማሪ አርዱዲኖ ኡኖ እንዲሁ ስፋት (በዲጂታል እምቅ-ሜትር + OpAmp በኩል) እንዲሁም እኔ/ኦ --- ለመጫወት ብዙ ቦታ ይኖራል።
ደረጃ 1 የሲን ውሂብ ድርድርን ይፍጠሩ
የእውነተኛ-ጊዜ ስሌት ሲፒዩ የሚጠይቅ ስለሆነ ለተሻለ አፈፃፀም የሳይን ውሂብ ድርድር ያስፈልጋል
uint32_t sin768 PROGMEM =….እስከ x = [0: 5375]; y = 127+127*(ኃጢአት (2*pi/5376/*ወይም አንዳንድ # እርስዎ በሚፈልጉት መስፈርት*/) ላይ የተመሠረተ ነው)
ደረጃ 2 - ትይዩ ውፅዓት ማንቃት
ከኡኖ በተቃራኒ ፣ ፋው ውስን ማጣቀሻ አላቸው። ሆኖም በአርዱዲኖ ኡኖ ላይ የተመሠረተ የ 3 ደረጃ ሳይን ሞገድ ለማመንጨት ፣ በመጀመሪያ ደረጃ ፣ በዝቅተኛ MCLK (16 ሜኸዝ ሳለ 84 ሜኸዝ ነው) ፣ 2 ኛ ፣ ውስን ጂፒኦ ከፍተኛውን የ 2 ደረጃ ውፅዓት ማምረት ይችላል እና ተጨማሪ ያስፈልግዎታል 3 ኛ ደረጃ (C = -AB) ለማምረት የአናሎግ ወረዳ።
GPIO ን ማንቃት መከተል በአብዛኛው በሙከራ እና በሙከራ+በ SAM3X አጋዥ የውሂብ ስብስብ ላይ የተመሠረተ ነበር
PIOC-> PIO_PER = 0xFFFFFFFE; // PIO መቆጣጠሪያ PIO ምዝገባን ያንቁ (የኤቲኤምኤል SAM3X የውሂብ ሉህ p656 ይመልከቱ) እና https://arduino.cc/en/Hacking/PinMappingSAM3X ፣ Arduino Due pin 33-41 እና 44-51 ነቅተዋል
PIOC-> PIO_OER = 0xFFFFFFFE; // የ PIO ተቆጣጣሪ ውፅዓት ምዝገባን ያንቁ ፣ የ ATMEL SAM3X የውሂብ ሉህ PIOC-> PIO_OSR = 0xFFFFFFFE p657 ን ይመልከቱ ፤ // የ PIO ተቆጣጣሪ የውጤት ሁኔታ ምዝገባ ፣ ከ ATMEL SAM3X የውሂብ ሉህ p658 ይመልከቱ
PIOC-> PIO_OWER = 0xFFFFFFFE; // የፒዮ ውፅዓት መጻፍ ምዝገባን ያንቁ ፣ ከ ATMEL SAM3X የውሂብ ሉህ p670 ይመልከቱ
// PIOA-> PIO_PDR = 0x30000000; // እንደ ኢንሹራንስ አማራጭ ፣ በአፈፃፀም ላይ ተጽዕኖ የሚያሳድር አይመስልም ፣ ዲጂታል ፒን 10 ከሁለቱም PC29 እና PA28 ጋር ይገናኛል ፣ ዲጂታል ፒን 4 ከሁለቱም PC29 እና PA28 ጋር ይገናኛል ፣ እዚህ ፒአይኤ #28 & 29 ን ለማሰናከል
ደረጃ 3 መቋረጥን ማንቃት
አፈፃፀሙን ከፍ ለማድረግ የሲፒዩ ጭነት በተቻለ መጠን ዝቅተኛ መሆን አለበት። ሆኖም በሲፒዩ ፒን እና በተገቢው ፒን መካከል ባለው 1to1 ባልሆነ ግንኙነት ምክንያት የቢት አሠራር አስፈላጊ ነው።
ስልተ ቀመሩን የበለጠ ማመቻቸት ይችላሉ ነገር ግን ክፍሉ በጣም ውስን ነው።
ባዶ TC7_Handler (ባዶ) {TC_GetStatus (TC2, 1);
t = t%ናሙናዎች; // የ t ን ከመጠን በላይ መብዛትን ለማስወገድ ‹ከሆነ› ይልቅ የ t%ናሙናዎችን ይጠቀሙ
phaseAInc = (ቅድመ -ቅምጥ*t)%5376; // የድርድር መረጃ ጠቋሚን ከመጠን በላይ ለማስወገድ %5376 ን ይጠቀሙ
phaseBInc = (phaseAInc+1792)%5376;
phaseCInc = (phaseAInc+3584)%5376;
p_A = sin768 [phaseAInc] << 1; // ያመልክቱ PIOC: PC1 ወደ PC8 ፣ ተጓዳኝ አርዱዲኖ የመድረሻ ፒን-ፒን 33-40 ፣ ስለዚህ ለ 1 አሃዝ ወደ ግራ ይቀይሩ
p_B = sin768 [phaseBInc] << 12; // PIOC ን ይመልከቱ-PC12 ወደ PC19 ፣ ተጓዳኝ አርዱinoኖ ምክንያት ፒን-ፒን 51-44 ፣ ስለዚህ ወደ ግራ 12 አሃዝ ይቀይሩ
p_C = sin768 [phaseCInc]; // የደረጃ ሐ ውፅዓት ሠራተኛ PIOC: PC21 ፣ PC22 ፣ PC23 ፣ PC24 ፣ PC25 ፣ PC26 ፣ PC28 እና PC29 ፣ ተጓዳኝ አርዱinoኖ የገባበት ፒን - ዲጂታል ፒን 9 ፣ 8 ፣ 7 ፣ 6 ፣ 5 ፣ 4 ፣ 3 ፣ 10 ፣ በቅደም ተከተል
p_C2 = (p_C & B11000000) << 22; // ይህ PC28 እና PC29 ያመነጫል
p_C3 = (p_C & B00111111) << 21; // ይህ PC21-PC26 ያመነጫል
p_C = p_C2 | p_C3; // ይህ የደረጃ ሐ ትይዩ ውፅዓት ይፈጥራል
p_A = p_A | p_B | p_C; // 32 ቢት ውፅዓት = ደረጃ ሀ (8 ቢት) | ደረጃ ለ | ደረጃ ሐ
PIOC-> PIO_ODSR = p_A; // የውጤት መመዝገቢያ = p_A
t ++; }
ደረጃ 4: R/2R DAC
በ google ላይ 3x8bit R/2R DAC ፣ የጭነት ጭነቶች ይገንቡ።
ደረጃ 5 - ሙሉ ኮድ
#መለየት _BV (x) (1 << (x)); uint32_t sin768 PROGMEM = /* x = [0: 5375]; y = 127+127*(ኃጢአት (2*pi/5376))*/
uint32_t p_A ፣ p_B ፣ p_C ፣ p_C2 ፣ p_C3; // ደረጃ A ደረጃ ቢ ደረጃ ሐ እሴት-ምንም እንኳን ውፅዓት 8 ቢት ብቻ ቢሆንም ፣ በ 32 ቢት ፒኦክ ውፅዓት ለመቅዳት p_A እና p_B እሴት አዲስ 32 ቢት እሴት ለማመንጨት ይሠራል።
uint16_t phaseAInc, phaseBInc, phaseCInc, freq, freqNew; uint32_t ክፍተት; uint16_t ናሙናዎች ፣ ቅድመ -ቅምጥ; uint32_t t = 0;
ባዶነት ማዋቀር () {
// ትይዩ ውፅዓት PIOC ቅንብር-አርዱinoኖ ምክንያት ፒን 33-40 እንደ ደረጃ ሀ ውፅዓት ተቀጥረው ሲሰሩ ፒን 44-51 ደግሞ ለ “B” ውጤት ይሠራል
PIOC-> PIO_PER = 0xFFFFFFFE; // PIO መቆጣጠሪያ PIO ምዝገባን ያንቁ (የኤቲኤምኤል SAM3X የውሂብ ሉህ p656 ይመልከቱ) እና https://arduino.cc/en/Hacking/PinMappingSAM3X ፣ Arduino Due pin 33-41 እና 44-51 ነቅተዋል
PIOC-> PIO_OER = 0xFFFFFFFE; // የ PIO ተቆጣጣሪ ውፅዓት ምዝገባን ያንቁ ፣ ከ ATMEL SAM3X የውሂብ ሉህ p657 ይመልከቱ
PIOC-> PIO_OSR = 0xFFFFFFFE; // የ PIO ተቆጣጣሪ የውጤት ሁኔታ ምዝገባ ፣ ከ ATMEL SAM3X የውሂብ ሉህ p658 ይመልከቱ
PIOC-> PIO_OWER = 0xFFFFFFFE; // የፒዮ ውፅዓት መጻፍ ምዝገባን ያንቁ ፣ ከ ATMEL SAM3X የውሂብ ሉህ p670 ይመልከቱ
// PIOA-> PIO_PDR = 0x30000000; // እንደ ኢንሹራንስ አማራጭ ፣ በአፈጻጸም ላይ ተጽዕኖ ያለው አይመስልም ፣ ዲጂታል ፒን 10 ከሁለቱም PC29 እና PA28 ጋር ይገናኛል ፣ ዲጂታል ፒን 4 ከሁለቱም PC29 እና PA28 ጋር ይገናኛል ፣ እዚህ PIOA #28 & 29 // ሰዓት ቆጣሪን ማዋቀር ለማሰናከል ፣ http ን ይመልከቱ: //arduino.cc/en/Hacking/PinMappingSAM3X ፣
pmc_set_writeprotect (ሐሰት); // የኃይል አስተዳደር ቁጥጥር መዝገቦችን የመፃፍ ጥበቃን ያሰናክሉ
pmc_enable_periph_clk (ID_TC7); // የአከባቢ ሰዓት ሰዓት ቆጣሪን ያንቁ 7
TC_Configure (/ * ሰዓት */TC2 ፣/ * ሰርጥ */1 ፣ TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK1); // TC ሰዓት 42 ሜኸ (ሰዓት ፣ ሰርጥ ፣ የሞድ ቅንብርን ያወዳድሩ) TC_SetRC (TC2 ፣ 1 ፣ ክፍተት); TC_Start (TC2 ፣ 1);
// በሰዓት ቆጣሪ TC2-> TC_CHANNEL [1]. TC_IER = TC_IER_CPCS ላይ የሰዓት ቆጣሪዎችን ማንቃት ፤ // IER = መቋረጥ ምዝገባን ያንቁ TC2-> TC_CHANNEL [1]. TC_IDR = ~ TC_IER_CPCS; // IDR = መዝገቡን ያሰናክሉ
NVIC_EnableIRQ (TC7_IRQn); // በተቆራኘው የቬክተር ማቋረጫ ተቆጣጣሪ ፍሪ = 60 ውስጥ ያለውን መቋረጥ ያንቁ። // ድግግሞሽ እንደ 60Hz ቅድመ -ቅምጥ = 21; // የድርድር መረጃ ጠቋሚ በ 21 ናሙናዎች = 256; // የውጤት ናሙናዎች 256/የዑደት ክፍተት = 42000000/(ፍሬክ*ናሙናዎች); // ማቋረጥ TC_SetRC (TC2 ፣ 1 ፣ ክፍተት) ይቆጥራል ፤ // TC Serial.begin ን ይጀምሩ (9600); // ለሙከራ ዓላማ}
ባዶ ቼክ ፍሬክ ()
{freqNew = 20000;
ከሆነ (freq == freqNew) {} ሌላ
{freq = freqNew;
ከሆነ (freq> 20000) {freq = 20000; /*ከፍተኛ ድግግሞሽ 20kHz*/};
ከሆነ (freq <1) {freq = 1; /*ደቂቃ ድግግሞሽ 1Hz*/};
ከሆነ (freq> 999) {ቅድመ -ቅምጥ = 384; ናሙናዎች = 14;} // ለድግግሞሽ> = 1kHz ፣ ለእያንዳንዱ ዑደት 14 ናሙናዎች
ሌላ ከሆነ (freq> 499) {ቅድመ -ቅምጥ = 84; ናሙናዎች = 64;} // ለ 500 <= frequency99) {preset = 42; ናሙናዎች = 128;} // ለ 100Hz <= ድግግሞሽ <500Hz ፣ 128 ናሙናዎች/ዑደት
ሌላ {ቅድመ -ቅምጥ = 21; ናሙናዎች = 256;}; // ለተደጋጋሚ <100hz ፣ ለእያንዳንዱ ናሙና 256 ናሙናዎች
ክፍተት = 42000000/(freq*ናሙናዎች); t = 0; TC_SetRC (TC2 ፣ 1 ፣ ክፍተት); }}
ባዶነት loop () {
checkFreq (); መዘግየት (100); }
ባዶ TC7_Handler (ባዶ)
{TC_GetStatus (TC2 ፣ 1) ፤
t = t%ናሙናዎች; // የ t phase ናሙናዎችን ከመጠን በላይ ለማስወገድ t%ናሙናዎችን ይጠቀሙ (= ቅድመ -ቅምጥ*t)%5376; // የድርድር መረጃ ጠቋሚን ከመጠን በላይ ለማስወገድ %5376 ን ይጠቀሙ
phaseBInc = (phaseAInc+1792)%5376;
phaseCInc = (phaseAInc+3584)%5376;
p_A = sin768 [phaseAInc] << 1; // PIOC ን ይመልከቱ-PC1 ወደ PC8 ፣ ተጓዳኝ አርዱinoኖ የመድረሻ ፒን-ፒን 33-40 ፣ ስለዚህ ለ 1 አሃዝ ወደ ግራ ይቀይሩ
p_B = sin768 [phaseBInc] << 12; // PIOC ን ይመልከቱ-PC12 ወደ PC19 ፣ ተጓዳኝ አርዱinoኖ ምክንያት ፒን-ፒን 51-44 ፣ ስለዚህ ወደ ግራ 12 አሃዝ ይቀይሩ
p_C = sin768 [phaseCInc]; // የደረጃ ሐ ውፅዓት ሠራተኛ PIOC: PC21 ፣ PC22 ፣ PC23 ፣ PC24 ፣ PC25 ፣ PC26 ፣ PC28 እና PC29 ፣ ተጓዳኝ አርዱinoኖ የገባበት ፒን - ዲጂታል ፒን 9 ፣ 8 ፣ 7 ፣ 6 ፣ 5 ፣ 4 ፣ 3 ፣ 10 ፣ በቅደም ተከተል
p_C2 = (p_C & B11000000) << 22; // ይህ PC28 እና PC29 ያመነጫል
p_C3 = (p_C & B00111111) << 21; // ይህ PC21-PC26 //Serial.println(p_C3 ፣ BIN) ያመነጫል ፤ p_C = p_C2 | p_C3; // ይህ የደረጃ ሐ ትይዩ ውፅዓት ይፈጥራል
p_A = p_A | p_B | p_C; // 32 ቢት ውፅዓት = ደረጃ ሀ (8 ቢት) | ደረጃ ለ | ደረጃ ሐ //Serial.println(p_A>>21 ፣ BIN); // PIOC-> PIO_ODSR = 0x37E00000;
PIOC-> PIO_ODSR = p_A; // የውጤት መመዝገቢያ = p_A t ++; }
የሚመከር:
5V ኤልሲዲ ማሳያ በአርዱዲኖ ምክንያት 3.3V I2C: 5 ደረጃዎች
5V ኤልሲዲ ማሳያ ከአርዱዲኖ ምክንያት 3.3V I2C ጋር - ይህ ልጥፍ በአርዱዲኖ ምክንያት (ወይም ሌላ 3.3 ቪ ቦርድ) ከታዋቂው ኤልሲዲ 16x2 ማሳያ ከ I2C አስማሚ ሞዱል ጋር ለመጠቀም ቀላሉ መንገድን ለማብራራት ያለመ ነው። የመጀመሪያው ችግር ኤልሲዲ ይፈልጋል የጀርባው ብርሃን በትክክል እንዲሠራ 5V ፣ ግን SCL እና SDA p
ንፁህ ሳይን ሞገድ ኢንቬተር: 8 ደረጃዎች
ንፁህ ሳይን ሞገድ ኢንቬተር: የእኔ ምርምር
በአየር ሁኔታ ላይ የተመሠረተ የሙዚቃ ጄኔሬተር (ESP8266 የተመሠረተ ሚዲ ጄኔሬተር) 4 ደረጃዎች (ከስዕሎች ጋር)
በአየር ሁኔታ ላይ የተመሠረተ የሙዚቃ ጄኔሬተር (ESP8266 የተመሠረተ ሚዲ ጄኔሬተር) - ሠላም ፣ ዛሬ የራስዎን ትንሽ የአየር ሁኔታ ላይ የተመሠረተ የሙዚቃ ጄኔሬተር እንዴት እንደሚሠሩ እገልጻለሁ። እሱ እንደ አርዱዲኖ ዓይነት በሆነው ESP8266 ላይ የተመሠረተ ሲሆን ለሙቀት ፣ ለዝናብ ምላሽ ይሰጣል እና የብርሃን ጥንካሬ። ሙሉ ዘፈኖችን ወይም ዘፋኝ ፕሮግሮን ያደርጋል ብለው አይጠብቁ
ሳይን ሞገድ ለማመንጨት DIY a NE555 Circuit: 6 ደረጃዎች
ሳይን ሞገድ ለማመንጨት DIY NE555 ወረዳ - ይህ መማሪያ የኃይለኛ ማዕበልን ለማመንጨት እንዴት NE555 ወረዳን እንዴት እንደሚሠሩ ያስተምራል። ይህ ተመጣጣኝ ዋጋ ያለው የራስ -ሠራሽ ኪት (ጂፒኤስ) የኃይል ማመንጫውን እና የኃይል ማመንጫውን ጊዜ ለመቆጣጠር ተቆጣጣሪዎች ከተቃዋሚዎች ጋር እንዴት እንደሚሠሩ ለመረዳት በጣም ይረዳዎታል
ፈጣን ጠርዝ ካሬ ሞገድ ጄኔሬተር - 4 ደረጃዎች
ፈጣን ጠርዝ ስኩዌር ሞገድ ጄኔሬተር - የማነቃቃትን ፣ የማንኛውንም አካል አቅም ለመለካት ከፈለጉ በዚህ ጽሑፍ ውስጥ ፈጣን ጠርዝ ካሬ ሞገድ ያስፈልግዎታል።