Kitengo 3 / 9

Mifumo Iliyopachikwa na Msimbo wa Kidhibiti Kidogo

Faida:

  • Uwezo wa kufafanua mahitaji ya rejista, kukatiza na wakati kwa kidhibiti kidogo kwa haraka wazi
  • Uwezo wa kuangalia nambari ya C/Arduino inayozalishwa na AI kulingana na mipangilio ya rejista, kufurika kwa buffer na vizuizi vya wakati halisi.
  • Uwezo wa kutumia tabia ya kuthibitisha nambari inayozalishwa kwa kuipima kwenye maunzi (oscilloscope, bandari ya serial)

Utengenezaji wa mfumo uliopachikwa ni pale programu na maunzi yanapoingiliana: kuweka rejista kimakosa, kushikilia ukatizaji kwa muda mrefu sana, au kufurika bafa kutasababisha hitilafu za ajabu, ngumu kutoa tena kwenye uga, ingawa msimbo "unajumuisha" na kuendeshwa. AI kwa kweli ni kiongeza kasi katika eneo hili; Inaweza kutoa mifupa ya awali, kazi za uondoaji wa maunzi, mashine za serikali na taratibu za mawasiliano. Lakini AI haioni hifadhidata ya kadi yako, haijui mzunguko wa saa yako, na haioni vikwazo vyako vya muda halisi. Katika kitengo hiki, tutashughulikia jinsi ya kufafanua kwa uwazi kazi ya kidhibiti kidogo kwa AI, jinsi ya kuangalia msimbo wa C/Arduino uliozalishwa, na kwa nini unapaswa kupima kila kitu kwenye maunzi.

Kufafanua Mahitaji kwa Uwazi: Kujiandikisha, Kukata, Muda

Kuambia AI "kuwasha LED" haitafanya kazi; Kadi gani, pini ipi, mzunguko wa saa ngapi, saa ngapi? Unapokabidhi kazi iliyopachikwa kwa AI, tumia mfumo huu: maunzi (familia ya MCU, saa, pini), kazi (nini kitatokea), kizuizi (muda, nguvu, kumbukumbu), na kiolesura (jisajili, HAL, maktaba ya Arduino).

Uhamasishaji dhaifu / Uhamasishaji Wenye Nguvu

DHAIFU: "Tengeneza PWM na STM32." (Tokeo: kipima saa kipi, mara ngapi, pini gani haijulikani; kwa ujumla, labda rejista isiyo sahihi iliyopewa jina la msimbo.) STRONG: "Toa 20 kHz, 0-100% ya wajibu unaoweza kurekebishwa wa PWM kwenye TIM3 CH1 (PA6) kwa STM32F103 (saa ya mfumo wa MHz 72). Andika katika kiwango cha rejista (sio HAL0 HAL0 ALT) na onyesha thamani ya PrescazHLL kwa CALC2A. hesabu katika mstari wa maoni - Weka jukumu na kigezo cha kukokotoa kati ya 0-100 - Toa maoni kwa kila biti ya rejista unayotumia.

Tofauti ni kwamba kidokezo chenye nguvu hufanya kielelezo kionyeshe hesabu na kufichua dhana ya saa. Kwa hivyo unaweza kuangalia viwango vya prescaler/ARR kwa kujitegemea:

Kwa 20 kHz PWM (saa 72 MHz):Saa_ya saa = 72 MHzIkiwa tunataka kiboreshaji = 72-1 → saa ya kaunta = 1 MHARR = (1 MHz / 20 kHz) - 1 = 50 - 1 = 49Uthibitishaji: 1e6 / (49 ✓00 0 Hz) = 2 Hz

Nambari ya AI ya Ukaguzi: Nini cha Kutafuta?

Kwa sababu tu nambari iliyotengenezwa inakusanya haimaanishi kuwa inafanya kazi kwa usahihi. Fuata orodha hii:

eneo la udhibiti

Nini cha kutafuta

Mipangilio ya usajili/bit

Inalingana kabisa na hifadhidata, kinyago sahihi cha biti

Kukatiza (ISR)

Je, ni fupi? Hakuna kuchelewa kwa blocker? Je, tete hutumiwa?

bafa/safu

Je, kuna udhibiti wa mpaka? Hatari ya kufurika?

muda

Kwa kuchelewa au kipima muda? Je, kikwazo cha muda halisi kinafikiwa?

Aina na upana

8/16/32-bit kufurika, utata uliotiwa saini/ambao haujatiwa saini

nguvu/mlinzi

Mlinzi wa kulisha kitanzi usio na kikomo?

Njia za huduma za kukatiza (ISR) ndio chanzo cha kawaida cha hitilafu. AI wakati mwingine huweka delay() au kitanzi kirefu ndani ya ISR. Hii husababisha kukatizwa kwa mambo mengine na kuweka upya mipangilio ya walinzi. Kanuni: ISR inapaswa kuwa fupi iwezekanavyo; Kazi kuu inapaswa kuwa kuanzisha bendera na kuipeleka kwenye kitanzi kikuu.

