目錄
基於PY32F002A的6+1通道遙控小車I - 綜述篇
以下介紹基於 PY32F002A 和 XL2400 的低成本無線遙控實現. 因為內容較多, 分三篇說明.
實物圖
先放上最終的實物
遙控器
- 遙控器包含兩個十字電位器, 兩個旋鈕電位器, 六個輕觸開關和兩個滑動開關, 顯示部分為12864LCD.
- 兩個十字電位器, 兩個旋鈕電位器組成了六個模擬通道. 模擬通道數量受PY32F002A的PIN腳限制, 全部用上可以做到八個, 因為我想保留SWD口, 所以只做了六個. 普通應用只需要雙搖桿加兩個雙調節, 基本夠用了.
- 第七個通道是一組開關量, 六個輕觸開關和兩個滑動開關共8個bit, 是通過74HC165擴充套件實現的, 當前的設計只用了一片74HC165, 採集8個開關訊號, 通過串聯更多的74HC165可以擴充套件到16個或24個開關訊號.
- 無線模組是可插拔設計, 便於替換XL2400和XN297LBW, 以及測試不同天線的效能
驅動器
- 中間9個通道為高速IO通道, 直接關聯到PY32F002A的PIN腳, 這些PIN都關聯到TIM1或TIM3(看下面的PIN分配表), 可以設定為原生PWM輸出
- 兩側的8PIN排針一共16個通道為擴充套件IO通道, 使用74HC595擴充套件產生, 可以輸出開關量或低速PWM
- 當前的小車的電機控制僅用到擴充套件IO
- 無線模組是可插拔設計
- 驅動端可以控制的通道並不受6+1限制, 驅動器並不侷限於驅動小車, 9路高速IO加16路擴充套件IO可以驅動很多裝置
- 模組的螺絲孔位是針對這種小車底盤設計的, 但是隻能上一邊, 不能全上
設計目標
看完實物, 回到最初的設計思路. 因為是從零開始, 在這一階段設計中為快速驗證, 先確定結構, 避免複雜設計, 只考慮數顯和單向傳輸, 不考慮回傳資料.
無線控制端
- 雙十字搖桿加雙調節, 需要至少共6個模擬通道
- 2+6或4+4開關按鍵, 共8個開關訊號
- LCD屏顯
電機驅動端
- 至少8個高速IO通道, 支援原生PWM訊號輸出
- 16個低速IO通道, 支援開關訊號輸出, 或模擬PWM訊號輸出
硬體部分
主要元件
硬體選型
- MCU: PY32F002A TSSOP20
- 2.4GHz: XL2400 or XN297LBW
- IO Ext: 74HC165, 74HC595
- LCD: ST7567 12864
- Motor Driver: YX-1818
PIN分配
控制板
- 為保持偵錯的便利, 保留SWD口PA13, PA14作為SWD, SWC使用, 在開發中使用JLink RTT輸出紀錄檔. JLink RTT紀錄檔輸出可以參考這篇 使用JLink RTT代替串列埠輸出紀錄檔.
- 將NRST口複用為IO, 遮蔽RST功能, 參考 SOP8,SOP10,SOP16封裝的PY32F002A/PY32F003管腳複用
- 使用ST7567是因為正好手裡有不少1寸的ST7567LCD屏, 而且能和XL2400複用SPI口(其實也就複用了兩個PIN), 可以換成I2C介面的SD1306.
- XL2400使用了硬體方式的SPI通訊, 具體可以看前一篇GPIO模擬和硬體SPI方式驅動無線收發晶片XL2400
- ST7567和XL2400合用一個硬體SPI口, 通訊時使用PB2和PB3進行選擇
- 模擬訊號的輸入使用 PA0, PA1, PA2, PA3, PA4, PA5 這六個ADC通道
- 開關訊號的輸入使用一片74HC165進行轉換, 理論上可以級聯2~3片, 每片能擴充出8個開關訊號
具體的PIN分配如下
|
|
ST7567 |
XL2400 |
搖桿1 |
搖桿2 |
調節1 |
調節2 |
74HC165 |
PA0 |
|
|
|
X |
|
|
|
|
PA1 |
|
|
|
x |
|
|
|
|
PA2 |
|
|
|
|
X |
|
|
|
PA3 |
|
|
|
|
X |
|
|
|
PA4 |
|
|
|
|
|
X |
|
|
PA5 |
|
|
|
|
|
|
X |
|
PA6 |
|
|
|
|
|
|
|
CLK |
PA7 |
|
|
|
|
|
|
|
QH |
PA13 |
SWD |
|
|
|
|
|
|
|
PA14 |
SWC |
|
|
|
|
|
|
|
PB0 |
|
RESET |
|
|
|
|
|
|
PB1 |
|
DC/AO |
|
|
|
|
|
|
PB2 |
|
|
CSN |
|
|
|
|
|
PB3 |
|
CSN/CE |
|
|
|
|
|
|
PF0 |
|
SCK |
SCK |
|
|
|
|
|
PF1 |
|
|
DATA |
|
|
|
|
|
PF2 |
NRST |
MOSI |
DATA |
|
|
|
|
|
PF4/PB6 |
BOOT0 |
|
|
|
|
|
|
SH/LD |
驅動板
- 保留SWD口PA13, PA14作為SWD, SWC
- 將NRST口複用為IO, 遮蔽RST功能
- ST7567和XL2400合用一個硬體SPI口, 通訊時使用PB2和PB3進行選擇
- 一共9個高速IO輸出通道, 都有對應的時鐘, 可以產生PWM訊號. 使用PIN腳: PA0, PA1, PA2, PA3, PA6, PA7, PB0, PB1, PB3
- 使用兩片74HC595作為IO輸出擴充套件, 產生16個低速IO輸出通道
具體的PIN分配如下
|
|
XL2400 |
原生PWM |
74HC595 |
PA0 |
|
|
TIM1_3 |
|
PA1 |
|
|
TIM1_4 |
|
PA2 |
|
|
TIM3_1 |
|
PA3 |
|
|
TIM1_1 |
|
PA4 |
|
|
|
SER/DS |
PA5 |
|
|
|
SRCLK/SHCP |
PA6 |
|
|
TIM3_1 |
|
PA7 |
|
|
TIM3_2 |
|
PA13 |
SWD |
|
|
|
PA14 |
SWC |
|
|
|
PB0 |
|
|
TIM3_3 |
|
PB1 |
|
|
TIM3_4 |
|
PB2 |
|
CSN |
|
|
PB3 |
|
|
TIM1_2 |
|
PF0 |
|
SCK |
|
|
PF1 |
|
DATA |
|
|
PF2 |
NRST |
DATA |
|
|
PF4/PB6 |
BOOT0 |
|
|
RCLK/STCP |
電路原理圖
遙控器
- 遙控器使用了一片PY32F002A TSSOP20和一片74HC165D SOP16,
- 手柄輸入使用的是兩個16x16的搖桿電位器. 搖桿電位器有13x13和16x16兩種尺寸, 如果需要使用13x13可以自行更換.
- 電源部分使用的是一節18650. 除了XL2400耐壓為3.6V以外, PY32F002A和其它元件都可以工作在5V, 因為滿電電壓會超過4V, 為了防止損壞XL2400, 這裡使用一顆二極體做簡單降壓兼反接保護. 經實測驗證 XL2400 可以工作在 3.8V.
- 如果需要嚴格意義上的3.3V輸入, 可以替換成低壓降的XC6206P332MR.
- 微動開關都加了上拉電阻
- 兩側搖桿電位器的開關和對應最外側的開關相通, 按壓等效
- 遙控面板不包含無線模組
驅動控制
- 驅動端使用的是一片 PY32F002A TSSOP20 和兩片 74HC595D SOP16
- PY32F002A 和 74HC595D 供電由一片AMS1117提供, 工作在3.3V. 因此電源輸入不能低於4V, 不能使用單節18650
- 電機供電部分與電源輸入直通. 為避免複雜度, 電路中未內建DC-DC轉換, 如果電機/舵機需要5V或6V的準確電壓, 需要外接DC-DC模組供電
- 電源部分有一個1A的自恢復保險
- 控制板不包含無線模組, 不包含電機驅動
電機驅動
電機驅動使用的是 YX-1818, 支援兩組有刷直流電機, 外圍元件簡單, 也可以採用成品的 MX1616 驅動模組或者L9110, L298等. 驅動玩具DC電機只需要幾百毫安, 選擇哪種都可以.
無線模組
無線部分使用的是 XL2400, 也可以換成XN297LBW, 這兩個晶片的電路是相容的. 具體可以參考GPIO模擬和硬體SPI方式驅動無線收發晶片XL2400, 這裡的電路一樣但是PCB部分做了改進, 佔用尺寸更小. 注意模組的PIN腳和遙控器, 驅動板的排針孔位是對應的, 如果買成品的XN297LBW模組, 需要自行修改PIN腳順序.
PCB
在一塊 10cm x 10cm 的 PCB 上集中了上面提到的所有模組, 可以在嘉立創上一次列印, 但是需要自行分割. PCB上包含的內容
- 遙控面板 * 1
- 驅動控制板 * 1
- 電機驅動 * 2
- 無線模組 * 3
正面
反面
參考