91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的磁場定向控制實(shí)現(xiàn)方案

FPGA設(shè)計(jì)論壇 ? 來源:FPGA設(shè)計(jì)論壇 ? 2026-03-31 15:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

基于 FPGA 的磁場定向控制 (FOC),用于驅(qū)動(dòng)永磁同步電機(jī) (PMSM) 或無刷直流電機(jī) (BLDC)

FOC控制算法對傳感器采樣速率和處理器算力提出了一定的要求,使用 FPGA 實(shí)現(xiàn)的 FOC 可以獲得更好的實(shí)時(shí)性,并且更方便進(jìn)行多路擴(kuò)展和多路反饋協(xié)同。

本庫實(shí)現(xiàn)了基于角度傳感器(也就是磁編碼器)的有感 FOC,即一個(gè)完整的電流環(huán),可以進(jìn)行扭矩控制。借助本庫,你可以進(jìn)一步使用 純FPGA 或 MCU+FPGA 的方式實(shí)現(xiàn)更復(fù)雜的電機(jī)應(yīng)用。

cdce779a-2bf6-11f1-90a1-92fbcf53809c.png

圖1 :系統(tǒng)框圖

本庫代碼有詳細(xì)的注釋,如果你熟悉 Verilog 但不熟悉 FOC ,可以通過閱讀代碼來快速地學(xué)習(xí) FOC (建議先閱讀 FOC 原理 [6~9])。一些用戶在讀代碼時(shí)向本人反饋了一些疑問,我將它們整理在了 FAQ 里。

技術(shù)特點(diǎn)

平臺無關(guān) :純 RTL 編寫,可以在 Altera 和 Xilinx 等各種 FPGA 上運(yùn)行。

支持 3路PWM + 1路EN :PWM=1 時(shí)上橋臂 MOS 導(dǎo)通,PWM=0 時(shí)下橋臂 MOS 導(dǎo)通。 EN=0 時(shí)所有的 6 個(gè) MOS 關(guān)斷。

支持 12bit 分辨率的角度傳感器和相電流采樣ADC。對于>12bit的傳感器,需要進(jìn)行低位截?cái)唷τ?12bit的傳感器,需要進(jìn)行低位填充。

內(nèi)部使用 16bit 有符號整數(shù)進(jìn)行計(jì)算,考慮到傳感器為 12bit,所以 16bit 計(jì)算是夠用的。

示例程序:讓電機(jī)轉(zhuǎn)起來

圖1 是示例程序的系統(tǒng)框圖,它調(diào)用了我實(shí)現(xiàn)的 FOC 電流環(huán)模塊 (foc_top.v) 來實(shí)現(xiàn)一個(gè)簡單的行為——控制電機(jī)的電流(扭矩)按順時(shí)針、逆時(shí)針、順時(shí)針、逆時(shí)針地交替運(yùn)行。同時(shí),使用 UART 打印電流的控制目標(biāo)值和實(shí)際值,以便觀察 FOC 電流環(huán)控制的質(zhì)量。

該示例的所有代碼都在 RTL 目錄內(nèi)。

搭建硬件

運(yùn)行本示例所需要的硬件包括:

FPGA 開發(fā)板 :需有至少 10 個(gè) 3.3V 的 IO ,用來接:

I2C (2*IO) , 用來連接 AS5600 磁編碼器。

SPI (4*IO) , 用來連接 AD7928 ADC。

PWM (3*IO) , 用來輸出 3 相 PWM 到電機(jī)驅(qū)動(dòng)板。

PWM_EN (1*IO) , 用來輸出 1 路 EN (使能) 到電機(jī)驅(qū)動(dòng)板(PWM_EN=低電平代表所有橋臂關(guān)斷)。

UART (1*IO) ,單向(僅發(fā)送)的UART,連接計(jì)算機(jī)的串口,用于監(jiān)測電流環(huán)的跟隨曲線,可不接。

PMSM 或 BLDC 電機(jī)。

電機(jī)驅(qū)動(dòng)板 :要支持3相 PWM 輸入信號(PWM=0時(shí)下橋臂導(dǎo)通,PWM=1時(shí)上橋臂導(dǎo)通),并且要內(nèi)置低側(cè)電阻采樣+放大器對 3 相電流進(jìn)行放大。

獲取轉(zhuǎn)子角度的磁編碼器 :本庫直接支持的型號是 AS5600 ,需要安裝在電機(jī)上。

相電流采樣的ADC :本庫直接支持的型號是 AD7928 ,用于采樣電機(jī)驅(qū)動(dòng)板放大后的 3 相電流

網(wǎng)上似乎找不到現(xiàn)成賣的 AD7928 模塊,所以如果你想DIY,就需要自己畫 PCB。

