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

【STM32电机培训】——6、任务4开放性实验转矩控制电机

[复制链接]
七哥 发布时间:2018-9-14 01:05
本帖最后由 toofree 于 2018-9-14 08:45 编辑
8 K( y1 `1 |: \8 O! n5 F% u0 z! f2 f" r& g" E) V0 m
[size=13.3333px]STM32电机培训】——6、任务4开放性实验转矩控制电机

' _- D: X& l8 i* e( w2 J0 e0 R) b% d* }, r1 n
任务目标:转矩控制电机,用STMStudio对变量进行监测,用ADC采样电位器电压,ADC采样值按比例间接控制电机转速。
5 `8 |/ j& L3 X0 Y; @( R- j 01.jpg
. X# J, y2 Y% s$ ~1 s& s+ N  b* _, B1 u
9 N# I  ]3 X% U' ~: `6 X  q- I
按培训资料,使用转矩控制函数“MC_ProgramTorqueRampMotor1(Tuning_Iqref,1000);”,添加变量到STMStudio窗口: o* ]) H0 ?: d/ p* C% Z
02.jpg
7 b8 c) l1 H& o. {3 b
( q" `/ E( d! k1 f1 ?  z
! e) Y% P6 s, M7 N# u
建立STMStudio工程,并将“.out”添加工程中。
3 X7 s* J5 m2 z( z6 ?" r7 Y* Z" } 03.jpg $ G1 G: o2 x# t3 E: l8 b6 c

+ ]# [$ R! C) @' j: ~
5 C1 C, S5 M! H; x1 e7 N
电位器ADC采样函数“MC_ProgramRegularConversion(ADC_Channel_12,ADC_SampleTime_601Cycles5);”,以及读取ADC采样结果函数“MC_GetRegularConversionValue();”。
5 c9 q2 [% R) X! \8 X" }此处有重点,将右侧代码照着敲一遍,改巴改巴
4 L) G5 ]' K8 c: ?' o9 t; f 04.jpg ; H7 ~, z+ Z4 j8 I1 [  i3 c. B

. m  K! Q* G4 ^8 R8 g  o  a, [8 W
% D  L7 N# {. W( a

4 E: }; q% }  J  n$ X( \

4 A, l7 p# t" P5 ?9 j1 `STMStudio的VarViewer窗口中观察波形变化。" U) I; u& N6 q1 W* s
05.jpg
% N; r# O; g( b- X. F3 E$ @
% L8 K: t( o! Y) b
2 D7 Q. N7 L2 ?
代码改起:
* F! K$ K% p, E" G( Z" V( s3 Q, L本贴代码在上一贴基础上更改。: e8 z8 i! G; g) A! G, A3 k8 v# f
【STM32电机培训】——5、任务3电机状态切换、正反转8 T7 y9 `3 f. Z. F: y2 k
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=617456&fromuid=307297" _2 Z6 u" V3 Z2 x( R, B3 G3 F
(出处: 意法半导体STM32/STM8技术社区)$ Q- M' V$ Y; s/ C) d5 p

6 ?* ~2 y3 A( r$ {$ j( z: x2 i& {  H. k

" i& F6 r* k+ Y# q. [' H& H( b/ D搜索找到头文件“std_hal_missing_define.h”,将第4行的“#if 0”,改为“#if 1”。或者自己添加“ADC_Channel_12”和“ADC_SampleTime_601Cycles5”相关宏定义。1 Z4 ~0 {8 \1 U* n
11.jpg
8 T, K8 i! n7 k/ `6 a, H4 P5 D- y$ j" d$ w
# o% M% ], ?% s
修改头文件“std_hal_missing_define.h”的目的,就是想使用这两个宏定义。或者还有其它隐藏的宏定义,反正修改、添加一下,一劳永逸。
7 h" F" H3 X  i  k0 P 12.jpg , T" `/ _( V1 D
2 x  t8 ^' z  T* E, G
# g1 L4 ]' p* O2 V2 m/ v7 @
工程主文件“main.c”中,添加相关头文件,并添加相关变量定义、宏定义。这里“MAX_TUNING_IQ”、“MIN_TUNING_IQREF”分别为2800、1000是实验得出来的。转矩太小电机低速会停机,1000是最低维持电机转动的转矩参数;2800是ADC值接近满量程时,电机才达到最大转速的转矩参数。. ~* \$ w, T" R9 t. y  H
13.jpg 4 s5 |6 a: G  W, m, e) e+ y

