תכנון שלב ההספק מאחורי FOC
מדריך מעשי · אלקטרוניקה · זמן קריאה 23 דקות
FOC נראה במבט ראשון כמו אלגוריתם: טרנספורם Clarke, טרנספורם Park, בקרי PI, ואז PWM. אבל ברובוט אמיתי המתמטיקה לא נוגעת במנוע ישירות. היא מבקשת מ-inverter להפוך פקודות מתח לזרם פאזה אמיתי, בזמן שהאינוורטר מתמודד עם שערי MOSFET, השראות טפילית, dead-time, רעש מדידה, חימום, fault-ים ו-layout.
אם שלב ההספק אינו בנוי נכון, הבעיה לא תיראה כמו "טעות באלקטרוניקה". היא תיראה כמו בקר זרם עצבני, רעידות, offset במדידה, דרייבר שנכנס ל-fault בזמן האצה, או מנוע שעובד יפה בעומס נמוך ונשבר כשהמערכת מתחממת.
המטרה של המאמר הזה היא לחבר את שכבת הבקרה לשכבת החומרה: מה באמת קורה בין פקודת PWM לבין הזרם שה-ADC מחזיר ל-FOC.
1. מה שלב ההספק חייב להבטיח
שלב הספק טוב אינו רק שישה MOSFETs. הוא מערכת שלמה:
בכל מחזור PWM המערכת צריכה:
- למתג את מתח ה-DC לשלושה מופעי מתח בלי shoot-through.
- לטעון ולפרוק את שערי ה-MOSFET מספיק מהר, אבל לא מהר עד כדי ringing ו-EMI.
- למדוד לפחות שני זרמי פאזה בחלון זמן שקט וחוזר.
- להפריד בין זרמי power-loop, gate-loop ו-measurement-loop.
- לכבות את ה-PWM בחומרה כאשר זרם, מתח, טמפרטורה או מצב דרייבר נעשים מסוכנים.
אם אחת מההבטחות האלה חלשה, בקר הזרם יבלה את חייו במלחמה בשגיאות חומרה.
2. האלקטרוניקה בפועל: רגל אחת של אינוורטר
הסכמה הבאה היא עוגן החומרה של המאמר. זו רגל Phase U אמיתית: MOSFET עליון, MOSFET תחתון, רכיבי gate, נגד shunt בצד הנמוך ומגבר מדידת זרם שמתרגם PWM לזרם שניתן למדוד.