如果你硬件動(dòng)手能力很強(qiáng),可以自己準(zhǔn)備以上硬件。

不過!建議直接使用我畫的一個(gè)自帶 AD7928 的 電機(jī)驅(qū)動(dòng)板,它的原理圖如圖2,我也提供了制造文件 gerber_pcb_foc_shield.zip ,你需要拿制造文件去打樣PCB,然后按照圖2來焊接。

注意,這個(gè)板子包括了相電流采樣的ADC和電機(jī)驅(qū)動(dòng)板的功能,但不包括 AS5600 磁編碼器,磁編碼器是需要安裝在電機(jī)上的,需要你額外準(zhǔn)備。

ce2b9178-2bf6-11f1-90a1-92fbcf53809c.png

圖2 :電機(jī)驅(qū)動(dòng)板原理圖,其中 AD7928 ADC 用來采樣三相電流

這個(gè)板子在立創(chuàng)EDA開源,見 oshwhub.com/wangxuan/arduino-foc-shield

這個(gè)板子之所以被設(shè)計(jì)成 Arduino 擴(kuò)展板的樣子,是因?yàn)楹芏?FPGA 開發(fā)板也具有 Arduino 擴(kuò)展板接口(比如 DE10-Nano 開發(fā)板),可以直接插上去。如果你的 FPGA 開發(fā)板沒有 Arduino 擴(kuò)展板接口也沒關(guān)系,直接用杜邦線連接即可(建議用短的杜邦線)。

這里使用的電機(jī)驅(qū)動(dòng)器是 MP6540 芯片, 我只試過驅(qū)動(dòng)小功率云臺電機(jī),沒試過大功率電機(jī)。

建立FPGA工程

你需要建立 FPGA 工程,把 RTL 目錄(包括其子目錄)里的所有 .v 源文件加入工程,請以 fpga_top.v 作為頂層文件。

時(shí)鐘配置

fpga_top.v 中有一處調(diào)用了 altpll 原語,用來把開發(fā)板晶振輸入的 50MHz 時(shí)鐘(clk_50m 信號)變成 36.864MHz 的主時(shí)鐘(clk 信號),altpll 原語只適用于 Altera Cyclone IV FPGA,如果你用的是其它系列的 FPGA,需要使用它們各自的 IP 核或原語(例如 Xilinx 的 clock wizard)替換它。

若你的開發(fā)板的晶振不是 50MHz ,你需要修改 PLL 的配置,保證主時(shí)鐘 clk 信號的頻率是 36.864MHz 即可。

實(shí)際上,主時(shí)鐘 clk 的頻率可以取小于 40MHz 的任意值。clk 是 FOC 系統(tǒng)的驅(qū)動(dòng)時(shí)鐘,clk 的頻率會決定 SVPWM 的頻率(SVPWM頻率=clk 頻率/2048),我選 36.864MHz 是因?yàn)榭梢宰?SVPWM 頻率 = 36864/2048 = 18kHz,只是為了湊個(gè)整數(shù)。

clk 的頻率不能超過 40MHz 的原因是 adc_ad7928.v 會通過二分頻來產(chǎn)生 SPI 時(shí)鐘(spi_sck),而 ADC7928 芯片要求 SPI 時(shí)鐘不能超過 20MHz。

引腳約束

fpga_top.v 的 IO 連接方法如下:

clk_50m : 連接在 FPGA 開發(fā)板的晶振上。

i2c_scl , i2c_sda : 連接 AS5600 (磁編碼器) 的 I2C 接口。

spi_ss , spi_sck, spi_mosi, spi_miso : 連接 AD7928 (ADC芯片) 的 SPI 接口。

pwm_a , pwm_b, pwm_c : 連接電機(jī)驅(qū)動(dòng)板的 3 相 PWM 信號。

pwm_en : 連接電機(jī)驅(qū)動(dòng)板的 EN (使能) 信號。

如果電機(jī)驅(qū)動(dòng)板沒有 EN 輸入,則不接。

如果電機(jī)驅(qū)動(dòng)板有 3 路 EN 輸入,每路對應(yīng) 1 相,則應(yīng)該進(jìn)行一對三連接。

uart_tx : 連接 UART 轉(zhuǎn) USB 模塊,插入計(jì)算機(jī)的 USB 口,用于監(jiān)測電流環(huán)的跟隨曲線,可不接。

調(diào)參

要讓電機(jī)正常工作,你需要在 fpga_top.v 中的第103行開始,根據(jù)實(shí)際情況調(diào)整 foc_top 模塊的參數(shù)(Verilog parameter),包括:

