# **有感FOC無刷驅動**設計/學習記錄
## 成品展示:
![IMG20221022104727.jpg]

![IMG20221022104744.jpg]

![IMG20221022111551.jpg]

![IMG20221022105616.jpg]

## 功能需求:
- 能夠實現單路電機foc控制
- 能夠適應多種
位置傳感器
- 能接收上位機指令實現被動控制
- 能獨立進行多模式主動控制
- 有屏幕顯示電機運行的一些狀態參數
## 硬件設計:
主控板和功率板分離設計,便于更換測試,以及可以進行一些拓展使用。主控板和功率板公共信號引腳通過**排針/排母**座連接,兩個板子通過銅柱組裝加固。
**主控板:**
![主控板.png]

MCU使用stm32F103CBT6。和功率板連接接口包含三路互補PWM信號IO,4路adc通道IO(兩相電流,母線電流,電源電壓),GND/5V引腳。外部連接接口包括屏幕spi通信口,
磁編碼器spi接口/IIC接口,ABZ編碼器接口,復位按鍵,功能按鍵,下載調試接口,上位機通信接口。攜帶LDO將驅動板5V供電降壓成3.3V,且5V用以給傳感器供電。
- [x] mcu核心電路:晶振,boot,復位按鍵
- [x] 公共接口排針:三路互補pwmIO,4路adc采樣IO,GND/5V/3.3V
- [x] spi磁編碼器接口
- [x] TFT屏幕接口
- [x] 軟件IIC編碼器接口,增加一個IO,使其可以復用成ABZ編碼器接口
- [x] 功能按鍵
- [x] 下載調試接口:swd下載,uart1調試
- [x] 一路uart上位機通信接口
- [x] 一個led系統指示燈,一個電源指示燈
**功率板:**
![驅動板原理圖.png]
三相逆變器,六路預驅,電源電壓分壓供主板采集,ab相電流采集(加偏置電壓),母線電流采集,DC-DC降壓至5V供給主控板。外部接口除去供電和輸出外,還需要led指示燈和電源開關。
- [x] 三個H半橋
- [x] pwm預驅
- [x] 電源電壓分壓供adc采集
- [X] 母線電流運放,ab相電流運放加偏置電壓
- [x] DC-DC降壓至5V
- [x] ldo降壓5V->3.3V
- [x] 公共接口排母座
- [x] 電源led指示燈,母線電流led指示燈(指示三相逆變器是否有輸出)
- [x] 電源開關
**三相逆變器:**
![三相逆變電路.png]

使用的是集成三路半橋驅動的預驅**FD6288**,采樣電阻放在下半橋,采用低端采樣方案。mos能承受40V電壓,120A電流,但是初代板pcb布局布線沒法承受太大電流,不適合測試大功率電機(因為主驅分離設計,只需要保證接口一致即可,考慮后期重新設計一套pcb)。
**電流采樣運放:**
![電流采樣.png]

使用的是集成4個運放的芯片,減小pcb體積。一路運放用作
電壓跟隨器,生成電流采樣運放所需的偏置電壓Vref。兩路運放采集AB相電流,因為有偏置電壓Vref,所以能夠采集正負電流。最后一路運放采集母線電流。
**編碼器:**
編碼器使用的as5600磁編碼器器芯片,IIC和pwm接口都引出來了,最后程序使用的是IIC通信方式,個人使用感覺不咋的,會有偶爾的角度波動。
**硬件存在的問題:**
- B相電路采樣運放輸出(不論是否驅動電機)比理論值高出一個數值(0.01xN伏),經過電流計算后,相當于比實際電流值高出1A左右,目前還不知道原因(懷疑是pcb設計缺陷吧),暫時依靠程序設計來消除這個偏差。且運放干擾較大,無法滿足電流環設計要求。
- 驅動板上的母線電流指示燈并沒有什么卵用,實際小電流驅動時電壓不夠,根本不會亮(原本設想的是隨著電流大小變化led亮度跟隨變化 (⊙x⊙;)
- 因為主控板會裝在驅動板上面,所以驅動板上設計的電源開關會被遮擋,使得
開關電源很不方便,應該設計成側邊滑動開關的 X﹏X
## 軟件設計:
參考了許多大佬的開源案例以及**simplefoc**的方案,用cubemx配置的外設驅動,最后結合自己做的板子手敲了一套代碼,由于本人較為菜雞的水平,代碼整體看起來有些雜亂,也存在潛在的不合理設計。簡而言之,水平有待提高。
由于硬件電流采樣的缺陷,最后也沒能調試成功電流環,目前只實現了通過控制電壓的速度位置閉環。
## 總結:
初期的foc學習階段告一段落,很感謝網上的諸位大佬的博客教程以及個大技術交流群的大佬們的講解,不然一個人悶頭學還真不好搞。現在一套做下來已經對foc有個初步認識了,后面再去深入學習一些foc理論知識,再重新設計一套軟硬件,更進一步提高foc設計能力。
## 參考資料: