ክፍል 3 / 9

የተከተቱ ስርዓቶች እና የማይክሮ መቆጣጠሪያ ኮድ

ትርፍ፡

  • ለማይክሮ መቆጣጠሪያው የመመዝገቢያ ፣ የማቋረጥ እና የጊዜ መስፈርቶችን በግልፅ የመግለፅ ችሎታ
  • የመመዝገቢያ ቅንጅቶችን ፣የፍሰትን ብዛት እና የእውነተኛ ጊዜ ገደቦችን በተመለከተ በ AI የተሰራውን የC/Arduino ኮድ የመፈተሽ ችሎታ።
  • የተፈጠረውን ኮድ በሃርድዌር (oscilloscope, serial port) ላይ በመለካት የማረጋገጥ ልምድን የመተግበር ችሎታ.

የተከተተ የስርዓት ልማት ሶፍትዌር እና ሃርድዌር የሚገናኙበት፡ መዝገብ ትንሽ በስህተት ማቀናበር፣ መቆራረጥ በጣም ረጅም ጊዜ መያዝ ወይም ቋት ማብዛት በሜዳው ላይ እንግዳ የሆነ፣ ለመድገም አስቸጋሪ የሆነ ውድቀቶችን ያስከትላል፣ ምንም እንኳን ኮዱ "የተጠናቀረ" እና የሚሰራ ቢሆንም። AI በዚህ አካባቢ በእውነት ማፋጠን ነው; የመጀመሪያ አጽሞችን, የሃርድዌር ረቂቅ ተግባራትን, የስቴት ማሽኖችን እና የመገናኛ ዘዴዎችን ማምረት ይችላል. ግን AI የካርድዎን ዳታ ሉህ አይመለከትም ፣ የሰዓትዎን ድግግሞሽ አያውቅም እና የእውነተኛ ጊዜ ገደቦችዎን አይረዳም። በዚህ ክፍል ውስጥ እንዴት የማይክሮ መቆጣጠሪያ ስራን ወደ AI እንዴት በግልፅ እንደሚገልፅ፣ የተፈጠረውን የC/Arduino ኮድ እንዴት እንደሚፈትሹ እና ለምን በሃርድዌር ውስጥ ያለውን ነገር ሁሉ መለካት እንዳለቦት እንገልፃለን።

መስፈርቱን በግልፅ መግለፅ፡ መመዝገብ፣ መቁረጥ፣ ጊዜ መስጠት

AI "LED ማብራት" የሚለውን መንገር አይሰራም; የትኛው ካርድ ፣ የትኛው ፒን ፣ የትኛው የሰዓት ድግግሞሽ ፣ የትኛው ጊዜ? የተካተተ ተግባርን ለ AI ሲመድቡ ይህንን ማዕቀፍ ይጠቀሙ ሃርድዌር (ኤምሲዩ ቤተሰብ ፣ ሰዓት ፣ ፒን) ፣ ተግባር (ምን እንደሚሆን) ፣ ገደቦች (ጊዜ ፣ ሃይል ፣ ማህደረ ትውስታ) እና በይነገጽ (መመዝገቢያ ፣ HAL ፣ Arduino ቤተ-መጽሐፍት)።

ደካማ ፈጣን/ጠንካራ ፍጥነት

ደካማ፡ "PWM በSTM32 ያመርቱ።" (ውጤት፡ የትኛው ሰዓት ቆጣሪ፣ የትኛው ድግግሞሽ፣ የትኛው ፒን ግልጽ ያልሆነ፣ አጠቃላይ፣ ምናልባት የተሳሳተ ኮድ የተሰየመ መመዝገቢያ ነው።) STRONG: "20 kHz, 0-100% የሚስተካከለው ግዴታ PWM በ TIM3 CH1 (PA6) ለ STM32F103 (72 ሜኸር ሲስተም ሰዓት) ያቅርቡ። በመመዝገቢያ ደረጃ (በ HALC ሳይሆን) ይፃፉ እና እሴትን በ CAUL2Hz አሳይ። - Prescaler እና AATE0 መስመር - በ 0-100 መካከል ያለውን ተግባር ያቀናብሩ - እርስዎ የሚጠቀሙት እያንዳንዱ መመዝገቢያ ቢት እሴቶቹ እንደሚቀየሩ ልብ ይበሉ።

ልዩነቱ ኃይለኛ መጠየቂያው ሞዴሉ ስሌቱን እንዲያሳይ እና የሰዓቱን ግምት እንዲገልጽ ያደርገዋል. ስለዚህ የቅድሚያ መለኪያ/ኤአርአር እሴቶችን በተናጥል ማረጋገጥ ይችላሉ፡-

ለ 20 kHz PWM (72 ሜኸ ሰዓት): የሰዓት_ሰዓት = 72 ሜኸር ከፈለግን ፕሪስካለር = 72-1 → ቆጣሪ ሰዓት = 1 MHzARR = (1 MHz / 20 kHz) - 1 = 50 - 1 = 49 ማረጋገጫ፡ 1e6 / (49+1) = 20 00

ኦዲቲንግ AI ኮድ፡ ምን መፈለግ አለበት?

