芯片和功能模塊選型
主控芯片
- STM32F103C8T6:基于 ARM Cortex - M3 內核,有豐富的 GPIO 接口用于連接各類外設,具備 ADC 模塊可用于電流檢測,還有 CAN 控制器方便實現 CAN 總線通信。它資源豐富、成本低,適合學生進行 DIY 項目開發。
按鍵模塊
- 輕觸按鍵:用于控制車窗的自動 / 點動升降,成本低、操作方便,可通過檢測按鍵按下的時長來區分長按和短按操作。
電流檢測模塊
- 電位器:用于模擬電機電流檢測,通過調節電位器阻值改變電壓值,模擬電機在不同負載下的電流變化,主控芯片的 ADC 通道采集電位器輸出的電壓值來實現防夾功能。
CAN 收發模塊
- TJA1050:常用的 CAN 收發器,可將 STM32 的 CAN 控制器輸出的信號轉換為適合在 CAN 總線上傳輸的差分信號,實現與其他節點的通信,用于兒童鎖和背景燈控制信息的傳輸。
光線檢測模塊
- 光敏電阻:其阻值會隨光線強度變化而改變,將其與固定電阻組成分壓電路,主控芯片的 ADC 通道采集分壓后的電壓值,以此判斷光線亮暗。
電機驅動模塊
- L298N:可驅動兩個直流電機,能實現電機的正反轉和調速,適合控制車窗升降的小馬達。
背景燈
- LED 燈:能耗低、壽命長、亮度高,可作為背景燈使用。
電路板接線
STM32 引腳 | 連接模塊 | 功能說明 |
---|---|---|
PA0 - PA3 | 輕觸按鍵 | 分別對應兩個車門的上升和下降按鍵 |
PA4 | 電位器 | 電流檢測模擬輸入 |
PA5 | 光敏電阻分壓電路 | 光線檢測模擬輸入 |
PB8、PB9 | TJA1050 | CAN_TX、CAN_RX,用于 CAN 總線通信 |
PB0 - PB3 | L298N | 控制兩個電機的正反轉 |
PB4 | LED 燈 | 背景燈控制 |
程序編寫
以下是基于 STM32CubeMX 和 HAL 庫的示例代碼,可實現基本的功能。
#include "main.h"
#include "stm32f1xx_hal.h"// 定義按鍵引腳
#define UP_BUTTON_PIN GPIO_PIN_0
#define DOWN_BUTTON_PIN GPIO_PIN_1
// 其他引腳定義...// 全局變量
uint32_t key_p