你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

跟着来一起做无刷电机控制器

[复制链接]
gaosmile 发布时间:2020-3-8 15:21
很早之前就想做一款无刷电机控制器,忙于工作一直没有弄。最近有点时间画板,打样,焊接,调试,总算顺利的转起来。期间也遇到很多问题,上网查资料,自己量波形前前后后搞了差不多近一个月,(中间又出差一周)总算搞的差不多了,特意写个总结。; C9 a4 J9 B* N0 q5 J) ]7 j
板子外观100*60mm 中等大小。DC 12V输入,设计最大电流10A.(实际没试过那么大的电机,手头的电机也就5 6A的样子)硬件上可以切换有感(HALL)和无感(EMF)两种模式,外部滑动变阻器调速 预留有 PWM输入、刹车、正反转、USB和uart等接口。. e# s/ ~8 C& [6 p; H* n" D: J
先来说下原理无刷电机其实就是直流电机,和传统的DC电机是一样的,只是把有刷的电滑环变成了电子换向器。7 W& q: `7 s: c3 g; W
微信图片_20200308151232.png . D' P8 h! u4 U$ x  D3 G8 Z; j
因为少了电滑环的摩擦所以寿命静音方面有了很大的提升,转速也更高。
, z2 Y% C- ]( Y5 d( x* ]4 ~1 L7 O) n
2 z- N$ w7 M. V; a2 {$ l6 x 微信图片_20200308151235.png
' [% Y( j4 ^( s4 w9 h$ h6 F当然难点就在如何获取当前转子的位置好换相,所以又分为两种有感和无感。
) ~0 f! B" ~9 j- A有感就是在电机端盖的部位加装霍尔传感器分别相隔30度或60度。无感就是靠检测悬浮相的感应电动势过零点(后面在细讲)。
# j: R6 a' I6 d  Z当然各有各的优缺点,有感在低速方面好,可以频繁启停换相。无感的结构简单成本低,航模上应用居多。! t2 n+ {: W: I  p1 B# ?) G3 b
先说有感,电源首先被分成了3个绕组U V W这个交流电还是有区别的。
& L' d' l5 }& G4 y  I它只是3个h桥按一定的顺序导通模拟出来的,本质还是直流电。电机靠hall位置按一定顺序换相,转速与电压电流有关。这一点切记,不是换的越快转的越快。(位置决定换相时刻,电压决定转速)一般调速就是调电压,6步pwm方式是目前常用的。当然后续还有foc等更好算法。7 ?! r" M/ m% M1 U6 V% q7 Y
硬件部分网上基本都是成熟的方案。三相H桥,H桥一般有上臂mos和下臂mos组成,如果只是简单的做演示上臂选pmos下臂选nmos控制电路简单直接用单片机的io就可以驱动。但是pmos低内阻的价格高。功率上面很难做大。( J# Y; q7 n5 [; q+ e% P4 a
这也就是为什么基本所有的商业控制器全是nmos的原因。2 A# j+ o: n; l' r
但是上臂用nmos存在一个问题vgs控制电压大与vcc 4v以上才能完全导通。为了简化电路采用了ir公司出的驱动ic,它内部有自举升压电路。外部仅需一个续流的二极管及储能电容即可。 微信图片_20200308151238.jpg ( M* z: r8 r# _9 _
! g. j7 y; j$ D/ P6 R
微信图片_20200308151241.jpg $ H, G' H2 P/ Z* S6 K+ Z- d9 n" X9 l
有感模式控制相对简单,3个霍尔传感器输出一般都是数字信号,分压后直接接单片机io。
3 g7 H4 H7 }' x9 U+ U* w6 D 微信图片_20200308151244.png ) m" P, V+ x! f# Q: y
1 C# z' L0 s) Z+ X6 N
当然控制方式上也就简单很多,三个霍尔接中断输入,在中断处理程序中根据组合状态换相,程序上也没什么复杂的。主程序 一直检测ad值,改变pwm占空比,及电流保护等。
# k. t) `6 n. f; l( L如下一个典型的换相代码。Stm32 有两个高级定时器tim1 tim8 可以输出4组互补型pwm,还可以设定死区时间等,使用上非常方便。3 ]- b) U+ _3 N
  1. switch(step)5 G4 `: z0 I8 S7 A. b7 O( q- f
  2. {4 N+ A/ p# s0 R
  3. case 4: //B+ C-. x# f/ M1 K1 m! ?# {
  4. /* Next step: Step 2 Configuration -------------------------------------- */# d6 a! i7 H9 b* B7 A
  5. TIM_CCxCmd(BLDC_TIMx,TIM_Channel_1,TIM_CCx_Disable);, j" E( p& d% V9 I, K
  6. TIM_CCxNCmd(BLDC_TIMx,TIM_Channel_1,TIM_CCxN_Disable);
    8 Y% Y7 e% w6 I
  7. }
复制代码

7 @! ~1 t8 E2 }2 ]5 l: c5 f* J. N1 C! ~/ ?( L9 ]5 K
8 T  B: n+ k  ^$ C

0 H! L# L" I& y$ W 微信图片_20200308151248.jpg : C- ^: t, i/ j, J" B. d
微信图片_20200308151252.jpg - |2 I! g0 j: l/ L

# P6 F: @1 h& j# }+ E下图为uvw三相的霍尔检测到的电平及w相的波形。
2 X8 p. z2 a* g* K 微信图片_20200308151255.jpg
$ B' y$ C2 n2 z
3 K7 O" v& C1 s, ]) n
, Y2 p/ d) X2 O$ Z0 M+ D3 k& P- I+ W下图为 uvw三相波形及w相霍尔电平
2 I7 Q8 k, h4 r& W1 l* [: c# @1 t 微信图片_20200308151258.jpg ' ~5 L% Q. t" B
6 |% N0 W) K5 _/ f8 |
6 t- A2 G4 y+ _$ E. `2 B
下图为 w相电平, w相上臂on 下臂pwm ,w相霍尔信号。
$ v1 @* _- k0 M, ^ 微信图片_20200308151301.jpg 5 p4 z" k& X: @. A% f0 I" G
) ~5 X8 c7 s5 Q! g" f# }6 s! Z
  z, [* ~$ L3 L4 v$ q# p  Z' W4 v
下图为w相ir2304芯片输出,上臂电压可明显看到已高于vcc,下臂为pwm信号3 Y4 T$ ~/ }+ Z$ b6 z: B
微信图片_20200308151305.jpg
& L9 s0 N" J, e* e5 b7 @' h
+ T+ ?  S3 h- e7 U( b8 A& U8 p4 u+ e! |1 m+ \3 h
在说说无感模式,由于没有了霍尔,电机无法知道转子当前的位置所以就无法换相,而感应电动势也只有在转起来之后才有,所以无感模式的启动是个难点。" u8 t2 I( d* g3 q2 J
一般方法都是分三段法:1 预定位 2 启动 3 进入闭环反馈5 j  y0 \5 L  Q& f. i3 z5 n' A
正如网友说的江湖一层纸,戳破不值半文钱。
5 ^! Y& m9 H' ]1. 预定为就是强制给某一相通电一段时间,让电机定位到这个位置。占空比30-50%不要太大,可能会发热。
* q3 W/ ]% t. g! a* P) d, ~- d2. 启动,就是逐步的强制换相,当然要有个加速的过程,使电机转起来。0 |' O8 t8 a/ X: H6 C5 E& `1 `
这个过程太慢会抖动反转,太快会丢步。参数需要一点点试,有点像控制步进电机。要能使电机转的能产生电动势,我也是参照的德国MK 电调的算法。
% K6 c4 _( V/ j2 W5 T每次延时时间比上一次少1/25,形成一个加速的过程,直到电机完全转起来产生足够的电动势。
9 x3 @% {* V' R% p- r3 Y# Z3 t3. 闭环反馈控制换相跟有感差不多一样。8 i; c$ B( O0 f
  1. speed_duty=30; //30% start
    $ b' I3 [, r0 w2 k" c# Z
  2. BLDC_PHASE_CHANGE(Step[Phase]); //固定一相/ L& L8 @- i$ P9 m; i. M( L* O
  3. Delay_MS(200);) D# g9 f5 z: j* m/ P/ E0 J5 E

  4. + b/ \  k. o/ @# h
  5. speed_duty=pwm;
    . ]( Y3 K5 ?8 i, w. Q3 C  ^" {2 N# K
  6. timer = 300;7 R: P9 w' X7 f2 M
  7. while(1)# c" x; h2 ]- C' {' a
  8. {
    3 J. o1 ]2 `( J! E
  9. for(i=0;i<timer; i++)
    8 m5 R9 c4 i( K; d0 a8 e
  10. {& i; t% s# u8 O: [( X; F* W! a
  11. Delay_US(120);   //等待8 Y- |+ s8 U* R2 z8 Q7 ~
  12. }/ M! Y; M) ~+ \, ^0 L7 F5 S. _
  13. timer-= timer/25+1;
    ) n% Z4 r4 J' y# d* }. {8 I
  14. if(timer < 25)
    0 F7 o( a/ }; f# v, B$ c  q
  15. {   
    0 E) u- R% ?% g6 J* C0 [! t) v* B7 ]
  16. if(TEST_MANUELL)
    $ m$ Z/ w# \# a
  17. {; W3 D3 Y5 r1 x7 G. c. O" y6 {
  18. timer = 25;   //开环强制换向
    0 o4 j+ k2 p0 @7 k
  19. }
    : ~, q2 R0 m4 J/ l  |4 I, A
  20. else, `: |5 x! G4 A
  21. {0 y) s9 j* O; w0 n7 l' a
  22. bldc_dev.motor_state=RUN;3 W" {. L6 x7 ?
  23. break;
    5 a6 a6 i5 \- `# K$ ^
  24. }    # ^' \% ]$ x! D
  25. }/ i7 Z5 w  {# R6 j1 D, e
  26. Phase++;
    - E; v! B3 C/ N, T
  27. Phase %= 6;
    2 G- V, O0 [  L% ^9 x/ Y' E) }
  28. BLDC_PHASE_CHANGE(Step[Phase]); /// W7 g7 R+ B5 G: i7 S) n, P
  29. }
    8 |! I8 h6 Z4 V, G9 M6 l& c2 S/ v
复制代码
) x7 X7 ]" B8 c  S7 S  _; R

( ]2 q% m+ D, `4 q- m说到感应电动势很多人不明白,先来说说电流,电机线圈的内阻通常很小比如0.2欧,电机的电压比如10v,按理来说电流100a为何电机不烧哪?
3 m- f, P2 S2 T1 I1 {, ?+ M其实电机线圈在通电的一瞬间并不是完全导通的,因为有反向电动感应势的存在,可能有-9.8v。10v-9.8v = 0.2v /0.2 = 1A.这样算起来电流还合理。
: B# a3 {6 g, l1 B在说说那个初中学习的法拉第 ,当线圈切割磁场时会产生感应电动势,根据右手定则。不懂的自行上网搜。6 `( e. P, t, N7 h" T0 O$ V3 H
微信图片_20200308151308.jpg 6 J; t0 V! V* x
如下图当ac相在通电12v的情况下,静止状态下正中间中性点理论为6v,但是转起来就不一定了,因为b相实际是在切割磁场,是会产生电动势的。而电动势的大小正负取决与当前在磁场ns极的位置。当切割ns时为-1,切割sn时为1,平行时为0. 微信图片_20200308151311.jpg 8 z/ C0 L4 [2 K. {8 A0 t+ \# ^( G

# T5 V8 b2 I% L6 _' T3 A6 E利用这一特性不就刚好可以获得转子的位置吗?首先检测电路网上已经一大很成熟了。如下图,当然很多时候需要在4.7k对地的电阻上并一个100nf的电容,做一个低通滤波。也可以在软件中做滤波处理。
* R* R0 d9 O+ n4 c 微信图片_20200308151314.jpg 9 A0 x5 v& p7 c6 B! B
我们所要做的就是检测这个悬浮相的电动势过零点。网上常用的两种方法:1 单片机ad采集;2 比较器比较。我选择了比较器lm339价格已经很便宜了,在高速上比ad有明显优势,只要比较cin bin ain 与n点的压差即可获得零点。 微信图片_20200308151318.jpg
1 \: Y) k9 ^0 L! A% g! t: ?理想很完美,现实很残酷,实际中根本得不到这么完美的波形。
7 s( t7 R, Q9 p% b' Z% c% j) k如下图,这个已经是比较好的了,还是有很多毛刺。这个给单片机中断,肯定一大堆问题,严重的换错相烧mos管。
: K  |$ M+ `8 V6 G

2 _2 _& {9 x' r; d 微信图片_20200308151321.jpg
6 V- f/ l2 S3 z* \$ K- u3 H$ s
! b/ m. y) U( _5 T 微信图片_20200308151324.jpg
3 r1 y3 [, ?6 @% \- F& J/ J3 B
为什么会有这些毛刺呢,有些还挺有规律。参考了网上的介绍,这中间还有一个叫消磁的东西。. @! G9 U( K# B& Z8 j* e9 D" c

) K2 ^& V) o5 n$ C$ T+ m7 g8 k" U9 e 微信图片_20200308151328.jpg 5 D. D) p6 s! }7 h3 |9 E5 y
原理不深究了,反正时间很短,软件上做一个滤波消掉就可以了。7 e% }) Z1 z3 [" M  M/ P6 R
进入中断函数后做如下处理 ,定时器的中断我暂时用的20us。5 g( A1 a% i7 g, W+ s1 N  a
  1. const unsigned int FilterNums = 0xff;" r& p/ U( ?& t* R
  2. static unsigned int nums =0;2 X% ?4 G( ?$ q# W0 C8 ?
  3. static unsigned int Queue_UStatus =0;  G# n( X" U5 k  u( ?( }) M
  4. static unsigned int Queue_VStatus =0;
    # b1 ~/ o4 c2 @2 s. E8 T
  5. static unsigned int Queue_WStatus =0;. G: o% _0 I  A2 z  Y4 u
  6. static unsigned char EMF_SVal =0;
    3 r5 N0 R/ S$ O4 K3 }0 G$ q
  7. unsigned char Filter_U_Status=0;
    8 f- t' O: p/ _8 w
  8. unsigned char Filter_V_Status=0;4 }; _5 a4 w" z4 \6 R! x
  9. unsigned char Filter_W_Status=0;5 x/ O! e. M6 W" j+ b7 m3 o6 v
  10. unsigned char EMF_Val=0;
    7 m: O# t6 Q! h& b- E& x$ s- B8 O
  11. unsigned int status_h;
    , [4 t) X0 k/ z
  12. unsigned int status_l;
    % @+ k+ n5 k! f9 V. D* z
  13. unsigned int Delay30deg =0;
    " X: q: a( O; S( l, U( M9 m

  14. 3 Y0 O- l* ^' b, g) W; G
  15. /* 清除中断标志位 */$ R2 y5 A- D& d& o
  16. if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET )/ M3 P4 e" Y* Y% M+ ]/ P+ ~1 u
  17. {* d  M3 K4 B2 e) D
  18. TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update);
复制代码
3 J1 {4 I' B+ G: v

" ?' h# F: ]8 `7 L
& T9 s5 L- ?5 |% R) I% d" n/ X 微信图片_20200308151331.png ! m  ?% R' N5 J' B( B

( {7 w( s. k+ @" c* n 微信图片_20200308151335.png
# i0 j' A! W% C$ P( Q' |
) |- ]4 J% L; X# G- ]至于网上说检测到过零点后,延时30度换相,对电源效率有影响。我试了下,好像没什么明显的差异。也有人说在大功率的电机下不延时反而更平滑等等。真实怎样有待各位实际实验了。
2 j4 u$ \, i0 S* n7 P' E最后秀几张转起来的照片
: P2 y$ H9 y- V" S! |$ h" R* Z3 g% E. ~% b7 j) Y% u7 n" X. u
微信图片_20200308151337.jpg
1 l+ E2 U2 X; d& A" _! e
0 M, v, m  r# H9 E9 M6 A8 V 微信图片_20200308151340.jpg
, t* ^* M$ x. }' d) n4 ^硬盘电机 无感模式
) N; f5 W5 a: T: }& G6 k8 _9 \1 X9 c/ \
微信图片_20200308151343.jpg
' d8 M% n2 v1 J* o# I7 U电动工具电机 有感模式% n7 H9 A/ i4 W$ @1 [
! w9 m# Y% s9 y& d# E
微信图片_20200308151346.jpg
2 U9 _9 W3 h& H加装散热片的样子
7 S& I% E) ?: a; C
收藏 2 评论2 发布时间:2020-3-8 15:21

举报

2个回答
子曰好人 回答时间:2020-3-9 08:59:02
楼主真高产,涉及领域也很多
gaosmile 回答时间:2020-3-9 11:49:06
子曰好人 发表于 2020-3-9 08:59/ S/ }4 t( r8 T1 l" p: _
楼主真高产,涉及领域也很多

, i' L' O( C- ?1 H% w0 F8 o

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版