የመነጨው ኮድ ስለተጠናቀረ ብቻ በትክክል ይሰራል ማለት አይደለም። ይህንን የማረጋገጫ ዝርዝር ይከተሉ፡

የመቆጣጠሪያ ቦታ

ምን መፈለግ እንዳለበት

ይመዝገቡ/ቢት ቅንብሮች

ከዳታ ሉህ ጋር በትክክል ተኳሃኝ፣ ትክክለኛ የቢት ጭንብል

ማቋረጥ (አይኤስአር)

አጭር ነው? ምንም የማገጃ መዘግየት የለም? ተለዋዋጭ ጥቅም ላይ ይውላል?

ቋት/ድርድር

የድንበር ቁጥጥር አለ? የመትረፍ አደጋ?

ጊዜ

በመዘግየት ወይስ በጊዜ ቆጣሪ? ትክክለኛው የጊዜ ገደብ ተሟልቷል?

ዓይነት እና ስፋት

8/16/32-ቢት የትርፍ ፍሰት፣ የተፈረመ/ያልተፈረመ ግራ መጋባት

ኃይል / ጠባቂ

ማለቂያ የሌለው ሉፕ መመገብ ጠባቂ?

የማቋረጥ የአገልግሎት ልማዶች (ISR) በጣም የተለመዱ የስህተት ምንጮች ናቸው። AI አንዳንድ ጊዜ መዘግየት() ወይም ረጅም ምልልስ በ ISR ውስጥ ያስቀምጣል። ይህ ወደ ሌሎች መቆራረጦች እንዲጠፉ እና የተቆጣጣሪዎች ዳግም ማስጀመርን ያስከትላል። ደንብ: ISR በተቻለ መጠን አጭር መሆን አለበት; ዋናው ሥራ ባንዲራ ማዘጋጀት እና ወደ ዋናው ዑደት ማንቀሳቀስ መሆን አለበት.

// ደካማ (AI አንዳንድ ጊዜ ይህንን ያመነጫል)፡ በ ISR ባዶነት TIM3_IRQHandler (ባዶ) ውስጥ የማገጃ ተግባር {ከሆነ (TIM3-> SR እና TIM_SR_UIF) { TIM3-> SR &= ~ TIM_SR_UIF; አንብብ_ዳሳሽ (); // ረጅም ጊዜ ሊወስድ ይችላል - BAD CASE_Delay (10); // በ ISR ውስጥ መዘግየት - በጣም መጥፎ }}// ጠንካራ: ISR አጭር; ሥራ ወደ ዋና loopvolatile uint8_t tick_flag = 0 ይንቀሳቀሳል; // ተለዋዋጭ CONDITION ባዶ TIM3_IRQHandler (ባዶ) {ከሆነ (TIM3-> SR እና TIM_SR_UIF) {TIM3-> SR &= ~TIM_SR_UIF; ምልክት_ባንዲራ = 1; //ልክ ባንዲራ }}// በዋና ሉፕ: if (tick_flag) {tick_flag = 0; አንብብ_ዳሳሽ (); }

ጥንቃቄ፡ በማቋረጡ እና በዋናው ዑደት መካከል የሚጋራ ማንኛውም ተለዋዋጭ ተለዋዋጭ መሆን አለበት። አለበለዚያ, ማጠናከሪያው ተለዋዋጭውን በመዝገቡ ውስጥ መሸጎጥ እና ዝመናውን ሊያመልጠው ይችላል. AI ብዙውን ጊዜ ይህንን ቁልፍ ቃል ይረሳል; ኮዱን በሚያነቡበት ጊዜ በተለይ ይፈልጉት።

ቋት የትርፍ ፍሰት እና አይነት ስህተቶች

AI ውሂብን ከተከታታይ ወደብ ወደ ቋሚ መጠን ድርድር መገልበጥ ያለ ወሰን ማረጋገጥ ይችላል። በተሰቀለ ስርዓት ውስጥ ይህ ማለት ተያያዥ ማህደረ ትውስታን እና ያልተገለጹ ብልሽቶችን መፍጨት ማለት ነው። ገደቡ በእያንዳንዱ strcpy፣ ድርድር መረጃ ጠቋሚ እና በዲኤምኤ ቋት መፈተኑን ያረጋግጡ። በተመሳሳይ, ባለ 8-ቢት ቆጣሪ ከ 255 በኋላ እንደገና ይጀምራል. AI ይህንን ችላ ብሎ በሚሞላ መለያ ላይ ሊተማመን ይችላል።

በሃርድዌር ውስጥ ማረጋገጫ፡ "መስራት" የሚለካው እንጂ የሚገመተው አይደለም።

