pwm 驱动电机 动不了。

2019-7-25 01:29 [复制链接] 4 325

  1. include <rtthread.h>
    + |& C8 F% X9 E# }8 r
  2. #include <rtdevice.h>, [' `& B5 j% L/ l
  3. , r! w* y- R, u' H, Y  t$ d
  4. #define LED_PIN_NUM         59      /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 PD12*/- j- ~% n1 ~9 M: |
  5. #define PWM_DEV_NAME        "pwm4"  /* PWM设备名称 */
    & {% b* }) g$ D% o
  6. #define PWM_DEV_CHANNEL     1       /* PWM通道 */
    . }9 p/ Y0 |; B# C

  7. $ [% g2 q4 v' p2 ^- m1 P  f
  8. struct rt_device_pwm *pwm_dev;      /* PWM设备句柄 */
    1 P* f0 P- k# n- Q0 h0 `
  9. ' `/ \  b2 y0 g- z* @9 ^, @
  10. static int pwm_led_sample(int argc, char *argv[])( M/ K" C+ n! S+ j8 ?
  11. {  Z: K2 D. R6 Q6 @0 {
  12.     rt_uint32_t period, pulse, dir;& k; K. Y9 Y* p. z

  13. ' b/ v1 @& W; x% ^9 G+ }+ ~
  14.     period = 5000000;    /* 周期为0.5ms,单位为纳秒ns */* q% ~8 C" x4 p& a
  15.     dir = 1;            /* PWM脉冲宽度值的增减方向 */
    ; ]/ V& @* L+ V% `3 s
  16.     pulse = 0;          /* PWM脉冲宽度值,单位为纳秒ns */
    % D& p) N6 v! k3 K4 O" s# f

  17. 8 C* F( d7 m+ b" C7 N' Q/ h0 U
  18.     /* 设置LED引脚脚模式为输出 */! P; u$ V9 ?6 q- R, H1 d
  19.     rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
    6 m- x- ~9 q1 C  C! G0 D
  20.     /* 拉高LED引脚 */
    9 I) a- m+ B7 Z& p. @4 b# H& H
  21.     rt_pin_write(LED_PIN_NUM, PIN_HIGH);3 n+ N3 s. f& X" g% K
  22.    
    1 V" ^! |0 O2 w9 y" m- P
  23.     /* 查找设备 */
    ) z, c, F& j8 Y7 Z: t6 p( s
  24.     pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);: B8 D8 [  G# V
  25.     if (pwm_dev == RT_NULL)
    & i- c+ L% A0 e. s  B
  26.     {
    9 M% a, i  W6 W$ t6 O4 X8 R
  27.         rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);% ^3 `6 [' _2 ^6 {* I/ M) k
  28.         return RT_ERROR;
    : h' Q* ^, y0 X% z) V  g( j# n
  29.     }
    : y2 |# n% }, o( D# D+ D  l
  30. $ q% j  ^& A- C+ Q  Z4 |
  31.     /* 设置PWM周期和脉冲宽度默认值 */! z( J; R0 u* X# K6 `: ]
  32.     rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);9 X  V% w, {& V( }3 T
  33.     /* 使能设备 */
    4 ^4 @  ]: j6 e8 N0 M! f1 B
  34.     rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
    : R3 [- R0 ^6 A9 Z+ [' T6 t
  35.     1 o8 C4 @7 ~$ }+ Y) }
  36.     while (1)4 ^4 B% \* e& h9 Y  B0 E  t! I( b
  37.     {
    . i: ^  K% p% y" \7 E
  38.         rt_thread_mdelay(5000);
    + \( c+ g8 z" _' m" K# l. C% y
  39.         if (dir)
    ! O' A3 B. m" c7 P& J0 O
  40.         {
    7 m" Z' ~3 W. V" |! f! q4 u
  41.             pulse += 5000;      /* 从0值开始每次增加5000ns */
    ! i, H' o+ K8 n6 [3 o/ F. Q. p
  42.         }2 ~, t$ m- y* m
  43.         else
    1 `# V+ o3 Y3 w% S( d* D0 F- F
  44.         {
    ) [- e0 p9 i% @/ R4 [
  45.             pulse -= 5000;      /* 从最大值开始每次减少5000ns */
    4 R+ W3 u# p' G
  46.         }
    , |* ^% S* \& {- A, X
  47.         if (pulse >= period)  _( U2 Q; {6 C; Z5 X, Z! y
  48.         {
    ' B' _3 ^1 ^+ A* x$ c, \: Y# M
  49.             dir = 0;5 T4 S4 o5 S2 d; J+ [
  50.         }
    # B9 }% ^1 P2 c8 f+ _6 @7 [* C! y
  51.         if (0 == pulse), ]) }! X5 K* W' F9 w3 g
  52.         {
    6 r8 Z" m2 J, ?" S
  53.             dir = 1;
    + H- W- {: \+ L- `! m7 q8 \
  54.         }
    ( Y) {+ _/ g& O7 z( h! H

  55. : v/ x+ m2 g" l
  56.         /* 设置PWM周期和脉冲宽度 */
    5 d- s9 V! z0 m* V6 n% b! l
  57.         rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);3 B" o3 C2 u8 y& @* _
  58.     }/ h# @9 O: K! K4 H2 i6 I& A
  59. }
    , l5 S7 Y0 {2 E$ m
  60. /* 导出到 msh 命令列表中 */+ d6 y1 F4 m  p. V# _. V# H+ D
  61. MSH_CMD_EXPORT(pwm_led_sample, pwm sample);
复制代码
/ @) u2 P) B6 E& L
按这些参数 来驱动电机,为啥电机不动呢?使用pwm, 用的驱动板 四路电机.png ( j4 Z: _  E6 S$ f' y
接线  电机控制1  正转,,pwm1 里面的外面的  都试着接pd12 的pwm 信号,发现没反应?2 W0 G# [, e! v8 f5 m
4 c; Y! Z' L, o" ~9 f% R( O
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-7-25 09:14:46 | 显示全部楼层
楼主,从代码上看,你的pd12好像不是pwm的输出信号引脚,你的pd12只是配置了一个输出模式,关于pwm信号,你的是配置了channel1,应该看看pwm channel1是哪个引脚的。
使用道具 举报 回复
发表于 2019-7-27 10:05:12 | 显示全部楼层
注释掉这两句就可以。
6 O8 o- D: r+ C& o' i8 y; [ /* 设置LED引脚脚模式为输出 */% D) \0 n7 j; S  E7 Z! F9 ?- f/ K* t
    rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
0 {! @# w. B# h+ C# s/ T    /* 拉高LED引脚 */
, m  q# f! S" ?, Z    rt_pin_write(LED_PIN_NUM, PIN_HIGH);
使用道具 举报 回复
发表于 2019-12-2 16:33:54 | 显示全部楼层
请问楼主你的这个驱动模块单个电机支持最大电流是多少?
使用道具 举报 回复
发表于 2019-12-2 16:50:47 | 显示全部楼层
小住住 发表于 2019-7-27 10:05
% _! V9 Y! `3 x7 _# @注释掉这两句就可以。
* v) I2 z$ G: I& y /* 设置LED引脚脚模式为输出 */- U5 V9 P3 ]4 k# X2 k
    rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
# n3 b0 Y1 e, j" w8 _  x5 ]0 u
嗯,pwm设备需要用pwm的api,使用其他设备的api会有影响的
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表