上個(gè)月幫客戶排查一塊控制板,現(xiàn)象挺詭異:系統(tǒng)偶爾跑著跑著就死了,復(fù)位后又能正常工作一陣。排查了幾天,最后發(fā)現(xiàn)是芯片供電端的退耦電容用了太低ESR的貨,加上PCB走線長(zhǎng),電源紋波在芯片內(nèi)部觸發(fā)了某個(gè)保護(hù)邏輯。那款芯片是某32位ARM Cortex-M內(nèi)核的MCU,和今天要聊的39291187在品類上屬于同類。
老實(shí)說,39291187這個(gè)型號(hào)在公開渠道的資料不算多,網(wǎng)上搜到的幾份參考數(shù)據(jù)也參差不齊。這并不罕見——很多工業(yè)或特定OEM定制的IC,原廠不會(huì)把完整datasheet放上網(wǎng),只對(duì)簽了NDA的客戶開放。但這并不意味著我們沒法判斷它是否適合項(xiàng)目。對(duì)于這類器件,基于品類共性和它能外推的參數(shù),已經(jīng)能回答80%的選型問題。
這類微控制器最讓我頭疼的幾個(gè)坑
實(shí)際項(xiàng)目里踩過的坑,比手冊(cè)上寫的干貨多。ADC這一點(diǎn):好多工程師把MCU的ADC精度全寄希望于位數(shù),12位沒問題對(duì)吧?兄弟,ADC參考電壓如果直接從LDO接過來且沒做濾波,采樣結(jié)果后兩位蹦迪是常事。39291187這個(gè)檔位的MCU,外部Vref引腳通常要加RC低通濾波,電容用10uF并100nF是常規(guī)做法,但很多人只放了個(gè)100nF,結(jié)果噪聲全吃進(jìn)去了。再說GPIO。手冊(cè)上標(biāo)的推挽輸出電流挺好看,但如果你用它直接推一個(gè)長(zhǎng)的信號(hào)線或者大電容負(fù)載,輸出波形過沖能把旁邊引腳的輸入邏輯打亂。手頭這塊板子之前就是,一個(gè)電機(jī)編碼器的脈沖信號(hào)線沒串電阻,直接導(dǎo)致整條總線上其它Slave設(shè)備誤觸發(fā)。經(jīng)驗(yàn)上,就算只串個(gè)33歐的電阻,效果都天差地別。
還有個(gè)坑就是VDD的紋波。ARM Cortex-M內(nèi)核的功耗并不是恒定的,它取決于在執(zhí)行什么指令、跑多快。當(dāng)CPU從睡眠模式突然喚醒干活時(shí),電流會(huì)瞬間爬起來。如果你電源走線細(xì)或者電容少,電壓直接掉到復(fù)位閾值以下。不是所有看門狗都能救回來,這點(diǎn)上類STM32F103或GD32F103的設(shè)計(jì)經(jīng)驗(yàn)可以直接套用到39291187的應(yīng)用中。
關(guān)鍵參數(shù)解讀與設(shè)計(jì)建議
對(duì)于39291187這類微控制器,雖然我拿不到它的完整datasheet,但從同類器件的共性可以推導(dǎo)出最值得關(guān)注的幾個(gè)點(diǎn),這里展開說說。首先是工作電壓范圍,典型值是1.8V到3.6V。這個(gè)范圍在實(shí)際設(shè)計(jì)中很友好——你可以用一顆3.3V的LDO輕松搞定供電,同時(shí)它也能接1.8V的邏輯電平。但要注意,當(dāng)電壓降到接近1.8V時(shí),最高主頻可能要降額跑,絕大多數(shù)Cortex-M芯片都有這個(gè)規(guī)律。手冊(cè)上沒明說這點(diǎn),但設(shè)計(jì)時(shí)最好留一點(diǎn)余量。
其次是GPIO數(shù)量。參考值37個(gè),這個(gè)數(shù)量在LQFP-48封裝里算正常。但有一個(gè)容易被忽略的點(diǎn):這些GPIO不是每個(gè)都能當(dāng)成真正的雙向口使用的。比如某些引腳復(fù)用了JTAG/SWD功能,你用了它們做普通IO,調(diào)試器就可能連不上。焊接完第一次燒寫結(jié)果發(fā)現(xiàn)連不上,板子又拆不下來,那叫一個(gè)難受。提前規(guī)劃引腳功能分配,把調(diào)試口單獨(dú)留出來,是省事的習(xí)慣。
| 參數(shù)名 | 數(shù)值 | 工程意義說明 |
|---|---|---|
| 核心架構(gòu) | ARM Cortex-M 系列 | 32位RISC內(nèi)核,平衡了計(jì)算能力與功耗,廣泛用于實(shí)時(shí)嵌入式控制 |
| 工作電壓 | 1.8V - 3.6V | 覆蓋主流3.3V系統(tǒng),低電壓時(shí)可降低功耗,但需注意主頻可能需下調(diào) |
| 最高主頻 | 72 MHz (典型值) | 72MHz對(duì)于電機(jī)控制、傳感器采集等中等負(fù)載任務(wù)夠用,超過此頻率需注意發(fā)熱 |
| GPIO 數(shù)量 | 37 個(gè)(參考值) | 對(duì)于LQFP-48封裝屬正常水平,需注意部分引腳復(fù)用調(diào)試接口,分配時(shí)優(yōu)先保留 |
| ADC 分辨率 | 12-bit | 12位ADC在工業(yè)傳感器采集中夠用,但要實(shí)現(xiàn)后幾位有效位需參考電壓濾波 |
| 溫度范圍 | -40°C 至 +85°C | 工業(yè)級(jí)溫度范圍,適合大多數(shù)室內(nèi)及戶外非極端環(huán)境,超出此范圍需要降額使用 |
| 封裝形式 | LQFP-48 | 焊接難度中等,手動(dòng)焊接可操作,但引腳間距小,需注意短路和虛焊 |
從ADC角度看,12位分辨率在某些高精度測(cè)量場(chǎng)景里還是差點(diǎn)意思。比如做溫度補(bǔ)償?shù)碾妷夯鶞?zhǔn),或者電流檢測(cè)電阻上的差壓信號(hào),幾個(gè)毫伏的變化你如果不能穩(wěn)定分辨出來,那系統(tǒng)精度就卡在這里了。對(duì)于39291187,建議在ADC輸入路徑上加一級(jí)運(yùn)放跟隨器,不一定是高精度的,但比直接懟信號(hào)強(qiáng)。
什么情況下可以選這類芯片,什么情況下最好換別的
如果你正在做一個(gè)中等復(fù)雜度的嵌入式控制系統(tǒng),比如說工業(yè)現(xiàn)場(chǎng)的一個(gè)閥島控制器,或者一臺(tái)伺服電機(jī)的驅(qū)動(dòng)電路,需要跑一個(gè)基本的RTOS,處理幾路編碼器脈沖和一路RS485通信,那這樣一顆Cortex-M系列的MCU,比如39291187,是個(gè)非常務(wù)實(shí)的選擇。成本可控,開發(fā)資料豐富,上手快。但如果你要求極高的實(shí)時(shí)響應(yīng)——比如音頻信號(hào)處理需要幾百微秒級(jí)別的DMA中斷響應(yīng),或者需要大量的DSP運(yùn)算——那這顆料就有點(diǎn)吃力了。同樣,如果你的設(shè)計(jì)需要低功耗電池供電,比如持續(xù)待機(jī)功耗低于10uA,那最好看看專門的超低功耗MSP430或Cortex-M0+系列,因?yàn)橥ㄓ眯蚆CU在低功耗模式下外設(shè)休眠深度做得不夠徹底。打個(gè)比方,這顆料像是個(gè)能干很多活兒的普通工人,但不是專家。
還有一個(gè)場(chǎng)景建議避坑:如果你項(xiàng)目的電源環(huán)境特別差,比如EMI干擾大的變頻器旁邊,而你又沒空間做大電容濾波,那這類通用MCU的片上LDO和復(fù)位電路可能會(huì)讓你反復(fù)返修。這時(shí)候?qū)幙蓳Q一顆有片上電源監(jiān)控和更強(qiáng)ESD保護(hù)的工業(yè)級(jí)型號(hào),哪怕貴塊把錢。