በተሰቀለ ስርዓት ውስጥ, በጣም አስተማማኝ ማስረጃው ቆጣሪው እንጂ ማጠናከሪያው አይደለም. የተፈጠረውን ኮድ በእነዚህ ሶስት መንገዶች ያረጋግጡ፡-

  1. Oscilloscope/ሎጂክ ተንታኝ፡ የPWM ድግግሞሽ፣ የምልክት ጊዜ እና የግንኙነት ሞገድ መለካት። 20 kHz ከፈለጉ በስክሪኑ ላይ 20 kHz ይመልከቱ።
  2. የመለያ ወደብ (UART) ምዝግብ ማስታወሻ፡ ተለዋዋጭ እሴቶችን፣ የግዛት ሽግግሮችን እና የስህተት ቆጣሪዎችን ያትሙ እና ከሚጠበቀው ባህሪ ጋር ያወዳድሩ።
  3. የታሰረ እና የጭንቀት ሙከራ፡ ስርዓቱ በከፍተኛ ጭነት፣ ፈጣኑ ውሂብ እና በከፋ ጊዜ መያዙን ያረጋግጡ።

የሚለካው ዋጋ ከስሌቱ ጋር ካልተስማማ, የሰዓት ግምት, የቅድሚያ ዋጋ ወይም የመመዝገቢያ መቼት የተሳሳተ ነው; ማሳደድ።

ሚኒ መያዣ

የተማሪዎች ቡድን የ AI ህትመት የርቀት መለኪያ ኮድ ከ HC-SR04 ultrasonic ሴንሰር ጋር አለው። ኮዱ ያጠናቅራል ነገር ግን ርቀቱ ሁል ጊዜ አስቂኝ እሴቶችን ይሰጣል። ከ oscilloscope ጋር ሲያገናኙት የኤኮ እግር በማይክሮ ሰከንድ ምትክ ጊዜውን በሚሊሰከንዶች እንደሚያሰላ ያያሉ። AI ከማይክሮስ () ይልቅ ሚሊስ () ተጠቅሟል። ይህ የአንድ ቃል ስህተት ሙሉውን መለኪያ በ1000 እጥፍ ግራ እንዲጋባ አድርጎታል።ጥሬውን የማሚቶ ሰዓቱን ወደ ተከታታይ መዝገብ ሲያትሙ እና ከእውነተኛ ገዥ ጋር ሲያወዳድሩት ስህተቱን አግኝተው ያስተካክሉት። ትምህርት: የተጠናቀረ ኮድ ትክክለኛ ኮድ አይደለም; በሃርድዌር ውስጥ መለካት ስህተቱን ወዲያውኑ ያሳያል።

የተለመዱ ስህተቶች

  • የመመዝገቢያ ስሞችን እና የቢት ጭምብልን ከዳታ ሉህ ጋር ሳነፃፅር መቀበል።
  • በ ISR ውስጥ መዘግየትን ወይም ረጅም ሂደትን ማገድን መፍቀድ።
  • በጋራ ተለዋዋጮች ላይ ተለዋዋጭነትን በመርሳት ላይ።
  • ቋት ማለፍ እና የድርድር ወሰን መፈተሽ; የተትረፈረፈ ፍሰትን ባለማየት.
  • እነሱን ሳያረጋግጡ በሰዓት ድግግሞሽ እና በጊዜ ግምት ላይ መተማመን።
  • በ oscilloscope / ተከታታይ ሎግ ሳይለካው "መስራት" የሚለውን ኮድ ግምት ውስጥ ማስገባት.

በማጠቃለያው

  • የተካተተውን ተግባር በሃርድዌር፣ ተግባር፣ ገደቦች እና በይነገጽ በግልፅ ይግለጹ።
  • እንደ prescaler/ARR ያሉ የጊዜ አጠባበቅ እሴቶችን ኤአይኤ ያሰሉ እና በተናጥል ያረጋግጡ።
  • አይኤስአርዎችን ያሳጥሩ፣ በተጋሩ ተለዋዋጮች ላይ ተለዋዋጭ ይጠቀሙ።
  • በተለይ የመመዝገቢያ፣ የቋት ገደብ እና የስፋት ስህተቶችን ይተይቡ።
  • "ይሰራል" የሚለው በ oscilloscope፣ logic analyzer እና serial log ነው የተረጋገጠው እንጂ በአቀነባባሪው አይደለም።
  • የሚለካው እሴት ከስሌቱ ጋር ካልተስማማ, ግምቶችን ያሳድዱ.

የመተግበሪያ ተግባር

በማይክሮ መቆጣጠሪያ (Arduino፣ STM32፣ ESP32)፣ AIን ለ PWM ወይም በየተወሰነ ድግግሞሽ ይጠይቁ። ኮዱን ከመጫንዎ በፊት: (1) በአስተያየቱ መስመር ውስጥ ካለው መለያው የድግግሞሽ / የጊዜ ዋጋዎችን ያረጋግጡ ፣ (2) በ ISR ውስጥ ተለዋዋጭ እና እገዳን እና የተጋሩ ተለዋዋጮችን ያረጋግጡ። ከሰቀሉ በኋላ ትክክለኛውን ድግግሞሽ በኦስቲሎስኮፕ ወይም በሎጂክ ተንታኝ ይለኩ እና ከዒላማው ጋር ያወዳድሩ። ማፈንገጥ ካለ ምንጩን ፈልጉ እና አስተካክሉት እና ስህተት ተብሎ የታሰበውን ልብ ይበሉ።