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

利用STM32F407发送精确个数脉冲,控制伺服电机。  

[复制链接]
wjandsq 发布时间:2015-3-2 11:58
本帖最后由 wjandsq 于 2018-1-10 19:44 编辑 # l2 \' }" k& C" _5 ~& \) N

) X3 `4 u6 Z& J3 {. l+ _! T使用STM32F407的TIM3、TIM4精确发送固定个数脉冲,PC6、PB6两路500KHz PWM,用于控制两路伺服电机。
. \! g) f, [+ ?; |" t; w2 j5 L/ h. N5 h
一、本例程的主要功能:/ E+ n9 u- d; V$ w. ~0 G' B

" p; i! R* u, ~/ j: X, r1.USB-CDC 功能(使用USART1-PA9 USART1-PA10)。. [2 h% b2 k5 x
   PC机通过USB通讯发送控制命令到STM32,命令还可以通过USART1-PA9转发出去。$ u: ~4 `" s  O. K
0 L8 u3 V+ u* j7 h% |1 f/ E. C$ ^
2.使用TIM3 CH1通道发送精确个数脉冲(使用PC6)。. i. j8 S( z% k6 q7 ^

- `4 V1 f# z4 n% I, a  发送精确个数脉冲,需要启用TIM3 的DMA通讯,在每个脉冲周期结束时,
0 E5 P$ W7 O9 p& }% x7 r8 w  DMA自动将内存中的占空比数据传输至CCR1,DMA传输的次数到达设定值N,* `7 t6 w4 ~* `9 k0 h; _
  则进入DMA传输完毕中断,此时已发送N-1个脉冲,因此在该中断中,9 J5 u/ x' Q7 Z: f
  设置TIM3 为单脉冲模式,脉冲发送自动停止。
& I  W3 z# U$ Q; K, b( p8 Y
: f9 E; n4 J8 T. Q0 L1 T  总脉冲个数  =  DMA传输次数(N) * DMA通讯中断次数(M)
* r3 W, D% T0 P7 [( c9 L, E
" ~: N8 K( ?6 R) i. c/ H) W/ e, ~1 k  目前发现的bug描述: 0 E3 n. u+ J  R( n* Q) ~5 q; I% G
  (1) 首次启动时,如果发送多个脉冲,则会出现多发1个脉冲的情况。
7 p* d$ h8 R2 e% |& J; x2 k& y  y! v  (2) 首次启动时,如果发送单个脉冲,再发送多个脉冲,不会出现该bug。
1 X. i: U& @' ~" l+ Z9 b& P; I8 K* j) }
  临时解决方案:
) I, i2 g8 u* `# X; J  启动时将一个特殊标志初始化为1。
& D5 H( M% a+ m3 Y( j" a  如果启动后就发送多个脉冲,则将脉冲数量减去1,然后将特殊标志清0。
; E, t3 [: k7 B) k  如果启动后发送单个脉冲,不会出现bug,所以要将那个特殊标志清0。
$ b  r" i8 H& Y3 P& T/ L. m6 c  Q' j
3.使用TIM4 CH1通道发送精确个数脉冲(使用PB6)。3 U5 y( f& }+ }! V0 g6 q# u0 @
  同上。' P  K7 f9 X  {( v6 ]2 |
$ ?* @/ ~9 h+ }, D4 {9 I, U
4.在RAM进行硬件仿真调试的说明
6 M3 _6 Q& n' j! E% `+ K  本例程成功地验证了STM32F407可以在内部RAM中进行硬件仿真调试。3 v3 A0 y1 Q# x9 X$ y  m2 i" d" P
  注意DMA等的初始化,内存到外设的传输宽度为16位,只有设置正确,
$ ?: t2 F, A$ z& S! n$ g1 ~0 R  才能进入DMA传输完毕中断。: W2 a2 c, l1 ~0 C; T9 F# B# f
' Z8 S' ^* k, Q8 l
三、本例程软件改动如下:
) _  h5 i. e7 q, S5 D  ]1 a4 X$ \
! @% C" ~. s; [7 y; b& V/ t1.在usb_conf.h的第179行,注释掉了 VBUS_SENSING_ENABLED 宏定义。6 b7 l9 T* M! n. t! D: F: [
2.stm324xg_eval.h中增加USART1相关的宏定义:
1 M  X+ i+ w0 ]
* ]: l1 x6 z, R/ y) y7 O  E#ifdef VBUS_SENSING_ENABLED% P: b+ K( R# H4 m; |: V
  #define EVAL_COM1                        USART3
) v& r  M0 H' W: O4 R; Y* x  #define EVAL_COM1_CLK                    RCC_APB1Periph_USART3+ A" N$ q/ P, l$ ?: W! [  K
  #define EVAL_COM1_TX_PIN                 GPIO_Pin_10! \+ p: Z4 ]  K5 |( J
  #define EVAL_COM1_TX_GPIO_PORT           GPIOC' M4 _5 l0 w. }- b0 d
  #define EVAL_COM1_TX_GPIO_CLK            RCC_AHB1Periph_GPIOC. F  m! I7 q& f) N! c4 p0 b
  #define EVAL_COM1_TX_SOURCE              GPIO_PinSource10
