步驟1:為Android設(shè)備編寫應(yīng)用程序,以將數(shù)據(jù)發(fā)送到藍(lán)牙模塊。
我們使用MIT應(yīng)用程序發(fā)明家2網(wǎng)站來編寫應(yīng)用程序。在此網(wǎng)站上,您無需編程知識即可輕松創(chuàng)建帶有編程塊的應(yīng)用程序。
汽車的基本行駛方向是左,右,前進(jìn)和后退。要指定4個不同的動作,2位就足夠了。指定汽車的方向移動之后,讓我們設(shè)置汽車的速度。我們可以將速度調(diào)整為4種不同的設(shè)置,而2個二進(jìn)制位就足夠了。數(shù)據(jù)以8位數(shù)據(jù)包的形式發(fā)送到Bluetooth模塊,而5位數(shù)據(jù)對我們來說就足夠了。
現(xiàn)在,我們可以創(chuàng)建有關(guān)這些計算的應(yīng)用程序。 4個用于定義旋轉(zhuǎn)的按鈕,一個用于設(shè)備和速度控制的列表選擇器以及一個用于連接的按鈕就足夠了。另外,我們必須添加藍(lán)牙客戶端和藍(lán)牙服務(wù)器模塊以建立藍(lán)牙連接。要查看方向按鈕是否對齊,請使用表格排列。
在設(shè)計之后,我們通過單擊塊部分來通過編程。使用Mix Application Inverter 2進(jìn)行編程非常容易。您可以通過單擊左側(cè)的組件來添加所需的塊。在這一部分中,我們填寫列表選擇器的內(nèi)容,然后將藍(lán)牙設(shè)備排成一行,以便前者與設(shè)備匹配,因此,為了提高速度,我們將數(shù)字排列為“ 1、2、3、4”。您可以在此處找到此Android應(yīng)用程序的項目。
步驟2:從藍(lán)牙模塊獲取數(shù)據(jù)
《用于藍(lán)牙通信的p》 HC06模塊使用UART作為通信協(xié)議。 HC06默認(rèn)發(fā)送1個起始位,8個數(shù)據(jù)位和1個停止位,并且波特率為9600。 Silego GreenPAK具有SPI模塊。我們將對SPI模塊進(jìn)行一些補(bǔ)充,以允許從HC06模塊獲取數(shù)據(jù)。最初,SPI協(xié)議需要一個外部時鐘。但是,在UART協(xié)議下,數(shù)據(jù)以恒定速率傳輸。另一個區(qū)別是SPI通信中沒有啟動或停止位。我們將使用一個起始位來獲取SPI時鐘。 UART協(xié)議在空閑時處于高功率狀態(tài),在開始通信時(進(jìn)入低位)進(jìn)入低功率狀態(tài)。
我們可以使用下降沿檢測器來識別通信的開始。我們將此信號連接到DFF的時鐘引腳,將VDD連接到數(shù)據(jù)引腳,以使連接在連接期間保持活動狀態(tài)。因此,PDLY0塊將在通信開始時通過捕捉下降沿來設(shè)置連接標(biāo)志。 UART協(xié)議具有9600波特率,這意味著它能夠每秒傳輸9600位。要找到一個周期的時間,您必須將1秒除以9600。如果立即開始運(yùn)行時鐘,則數(shù)據(jù)和時鐘信號將同時更改,這可能會導(dǎo)致數(shù)據(jù)丟失。因此,時鐘信號必須延遲半個周期。我們使用CNT6/DLY6塊應(yīng)用了此延遲。通過將OSC模塊中的RC OSC頻率設(shè)置為2000 kHz,我們獲得了更高的頻率。從中獲得較高頻率的周期具有較短的周期,并且計數(shù)器的絕對定時分辨率提高。因此,我們降低了計數(shù)器的錯誤率。
CNT6塊設(shè)置為延遲半個周期(0,1042/2 = 0,0520 ms)。我們使用另一個計數(shù)器(CNT2)獲得一個周期的持續(xù)時間(0,142 ms)。我們將此計數(shù)器的時鐘設(shè)置為External Clock0。通過應(yīng)用邏輯和處理,我們將來自O(shè)SC的OUT1信號和CLK BEGIN信號連接到OSC的外部Clock0輸入。因此,CNT2僅在連接開始時才開始計數(shù)。為了提供更多細(xì)節(jié),計數(shù)器模塊對時鐘信號的邊沿進(jìn)行計數(shù)。如果計數(shù)器不斷向CLK引腳發(fā)送高電平或低電平信號,則計數(shù)器停止計數(shù)。在這里,我們將CLK Begin信號與OUT1信號進(jìn)行“與”運(yùn)算,并將它們連接到外部CLK0輸入。這樣,在沒有連接的時刻,ANDing CLK Begin信號和OUT1信號將始終等于0,并且CNT2將停止計數(shù)。
但是,當(dāng)提供連接時,CLK Begin信號將為“ 1“,邏輯和運(yùn)算的結(jié)果將是OUT1信號,并將使CNT2繼續(xù)計數(shù)。我們將CNT2計數(shù)器的輸出(其周期持續(xù)時間已預(yù)先計算)連接到SPI模塊的SCLK引腳。因此,我們?yōu)閬碜訦C06的每個字節(jié)數(shù)據(jù)生成了一個時鐘周期。
最后,我們設(shè)置延遲以計算連接的到期時間并將連接清零。連接開始后,該計數(shù)器將開始測量持續(xù)時間,并在數(shù)據(jù)傳送完成后結(jié)束連接。在測量9個字節(jié)的持續(xù)時間后,我們將連接歸零。在停止字節(jié)期間將連接清零可使SPI模塊在形成新連接之前準(zhǔn)備就緒。否則,如果打算在10個字節(jié)的持續(xù)時間結(jié)束時將其清零,則可能無法捕獲新連接的起始字節(jié)。我們將來自PLY5模塊的SPI引腳的輸出引腳,計算出的1個周期持續(xù)時間的計數(shù)器以及用作連接標(biāo)志的DFF0復(fù)位。但是,與其他信號不同,我們在復(fù)位DFF0之前將信號延遲了一段時間。如果您重置SLG46620V芯片的反延遲模塊,則該模塊的輸出芯片將保持高電平1個周期。如果您同時重置CNT2和DFF0,則CLK Begin信號將保持低電平,從而停止CNT2的時鐘停止。由于CNT2將保持高電平1個周期,并且時鐘將不斷變?yōu)榈碗娖綘顟B(tài),因此CNT2將無法完成1個周期,而是將穩(wěn)定地保持在高電平狀態(tài)。因此,我們首先重置CNT2塊,然后在幾個周期后重置DFF0。
步驟3:電動機(jī)/汽車的控制
在此階段,我們通過更改直流電動機(jī)的輸出來更改汽車的速度和方向。通過藍(lán)牙接收汽車的方向和速度信息。當(dāng)我們通過SPI模塊接收到來自UART協(xié)議的數(shù)據(jù)時,將在這里使用SPI并行輸出模塊。
UART和SPI通信之間的區(qū)別之一是發(fā)送字節(jié)的順序。當(dāng)最初使用SPI協(xié)議發(fā)送MSB(最高有效位)時,最后使用UART協(xié)議發(fā)送它。因此,我們將以相反的順序接收數(shù)據(jù)的字節(jié)。我們將S1和S0字節(jié)字節(jié)鏈接到PWM0塊。如上所示應(yīng)用了PWM0的設(shè)置后,就配置了CNT8/DLY8模塊。 。 SLG46620V CMIC無法直接驅(qū)動直流電動機(jī)。因此,我們將使用電源和電機(jī)驅(qū)動器來控制它們。直流電動機(jī)驅(qū)動器通過根據(jù)通常稱為M1-A,M1-B,M2-A和M2-B的控制銷向電動機(jī)的銷通電來運(yùn)行電動機(jī)。我們在設(shè)計中建立了連接,如表6所示。
LUT為電機(jī)驅(qū)動器輸入提供適當(dāng)?shù)倪壿嬓盘枴R虼耍?dāng)開合信號處于低電平狀態(tài)時,電機(jī)輸出引腳將保持低電平,并且電機(jī)將不會旋轉(zhuǎn)。
-
Android
+關(guān)注
關(guān)注
12文章
3938瀏覽量
127530 -
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5834瀏覽量
170587
發(fā)布評論請先 登錄
相關(guān)推薦
評論