Riba:
- Ikon ayyana rajista, katsewa da buƙatun lokaci don microcontroller tare da bayyanannen faɗakarwa
- Ikon duba lambar C/Arduino da AI ta samar dangane da saitunan rajista, buffer ambaliya da ƙayyadaddun lokaci na ainihi.
- Ikon yin amfani da al'adar tabbatar da lambar da aka ƙirƙira ta auna shi akan hardware (oscilloscope, tashar jiragen ruwa na serial)
Ci gaban tsarin da aka haɗa shi ne inda software da hardware ke haɗuwa: saita rijistar ba daidai ba, riƙe katsewa da tsawo, ko zubar da ma'auni zai haifar da kasawa mai ban mamaki, mai wuyar sakewa a cikin filin, kodayake lambar "ta haɗa" kuma tana aiki. AI hakika mai haɓakawa ne a wannan yanki; Yana iya samar da kwarangwal na farko, ayyukan abstraction hardware, injinan jihohi da hanyoyin sadarwa. Amma AI baya ganin takardar bayanan katin ku, bai san mitar agogonku ba, kuma baya jin ƙaƙƙarfan lokacin ku. A cikin wannan rukunin, za mu rufe yadda ake ayyana aikin microcontroller a fili zuwa AI, yadda ake bincika lambar C/Arduino da aka samar, da kuma dalilin da yasa yakamata ku auna komai a cikin kayan aiki.
Ƙayyadaddun buƙatun a bayyane: Rajista, Yanke, Lokaci
Fada AI don "haske LED" ba zai yi aiki ba; Wanne kati, wane fil, wane mitar agogo, wane lokaci? Lokacin ba da aikin da aka haɗa zuwa AI, yi amfani da wannan tsarin: hardware (iyalin MCU, agogo, fil), aiki (abin da zai faru), ƙuntatawa (lokaci, iko, ƙwaƙwalwar ajiya), da dubawa (yi rijista, HAL, ɗakin karatu na Arduino).
Rauni Mai Sauƙi / Ƙarfi Mai ƙarfi
RAUNI: "Samar da PWM tare da STM32." (Sakamakon: wane mai ƙidayar lokaci, wanne mita, wanda ba a sani ba; gabaɗaya, mai yiwuwa kuskuren rajista mai suna code.) KARFI: "Samar da 20 kHz, 0-100% daidaitacce PWM akan TIM3 CH1 (PA6) don STM32F103 (72 MHz tsarin agogo). Rubuta a matakin rajista (ba HALC) rubuta a matakin rajista (ba HALC) ba. layi. - Saita aikin tare da ma'aunin aiki tsakanin 0-100 - Yi sharhi kowane bit ɗin rajista da kuke amfani da shi
Bambance-bambancen shine faɗakarwa mai ƙarfi yana sa ƙirar ta nuna lissafin kuma ya bayyana tunanin agogo. Don haka zaku iya bincika ƙimar prescaler/ARR da kanta:
Don 20 kHz PWM (Agogon 72 MHz): Timer_clock = 72 MHzIdan muna son prescaler = 72-1 → agogon agogo = 1 MHzARR = (1 MHz / 20 kHz) - 1 = 50 - 1 = 49 Tabbatarwa: 1e6 / (49+1) = 20 00
Auditing AI Code: Me ake nema?
Domin kawai code ɗin da aka ƙirƙira ya tattara ba yana nufin yana aiki daidai ba. Bi wannan jerin abubuwan dubawa:
yankin sarrafawa
Abin da za a nema
Saitunan rajista/bit
Daidai dacewa tare da takaddar bayanai, mashin bit daidai
Katsewa (ISR)
Gajarta ce? Babu jinkirin blocker? Ana amfani da m?
buffer/array
Akwai kula da iyaka? Hadarin ambaliya?
lokaci
Tare da jinkiri ko mai ƙidayar lokaci? Shin ainihin ƙaƙƙarfan lokaci ya cika?
Nau'i da faɗinsa
8/16/32-bit ambaliya, sa hannu / rikicewar da ba a sanya hannu ba
iko / mai tsaro
Dogon ciyar da madauki mara iyaka?
Sabis na yau da kullun (ISR) shine tushen kurakurai da yawa. AI wani lokaci yana sanya jinkiri () ko dogon madauki a cikin ISR. Wannan yana haifar da rasa wasu katsewa da sake saitin sa ido. Dokar: ISR ya kamata ya zama takaice kamar yadda zai yiwu; Babban aikin ya kamata ya zama kafa tuta da matsar da shi zuwa babban madauki.
// WEAK (AI wani lokaci yana samar da wannan): Ayyukan blocker a cikin ISR banza TIM3_IRQHandler (rashin) {idan (TIM3-> SR & TIM_SR_UIF) {TIM3-> SR &= ~ TIM_SR_UIF; read_sensor(); // na iya ɗaukar lokaci mai tsawo - BAD CASE_Delay(10); // jinkiri a cikin ISR - KYAU KYAU }}// KARFI: ISR takaice; aiki yana motsawa zuwa babban madaidaicin uint8_t tick_flag = 0; // maras tabbas CONDITIONvoid TIM3_IRQHandler(void) {idan (TIM3-> SR & TIM_SR_UIF) {TIM3-> SR &= ~TIM_SR_UIF; tick_flag = 1; // kawai saita tuta }}// a cikin babban madauki: idan (tick_flag) {tick_flag = 0; read_sensor(); }
Tsanaki: Duk wani maɓalli da aka raba tsakanin katsewa da babban madauki dole ne ya zama mara ƙarfi. In ba haka ba, mai tarawa na iya cache mai canzawa a cikin rajista kuma ya rasa sabuntawa. AI sau da yawa ya manta da wannan kalmar; Nemo shi musamman lokacin karanta lambar.
Matsalolin Buffer da Kurakurai Nau'in
AI na iya kwafin bayanai daga tashar tashar jiragen ruwa zuwa ƙayyadaddun tsari mai tsayi ba tare da duba iyakoki ba. A cikin tsarin da aka haɗa, wannan yana nufin murkushe ƙwaƙwalwar ajiyar da ba a bayyana ba. Tabbatar an duba iyaka a kowane strcpy, array index da DMA buffer. Hakazalika, 8-bit counter yana sake saitawa bayan 255; AI na iya yin watsi da wannan kuma ya dogara da asusu mai malala.
Tabbatarwa a cikin Hardware: "Aiki" Ana Auna, Ba Zato ba
A cikin tsarin da aka haɗa, mafi ingantaccen shaida shine mita, ba mai tarawa ba. Tabbatar da lambar da aka samar ta hanyoyi uku:
- Oscilloscope/mai nazarin dabaru: Auna mitar PWM, lokacin sigina da siginar kalaman sadarwa. Idan kuna son 20 kHz, duba 20 kHz akan allon.
- Serial port (UART) log: Fitar da ƙima masu canzawa, sauye-sauye na jihohi, da ƙididdiga na kuskure kuma kwatanta tare da halayen da ake tsammani.
- Gwajin iyaka da damuwa: Gwada ko tsarin yana riƙe da mafi girman nauyi, mafi sauri bayanai da mafi munin lokaci.
Idan ƙimar da aka auna ba ta yarda da lissafin ba, zato na agogo, ƙimar prescaler ko saitin rajista ba daidai ba ne; kore.
Mini Case
Ƙungiyar ɗalibai suna da AI buga lambar ma'aunin nesa tare da firikwensin ultrasonic na HC-SR04. Lambar tana tattarawa amma nisa koyaushe yana ba da ƙima mara kyau. Lokacin da suka haɗa shi da oscilloscope, suna ganin cewa ƙafar amsawar tana ƙididdige lokacinta a cikin millise seconds maimakon microseconds; AI yayi amfani da millis() maimakon micros(). Wannan kuskuren kalma ɗaya ya rikitar da duka ma'aunin ta hanyar 1000. Lokacin da suka buga ɗan gajeren lokacin echo a cikin serial log kuma suka kwatanta shi da mai mulki na gaske, sun sami kuskuren kuma su gyara shi. Darasi: lambar da aka haɗa ba daidai ba ne. Aunawa a cikin hardware yana bayyana kuskuren nan da nan.
Kuskuren gama gari
- Karɓar sunayen rajista da abin rufe fuska ba tare da kwatanta su da takaddar bayanan ba.
- Ba da izinin toshe jinkiri ko aiki mai tsawo a cikin ISR.
- Manta maras tabbas akan masu canjin da aka raba.
- Kewaya buffer da duba iyakoki; rashin ganin ambaliya.
- Dogaro da mitar agogo da zato na lokaci ba tare da tabbatar da su ba.
- Yin la'akari da lambar "aiki" ba tare da auna shi tare da oscilloscope/serial log ba.
A takaice
- A sarari ayyana aikin da aka haɗa cikin sharuddan kayan aiki, aiki, takurawa da mu'amala.
- Shin AI ta ƙididdige ƙimar lokaci kamar prescaler / ARR kuma tabbatar da su da kansu.
- Rike ISRs gajarta, yi amfani da maras tabbas akan masu canjin da aka raba.
- Musamman nemo rajista, iyakacin buffer da buga kurakurai nisa.
- "Yana aiki" an tabbatar da shi tare da oscilloscope, mai nazarin dabaru, da jerin bayanan, ba tare da mai tarawa ba.
- Idan ƙimar da aka auna ba ta yarda da lissafin ba, bi da zato.
Aikin aikace-aikace
Tare da microcontroller kana da (Arduino, STM32, ESP32), tambayi AI don PWM ko aiki na lokaci-lokaci a wani mitar. Kafin loda lambar: (1) tabbatar da ƙimar mitar / lokaci ba tare da asusu ba a cikin layin sharhi, (2) bincika maras tabbas da toshewa a cikin ISR da masu canji masu alaƙa. Bayan lodawa, auna ainihin mitar tare da oscilloscope ko mai nazarin dabaru kuma kwatanta shi da manufa. Idan akwai karkatacciyar hanya, nemo tushen kuma gyara shi, kuma lura da abin da aka ɗauka ba daidai ba.