0 P/ F' D' o8 |' B) y4 W  f8 r  #define EVAL_COM1_TX_AF                  GPIO_AF_USART3/ J- B* k/ h( W# A6 U* H
  #define EVAL_COM1_RX_PIN                 GPIO_Pin_11
1 p8 W" [; W& \5 n' Q  #define EVAL_COM1_RX_GPIO_PORT           GPIOC
. p$ v0 E! Q# E& ~  #define EVAL_COM1_RX_GPIO_CLK            RCC_AHB1Periph_GPIOC4 `! d9 X8 j1 g0 |; Q
  #define EVAL_COM1_RX_SOURCE              GPIO_PinSource11
- e9 N0 o- }: X7 ?" w2 A: c  #define EVAL_COM1_RX_AF                  GPIO_AF_USART3
: h+ u5 }1 D+ C9 f7 `" A- I  #define EVAL_COM1_IRQn                   USART3_IRQn
) Y% P$ ~  R3 U! D#else
$ z) v" `* e  w, q( r7 p  #define EVAL_COM1                        USART1
* `: V8 \+ r* C" }  #define EVAL_COM1_CLK                    RCC_APB2Periph_USART1
9 d9 x- h* O& y, L: u  #define EVAL_COM1_TX_PIN                 GPIO_Pin_97 b! o1 }4 e* m5 K' J* q& d9 q
  #define EVAL_COM1_TX_GPIO_PORT           GPIOA8 N9 e- L" r6 ?3 u. M! s4 h* Q
  #define EVAL_COM1_TX_GPIO_CLK            RCC_AHB1Periph_GPIOA
, D# h. Q" @4 H' r, X  J% X4 c3 O  #define EVAL_COM1_TX_SOURCE              GPIO_PinSource9
+ s4 m. `" a( ^* K  #define EVAL_COM1_TX_AF                  GPIO_AF_USART1
' n4 Q8 c; H4 e  [) r- e* @6 b  #define EVAL_COM1_RX_PIN                 GPIO_Pin_10: r: J" S+ [; e( r0 c4 i: r
  #define EVAL_COM1_RX_GPIO_PORT           GPIOA
6 f& S2 [$ N1 _; J+ y) f# d  #define EVAL_COM1_RX_GPIO_CLK            RCC_AHB1Periph_GPIOA) h  h( _; _* N2 ~0 ^
  #define EVAL_COM1_RX_SOURCE              GPIO_PinSource10
6 ~8 y! k, U! p' ]" H; w  #define EVAL_COM1_RX_AF                  GPIO_AF_USART1
' T9 }5 {& |) j0 O+ B! a) f  #define EVAL_COM1_IRQn                   USART1_IRQn
( f. `0 N5 r# f, ]1 o+ ~% x#endif
& I/ P& Q$ f0 T3 i4 V9 n) ?$ a; G1 W  M* d% A$ `
3. usbd_cdc_vcp.h中,增加USART1相关的宏定义: E" \1 ~6 O9 ]
#ifdef USE_STM3210C_EVAL
/ i  |) i# y0 h. `! S9 |, B  _$ x9 S  #define EVAL_COM_IRQHandler            USART2_IRQHandler3 b" g* ^: Q$ M1 ?' K% ^
#else
8 M7 p9 t/ @. K+ S+ ]! T+ O9 e. _' \  #ifdef VBUS_SENSING_ENABLED
; i) K0 [7 W& R3 @: q   #define EVAL_COM_IRQHandler            USART3_IRQHandler
3 [" c% Y7 v( s3 D+ P  #else
  f) `2 ]+ G8 k) F, D& j4 c   #define EVAL_COM_IRQHandler            USART1_IRQHandler5 t6 _: F3 N* n2 a' b3 ]% |( J
  #endif
, C$ _8 B& ~) ^  t4 V6 y#endif /* USE_STM322xG_EVAL */
: ]* w# P$ n0 ^7 y3 s" y: b! Y! I
4 h! m. e! z% V6 S) a% w6 b% ^. L( v8 i5 Z" }
4.USB内部或外部上拉电阻关闭与延迟打开的函数修改
! _9 o% t# ~3 V1 ?* N2 k
& ?+ h6 V- M* E) Y$ j" nvoid usb_start_delay(void)& Y/ k! M* H1 E: p1 R" N
{
6 O4 m: b  _' {2 [; p' A, q* w4 O& ]    uint16_t i,j;. ?) `) ], G& O1 T
#ifdef VBUS_SENSING_ENABLED) Q' P% m" B3 T! U& u
    GPIOD->BSRRL = GPIO_Pin_6; /* 不启用外部USB上拉电阻 */' v) o# j& w" B$ [4 l/ p+ R
    for(i = 0; i < 10000; ++i){: f5 I/ p5 Z5 I( m. z% G
        for(j = 0; j < 6000; ++j){
, G' x/ F# @9 z$ T( f8 M  |6 a2 K! `+ ?8 R; U8 _- C
        }
/ ]8 L* _$ j+ s" S2 h4 R+ H6 \8 G    }& D" t5 p" V3 H! q+ w% ~/ f0 e* }2 p
    GPIOD->BSRRH = GPIO_Pin_6; /* 启用外部USB上拉电阻 */
  Q. `  o  s6 F/ K/ r; t' K9 o* z#else
9 D8 y9 r2 X/ P& \' u; D    GPIOD->BSRRL = GPIO_Pin_6; /* 不启用外部USB上拉电阻 */
0 x  N2 e, ?! b( T    DCD_DevDisconnect(&USB_OTG_dev); /* 不启用内部上拉电阻 */
2 s! D. G2 E" ~3 D$ F    for(i = 0; i < 10000; ++i){  Z3 |- E' V: n9 A3 @" W1 K  ~1 h
        for(j = 0; j < 6000; ++j){; q# s7 h9 G3 Z& L& l7 W

5 g8 z2 Q7 s" z        }
  X7 R4 s, p" D- Z' Z    }
6 j, Q: F# z. t; X+ z2 m$ a$ {    DCD_DevConnect(&USB_OTG_dev); /* 启用内部上拉电阻 */8 p; {9 k* b0 u$ [; w
#endif/ q2 i1 Y, z, [  K" u, B2 |
! t$ i6 [' c* ]. u4 \  U
}/ J' h# U0 N8 t: ]- j+ r# v7 y. x

5 A4 R" ^3 [% u' I" c. X3 v; G% q. y5.USB虚拟串口的DTR RTS Break控制修改   可用DTR信号控制1路伺服电机正转还是反转。, M6 q4 [8 K4 B+ @$ q
   RTS信号无效,这是由于Windows USB驱动的问题造成的,ST依靠微软的USB驱动,  所以一直没有解决这个问题。" P0 Q# l7 ~  b
6.精确个数脉冲发送5 A7 n( V5 ^! q: [$ ~2 u# P. Q  S
在TIM3-CH1上(PC6)实现精确个数脉冲发送,用于控制第一路伺服电机" v; q2 T1 o0 Y& s" t, C
在TIM4-CH1上(PB6)实现精确个数脉冲发送,用于控制第二路伺服电机) d" c( L$ o, [; i. _
& N/ l4 I- P/ f, e- A  X/ v6 K

! m. o6 F" [" e四、工程包下载
% G* t; `( p* Q' l5 c# W# Z% D3 g0 ?: |7 N' v* `5 h( J% c

+ u! S7 M: h; p% c
  H& Q/ a! \6 `: g5 V+ F; ]! C# v五、解压工具1 U4 `% \: R' _$ s- H# ~
  下载最新的7z工具,7z938.exe,X86或X64均可。& e6 N# y, J0 \* I
* B. O+ O+ Y9 h3 z' P
六、调试说明
: W: l1 N  v8 y+ N" x  u1.点击载入配置按钮,选择测试的配置文件, 多字符串发送功能区的字符串列表自动更新。
4 H# x; a% E" O' r3 L3 y& C3 r+ v8 l) T" A+ Y4 R5 B
2.选择STM32的虚拟串口号,由于是USB通信, 可以不用理会波特率等参数,那是串口对外发送的
4 M$ r. O: Y4 Q4 `2 p  波特率,这里通过USB传给STM32,通过串口向外发送的代码可以关掉,也可以保留。
+ O5 \9 ?6 y* T& v6 z7 N! C: v. q+ g% K/ u& o6 e
3.点击启动发送,自动循环发送1-10个脉冲, 示波器测量PC6(第一路),可以看到脉冲数量的变化。, C: t. ^2 g0 n, R9 z

3 u% l" d! z/ R8 `" m
5 U4 b& [/ U% ~9 D+ L1 o9 ]
# L/ f. R$ }$ ~# u
. \7 m* j3 ^3 S9 v9 B
) K# a6 U$ r: u3 W& l+ p1 ^5 \4 A9 [$ ?8 a) \% d6 s! U. k; y) L: N0 S

