前言
由于在嵌入式學(xué)習(xí)筆記那個(gè)系列的所有開發(fā)都是用的寄存器,而實(shí)際工作中使用更多的還是庫函數(shù),為了完善一下,筆者就想著先整個(gè)基礎(chǔ)庫筆記,但是又像之前那樣記錄又覺著太麻煩了,所以就打算自己做個(gè)板子,綜合使用一下之前的東西,然后圍繞著這個(gè)板子的硬件來做一些記錄,于是就有了此系列。
硬件簡(jiǎn)介
有了這個(gè)打算后,51假期就試著畫了這個(gè)板子;功能大約包括如下內(nèi)容:
序號(hào) | 需要使用到的外設(shè) | 功能 | 備注 |
---|---|---|---|
1 | 普通GPIO | 控制繼電器 | 推挽輸出 |
2 | 普通GPIO | 控制WS2812B | 推挽輸出 |
3 | 普通GPIO | 控制74HC138譯碼器 | 推挽輸出 |
4 | 普通GPIO | 按鍵輸入 | 輸入模式 |
5 | 定時(shí)器比較輸出 | 控制直流電機(jī)轉(zhuǎn)速 | 復(fù)用功能 |
6 | 定時(shí)器比較輸出 | 控制SG90舵機(jī)角度 | 復(fù)用功能 |
7 | 定時(shí)器輸入捕獲 | 獲取紅外輸入 | 復(fù)用功能 |
8 | 硬件SPI | 控制0.96OLED屏幕 | 復(fù)用功能 |
9 | USART 1 | 與電腦通信 | 復(fù)用功能 |
10 | USART 2 | 聯(lián)網(wǎng) | 復(fù)用功能 |
11 | USART 3 | 與語音識(shí)別模塊通信 | 復(fù)用功能 |
12 | 模擬IIC | 與AT24C02通信 | 推挽、開漏 |
13 | ADC | 通過電阻分壓實(shí)現(xiàn)按鍵檢測(cè) | 復(fù)用功能 |
14 | PWM | 紅外發(fā)射 | 這個(gè)還未驗(yàn)證 |
15 | 步進(jìn)電機(jī) | ULN2003達(dá)林頓管 | 設(shè)計(jì)出問題了需要修改 |
16 | DHT11溫濕度 | 溫濕度采集 | 開漏輸出 |
整個(gè)板子的功能已經(jīng)驗(yàn)證的差不多了,中間遇到了幾個(gè)問題,后面介紹時(shí)也會(huì)說到。
選型
1.主控
其實(shí)根據(jù)上面的需求表,已經(jīng)有很多東西都固定型號(hào)了,比如WS2812B、74HC138、AT24C02、ULN2003這些,然后為了實(shí)現(xiàn)對(duì)應(yīng)的功能必須選用合適的單片機(jī),綜合統(tǒng)計(jì)一下上面需求表用到的外設(shè)內(nèi)容,3個(gè)串口、一組SPI、一個(gè)ADC、定時(shí)器至少3個(gè),還需要足夠數(shù)量的GPIO,根據(jù)這些需求暫時(shí)選定了兩款單片機(jī),一個(gè)是STM32F401,一個(gè)是STM32F103
統(tǒng)計(jì)了一下所需的GPIO數(shù),35個(gè)GPIO就可以完成整個(gè)項(xiàng)目了。也就是說選用48腳的型號(hào)就可以了。
最終選擇了103C8t6,原因嘛,有以下幾點(diǎn):
1.在401的封裝介紹部分可以看見,是沒有LQFP-48封裝的,只有WLSP-49和UFQFPN-48的兩種封裝,這兩種封裝的好處是體積小,占用板子空間小,但是,筆者手頭只有一把黃花,面對(duì)這倆,屬實(shí)顯得有些無力,雖然立創(chuàng)那邊有價(jià)格相對(duì)美好的貼片,但也是一筆額外開支啊
而STM32F103就有LQFP-48的四面表貼型封裝,這種封裝一個(gè)刀頭的烙鐵還是可以拿下的。
2.前面的嵌入式學(xué)習(xí)筆記一直用的都是M4的單片機(jī),這次想換一個(gè),換成M3來,雖然性能比M4差一點(diǎn),但是對(duì)于這個(gè)小項(xiàng)目是完全夠用的。
3.最后一個(gè)原因當(dāng)然是103的價(jià)格了,過去那段20+買一塊C8T6的時(shí)期終于過去了,現(xiàn)在的價(jià)格終于可以稍微放心造了,而且選C8t6的話,不出意外,還可以拿GD的來替代使用,這樣主控的價(jià)格就有可以下來差不多一半,當(dāng)然截止到此時(shí),筆者還沒試過用GD替換,雖然買了一塊,但是還沒焊,GD大約4塊錢一塊,ST差不多8塊錢一塊。
2.電源
整個(gè)板子都是3.3V和5V的電平,這里筆者使用的的是之前參加立創(chuàng)的訓(xùn)練營(yíng)還剩的Typec以及友順的UZ1084LDO芯片來實(shí)現(xiàn)供電方案的。當(dāng)然,這顆友順的LDO用在這里顯得有些屈才了,而且對(duì)比常用的AMS117-3.3的價(jià)格也是差了將近十倍,不過自己做了玩,問題不大。
3.電機(jī)驅(qū)動(dòng)
給大家一個(gè)建議啊,當(dāng)你想要一個(gè)電路但是又不知道該怎么做時(shí),去立創(chuàng)的開源廣場(chǎng)逛一逛,里面有很多類似的設(shè)計(jì),把他們已經(jīng)驗(yàn)證過的電路cv過來就可以了,就像這個(gè)直流電機(jī)的驅(qū)動(dòng),如果你不知道該用啥芯片就去開源廣場(chǎng)搜,由于智能小車是必要用到直流電機(jī)的,那么也肯定有對(duì)應(yīng)的驅(qū)動(dòng)方案。
這里筆者一共撈了三個(gè)芯片方案,1是立創(chuàng)那邊自己做的的例程小車板用的驅(qū)動(dòng)芯片是RZ7889,另外一個(gè)是L9110S還有一個(gè)是比較好的TI的DRV8833;這里我選擇了最便宜的L9110S,主要是這里就模擬一個(gè)風(fēng)扇的轉(zhuǎn)速,實(shí)在是沒必要整這些好的芯片方案。
但是,這里有必要強(qiáng)調(diào)一下TI(德州儀器)的芯片貴是貴了點(diǎn),不過它芯片的資料絕對(duì)是學(xué)習(xí)硬件以及PCB設(shè)計(jì)的一個(gè)寶藏資料。就拿這個(gè)DRV8833的數(shù)據(jù)手冊(cè)來說,最直觀也是后面layout最重要的一個(gè)參考,L9110S是沒有l(wèi)ayout的指南的,RZ7889有,DRV8833也有,但是其他的描述DRV8833無疑是最全的。
而且,如果你有興趣去深挖一下的話,在TI的官網(wǎng)你可以找到同一系列的很多資料,比如下面的電機(jī)驅(qū)動(dòng)的布局、電流配置方案。
除此之外,TI的產(chǎn)品還有現(xiàn)成的評(píng)估板,而且大部分是可以直接下來的,里面有原理圖,PCB的Gerber文件甚至是AD工程的源文件都是有的。有興趣的可以自己去查看。
https://www.ti.com.cn/tool/cn/DRV8833EVM
4.舵機(jī)驅(qū)動(dòng)
和電機(jī)一樣,舵機(jī)的驅(qū)動(dòng)也是需要比較大的電流的,為了避免反沖單片機(jī),這里筆者用了一個(gè)光耦的隔離電路來驅(qū)動(dòng),光耦也是用的手頭現(xiàn)成的FOD817C。
5.USB轉(zhuǎn)TTL
為了更方便的實(shí)現(xiàn)板子與電腦的通信,這里我打算是將USB轉(zhuǎn)TTL的電路放到板子上,在這里也是有很多種方案可以選擇,常見的有CH340C、CH340G、CH340N,其實(shí)為了電路更簡(jiǎn)潔的化選用CH340N是最好的選擇,因?yàn)樗鼉?nèi)置晶振,且只保留了通信得數(shù)據(jù)腳,將其他的腳舍棄了。但是筆者這里還是用了CH340G,就是那個(gè)需要外接晶振的,電路在這仨中最復(fù)雜的,別問,問就是手頭現(xiàn)成的只有它,不像再花錢買了。
6.其他模塊
剩下的就是一些比較常見的芯片或者模塊了,聯(lián)網(wǎng)方面選用的是ESP8266、語音識(shí)別用的是筆者多次提到的鹿小班、紅外發(fā)射管和接收管是IR333和HS0038B、OLED是中景園子的0.96 7腳OLED、溫濕度采集用的是DHT11、按鍵用的是五向開關(guān)。
原理圖繪制
在搞定器件以及模塊的選擇后,接下來就是原理圖的繪制了。在原理圖的繪制過程中,要有一個(gè)自己的思路,然后按照思路分模塊的進(jìn)行繪制,這樣才能盡可能降低出錯(cuò)率。
這里分享一下筆者的思路:
1.首先要解決TM32的最小系統(tǒng),包括電源、晶振、復(fù)位以及boot選擇電路;
2.解決了最小系統(tǒng),要搞定電源輸入以及電腦與MCU通信的部分;
3.參照芯片手冊(cè)的管腳功能為GPIO分配對(duì)應(yīng)的功能;
4.檢查。
1.STM32最小系統(tǒng)
關(guān)于STM32的最小系統(tǒng)的原理圖,網(wǎng)上一搜一大把,而且如果你是用立創(chuàng)EDA繪制的話,甚至可以直接copy過來,而且立創(chuàng)官方也給我們提供了參考的樣板工程。
當(dāng)然,有歸有,抄歸抄,咱還是來瞜一眼那些具體的元器件參數(shù)到底是怎么確定的。
1.電源輸入
在每一款STM32的板子上,都可以在芯片附近看見一個(gè)100nf的電容,這個(gè)電容的容值就是芯片手冊(cè)中的要求,它們的主要作用也就是對(duì)輸入電源進(jìn)行一個(gè)濾波的作用。
注意上圖紅框中寫著5*100nf可不是在同組個(gè)VDD和VSS兩端并聯(lián)5個(gè)電容;這里的5是分別對(duì)應(yīng)的5組電源輸入,觀察具體的封裝引腳定義,可以發(fā)現(xiàn),STM32F103C8T6的四個(gè)面分別有一組VSS和VDD除此之外還有一個(gè)VBAT,剛好5組,每組各一個(gè)。
2.晶振選擇
在之前的嵌入式學(xué)習(xí)筆記中,提到過,STM32的外部時(shí)鐘源,也就是晶振,有兩組一個(gè)是HSE外部高速時(shí)鐘,一個(gè)是LSE外部低速時(shí)鐘,關(guān)于晶振的頻率大小,在數(shù)據(jù)手冊(cè)中也已經(jīng)給出了,其中HSE的晶振范圍是0-25MHZ,典型值是8Mhz也就是我們最常見的晶振值。注意,0的時(shí)候,也就是沒有外部高速時(shí)鐘,此時(shí)編程時(shí)要將單片機(jī)的時(shí)鐘源設(shè)置為內(nèi)部高速時(shí)鐘。同時(shí),數(shù)據(jù)手冊(cè)中還給出了典型值的負(fù)載電容30pf與反饋電阻的值200kΩ。
外部低速時(shí)鐘也是同理,使用一個(gè)32.768Hz的晶體振蕩器,也給出了典型值的負(fù)載電容15pf與反饋電阻的值5MΩ。
于是根據(jù)這些,我們可以搞定晶振部分的原理圖了。
當(dāng)然實(shí)際使用過程中也有使用其他晶振值的,只是要根據(jù)官方的指導(dǎo)設(shè)置對(duì)應(yīng)的參數(shù)即可。在數(shù)據(jù)手冊(cè)中也有對(duì)應(yīng)的提示:讓我們?nèi)T的官網(wǎng)查看AN2867這個(gè)名為“Oscillator design guide for ST microcontrollers”(ST微控制器的外部時(shí)鐘設(shè)計(jì)指南)的文件。這里把鏈接貼給大家———ST微控制器外部時(shí)鐘設(shè)計(jì)指南,純英哈誰有譯文的話可以給我丟一份。
同樣的,與TI一樣ST官網(wǎng)也是有大把值得學(xué)習(xí)的資料的,就比如說這里的各類指南,還有中文版,讀起來相對(duì)輕松一點(diǎn)。網(wǎng)址也貼給大家——ST官網(wǎng)資料
尤其是這個(gè)AN1709的ST為控制器EMC設(shè)計(jì)指南,后面的PCB畫板是值得參考的。
3.復(fù)位電路
關(guān)于復(fù)位電路,數(shù)據(jù)手冊(cè)中也做了介紹的,通過這個(gè)表可以看出,NRST的管腳內(nèi)部是有一個(gè)弱上拉電阻的,但是實(shí)際是使用過程中,為了保險(xiǎn),還是會(huì)再在這個(gè)管腳上上拉一個(gè)電阻。以保證硬件復(fù)位和上電復(fù)位的穩(wěn)定。
4.BOOT選擇電路
然后就是BOOT選擇電路,在C8T6的48個(gè)IO中有兩個(gè)管腳是用來配置STM32的啟動(dòng)模式的,分別是BOOT0和BOOT1。
具體的模式如下,一般默認(rèn)配置為從主閃存存儲(chǔ)器啟動(dòng),為了方便用戶使用,會(huì)使用撥碼開關(guān)或者按鍵來實(shí)現(xiàn)模式的切換。
ST官方對(duì)于BOOT的模式選擇也出了對(duì)應(yīng)的手冊(cè)工開發(fā)者查看,這里還是將鏈接給大家提出來—— AN2606應(yīng)用筆記。
5.下載電路
除了上面的四個(gè)電路以外,還需要搞定一個(gè)下載電路,筆者手頭有st-link,所以找到對(duì)應(yīng)SW下載所需的管腳SWDID和SWCLK即可,具體的查詢還是在數(shù)據(jù)手冊(cè)中。
直接在數(shù)據(jù)手冊(cè)搜索即可查找到。
為了保證下載的穩(wěn)定性,一般會(huì)在這兩個(gè)管腳上上拉一個(gè)上拉電阻。
至此,一個(gè)STM32的最小系統(tǒng)電路就搞定了。
2.電源部分及與PC通信部分
在搞定最小系統(tǒng)后,接下來就是電源部分以及USB轉(zhuǎn)TTL的電路,這里筆者選用了16pin的Type-C作為接口,主要是其他接口我手頭沒有現(xiàn)成的,而且現(xiàn)在Type-C接口的很常見,比較方便。既然提到了Type-C,這里就再啰嗦兩句,對(duì)弈第一次使用Type-C的同學(xué)來說,需要注意一些內(nèi)容:
1.在大多數(shù)的這種開發(fā)板電路中是沒有專門的USB管理芯片的,所以需要在Type_C的CC1和CC2腳分別下拉一個(gè)5.1k的電阻,以保證你的電腦能夠識(shí)別到設(shè)備并給它供電;
2.16pin的接口并不是所有管腳都用用,我們使用時(shí)需要它的兩個(gè)功能,一是供電,需要使用到VBUS和GND,另外一個(gè)就是使用到它的USB通信功能,需要使用到它的D+和D-;由于Type-C是支持兩面插拔的,所以上述的管腳都是有兩組的,在實(shí)際使用過程中要對(duì)應(yīng)連接上。
下圖截取自——一文讀懂USB TypeC與USB-PD。TypeC引腳定義-24P 16P 6P,CC1、CC2的作用,USB-PD介紹,USB2.0/3.0接口類型一覽感興趣的同學(xué)可以去拜讀一下。
好了,弄清楚Type-C的接口使用方法后,就可以搞定電源和USB轉(zhuǎn)TTL了;其中電源部分很簡(jiǎn)單,將5V接入對(duì)應(yīng)的LDO,輸出3.3V即可;然后是USB-TTL的部分,這里直接參考CH340G的數(shù)據(jù)手冊(cè)繪制原理圖即可——文檔鏈接給大家貼出來當(dāng)然,如果你覺得看手冊(cè)沒把握,也可以像之前電機(jī)驅(qū)動(dòng)一樣,在立創(chuàng)的廣場(chǎng)上去找一找別人用過的電路。
于是就有了如下所示的原理圖:
3.功能模塊的實(shí)現(xiàn)
接下來就是具體的功能部分的原理圖了,這里也要有一個(gè)優(yōu)先級(jí)的思路,對(duì)于像串口、硬件SPI、PWM、輸入捕獲、ADC的這些需要固定映射關(guān)系的引腳要先定下來,而模擬IIC、1-wire以及一些使用IO口模擬模擬通信時(shí)序的功能優(yōu)先級(jí)放到最后。
好理清思路,那就開干。
1.串口
首先,根據(jù)需求表,我們需要使用到3個(gè)串口,所以第一步得通過芯片手冊(cè)查到每個(gè)串口對(duì)應(yīng)的具體的管腳,在管腳功能表一搜就可以發(fā)現(xiàn)串口1就有兩組管腳,這個(gè)再M(fèi)4中也提到過,同一個(gè)外設(shè)控制器,是可以通過不同的映射指定到不同的管腳的,只是在代碼配置中需要重新映射,為了降低后面編程的復(fù)雜度,這里我們都選擇默認(rèn)的管腳。
通過用戶編程手冊(cè)可以一次性查到三個(gè)串口默認(rèn)指定管腳。
由于串口通信的雙方是需要交叉連接TX和RX的,所以在原理圖連接時(shí)要注意:
PA9是MCU的USART1_TX要連接到CH340的RXD上,而USART1_RX(PA10)要連接到CH340的TXD上。
至于剩下的兩個(gè)串口,因?yàn)楣P者手頭的是模塊,所以外接排針接出來就可以了。
功能 | 管腳 |
---|---|
USART1_TX | PA9 |
USART1_RX | PA10 |
USART2_TX | PA2 |
USART2_RX | PA3 |
USART3_TX | PB10 |
USART3_RX | PB11 |
2.定時(shí)器輸入捕獲與輸出比較
C8T6一共有4個(gè)定時(shí)器,舵機(jī)角度和電機(jī)速度控制可以使用同一個(gè)定時(shí)器來實(shí)現(xiàn),而紅外的輸入捕獲需要單獨(dú)的一個(gè)定時(shí)器來實(shí)現(xiàn),而且為了保證機(jī)智云的穩(wěn)定運(yùn)行,它也需要單開一個(gè)定時(shí)器提供心跳檢測(cè),而且除此之外,整個(gè)系統(tǒng)運(yùn)行時(shí)還需要一個(gè)定時(shí)器來實(shí)現(xiàn)時(shí)間片的功能。根據(jù)具體的需求,進(jìn)一步劃分,
最終決定TIM1作為機(jī)智云的心跳產(chǎn)生;TIM2做輸入捕獲,用來獲取紅外接收頭接收到的數(shù)據(jù);TIM3用來做比較輸出,產(chǎn)生PWM波形控制舵機(jī)和電機(jī);TIM4用來做時(shí)間片的產(chǎn)生。
確定好各個(gè)定時(shí)器的功能后,就可以分頻管腳了,同樣的,為了避免復(fù)用功能重映射,我們盡量選用默認(rèn)的管腳。最終,根據(jù)復(fù)用表,選擇了定時(shí)器3進(jìn)行部分重映射,然后使用它的通道1和通道2分別對(duì)電機(jī)和舵機(jī)進(jìn)行控制,定時(shí)器2就是用默認(rèn)模式的通道2來作為紅外的輸入捕獲。
選定管腳后,就根據(jù)對(duì)應(yīng)的芯片選型,在芯片手冊(cè)或者網(wǎng)上找對(duì)應(yīng)的使用電路,有關(guān)的驅(qū)動(dòng)電路如下:
這里需要注意L9110S是一個(gè)集成了H橋的芯片,控制部分需要有兩個(gè)輸入信號(hào),這里筆者選用的是一路PWM加一路普通GPIO的控制方案,另外一個(gè)GPIO選擇的是PB3.
至于紅外輸入的電路也是根據(jù)芯片手冊(cè)參考電路進(jìn)行繪制即可。
功能 | 管腳 |
---|---|
紅外輸入捕獲 | PA1 |
電機(jī)控制PWM MOTOR-A | PB4 |
電機(jī)控制IO MOTOR-B | PB3 |
舵機(jī)控制PWM | PB5 |
3.硬件SPI
C8T6一共有兩組硬件SPI,這里我們選一組來作為和0.96的OLED屏幕通信的接口,這里需用的是SPI2的一組管腳來實(shí)現(xiàn),7腳的OLED一共有5個(gè)腳需要我們編程進(jìn)行控制,其中,MOSI、SCLK用的是硬件SPI2的管腳,剩下的CS、RES、D/C這三個(gè)腳使用普通的GPIO口就可以解決實(shí)現(xiàn)效果,這里需要注意,原本是SPI2的片選NSS的PB12還有MISO的PB14這里沒有復(fù)用到SPI上,只是作為普通的GPIO來進(jìn)行使用。
因此最終的引腳使用如下:
功能 | 管腳 |
---|---|
OLED_MOSI | PB15 |
OLED_SCK | PB13 |
OLED_CS | PB14 |
OLED_DC | PB12 |
OLED_RES | PB6 |
4.ADC
根據(jù)需求表,還需要使用一個(gè)ADC來作方向按鍵的電壓采集,C8T6的ADC一共有兩組10個(gè)通道,只要規(guī)避掉前面已經(jīng)用掉的那些GPIO即可,所以這里筆者用了PB0,也就是ADC1或者ADC2的通道8來作為按鍵電壓的采集。
原理圖如下:注意WACK_UP并不是使用ADC采集的,是作為普通按鍵來使用的,占用的是PA0管腳。
功能 | 管腳 |
---|---|
ADC_IN | PB0 |
WACK_UP | PA0 |
至此,需要使用到特定功能的GPIO就已經(jīng)定下來了,接下來就是搞定其他的使用時(shí)序模擬的模塊。
5.溫濕度傳感器
然后就是給DHT11整個(gè)GPIO來獲取溫濕度,這個(gè)傳感器使用的是單總線的協(xié)議,隨便找一個(gè)GPIO口來模擬時(shí)序就可以了,這里筆者選擇了PA15。提示一下,如果是自己買的四腳的模塊的話,DHT11的數(shù)據(jù)腳記得接一個(gè)上拉電阻,筆者是因?yàn)槭诸^有一個(gè)現(xiàn)成的模塊,模塊上集成了上拉電阻,所以整個(gè)只留一個(gè)3pin的排母接口。
功能 | 管腳 |
---|---|
DHT11_DATA | PA15 |
6.WS2812B
再之后就是WS2812B的RGB燈模塊了,WS2812B也是很火的一個(gè)外設(shè)了,它可以通過一個(gè)腳實(shí)現(xiàn)多個(gè)燈的串行控制,常見的驅(qū)動(dòng)方式有DMA+SPI,PWM+DMA的驅(qū)動(dòng)方式,這兩種方案當(dāng)然是驅(qū)動(dòng)這個(gè)燈的最優(yōu)解,但是筆者這里的定時(shí)器都有自己的專用功能,而且SPI的腳位也被用了,所以采取了一個(gè)最最原始的驅(qū)動(dòng)方案,使用GPIO延時(shí)模擬時(shí)序,雖然效果比不上那個(gè)前面兩種,但也能用。這里筆者使用的是PA8。然后燈條我也是用的模塊,8個(gè)燈串聯(lián)的。
功能 | 管腳 |
---|---|
WS2812B_DATA | PA8 |
7.繼電器
還有一個(gè)繼電器的控制電路,繼電器的本質(zhì)是一個(gè)電磁鐵的導(dǎo)通與關(guān)斷,但是由于線圈本身等效是一個(gè)大電感,不做保護(hù)直接驅(qū)動(dòng)的一方面是驅(qū)動(dòng)不了,另一方面有可能燒毀單片機(jī)的IO管腳,所以一般會(huì)采用三極管的開關(guān)電路、或者是用ULN2003這類的達(dá)林頓管來驅(qū)動(dòng),也有使用直接加一個(gè)光耦隔離來實(shí)現(xiàn)的。這里筆者手頭NMOS,所以弄了個(gè)用NMOS的開關(guān)控制繼電器的電路,雖然目前能用,但大家在繼電器驅(qū)動(dòng)時(shí)都沒怎么用過NMOS,這個(gè)是有啥坑嗎,有佬知道答案的話麻煩解答一下。
下圖中的D1是一個(gè)肖特基的二極管,作用是當(dāng)NMOS截止時(shí),用于與繼電器的線圈形成回路消耗儲(chǔ)存的能量,避免線圈里面的電燒毀擊穿MOS。然后R24這個(gè)下拉電阻的作用就是避免NMOS的誤導(dǎo)通。
這里選用的管腳是PA12。
功能 | 管腳 |
---|---|
繼電器控制 | PA12 |
8.紅外發(fā)射管
紅外發(fā)射管的使用也是通過GPIO來控制紅外管的導(dǎo)通和關(guān)閉來實(shí)現(xiàn)的,而具體的實(shí)現(xiàn)方案,最常見的也是用PWM來實(shí)現(xiàn),但是需要一個(gè)專用的頻率,所以筆者這里智能退而求其次,準(zhǔn)備使用軟件模擬的方案來實(shí)現(xiàn),紅外發(fā)射的模擬代碼,技小新在立創(chuàng)上有過一個(gè)例程,這個(gè)到此時(shí)筆者還在調(diào)試,理論上是可行的。至于驅(qū)動(dòng)電路,和上面的繼電器一樣,筆者選用了一個(gè)NMOS的開關(guān)電路實(shí)現(xiàn)。
為了避免IO模擬用不了,我這里選擇了PB7作為紅外發(fā)射的驅(qū)動(dòng)管腳,實(shí)在不行,利用定時(shí)器4的PWM應(yīng)該也是可以搞定的。
功能 | 管腳 |
---|---|
紅外發(fā)射電路 | PB7 |
9.AT24C02
看了一下,整個(gè)板子,前面已經(jīng)用到了USART、SPI、1-wire等協(xié)議,還有一個(gè)常用的IIC沒用上,那必然是不能缺少的,于是整了個(gè)AT24C02的eeprom,由于模擬IIC隨便找倆GPIO都可以搞定,所以這個(gè)電路的優(yōu)先級(jí)也放的比較低,排除上面已經(jīng)用過的GPIO后,筆者選用了PB8、PB9作為IIC的通信引腳,iic的器件一定要注意做好上拉電阻,芯片本身的上拉能力有限,需要使用上拉電阻來提供高電平。然后是A0-A2這三腳是用來設(shè)置IIC器件地址的,由于這里就接了一個(gè)IIC器件,直接給它都拉低就完事兒了。
詳細(xì)的介紹可以去看它的芯片手冊(cè),這里把鏈接貼給大家——AT24C02
功能 | 管腳 |
---|---|
IIC_SCL | PB8 |
IIC_SDA | PB9 |
10.138譯碼器電路
整個(gè)系統(tǒng)一直到這里都還算成功,程序也都調(diào)通了,使用也都正常,但是這138的電路可以說是一個(gè)滑鐵盧,原本筆者是打算,利用138譯碼器,實(shí)現(xiàn)3個(gè)GPIO控制4個(gè)LED以及一個(gè)42步進(jìn)電機(jī)的,由于畫原理圖的時(shí)候沒太過腦子,鬧了一個(gè)烏龍,42步進(jìn)電機(jī)是用不了了。具體啥原因呢,這里我把原理圖給大家貼過來大家就明白了。
如上圖,74HC138使用ADD0-ADD2來實(shí)現(xiàn)8種不同的輸出,由于138本身的驅(qū)動(dòng)能力是很弱雞的,所以給他加了個(gè)74HC245的三態(tài)門,也叫緩沖器,它可以解決138驅(qū)動(dòng)能力弱雞的問題。這里緩沖器輸出的B4-B7四個(gè)腳接了LED4到LED7的四個(gè)LED,這四個(gè)LED也可以正常驅(qū)動(dòng),沒毛病。
但是B0-B3這四個(gè)計(jì)劃用來驅(qū)動(dòng)42步進(jìn)電機(jī)的電路就有毛病了,首先,步進(jìn)電機(jī)需要大電流,加一個(gè)ULN2003的達(dá)林頓管來驅(qū)動(dòng)這是一個(gè)正確的操作,但是問題在于經(jīng)過138譯碼器輸出的B0-B3在同一時(shí)刻,永遠(yuǎn)只有一個(gè)是低電平,經(jīng)過達(dá)林頓管的反向后,真實(shí)輸出到1C-4C的電平也就是同一時(shí)刻只有一個(gè)高電平,而步進(jìn)電機(jī)是需要按照節(jié)拍表對(duì)線圈進(jìn)行輪流供電才能驅(qū)動(dòng)。
而此電路的A A- B+ B-的輸出狀態(tài)永遠(yuǎn)只有1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1這四種狀態(tài),所以步進(jìn)電機(jī)是無法驅(qū)動(dòng)的,做個(gè)普通的開關(guān)控制還行。
設(shè)計(jì)時(shí)不過腦子,整出了這么一個(gè)尷尬的電路,有時(shí)間的話筆者會(huì)將這個(gè)板子再修改一版。
11.一些保護(hù)措施
在開發(fā)板電路中,多多少少都會(huì)看見一些保護(hù)電路的,目的是保護(hù)單片機(jī)或者說是保護(hù)電腦接口,這里筆者用了三個(gè)保護(hù)措施
1.在5V電源和3.3V電源端使用各使用了一個(gè)穩(wěn)壓管,這樣當(dāng)輸入電壓超出5.7V時(shí),D10會(huì)雪崩導(dǎo)通,將這個(gè)超出5V的電壓直接通過D10接地,當(dāng)然,這個(gè)時(shí)候,穩(wěn)壓二極管是保不住了,會(huì)看見穩(wěn)壓二極管冒煙,但是后面的電路不會(huì)受到這個(gè)高電壓的沖擊。
2.在電源輸入的地方給了個(gè)自恢復(fù)的保險(xiǎn),這樣做的主要目的是因?yàn)榘遄又杏须姍C(jī),有舵機(jī)這倆玩意兒萬一堵轉(zhuǎn)了,會(huì)有一個(gè)很大的電流,如果不加保護(hù),很有可能直接干廢整個(gè)電路,加一個(gè)自恢復(fù)的保險(xiǎn),可以一定程度上防御這種突發(fā)狀況。
3.給電機(jī)設(shè)置了模擬5V和模擬地中間使用0歐姆電阻連接,這樣做的主要目的也是防止電機(jī)的驅(qū)動(dòng)對(duì)整個(gè)電路造成干擾。
除此之外,在Type-C的D+和D-也加了一丟丟保護(hù)措施,加了個(gè)TVS瞬態(tài)電壓抑制二極管在USB+、USB-和 GND之間,可以預(yù)防浪涌或者是靜電以及防止過電壓。
4.原理圖檢查
原理圖繪制完畢后,一定要仔細(xì)檢查,如果有條件的話一定要找專業(yè)老辣的人幫你瞅一眼再進(jìn)行下一步的操作。
PCB 繪制
確認(rèn)原理圖沒毛病后,就可以開始規(guī)劃PCB了,關(guān)于PCB的布局、具體的走線規(guī)則這些,如果不熟悉的同學(xué)可以去B站找找凡億的免費(fèi)課程,跟著把那幾個(gè)免費(fèi)課程的板子畫了,基本上自己畫一些這種小東西的還是沒問題的。尤其是他們的整體處理思路、快捷鍵的設(shè)置、規(guī)則的設(shè)置這些。而且最近凡億還給出了一個(gè)PCB設(shè)計(jì)的白皮書,雖然是RK3588但是很多東西是通用的,布局思路、電源、晶振、USB的差分處理,這些都是可以借鑒和參考的。
例如外部晶振的包地、盡可能接近主控,走線盡可能短這些都是可以借鑒的。
當(dāng)然,除了凡億的這個(gè)白皮書,前面提到過的TI的芯片的layout指南也可以借用過來:
還有官方的——ST微控制器EMC設(shè)計(jì)指南(AN1709)這些都是PCB設(shè)計(jì)和layout時(shí)的重要法寶
以下是筆者的PCB布局,說實(shí)話,畢竟畢業(yè)后沒有干過硬件,整個(gè)板子還是有很多的不足的,歡迎各位佬批評(píng)指正哈。
關(guān)于焊接
對(duì)于焊接呢,整個(gè)焊接過程遵循先小后大,先焊接電源部分
檢查無誤后再整最小系統(tǒng),最小系統(tǒng)可以正常燒錄代碼后再焊接外界的驅(qū)動(dòng)模塊,記得焊接完上電前一定 一定 一定要把助焊劑,錫珠這些用工業(yè)酒精洗干凈后再上電,別問我為啥刻意提醒,上電冒煙的感覺是真的提心吊膽。
部分功能展示
138驅(qū)動(dòng)4個(gè)LED
WS2812
DHT11采集溫濕度,OLED顯示
方向按鍵調(diào)節(jié)電機(jī)轉(zhuǎn)速
紅外遙控控制WS2812B燈條顯示不同的顏色文章來源:http://www.zghlxwxcb.cn/news/detail-462238.html
總結(jié)
關(guān)于整個(gè)板子的原理圖PCB的介紹就記錄到此,文中有不足之處歡迎指出,提出修改意見或者建議既可以免費(fèi)獲取這個(gè)項(xiàng)目的硬件工程以及代碼工程,代碼目前還沒編寫完,還有機(jī)智云、紅外發(fā)射沒弄,其他的都基本實(shí)現(xiàn)了。文章來源地址http://www.zghlxwxcb.cn/news/detail-462238.html
到了這里,關(guān)于從零開始手搓一個(gè)STM32與機(jī)智云的小項(xiàng)目——硬件介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!