參數(shù)名 取值范圍 說明
INIT_CYCLES 1~4294967293 決定了初始化步驟占多少個(gè)時(shí)鐘(clk)周期。該值不能太小,因?yàn)橐糇銐虻臅r(shí)間讓轉(zhuǎn)子回歸電角度=0。在clk頻率為 36.864MHz 的情況下,可以取INIT_CYCLES=16777216,則初始化時(shí)間為16777216/36864000=0.45秒。
ANGLE_INV 0, 1 若角度傳感器沒裝反(A相→B相→C相→A相 的旋轉(zhuǎn)方向與角度傳感器的讀值的增大方向相同),則該參數(shù)應(yīng)取 0。若角度傳感器裝反了(A相→B相→C相→A相 的旋轉(zhuǎn)方向與 角度傳感器的讀值的增大方向相反),則該參數(shù)應(yīng)取 1 。
POLE_PAIR 1~255 電機(jī)極對數(shù),根據(jù)電機(jī)型號決定(注意:電角度ψ = 極對數(shù) * 機(jī)械角度φ)
MAX_AMP 1~511 SVPWM 的最大振幅,該值越小,電機(jī)能達(dá)到的最大力矩越??;但考慮到使用3相下橋臂電阻采樣法來采樣電流,該值也不能太大,以保證3個(gè)下橋臂有足夠的持續(xù)導(dǎo)通時(shí)間來供ADC進(jìn)行采樣。在本例中,使用默認(rèn)值9'd384即可。
SAMPLE_DELAY 0~511 采樣延時(shí),考慮到3相的驅(qū)動(dòng) MOS 管從開始導(dǎo)通到電流穩(wěn)定需要一定的時(shí)間,所以從3個(gè)下橋臂都導(dǎo)通,到 ADC 采樣時(shí)刻之間需要一定的延時(shí)。該參數(shù)決定了該延時(shí)是多少個(gè)時(shí)鐘周期,當(dāng)延時(shí)結(jié)束時(shí),該模塊在sn_adc信號上產(chǎn)生一個(gè)高電平脈沖,指示外部 ADC “可以采樣了”。在本例中,使用默認(rèn)值9'd120即可。

另外,foc_top 模塊具有輸入端口Kp和Ki,它們是 PID 控制器的參數(shù),會影響控制的質(zhì)量。它們可以在運(yùn)行時(shí)調(diào)整,不過你也可以給他們輸入固定的常數(shù)。

// ports of foc_top.v
inputwire    [30:0] Kp,
inputwire    [30:0] Ki,

調(diào)好參后,綜合并燒錄到 FPGA 后,應(yīng)該能看到電機(jī)正反交替運(yùn)行。

用串口監(jiān)視電流環(huán)

把uart_tx信號通過UART 轉(zhuǎn) USB 模塊(例如 CP2102、CH340 模塊) 連接到電腦上,就可以用串口助手、Putty等軟件來監(jiān)測電流環(huán)的跟隨效果。

注: UART 的格式是 115200,8,n,1

以下是串口打印的部分信息。其中第1~4列分別為:d軸電流的實(shí)際值,d軸電流的目標(biāo)值,q軸電流的實(shí)際值,q軸電流的目標(biāo)值??梢钥吹?,即使目標(biāo)值從+200突變到-200,實(shí)際值能跟著目標(biāo)值走,說明電流環(huán)的 PID 控制是有效的。

  -5    0   206   200
  -16    0   202   200
  16    0   192   200
  15    0   201   200
   1    0   197   200
  17    0  -211  -200
  -6    0  -199  -200
  -10    0  -210  -200
  -3    0  -207  -200
   0    0  -202  -200
  -15    0  -211  -200

另外,你可以借用 Arduino IDE 的串口繪圖器來實(shí)時(shí)顯示電流跟隨曲線。前往Arduino官網(wǎng)下載 Arduino IDE,安裝后打開,在“工具→端口”中選擇正確的COM口,然后點(diǎn)擊“工具→串口繪圖器”,串口繪圖器會自動(dòng)接收串口并使用上述4列數(shù)據(jù)畫實(shí)時(shí)曲線圖。

圖3 是我這里繪制出的電流跟隨曲線。藍(lán)色曲線是第1列數(shù)據(jù)(d軸電流的實(shí)際值);紅色曲線是第2列數(shù)據(jù)(d軸電流的目標(biāo)值);綠色曲線是第3列數(shù)據(jù)(q軸電流的實(shí)際值);土黃色曲線是第4列數(shù)據(jù)(q軸電流的目標(biāo)值)??梢钥吹綄?shí)際值能跟著目標(biāo)值走。