הקטע הזה שימושי יותר מסמל half-bridge כללי, כי הוא מראה את הפרטים שמחליטים אם FOC יתנהג טוב:
פרט בסכמה
Q3 ו-Q6
תפקיד: MOSFET עליון ותחתון של Phase U
המשמעות בתכנון: פקודת המתח של FOC הופכת לצומת מיתוג רועש
פרט בסכמה
R39 ו-R42, 22Ω
תפקיד: נגדי gate בטור
המשמעות בתכנון: קובעים חלקית את מהירות המיתוג, ringing והפסדי מיתוג
פרט בסכמה
D7 ו-D10
תפקיד: מסלולי diode סביב נגדי gate
המשמעות בתכנון: מאפשרים לעצב turn-on ו-turn-off בצורה לא סימטרית
פרט בסכמה
SP1 / Phase U
תפקיד: יציאת הפאזה למנוע
המשמעות בתכנון: זהו switch node רועש שאסור להעביר ליד מסלולי sense
פרט בסכמה
R52, 0.001Ω, 3W
תפקיד: shunt בצד הנמוך
המשמעות בתכנון: ב-40A מתקבלים רק 40mV, לכן layout ו-offset קריטיים
פרט בסכמה
U7, MAX40056FAUA+
תפקיד: מגבר מדידת זרם
המשמעות בתכנון: ה-ADC רואה מתח מוגבר, לא זרם ישירות
פרט בסכמה
C34, C40, C37
תפקיד: decoupling ופילטר יציאה
המשמעות בתכנון: היציבות האנלוגית תלויה בקבלים המקומיים, לא רק בפילטר תוכנה
פרט בסכמה
R55, R56, C44
תפקיד: 0Ω / אופציה לרשת כניסה
המשמעות בתכנון: מאפשרים bring-up, probing ותיקוני filtering
חשוב לשים לב למה שלא מופיע ב-crop: דרייבר ה-half-bridge, אספקת ה-high-side, קבלי ה-DC link ולוגיקת ההגנה. אלה עדיין קובעים את גבולות העבודה של הרגל הזו. לכן צריך לקרוא את הסכמה כשרשרת:
PWM -> gate driver -> GHA/GLA -> MOSFET gates -> Phase U -> R52 shunt -> U7 -> current1 ADC
R52 גם חושף את בעיית התזמון. זו מדידת low-side leg shunt, ולכן דגימת ה-ADC תקפה רק כאשר מצב ה-PWM באמת מנתב את זרם הפאזה דרך ה-shunt. מסיבה זו current reconstruction ו-PWM sampling הם קודם בעיות חומרה ורק אחר כך בעיות תוכנה.
עבור דרייבר high-side מבוסס bootstrap, הקבל לא נבחר לפי הרגל או כלל אצבע עיוור. הוא צריך לספק את המטען שנלקח מאספקת ה-high-side הצפה בזמן ה-on הארוך ביותר הרלוונטי, ועדיין להשאיר את הדרייבר מעל סף ה-UVLO עם מרווח. תקציב ראשון שימושי הוא:
C_boot >= Q_total / DeltaV_boot
Q_total ~= Q_g(V_drive) + Q_driver_sw + (I_HB + I_leak_total) * t_on_max + margin
Q_g(V_drive) צריך להגיע מעקומת ה-MOSFET במתח ה-gate-drive האמיתי, לא ממספר כותרת מקרי. Q_driver_sw הוא צריכת ה-high-side של הדרייבר בזמן מיתוג אם ה-datasheet מספק אותה. את I_HB, זרמי leakage ודליפת diode/capacitor צריך לבדוק בטמפרטורה, ו-DeltaV_boot חייב להשאיר מרווח מעל UVLO אחרי מתח gate-drive, נפילת diode ו-ripple.
לדוגמה, אם מטען השער במתח הדרייבר הנבחר הוא 60 nC, הדרייבר צורך עוד 10 nC, leakage וצריכת high-side מוסיפים 5 nC בזמן ה-on הגרוע ביותר, ומרשים רק 0.2 V נפילת bootstrap:
C_boot >= (60 nC + 10 nC + 5 nC) / 0.2 V = 375 nF
זה מוביל לערך אמיתי כמו 470 nF או 1 uF, אחרי בדיקת DC bias, טמפרטורה, package, התאוששות diode ומגבלות הדרייבר. קבל bootstrap נומינלי של 100 nF יכול לעבוד על השולחן בעומס קל ועדיין להיכשל כאשר duty cycle וטמפרטורה משתנים.
3. בחירת MOSFET מתחילה אחרי המספרים הגדולים
הטעות הנפוצה היא לבחור MOSFET לפי מתח, זרם ו-V_gs(th). אבל V_gs(th) אומר מתי הטרנזיסטור בקושי מתחיל להוליך, לא מתי הוא טוב לאינוורטר. בתכנון מנוע צריך לבדוק:
R_ds_onבמתח השער האמיתי.- gate charge במתח הדרייבר המתוכנן.
- אנרגיית מיתוג בזרם ובמתח העבודה.
- מרווח ל-ringing על switch node.
- יכולת פיזור חום דרך package, copper ו-heatsink.
הערכת הפסד הולכה בסיסית:
P_cond ~= I_rms^2 * R_ds_on(T) * D
כאן I_rms הוא זרם RMS דרך אותו MOSFET ספציפי במצב העבודה הנבדק. זה לא זרם nameplate של המנוע, ולא "זרם פאזה" כללי אלא אם זה באמת זרם ה-RMS דרך הרכיב בזמן ההולכה שלו. D הוא חלק הזמן שבו אותו MOSFET מוליך. R_ds_on(T) אינו מספר ה-25°C מה-datasheet אלא ערך חם:
R_ds_on(T) ~= R_ds_on_25C * k_T
במקרים רבים k_T בטמפרטורת סיליקון גבוהה נמצא סביב 1.4 עד 1.8. לכן שלב הספק שנראה יעיל על השולחן יכול לאבד מרווח אחרי כמה דקות בתוך מארז.
כלל תכנון:
Do not size the MOSFET from V_gs(th).
Size it from R_ds_on, gate charge, switching energy, and thermal path.
4. דרייבר השער הוא חלק משלב ההספק
שער MOSFET אינו input לוגי. הוא קיבול לא ליניארי שצריך להזיז בו מטען. הדרייבר צריך לספק ולשאוב מטען דרך נגד gate, השראות package, השראות source ואזור Miller.
הזרם הממוצע ל-gate נראה קטן:
I_gate_avg = Q_g * f_sw
אבל הדרייבר מתוכנן לפי זרמי peak:
I_gate_peak ~= V_drive / R_gate_total
אם יש דרייבר 12V ונגד gate כולל של 22Ω, הזרם הראשוני האידיאלי הוא בערך:
I_gate_peak ~= 12 / 22 = 0.55 A
זה מסביר למה בחירה כמו R39 ו-R42 בסכמה אינה "סתם נגד". היא קובעת edge rate, ringing, הפסדי מיתוג ורגישות ל-false turn-on.
כאשר מוסיפים diode סביב נגד gate, אפשר ליצור התנגדות שונה ל-turn-on ול-turn-off. זה שימושי כאשר רוצים כיבוי מהיר יותר מהדלקה, או להפך, כדי להקטין shoot-through ו-EMI.
5. Dead-time פותר כשל אחד ויוצר שגיאה אחרת
ב-half bridge אסור ל-MOSFET העליון והתחתון להוליך יחד. לכן מוסיפים dead-time בין כיבוי אחד להדלקת השני.
אם ה-dead-time קצר מדי, יש סיכון shoot-through. אם הוא ארוך מדי, הזרם זורם דרך body diode או דרך מסלול לא אידיאלי, והפאזה מקבלת מתח שונה ממה שה-FOC ביקש.
שגיאת מתח ממוצעת מסדר ראשון:
V_error_avg ~= sign(i_phase) * V_drop * t_dead / T_pwm
הסימן תלוי בהגדרת כיוון זרם הפאזה ובאיזה רכיב היה אמור להוליך. כיוון הזרם מחליט אם dead-time מעלה או מוריד את מתח הפאזה האפקטיבי, לכן משתמשים במשוואה הזו כבדיקת גודל וסימן ואז מאמתים אותה על הגשר האמיתי.
לדוגמה, במחזור PWM של 40kHz (T_pwm = 25 us), עם t_dead = 500 ns ונפילת diode/synchronous של בערך 0.8 V:
V_error_avg ~= 0.8 V * 0.5 us / 25 us = 16 mV
זה נשמע קטן, אבל בלולאת זרם מהירה זה יכול להפוך ל-offset, רעש במהירות נמוכה או torque ripple.
6. הפסדי מיתוג הם חפיפה בין מתח לזרם
הפסד מיתוג נוצר בזמן שה-MOSFET אינו כבוי לחלוטין ואינו פתוח לחלוטין. באותו זמן יש עליו גם V_ds וגם I_d.
קירוב בסיסי:
P_sw ~= 0.5 * V_bus * I_phase * (t_rise + t_fall) * f_sw
אם V_bus = 48V, I_phase = 30A, t_rise + t_fall = 100ns ו-f_sw = 20kHz:
P_sw ~= 0.5 * 48 * 30 * 100e-9 * 20000 = 1.44 W
זה נתיב מיתוג אחד בנקודת עבודה אחת. צריך לחזור על ההערכה לכל רכיב מיתוג ולכל נקודת עבודה: מתח bus, זרם פאזה, טמפרטורה, קצב קצה ו-modulation משנים את התוצאה. רק אחר כך מוסיפים הפסדי הולכה, diode, gate-drive, shunt ונחושת.
7. מדידת זרם: ה-ADC רואה רק את מה שה-layout מאפשר
FOC צריך זרם פאזה אמיתי. אבל ה-ADC רואה מתח קטן, מוגבר ומסונן, שמגיע אחרי מיתוג רעשני.
משוואת shunt בסיסית:
V_shunt = I_phase * R_shunt
והפסד ההספק ב-shunt:
P_shunt = I_rms^2 * R_shunt
בסכמה שלנו, R52 = 1mΩ. לכן ב-30A:
V_shunt = 30 * 0.001 = 30 mV
P_shunt = 30^2 * 0.001 = 0.9 W
זהו גם חיישן וגם גוף חימום. בגלל שהמתח כל כך קטן, כל millivolt של offset או רעש כבר משמעותי.
ה-ADC רואה את המתח אחרי הגברה:
ADC_counts ~= ((V_offset + V_shunt * G) / V_ref) * (2^N - 1)
אם ההגבר הוא 20, אז 30mV הופכים ל-600mV מעל קו ה-offset. ב-ADC של 12-bit ו-3.3V, התרומה הדינמית היא:
Delta_counts ~= 0.6 / 3.3 * 4095 = 745 counts
זה שימושי, אבל רק אם המסלול האנלוגי נקי והדגימה מתרחשת בזמן הנכון.
8. חלון הדגימה הוא חלק מתכנון ה-PWM
לפני שהקושחה מדברת על i_alpha ו-i_beta, ה-PCB צריך להפוך כמה מיליוולטים על shunt למתח שה-ADC יכול לסמוך עליו. באיור 2 המסלול ברור: R52 יוצר את מתח ה-shunt, U7 מגביר אותו, R64 ו-C37 מתנים את האות current1, והבקר דוגם את המתח הזה כזרם.
משוואת front-end:
V_adc = (I_phase * R_shunt) * G + V_offset
צריך לבחור R_shunt והגבר כך שבזרם נורמלי יש מספיק רזולוציה, אבל המגבר לא נכנס לרוויה לפני שהגנת החומרה נכנסת לפעולה.
דוגמה:
R_shunt = 1 mOhm
G = 20
I_peak = 40 A
V_adc_peak = 40 A * 0.001 ohm * 20 = 0.8 V
counts_peak ~= 0.8 / 3.3 * 4095 = 993 counts
זה משאיר headroom ל-offset ולמרווח fault. אם אותה מערכת צריכה לזהות 80A באופן הרסני, אסור לחכות ל-ADC; צריך comparator אנלוגי מהיר או כניסת over-current בדרייבר.
Checklist למסלול כמו באיור 2:
- למדוד את ה-shunt ב-Kelvin, לא דרך נחושת ההספק.
- לשים פילטר דיפרנציאלי קרוב לכניסת המגבר, אם משתמשים בו.
- לבדוק שמתח ה-common-mode של המגבר מתאים לטופולוגיית המדידה.
- ליישר את טריגר ה-ADC לחלק השקט של מחזור ה-PWM.
- להשתמש במסלול fault מהיר בחומרה לתקלות הרסניות.
חלון הדגימה בקירוב:
t_window ~= T_pwm / 2 - t_dead - t_settle - t_adc
הקירוב הזה מניח שקיים אזור שקט ושימושי ב-center-aligned PWM. בפועל חלון המדידה משתנה עם duty cycle, סקטור SVPWM, מצב ההולכה של low-side shunts, blanking time, התאוששות המגבר ו-ringing של switch node.
אם החלון קטן מדי, המדידה הופכת להיות רעש ולא מצב מערכת.
9. Layout: הסכמה אינה המעגל
בסכמות קל לצייר חוטים מושלמים. ב-PCB כל חיבור הוא התנגדות, השראות וקיבול. באינוורטר, ה-hot loop בין קבל ה-DC link לבין ה-half bridge הוא אחד המקומות החשובים ביותר.
קפיצת המתח מהשראות loop היא:
V_spike = L_loop * di/dt
גם עם 10 nH בלבד ו-50 A/us מתקבל:
V_spike = 10 nH * 50 A/us = 0.5 V
ב-100 A/us זה כבר 1 V. אבל הבעיה אינה רק spike יפה על האוסצילוסקופ. source bounce משנה את V_GS האפקטיבי, עלול להפעיל comparator או gate-driver fault בטעות, להשחית את המדידה הדיפרנציאלית של ה-shunt, ולהזריק שגיאת ground או reference לתוך ה-ADC. גשר יכול להיראות נכון בסכמה ועדיין להיכשל כי נקודות הייחוס של המדידה וה-gate-drive זזות בכל קצה מיתוג.
עקרונות layout לשלב הספק:
- למקם MLCC קרוב מאוד ל-half bridge.
- להקטין את שטח ה-hot loop.
- להפריד בין PGND רועש לבין AGND רגיש.
- לא להעביר sense traces ליד switch node.
- להשתמש ב-Kelvin source או Kelvin shunt כאשר המדידה קריטית.
- להשאיר מקום ל-probing אמיתי: שער, source, switch node, shunt output ו-fault.
באיור 2 אפשר לראות למה Phase U הוא צומת שצריך לכבד. הוא עולה ויורד במהירות, ולכן כל קיבול טפילי ממנו למסלול sense יכול להזריק רעש ישר לתוך current1.
10. קבל DC-link ורגנרציה קובעים את התנהגות ה-bus
ה-DC link אינו רק קבל גדול על אספקת המתח. הוא מקור הזרם המקומי ל-ripple של PWM, המקום שקולט אנרגיה שחוזרת מהמנוע, וחלק מה-loop המהיר של המיתוג. קבלים קרמיים או film מטפלים ב-loop המהיר ליד ה-half bridge; קיבול bulk מטפל באנרגיה איטית יותר ובקשיחות ה-bus. ESR, ESL, מיקום ודירוג ripple-current חשובים לא פחות מהקיבול הנומינלי.
קירוב ראשון ל-ripple על ה-bus:
DeltaV_bus ~= I * DeltaT / C
אם פולס זרם של 20 A נתמך על ידי 100 uF למשך 5 us:
DeltaV_bus ~= 20 A * 5 us / 100 uF = 1 V
הקירוב הזה מתעלם ממדרגת ESR, spike של ESL, ירידת קיבול בגלל DC bias, טמפרטורה, חימום ripple-current ותגובת ספק הכוח, ולכן הוא רק נקודת התחלה. הוא אומר אם הקיבול נמצא בסדר גודל נכון, לא אם ה-bus נקי.
רגנרציה היא החצי השני של בעיית ה-DC link. בזמן בלימה או עומס שמסיע את המנוע, המנוע יכול להחזיר אנרגיה ל-bus מהר יותר ממה שהספק או העומס מסוגלים לספוג. קיבול bulk רק מעכב את עליית המתח; הוא לא אסטרטגיית רגנרציה. תכנון אמיתי צריך אחד מהמסלולים האלה:
- ספק כוח שיודע לספוג זרם.
- נגד בלימה או dump path שמדורג לאנרגיה החוזרת.
- מסלול רגנרציה אקטיבי.
- trip חומרתי של over-voltage שמכבה PWM לפני שה-bus עובר את דירוג הרכיבים.
בודקים את ה-DC link באותה משמעת כמו MOSFETs: קבלים מהירים קרובים לגשר, קיבול bulk עם מסלול השראות נמוך, דירוג ripple-current, התנהגות over-voltage ומדידה באוסצילוסקופ על פיני ההספק האמיתיים.
11. הגנה לא צריכה לחכות לקושחה
כאשר MOSFET נכנס ל-shoot-through או זרם קצר, firmware הוא איטי מדי. התגובה הראשונה צריכה להיות בחומרה.
מסלול הגנה טוב כולל:
- over-current comparator או כניסת OC בדרייבר.
- UVLO בדרייבר gate.
- over-voltage על DC bus.
- טמפרטורת MOSFET או board.
- fault latch בקושחה.
- מדיניות recovery ברורה.
הקו החשוב הוא:
Dangerous current -> hardware PWM disable -> firmware diagnosis
לא להפך.
12. Bring-up מומלץ
תהליך bring-up טוב מציל MOSFETs:
- לבדוק rails בלי MOSFETs או בלי מתח bus גבוה.
- לבדוק PWM logic ו-dead-time עם bus מנותק.
- לבדוק gate waveforms על עומס נמוך.
- להעלות מתח bus דרך supply מוגבל זרם.
- לבדוק
current1מול זרם ידוע. - לבדוק fault trip לפני חיבור מנוע חזק.
- להריץ open-loop PWM נמוך.
- לסגור לולאת זרם בזרם מוגבל.
- למדוד חום על MOSFET, shunt ודרייבר.
- רק אז להעלות תדר, זרם ו-duty cycle.
13. טבלת סימפטומים
סימפטום
זרם נמדד קופץ בקצה PWM
חשד ראשון: sampling מוקדם מדי או רעש switch node
מה לבדוק: טריגר ADC ו-routing של sense
סימפטום
דרייבר נכנס ל-fault בהאצה
חשד ראשון: bootstrap droop, over-current או ringing
מה לבדוק: מתח high-side, shunt waveform ו-fault pin
סימפטום
MOSFET מתחמם ללא עומס גדול
חשד ראשון: gate איטי, dead-time גדול או conduction loss
מה לבדוק: R_g, waveforms וטמפרטורת package
סימפטום
torque ripple במהירות נמוכה
חשד ראשון: dead-time error או offset זרם
מה לבדוק: compensation ו-zero-current calibration
סימפטום
הקריאה של current1 נראית תקינה בלי מנוע ורועשת עם מנוע
חשד ראשון: injection מה-switch node
מה לבדוק: מיקום sense traces ו-AGND/PGND
14. Checklist לבדיקת שלב ההספק לפני סגירת לולאת הזרם
לפני שסוגרים את לולאת הזרם, צריך לדעת לענות על הנקודות האלה בלי לנחש:
- הפסדי MOSFET מוערכים לכל רכיב בטמפרטורת סיליקון חמה, כולל הולכה, מיתוג, diode ו-gate-drive.
- הדרייבר הנבחר מסוגל לספק ולשאוב את זרם ה-peak הנדרש במתח ה-gate-drive המתוכנן.
- קבל bootstrap, מרווח high-side UVLO וזמן on גרוע ביותר נבדקו.
- dead-time נמדד בפיני ה-MOSFET, ולשגיאת המתח שלו יש תוכנית פיצוי או כיול.
- shunts, הגבר ותחום ADC משאירים מרווח ל-offset, זרם fault ורוויה של המגבר.
- טריגר ה-ADC תקף לאורך duty cycle, modulation index וסקטור SVPWM, לא רק בנקודת bench אחת.
- ל-DC link יש קיבול מהיר מקומי, קיבול bulk, דירוג ripple-current ומסלול לרגנרציה.
- hot-loop, gate-loop ו-current-sense-loop מופרדים בכוונה ואומתו במדידה.
- source bounce, ringing ב-switch node ו-spikes על ה-shunt נמדדו במתח bus מלא.
- fault חומרתי מכבה PWM בלי לחכות ללולאת הקושחה הראשית.
- bring-up מוכיח rails, gates, מדידת זרם, הגנות והתנהגות תרמית לפני FOC מלא.
15. ההחלטה
FOC אינו מסתיר חומרה חלשה. הוא חושף אותה.
הבקר יכול לחשב וקטור זרם יפה מאוד, אבל אם ה-MOSFETs מתמתגים רע, אם ה-shunt לא נמדד ב-Kelvin, אם ה-ADC דוגם בזמן לא נכון, או אם fault מחכה לקושחה, לולאת הזרם תקבל שקר.
תכנן את שלב ההספק כך שהבקר יראה את האמת.
המאמר מבוסס על ניסיון מעשי בתכנון אלקטרוניקת הספק, bring-up של בקרי מנועים embedded, מימוש לולאות זרם ב-FOC, התנהגות gate drivers, מדידת זרם ו-layout של PCB. תמיד יש לאמת הפסדי MOSFET, מגבלות דרייבר, תזמון מדידת זרם, התנהגות הגנות ופרזיטים של layout מול המתח, הזרם, המנוע ותדר המיתוג הספציפיים במערכת.