9 P7 ?: x5 G2 }. o# W* R
, i  x9 ]' G9 c' g2 G- Q
添加几个外部变量声明和函数声明; l: K6 c7 w! J* u( G4 l+ A6 ?
14.jpg
8 d! w, D8 X$ Y, y: f9 |  S2 U: o8 X+ C8 E

. o: n2 V. l. X/ Q/ E主循环中,只执行一条“ Open_Task();”函数,此函数便是照着培训资料码好的代码。1 y, F* S7 w; x! C& h
15.jpg
$ o6 B# F- ?' o% Z6 }* `- l) o) g) i; e+ F. C7 S8 r' I

& f7 J  ?. Q1 c; i8 ^6 R“ Open_Task()”中“Tuning_Iqref”增加了1000的偏置,与“MIN_TUNING_IQREF”差不多是一个意思。
0 m+ D0 q  m0 ~2 s& S& r+ @ 16.jpg
% `" g. I: x7 `6 E( ]- E- K! _1 Y- {% }3 d3 N2 C
1 A; @7 F# e- z% k2 l. g
复制出“ Open_Task()”源码供参考。(如果嫌麻烦的话,直接下载贴子最后的打包附件)
- Q/ l' `1 A# c) E! ]; m
  1. void Open_Task(void)
    % F3 D$ v, D# \0 t$ g
  2. {7 M7 \6 `3 r/ n% T3 N/ f% ^
  3.   pMctHdl = GetMCI(M1);. }; `/ ?! p7 K
  4.   + y& q  L5 ^% o0 d+ X, d- R
  5.   /* Do regular adc convert */( ?' k; F. b, m
  6.   if (MC_GetRegularConversionState() == UDRC_STATE_IDLE)
    . H% s9 v! f" G! Y! W: }
  7.   {
    5 A$ h" x; Z& B
  8.     MC_ProgramRegularConversion(ADC_Channel_12,ADC_SampleTime_601Cycles5);# L* }+ n: Z8 Y* u& u$ Y5 y: Z
  9.   }
      m% p4 `" o6 B! E
  10.   else if (MC_GetRegularConversionState() == UDRC_STATE_EOC)
    0 L2 d! C- {, @$ D
  11.   {
    % ^7 S) ^7 @% z( q  k' B
  12.     /* Get ADC value */
    8 B1 V, \- L) m0 V1 f
  13.     Tuning_ACD = MC_GetRegularConversionValue();  N" `* f1 j) s9 H
  14.   }
    1 V# r9 C  f, ?: A" Q) [1 {# q. ?$ E
  15. , h; @; T: s8 f  _, Q
  16.   if (Delay_Count == 0). r) Q2 V) {8 A
  17.   {
    - F# m& ]  j4 _0 a
  18.      Delay_Count = HAL_GetTick();0 \+ u! j' \) q- B6 ~
  19.   }6 n1 a: _9 a) A0 l) f
  20.   else if (HAL_GetTick() > (Delay_Count + 1))0 o& Z% ]7 Z0 I' o, U3 Z7 c
  21.   {- L/ }6 E- T8 b" T. l5 U
  22.     Delay_Count = 0;
    ; Q" t, U# j1 ^" \8 r/ \
  23.    
    ' T1 D# ?6 D9 b  m) Y# r
  24.     /* Get new Iqref */
    # z8 g& O3 D/ M3 P* m! E- _/ P
  25.     //Tuning_Iqref = (Tuning_ACD + 1) * MAX_TUNING_IQ / 65536;# ~5 @, `% [4 O/ q) l
  26.     Tuning_Iqref = Tuning_ACD* MAX_TUNING_IQ / 65536 + 1000;
    1 S' P1 T9 a+ L; }$ T
  27.     if (Tuning_Iqref < MIN_TUNING_IQREF)
    7 d+ p1 I- W9 Q
  28.     {
    . O) d8 G9 Z6 A0 o' [0 S9 \
  29.       Tuning_Iqref = MIN_TUNING_IQREF;
    $ T& \! z5 {' N+ e8 N; w) u3 ]
  30.     }: f3 n% i# x8 \
  31.     5 [& Z" ~4 f3 k( R/ x1 g. y
  32.     /* Set new Iqref ramp */
    1 [+ H+ n+ ]& Z5 z, z# J- f% p! b
  33.     MC_ProgramTorqueRampMotor1(Tuning_Iqref,1000);& t$ v- A7 `% N$ I: G, V% n
  34.     MC_StartMotor1();  1 ]& O' t" E- }- H) t8 {( ]6 C. V
  35.   }& Y! [3 p; `, k6 c1 b. b# x
  36. }