ce8255d0-2bf6-11f1-90a1-92fbcf53809c.png

圖3 :電流跟隨曲線

設(shè)計(jì)代碼詳解

下表羅列了該工程使用的所有 Verilog 代碼文件,這些文件都在 RTL 目錄下。結(jié)合圖1就能看出每個(gè)模塊的作用。

文件名 功能 備注
fpga_top.v FPGA工程的頂層模塊
uart_monitor.v UART 發(fā)送器,用于數(shù)據(jù)監(jiān)測 不需要的話可以移除
i2c_register_read.v I2C 讀取器,用于讀取 AS5600 磁編碼器
adc_ad7928.v AD7928 讀取器
foc_top.v FOC+SVPWM (即圖1中的藍(lán)色部分的頂層) 固定功能,一般不需要改動(dòng)
clark_tr.v Clark 變換 固定功能,一般不需要改動(dòng)
park_tr.v Park 變換 固定功能,一般不需要改動(dòng)
sincos.v 正弦/余弦計(jì)算器,被 park_tr.v 調(diào)用 固定功能,一般不需要改動(dòng)
pi_controller.v PI 控制器(PID沒有D) 固定功能,一般不需要改動(dòng)
cartesian2polar.v 直角坐標(biāo)系轉(zhuǎn)極坐標(biāo)系 固定功能,一般不需要改動(dòng)
svpwm.v SVPWM 調(diào)制器 固定功能,一般不需要改動(dòng)
hold_detect.v 監(jiān)測3個(gè)下橋臂都導(dǎo)通時(shí),延遲一段時(shí)間后觸發(fā) sn_adc 信號,指示ADC可以開始采樣 固定功能,一般不需要改動(dòng)

cedaed26-2bf6-11f1-90a1-92fbcf53809c.png

圖1 :系統(tǒng)框圖

圖1展示了這些模塊的層次,我在設(shè)計(jì)模塊層次時(shí)充分考慮了封裝的合理性和代碼重用 :

粉色 部分是FPGA內(nèi)的即傳感器控制器,是硬件相關(guān)邏輯,如果角度傳感器和 ADC 型號變了,這部分代碼需要重寫。

藍(lán)色 部分是FPGA內(nèi)的 FOC 的固定算法,是硬件無關(guān)邏輯,一般不需要修改,是本庫的核心代碼!

黃色 部分是FPGA內(nèi)的用戶自定邏輯,用戶可以修改 user behavior 來實(shí)現(xiàn)各種電機(jī)應(yīng)用?;蛘咝薷?uart_monitor 來監(jiān)測其它變量。

淡橙色 部分是FPGA外部的硬件電路,也就是電機(jī)、電機(jī)驅(qū)動(dòng)板、角度傳感器這些東西。

另外,除了 fpga_top.v 中調(diào)用的 altpll 原語外,該庫的所有代碼都使用純 RTL 編寫,可以輕易地移植到其它廠商(Xilinx、Lattice等)的 FPGA 上。

RTL仿真

因?yàn)槲也]有電機(jī)的 Verilog 模型,沒法對整個(gè) FOC 算法進(jìn)行仿真,所以只對 FOC 中的部分模塊進(jìn)行了仿真。

仿真相關(guān)的文件都在 SIM 文件夾里,其中包括文件:

文件名 功能
tb_clark_park_tr.v 對 clark_tr.v (clark變換) 和 park_tr.v (park變換)的仿真程序
tb_clark_park_tr_run_iverilog.bat 用 iverilog 運(yùn)行 tb_clark_park_tr.v 的命令腳本
tb_svpwm.v 對 cartesian2polar.v 和 svpwm.v 的仿真程序
tb_svpwm_run_iverilog.bat 用 iverilog 運(yùn)行 tb_svpwm.v 的命令腳本

使用 iverilog 仿真前,需要安裝 iverilog ,見:iverilog_usage

clark_tr和park_tr的仿真

我們先來運(yùn)行 clark 變換和 park 變換的仿真。

雙擊 tb_clark_park_tr_run_iverilog.bat 可以直接運(yùn)行仿真,運(yùn)行完后會生成波形文件 dump.vcd 。請用 gtkwave 打開 dump.vcd ,導(dǎo)入圖4中的這些信號,可以看到如圖4的波形(需要你把這些信號改成模擬信號顯示的形式,才能看得到圖4這種效果:第一步,對于 Verilog 代碼中聲明為 signed 的信號(有符號數(shù)),需要右鍵該信號→Data Format→Signed Decimal。第二步,右鍵該信號→Data Format→Analog→Step ,即可把它變成如圖的模擬信號的樣子)。

對該圖4波形的解讀:

theta 是一個(gè)不斷遞增的角度(0→2π→0→2π→...)

ia, ib, ic 是用 theta 生成的正弦波,相位各自相差 (2/3)*π (也就是說 ia, ib, ic)構(gòu)成了三相正弦波。

使用 clark 變換把 ia, ib, ic 變換成 ialpha, ibeta ,得到一對正交的正弦波(相位相差 π/2 )。

使用 park 變換把 ialpha, ibeta 變換到定子坐標(biāo)系,得到定值 id 和 iq (因?yàn)閷?shí)際的計(jì)算誤差,所以得到的是近似的定值,而不是嚴(yán)格的定值)。

cf30780e-2bf6-11f1-90a1-92fbcf53809c.png

圖4 :對 clark_tr 與 park_tr 仿真的波形。

cartesian2polar和svpwm的仿真

現(xiàn)在來運(yùn)行 cartesian2polar (直角坐標(biāo)轉(zhuǎn)極坐標(biāo)系)和 svpwm 的仿真。

雙擊 tb_svpwm_run_iverilog.bat 可以直接運(yùn)行仿真,運(yùn)行完后會生成波形文件 dump.vcd 。請用 gtkwave 打開 dump.vcd ,可以看到如圖5的波形。

注意: pwma_duty、pwmb_duty、pwmc_duty 這三個(gè)信號不在頂層,你要在 svpwm 這個(gè)模塊內(nèi)才能找到這三個(gè)信號。

對圖5波形的解讀:

theta 是一個(gè)不斷遞增的角度(0→2π→0→2π→...)

x 和 y 是用 theta 生成的正交的正弦波(或者說,y是正弦波,x是余弦波)

把 (x,y) 視作直角坐標(biāo)值,然后 cartesian2polar 把它轉(zhuǎn)換成極坐標(biāo)系 (ρ, φ) ,也即 (rho, phi)

把 (rho, phi) 輸給 svpwm ,產(chǎn)生了 pwma_duty、pwmb_duty、pwmc_duty 這三個(gè)馬鞍波。如果你熟悉七段式 SVPWM 的原理,就應(yīng)該知道為什么是馬鞍波,這里不做贅述。

pwma_duty、pwmb_duty、pwmc_duty 分別決定了 pwm_a, pwm_b, pwm_c 的占空比(duty這個(gè)單詞就是占空比的意思)。

cf8a174c-2bf6-11f1-90a1-92fbcf53809c.png

圖5 :對 cartesian2polar 與 svpwm 仿真的波形。

放大波形,可以看到確實(shí)是 duty 值越大,對應(yīng)的 pwm 信號的占空比就越大,如圖6。

cfe05b16-2bf6-11f1-90a1-92fbcf53809c.png

圖6

關(guān)于 FOC 中的數(shù)學(xué)計(jì)算

問: 三電阻采樣后的電流重構(gòu)的那部分代碼如何理解?為什么 ia = ADCb + ADCc - 2*ADCa ?

答: 我們知道電機(jī)的相電流 ia, ib, ic 是雙極性的(即有正有負(fù)的,分別代表流出電機(jī)和流入電機(jī)),但我們常用的ADC往往都是單極性的(即只能采樣正電壓)。那么,相電流采樣-放大電路就必須考慮雙極性到單極性的轉(zhuǎn)換問題,工程上用的方法往往都是反向放大加偏置(包括MP6540內(nèi)置采樣-放大電路也是這種方案),它輸出給ADC的電壓遵循公式: ADCa = -R × ia + Voff ADCb = -R × ib + Voff ADCc = -R × ic + Voff 其中 R 是放大系數(shù)(R>0,也叫跨阻放大系數(shù),因?yàn)?R 的量綱和電阻一樣),因?yàn)榉聪蚍糯笏约恿素?fù)號。Voff 是偏置電壓,以此保證 ADCa, ADCb, ADCc 是單極性的。另外又有基爾霍夫電流定律(KCL): ia + ib + ic = 0 聯(lián)立以上公式,推出: 3 * Voff = ADCa + ADCb + ADCc 令 R = 1/(3*k) ,于是: ia = (Voff - ADCa) / R = k × (3 * Voff - 3 × ADCa) = k × (ADCa + ADCb + ADCc - 3 × ADCa) = k × (ADCb + ADCc - 2×ADCa) 于是就有了你問的 ia = ADCb + ADCc - 2×ADCa 。 你肯定會疑惑,系數(shù) k 哪兒去了?這個(gè)并不在乎,因?yàn)檎麄€(gè)FOC都是線性系統(tǒng),通過調(diào)整PID參數(shù),能跑就行,系數(shù)只在理論分析時(shí)有用。