! m# I; i* ]. D: z/ b1 r1 L5 ?0 g5 l/ K2 ~0 R. }

USB串口工具发送命令

USB串口工具发送命令
赞 收藏 6 评论23 发布时间:2015-3-2 11:58

举报

23个回答
党国特派员 回答时间:2015-3-3 09:13:43
学习一下。   blank.png blank.png blank.png blank.png blank.png blank.png blank.png blank.png blank.png blank.png
kqh1120 回答时间:2015-3-2 15:56:14
学习了啊。还没用过伺服电机 1.png
yyh784 回答时间:2019-11-23 21:08:14
andrewytf 发表于 2018-3-2 17:154 c  O. [- |+ h
求工程包
# W0 M$ ]5 w! P. l/ G2 n/ x
请不要随意伸手……
feel-376797 回答时间:2015-3-2 20:35:27
谢谢分享
bit 回答时间:2015-3-3 09:42:05
挺好的。用的什么伺服电机呢?
jor 回答时间:2017-7-31 08:37:26
楼主能发我工程包吗1023010634@qq.com
ty1148456099 回答时间:2017-8-27 16:01:45
求工程包 572083539@qq.com
boming 回答时间:2017-9-10 07:47:06
求工程包fengzhenbang@126.com
努力的人 回答时间:2017-9-10 11:25:26
建议楼主把资源直接发在帖子上,这样方便大家
andrewytf 回答时间:2018-3-2 17:15:40
求工程包 andrewytf@163.com
幻化仓龙 回答时间:2018-3-22 18:19:16
求工程包 37823542@QQ.com
zhenglu891028 回答时间:2018-4-19 21:13:57
求工程包 172814857@qq.com
soledad928 回答时间:2018-5-23 14:41:00
楼主,能把工程包分享一下吗 499296817@qq.com
飞翔-396652 回答时间:2019-3-27 14:12:11
谢谢分享 有空研究下
拖拉机先生 回答时间:2019-4-10 10:11:38
工程包下载怎么没有了
12下一页

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版