复制代码

8 P1 o$ ]! p  z, n; ?5 H( Z4 H
3 d  _+ @9 Y' M! ?& B
$ r* V6 j+ v9 E5 t7 o( k* G
编译IAR工程。下载固件到开发套件中。( K) x- ?4 ~2 E
8 n: L  M, I; h5 [3 s4 x- R# ~' v

! m; E2 _9 A. C1 V# T% P% M; B打开“Workbench”界面,并与目标板套件连接。' t+ |* |! K; q8 A7 Q
21.jpg # N: \. L# n$ X. V: o; n5 X
" ~- F3 L/ o( e- o
“监控”窗口下,在打开“Plotter”绘图窗口。5 m4 X9 ]# F+ H( h+ n( E% q
22.jpg
: \( e/ i$ @4 X5 n: A, y+ B( C, t: _- z- F" e. [( ?

* K/ W" B' y/ U3 |) F电脑安装,并打开软件“STMStudio”。
/ h# }( i) s  t! M, z 23.jpg
# @4 j/ `1 o* s$ }" l' c' \& @3 R* V/ D- {
2 h* q6 r: j/ v! G
将本实验IAR生成的.out,导入到“STMStudio”工程,并且添加监测变量到两个“VarViewer”窗口。为什么用两个窗口,因为ADC有采样值变化与转矩不在同一范围,如果在同一窗口,一个波形幅度太小。: T" y) p( n& N/ |
24.jpg
" l& a/ |/ }8 T: K+ e
& p! b; g" a5 l2 o) q
: K! e0 a, d6 u* H- t6 ?5 m% f/ C
运行程序后,在“Workbench”“Plotter”绘图窗口观测电机速度,转到电位器,电机速度变化,相应波形显示有变化。
# }! T1 e+ i7 m4 X 25.jpg 1 J/ U% u0 T' v

+ F1 T" s' O0 {! N

8 c' u. @! l: X: Z9 B  Z( @* n同时在“STMStudio”的窗口中也将观察到如下图变化波形。
+ P& b8 [% ]  ? 26.jpg 8 t& _! J3 `+ S7 O& y" k6 n

) ]6 o2 U, D5 L6 w' w1 s5 ?4 r# P" u

2 j  s# A/ I* ?% k/ A# O' ?  y至此,完成了开放性实验的转矩控制电机,并在“STMStudio”观察ADC、转矩任务。(之后,重开贴,整理一下“STMStudio”使用,其中会有一个小贴士分享。
5 Z* U- {: h, D' }7 i$ A/ |5 w! p0 \3 C' z3 j% E9 y

+ {9 H8 f& A% V2 ?按照惯例,工程附上:
7 p. g% `4 x: J- k. \9 |, a6 p" f8 V* g
P-NUCLEO-IHM001_STMStudio.rar (9 MB, 下载次数: 79)
收藏 2 评论1 发布时间:2018-9-14 01:05

举报

1个回答
kimbackkom 回答时间:2018-11-12 11:36:02

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版