問 : 你的程序里是不是都沒有在乎系數(shù)K,包括clark變換中得到的Iα和Iβ和ia、ib、ic也并沒有滿足嚴(yán)格的公式關(guān)系,程序中得到的Iα和Iβ是理論值的2倍。這是不是也可以用調(diào)整PID參數(shù)的思想來解釋?

答: 是的,我很多地方的代碼也與理論公式的系數(shù)不同,比如 clark 變換公式本來是: Iα = Ia - Ib/2 - Ic/2 Iβ = √3/2 * (Ib - Ic) 我多乘了個(gè)2: Iα = 2 * Ia - Ib - Ic Iβ = √3 * (Ib - Ic) 這是出于避免整數(shù)計(jì)算的截?cái)鄬?dǎo)致的數(shù)據(jù)位丟失,比如 Ib/2 就會讓 Ib 的最低 bit 丟失。不過實(shí)際上這種小誤差基本不會影響控制質(zhì)量。這種系數(shù)問題可以通過 PID 調(diào)參來消除。

問: 你的代碼中的 cartesian2polar.v 是把電壓矢量從轉(zhuǎn)子直角坐標(biāo)系 (Vd, Vq) 變換到轉(zhuǎn)子極坐標(biāo)系 (Vrρ, Vrθ),目的是什么?

答: 書上一般會說 SVPWM 模塊輸入的是定子直角坐標(biāo)系下的電壓,但我實(shí)現(xiàn)的 SVPWM 輸入的是定子極坐標(biāo)系下的電壓,兩種方法在數(shù)學(xué)上是等價(jià)的。而且 SVPWM 在 FPGA 里用查找表(ROM)實(shí)現(xiàn),因此兩種方法對電路復(fù)雜度影響不大。另外,輸入極坐標(biāo)系的 SVPWM 還帶來 2 個(gè)好處和 1 個(gè)代價(jià),好處 1 是更方便在開發(fā)過程中讓電機(jī)開環(huán)地轉(zhuǎn)起來(只需要讓角度遞增即可)。好處 2 是極坐標(biāo)系下的 park 變換更簡單,只需要用電壓在轉(zhuǎn)子坐標(biāo)系中的角度減去電角度就能得到電壓在定子坐標(biāo)系中的角度。 代價(jià)是需要在 PID 的后面、park 變換的前面實(shí)現(xiàn)一個(gè)直角坐標(biāo)系轉(zhuǎn)極坐標(biāo)系的運(yùn)算,即 cartesian2polar.v

關(guān)于 ADC 采樣時(shí)機(jī)

問: AD7928只有一個(gè)T/H(采樣保持器),也就意味著這個(gè)AD一次只能保持一個(gè)通道的數(shù)據(jù),也就是說當(dāng)通道1 打開的時(shí)候采集A相的電流,然后采集完再打開通道2采集B相的電流,那么這并不是一個(gè)同步采集的過程,如何實(shí)現(xiàn)AD采樣三相電流的同步輸出?

答: 在電流采樣問題上,我們與大多數(shù) FOC 方案相同,因?yàn)?MP6540 里的采樣電阻在下橋臂,所以規(guī)定 SVPWM 在每個(gè)控制周期(約 55us,對應(yīng)頻率18kHz)內(nèi)至少有一段時(shí)間里 3 相都是下通上閉,稱為采樣窗口。FOC的基礎(chǔ)振幅(也就是 foc_top.v 里的 MAX_AMP 參數(shù))越大,采樣窗口越短。當(dāng) MAX_AMP=9'd511 (最大值) 時(shí),采樣窗口長度就是 0 了。而默認(rèn)的 MAX_AMP=9'd384 大概會讓采樣窗口長度為十幾u(yù)s。 AD7928 只有一個(gè)T/H,所以采樣窗口內(nèi)要做 3 次采樣,這個(gè)過程是 hold_detect.v 和 adc_ad7928.v 共同控制的,hold_detect.v負(fù)責(zé)在采樣窗口開始時(shí)延遲一段時(shí)間(來讓電流趨于穩(wěn)定)后發(fā)出 sn_adc 信號脈沖,來告訴 adc_ad7928.v 可以開始工作了(可以通過 foc_top.v 里的 SAMPLE_DELAY 來調(diào)整該延遲)。然后 adc_ad7928.v 內(nèi)部就會自動(dòng)串行地完成 3 個(gè)通道的采樣,最后再同步提交3個(gè)采樣結(jié)果(提交的同時(shí)產(chǎn)生 o_en_adc 信號脈沖)。注意adc_ad7928.v是一個(gè)通用的 AD7928 控制器,每收到一個(gè) i_sn_adc 信號脈沖,就進(jìn)行一系列串行采樣。其中采樣多少次,每次采樣哪一個(gè)通道,都可以通過 adc_ad7928.v 里的 parameter 來配置。所有通道采樣結(jié)束后,產(chǎn)生o_en_adc信號脈沖,同時(shí)同步提交所有通道的結(jié)果。 我把 foc_top.v 用來連接 ADC控制器的接口(也就是sn_adc, en_adc, adc_a, adc_b, adc_c 這幾個(gè)信號)設(shè)計(jì)成同步讀入3通道數(shù)據(jù),是出于通用性、簡約性和可移植性的原則考慮,因?yàn)檫@樣的同步讀入接口是 ADC 的一種高度抽象,最容易讓人理解其時(shí)序(即,sn_adc脈沖命令A(yù)DC控制器開始工作。en_adc指示ADC讀取器結(jié)束工作,同時(shí) adc_a, adc_b, adc_c 上產(chǎn)生結(jié)果)。如果用戶用了其它 ADC 型號,只需按照這個(gè)時(shí)序的抽象來具象地編寫 ADC 控制器即可,而 foc_top.v 并不關(guān)心擬用的是1個(gè)串行的ADC還是3個(gè)并行的ADC,反正你都要給我同步提交。當(dāng)然,用戶必須自己算好 hold_detect.v 的延時(shí) + ADC 采樣三個(gè)通道(也即 sn_adc 脈沖和 en_adc 脈沖的時(shí)間差) 是小于采樣窗口的長度的。