// DHAIFU (AI wakati mwingine hutoa hii): Utendakazi wa Kizuiaji katika utupu wa ISR TIM3_IRQHandler(batili) { ikiwa (TIM3->SR & TIM_SR_UIF) {TIM3->SR &= ~TIM_SR_UIF; soma_sensor(); // inaweza kuchukua muda mrefu - BAD CASE_Delay(10); // kuchelewa katika ISR - MBAYA SANA }}// IMARA: ISR fupi; kazi inasogea hadi kwenye uint8_t tick_flag kuu = 0; // hali tete isiyo na TIM3_IRQHandler(batili) { ikiwa (TIM3->SR & TIM_SR_UIF) { TIM3->SR &= ~TIM_SR_UIF; tiki_bendera = 1; //weka tu bendera }}// katika kitanzi kikuu:if (tick_flag) { tick_flag = 0; soma_sensor(); }

Tahadhari: Tofauti yoyote iliyoshirikiwa kati ya kukatiza na kitanzi kikuu lazima kiwe tete. Vinginevyo, mkusanyaji anaweza kuweka akiba ya kutofautisha kwenye rejista na kukosa sasisho. AI mara nyingi husahau neno hili kuu; Itafute haswa unaposoma nambari.

Bafa Overflow na Aina Hitilafu

AI inaweza kunakili data kutoka kwa bandari ya serial hadi safu ya saizi isiyobadilika bila kukagua mipaka. Katika mfumo uliopachikwa, hii ina maana ya kuponda kumbukumbu zinazoambatana na mivurugiko isiyoelezeka. Hakikisha kikomo kimeangaliwa kwa kila strcpy, faharisi ya safu na bafa ya DMA. Vile vile, counter 8-bit huweka upya baada ya 255; AI inaweza kupuuza hii na kutegemea akaunti iliyojaa.

Uthibitishaji katika Maunzi: "Kufanya kazi" Hupimwa, Sio Kuchukuliwa

Katika mfumo ulioingia, ushahidi wa kuaminika zaidi ni mita, sio mkusanyaji. Thibitisha nambari iliyotengenezwa kwa njia hizi tatu:

  1. Kichanganuzi cha oscilloscope/mantiki: Pima mzunguko wa PWM, muda wa ishara na umbo la mawimbi ya mawasiliano. Ikiwa ulitaka 20 kHz, angalia kHz 20 kwenye skrini.
  2. Rekodi ya lango la serial (UART): Chapisha thamani tofauti, mabadiliko ya hali, na vihesabio vya hitilafu na ulinganishe na tabia inayotarajiwa.
  3. Jaribio la kufunga na la mkazo: Jaribu ikiwa mfumo unashikilia mzigo wa juu zaidi, data ya haraka zaidi na wakati mbaya zaidi.

Ikiwa thamani iliyopimwa haikubaliani na hesabu, dhana ya saa, thamani ya prescaler au mpangilio wa rejista sio sahihi; fukuza.

Kesi Ndogo

Timu ya wanafunzi ina msimbo wa kipimo wa umbali wa AI kwa kutumia kihisi cha ultrasonic cha HC-SR04. Nambari inakusanya lakini umbali daima hutoa maadili ya ujinga. Wanapounganisha kwenye oscilloscope, wanaona kwamba mguu wa echo huhesabu muda wake katika milliseconds badala ya microseconds; AI ilitumia millis() badala ya micros(). Hitilafu hii ya neno moja ilichanganya kipimo kizima kwa sababu ya 1000. Wanapochapisha muda ghafi wa echo kwenye logi ya mfululizo na kulinganisha na mtawala halisi, wanapata hitilafu na kuirekebisha. Somo: msimbo uliokusanywa sio msimbo sahihi; Kipimo katika maunzi kinaonyesha kosa mara moja.

Makosa ya Kawaida

  • Kukubali majina ya rejista na vinyago kidogo bila kulinganisha na hifadhidata.
  • Kuruhusu ucheleweshaji wa kuzuia au usindikaji mrefu ndani ya ISR.
  • Kusahau tete kwenye vigeu vilivyoshirikiwa.
  • bypass bafa na safu ya mipaka kuangalia; bila kuona kufurika.
  • Kutegemea mzunguko wa saa na mawazo ya saa bila kuyathibitisha.
  • Kuzingatia kanuni "kufanya kazi" bila kuipima kwa oscilloscope / logi ya serial.

Kwa muhtasari

  • Fafanua kwa uwazi kazi iliyopachikwa kwa suala la maunzi, kazi, vikwazo na kiolesura.
  • Fanya AI ikokote thamani za muda kama vile prescaler/ARR na uzithibitishe kwa kujitegemea.
  • Weka ISR fupi, tumia tete kwenye vigeu vilivyoshirikiwa.
  • Hasa tafuta rejista, kikomo cha bafa na makosa ya upana wa aina.
  • "Inafanya kazi" inathibitishwa na oscilloscope, kichanganuzi cha mantiki, na logi ya serial, sio na mkusanyaji.
  • Ikiwa thamani iliyopimwa haikubaliani na hesabu, fuata mawazo.

Jukumu la maombi

Ukiwa na kidhibiti kidogo ulichonacho (Arduino, STM32, ESP32), uliza AI kwa PWM au kazi ya mara kwa mara kwa masafa fulani. Kabla ya kupakia msimbo: (1) thibitisha maadili ya mzunguko/wakati kwa kujitegemea ya akaunti kwenye mstari wa maoni, (2) angalia ikiwa kuna tete na kuzuia katika ISR na vigezo vilivyoshirikiwa. Baada ya kupakia, pima masafa halisi kwa kutumia oscilloscope au kichanganuzi mantiki na ulinganishe na lengwa. Ikiwa kuna kupotoka, tafuta chanzo na urekebishe, na uangalie ni nini kilichukuliwa kuwa kibaya.