2020年1月25日 星期六

STM32 隨手筆記 (stm32f407 stm32f429 )

STM32 隨手筆記 - HackMD

STM32 隨手筆記

tags: stm32, HiYouGood
最近決定把hackmd資料集中到部落格,想說統整一下,目前直接把那邊HTML整個搬過來...所以格式可能會跟其他的不太依樣....
這篇我主要是玩stm32F407 與stm32f429

燒錄與編譯方法

玩板子最重要的就是改好程式之後要放板子上啦

st-link/v2

一種可以專門用來debug的功能元件,須輸入以下指令
更新板
sudo apt-get install automake* libtool libusb-1.0-0-dev git clone http://github.com/texane/stlink.git cd stlink make release cd build/release make sudo make install
舊的(目前缺乏 autogen.sh)
sudo apt-get install automake* libtool libusb-1.0-0-dev git clone http://github.com/texane/stlink.git cd stlink ./autogen.sh ./configure --prefix=/usr make sudo make install sudo cp 49-stlinkv2.rules /etc/udev/rules.d/
執行" ./configure --prefix=/usr " 會遇到有遇到syntax error near unexpected token USB的問題,要使用下面這個安裝來解決
sudo apt-get install pkg-config
這裡安裝完後可能要從./autogen.sh重新開始往下執行
以前王國明有問我’'sudo cp 49-stlinkv2.rules /etc/udev/rules.d/" 這行在幹麻
cp 是liunx的複製指令,所以他是把49-stlinkv2.rules複製到 /etc/udev/rules.d這個路徑底下,那這個/etc/udev/是專門管理週邊元件系統rules.d是則是週邊裝置的屬性設定,所以應該是屬性設定。

compiler下載

再來就是要安裝arm特有的compiler,沒有安裝這個下載程式做make會出現一堆stm32 蛇摸週邊裝置的Error
sudo apt-get install gcc-arm-none-eabi

點燈測試



SG90 AC servo 馬達控制


簡單來說就是要控制上面照片的馬達

馬達規格

Tower Pro SG90
三條線顏色分別是黃、紅、棕,對應訊號、電源、接地
重量:9g
尺寸:2312.229mm
工作電壓:4.8V
轉矩:1.8kg-cm,當工作電壓為4.8V時
運轉速度:0.1秒 ∕ 60度 ,當工作電壓為4.8V時
脈衝寬度範圍:500~2400µs
死頻帶寬度(dead band width):10µs

範例程式執行方法

git clone https://github.com/whosyourdadd/sg90_test cd sg90_test make cd TIM_PWM_Output make make flash

SG90應用:自動餵食器
之前說要做自動餵食器,被同事說是說說而已,因此就參考以下網址做了一個簡單板的。
http://www.koitw.com.tw/discuz/forum.php?mod=viewthread&tid=1776

上圖為利用厚紙板做出簡單的機構

stm32每24小時轉180度將飼料投入魚缸中,並重新記時
黑色按鈕可以重新記時,並且使馬達立即旋轉180度
程式在此
https://github.com/whosyourdadd/AutoFeedFish

joystick搖桿+螢幕控制


這種搖桿主要是透過可變電阻造成不同方向的控制
其中有五個輸入: 5v,GND,VRx,VRy,SW
  • 5V,GND: 就不講了,主要來講其他的功能
  • VRx,VRy: 原始值為1023往左會逐漸減成0,往右會逐漸遞增成2048
  • SW: 起始值為 1(高準位),按下去時變成0(低準位)


BLDC & ESC

近買了一台四軸來玩,裡面用直流無刷馬達與電子調速器做控制.

間這個就是電子調速器ESC,右下是無刷馬達,圖中可以看到電容兩邊有紅黑兩條線,這兩條是專門接電池用的,電池印象是11v,左上有三條黃紅棕,則是控制用的線.若電池通電,或是ESC端接電,後方的小燈會亮,並且發出一些聲音,可以確認ESC是否被開啟
ESC控制線的部份須注意一以下方式做連接:
棕色(或黑色):地線與板子一同接地
紅色:電源線vdd與板子5 v相同
黃色(或白色):PWM訊號線,這條線最重要,根據不同的PWM訊號可以對ESC做控制
再來要講PWM的部份:
之前在玩sg90的時候,有寫說適用的脈寬在0.5~2.5ms左右,而ESC的部份好像也是。利用這個範圍的波寬,ESC會產生三個相位的信號驅動BLDC.但是按照ESC的datasheet目前我還沒辦法確定常用的油門最低到底對應的脈寬是多少ms.因此ESC的初始化流程還需要配合遙控才能做完善得初始化
接下來要做的應該就是買一組按鈕,配上之前買的另一塊stm32做成遙控器,連結RF模組,根據按下去的時間長短來驅動PWM脈寬.

stm32 SYSTEM Clocks 系統時脈

三種系統實脈可以選擇的
/**************** PLL Parameters ***************************/ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ #define PLL_M 25 #define PLL_N 300 /* SYSCLK = PLL_VCO / PLL_P */ #define PLL_P 2 /* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ #define PLL_Q 7 #endif /* HSE_VALUE */ /***********************************************************/
內部石英振盪器的部份參考stm32f4xx.h其中的這個片段
#if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */
總括來說透過鎖相迴路(PLL)做計算,上面的PLL Param有公式
SYSCLK = PLL_VCO / PLL_P
目前系統時脈是用內部振盪器,所以
PLL_VCO = (25M /25 ) *300 = 300M
SYSCLK = PLL_VCO / PLL_P = 300M / 2 = 150 M
想看這個截圖的實際參考資料可以看stm32f4系列的手冊

NRF24L01

http://www.micro4you.com/files/itead/NRF24L01.JPG
在此專案有兩個類似的傳輸方式:
I2C 給 ms5611 (氣壓感測器) 傳輸用的
SPI 給 nrf24l01(RF模組) 傳輸用的
----------------------
這裡先介紹nrf24l01部份
[nRF24L01-Datasheet]
[參考連結]
[相關文獻]
[nRF教學 ]
github: QuadrotorGroundStation
note:
必須使用3.3V 做為電源, 因為nRF24L01的工作電壓是1.9~3.6V,使用5V的電壓會把模組燒壞。
此飛控板用的是SPI2的腳位。
會用到的接腳:
GND
VCC (3.3V)
CSN (PB12)
SCK (PB13)
MISO (PB14)
MOSI (PB15)
IRQ (PC5)
CE (PC4)
補充:
其它模組nRF2401AG
nRF2401AG Datasheet
xbee

https://www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.html

參考資料

老王賣瓜自賣自誇
https://github.com/whosyourdadd/