問: 進(jìn)行串行采樣的時(shí)候不會出現(xiàn)這樣的問題:第一個(gè)時(shí)鐘周期采到的是A相的電流,第2個(gè)時(shí)鐘周期采的是B相,第3個(gè)時(shí)鐘周期采到的是C相,而我們知道相電流是正弦變化的,這三個(gè)時(shí)鐘周期采的A B C 三相電流并不是同一時(shí)刻的相電流,因此這將產(chǎn)生誤差,而時(shí)鐘周期是很短的,是不是產(chǎn)生的誤差幾乎可以忽略不計(jì)呢?

答: 首先指正一個(gè)不準(zhǔn)確的地方, AD7928 的接口是 SPI (一種串行接口),其采樣是多個(gè)時(shí)鐘周期(而不是一個(gè)時(shí)鐘周期)內(nèi)完成的。因此三相的采樣間隔是幾十個(gè)時(shí)鐘周期(具體數(shù)字我忘了,你可以仿真確定一下)。 雖然不同步,但3相的采樣畢竟都是在同一個(gè)控制周期的采樣窗口(幾微秒)內(nèi)。而相電流的變化通常以控制周期(即幾十微秒)為尺度變化,例如 3000r/min(50r/s)的轉(zhuǎn)子,若極對數(shù)=7,其相電流是350Hz(周期28ms)的正弦波,其變化在幾微秒內(nèi)是可以忽略的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1662

    文章

    22464

    瀏覽量

    638015
  • 永磁同步電機(jī)
    +關(guān)注

    關(guān)注

    30

    文章

    890

    瀏覽量

    52629
  • FOC
    FOC
    +關(guān)注

    關(guān)注

    21

    文章

    397

    瀏覽量

    46336

原文標(biāo)題:基于 FPGA 的磁場定向控制 (FOC)

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    采用8位微控制實(shí)現(xiàn)無傳感器磁場定向控制

    由于具有更高的效率、更好的動(dòng)態(tài)響應(yīng)以及更小的扭矩波動(dòng),磁場定向控制(FOC)正越來越多地被應(yīng)用于消費(fèi)和工業(yè)電機(jī)中。##實(shí)際值的獲取##磁場定向
    發(fā)表于 05-13 10:46 ?2588次閱讀

    基于836M直流無刷電機(jī)無傳感器磁場定向控制方案201210MC_BLDCA

    英飛凌的8位微控制器XC836M可以實(shí)現(xiàn)磁場定向控制,具有較高性價(jià)比。 近期將推出相關(guān)應(yīng)用手冊方案
    發(fā)表于 12-04 09:57

    磁場定向矢量控制(FOC)的技術(shù)核心

    相信在搞電機(jī)控制的小伙伴應(yīng)該知道目前對永磁同步電機(jī)(PMSM)的控制技術(shù)主要有磁場定向矢量控制(FOC)和直接轉(zhuǎn)矩
    發(fā)表于 08-27 07:38

    PMSM的磁場定向控制

    前言磁場定向控制又稱矢量控制(FOC), 本質(zhì)上為控制定子電流的幅度和相位,使之產(chǎn)生的磁場和轉(zhuǎn)子
    發(fā)表于 09-06 07:45

    磁場定向控制

    前言 磁場定向控制又稱矢量控制(FOC), 本質(zhì)上為控制定子電流的幅度和相位,使之產(chǎn)生的磁場和轉(zhuǎn)
    發(fā)表于 09-15 07:24

    PMSM電機(jī)的無傳感器磁場定向控制源碼

    PMSM電機(jī)的無傳感器磁場定向控制源碼
    發(fā)表于 10-08 17:15 ?87次下載
    PMSM電機(jī)的無傳感器<b class='flag-5'>磁場</b><b class='flag-5'>定向</b><b class='flag-5'>控制</b>源碼

    磁場定向控制中SVPWM過調(diào)制策略的改進(jìn)與實(shí)現(xiàn)

    磁場定向控制中SVPWM過調(diào)制策略的改進(jìn)與實(shí)現(xiàn)
    發(fā)表于 04-13 15:42 ?20次下載

    3相電機(jī)定向磁場控制TI例程報(bào)告pdf

    3相電機(jī)定向磁場控制TI例程
    發(fā)表于 02-26 16:41 ?4次下載

    異步電機(jī)間接定子磁場定向控制

    提出一種基于定子電流誤差的間接定子磁場定向矯正控制方法。分析了定子dq軸電流以及定子磁鏈的關(guān)系,推算出q軸電流對定子磁場的去磁分量,在負(fù)載變化時(shí)加大d軸電流補(bǔ)償該分量,
    發(fā)表于 03-19 14:25 ?1次下載
    異步電機(jī)間接定子<b class='flag-5'>磁場</b><b class='flag-5'>定向</b><b class='flag-5'>控制</b>

    如何實(shí)現(xiàn)永磁電機(jī)的磁場定向控制

    關(guān)于電機(jī)及電機(jī)控制的簡介,我們調(diào)查磁場定向控制的過程,在一個(gè)易于理解的方式使用的動(dòng)畫和模擬。然后,我們引入觀察員和它們?nèi)绾文鼙粦?yīng)用在一個(gè)磁場
    的頭像 發(fā)表于 06-13 01:51 ?5978次閱讀
    如何<b class='flag-5'>實(shí)現(xiàn)</b>永磁電機(jī)的<b class='flag-5'>磁場</b><b class='flag-5'>定向</b><b class='flag-5'>控制</b>

    基于DSP的永磁同步電機(jī)磁場定向控制

    介紹了一種釆用DSP芯片TMS320F2407A實(shí)現(xiàn)永磁同步電機(jī)磁場定向控制器的控制原理,給出了采用磁場
    發(fā)表于 05-12 10:15 ?14次下載
    基于DSP的永磁同步電機(jī)<b class='flag-5'>磁場</b><b class='flag-5'>定向</b><b class='flag-5'>控制</b>器

    無刷電機(jī)的定向磁場控制與調(diào)試方法合集

    無刷電機(jī)的定向磁場控制與調(diào)試方法合集
    發(fā)表于 12-06 14:13 ?3次下載

    磁場定向與磁鏈觀測器的設(shè)計(jì)

    前言:從前面的文章得知,磁場定向實(shí)現(xiàn)矢量控制的關(guān)鍵操作,而如何實(shí)現(xiàn)精準(zhǔn)的磁場
    發(fā)表于 03-27 11:23 ?0次下載
    <b class='flag-5'>磁場</b><b class='flag-5'>定向</b>與磁鏈觀測器的設(shè)計(jì)

    磁場定向控制(FOC)原理分析

    磁場定向控制(Field-Oriented Control,F(xiàn)OC)系統(tǒng)的基本思想是:通過坐標(biāo)變換,在按轉(zhuǎn)子磁場定向同步旋轉(zhuǎn)坐標(biāo)系中,得到等
    的頭像 發(fā)表于 04-20 16:00 ?2.6w次閱讀
    <b class='flag-5'>磁場</b><b class='flag-5'>定向</b><b class='flag-5'>控制</b>(FOC)原理分析

    使用TMS320C25 DSP實(shí)現(xiàn)交流電機(jī)的磁場定向控制

    電子發(fā)燒友網(wǎng)站提供《使用TMS320C25 DSP實(shí)現(xiàn)交流電機(jī)的磁場定向控制.pdf》資料免費(fèi)下載
    發(fā)表于 10-28 10:16 ?1次下載
    使用TMS320C25 DSP<b class='flag-5'>實(shí)現(xiàn)</b>交流電機(jī)的<b class='flag-5'>磁場</b><b class='flag-5'>定向</b><b class='flag-5'>控制</b>