pwm 驱动电机 动不了。

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

  1. include <rtthread.h>4 d1 F3 h0 i2 q' w) W8 M% z3 c9 P
  2. #include <rtdevice.h>) k+ l  Q- a. B/ d. N

  3.   G7 ~; c0 Y. {4 `* u+ g
  4. #define LED_PIN_NUM         59      /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 PD12*/6 }2 r& d. r* m( g- J
  5. #define PWM_DEV_NAME        "pwm4"  /* PWM设备名称 */
    6 u$ _( b1 ~2 p; b
  6. #define PWM_DEV_CHANNEL     1       /* PWM通道 */
    ; T% l- M5 z* V; O0 l( }; W
  7. % y+ d* P: x+ S( D
  8. struct rt_device_pwm *pwm_dev;      /* PWM设备句柄 */. y" E4 E: ], y0 I. ^$ R+ R

  9. " E& H) i6 b+ N  I
  10. static int pwm_led_sample(int argc, char *argv[])
    : S9 G$ i: k# @7 ]% c
  11. {
    , q" p) K2 p7 G% _; P
  12.     rt_uint32_t period, pulse, dir;
      C* }4 R) U$ b' J. S
  13. 5 \( l! ?4 T% g0 V7 ?  j( e+ o
  14.     period = 5000000;    /* 周期为0.5ms,单位为纳秒ns */0 m. `3 j3 m7 s) {: u! U- ?
  15.     dir = 1;            /* PWM脉冲宽度值的增减方向 */
    7 U% E6 D3 }* M' ?' G
  16.     pulse = 0;          /* PWM脉冲宽度值,单位为纳秒ns */
    $ U0 j3 G- r+ O, e
  17. . m2 G; L+ _5 Q  |' H5 I$ s$ f  Z
  18.     /* 设置LED引脚脚模式为输出 */
    / f) U, U/ s/ b& ~8 f
  19.     rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);& {9 l4 f' \# ~: d/ q( }
  20.     /* 拉高LED引脚 */
    + e" R3 y. j+ ?& F
  21.     rt_pin_write(LED_PIN_NUM, PIN_HIGH);
    & k) s2 v6 ^' I  H- t+ s
  22.    
    8 X: X2 b. @/ k* n
  23.     /* 查找设备 */
    . o0 W+ ?) l/ q1 a
  24.     pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
    / v9 v/ [/ u& p4 C, m
  25.     if (pwm_dev == RT_NULL)3 i  f% t# d9 [7 [6 n. {% Z
  26.     {
    2 B' `$ G8 }% h2 o0 ?6 j3 m9 e* ?2 A
  27.         rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);% o, L9 V/ u6 W+ t+ D" H2 M
  28.         return RT_ERROR;
    . |: l' n2 }; O& u. B( v
  29.     }
      u$ _' c! S3 D1 |5 A/ t7 _
  30. 6 U$ z& R. k8 {: L7 S
  31.     /* 设置PWM周期和脉冲宽度默认值 */$ D6 b/ T, L4 V. M! P* A
  32.     rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
    " Y( @: F6 Q; \; ]0 b
  33.     /* 使能设备 */3 |5 u$ H: h) |& d5 ?8 N+ E
  34.     rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);* @3 r& j( b0 G5 f7 Z
  35.     & d; l/ z& N! f5 j$ E
  36.     while (1). E7 `# I, {- _4 F/ Z6 w! u
  37.     {
    3 s& K: v) }3 T
  38.         rt_thread_mdelay(5000);
    ! B) {  w5 C3 x, D5 h. l
  39.         if (dir)
    . N/ p, R5 Z, O6 W) d& B8 s
  40.         {
    $ Q" G) K- U2 [
  41.             pulse += 5000;      /* 从0值开始每次增加5000ns */0 b5 K% M8 W# m" Z, {' c+ o
  42.         }
    % Y# }" U) v7 V
  43.         else- U9 A) @/ X: c( ~
  44.         {
    + z" g4 [# h' I! O
  45.             pulse -= 5000;      /* 从最大值开始每次减少5000ns */
    : R; z3 g3 r- p+ |8 f: c- z
  46.         }
    ' H: l9 [( Q9 R, ?
  47.         if (pulse >= period)" E+ c1 W  K3 P. n, A, j+ j: A
  48.         {; ^2 T; _$ g& @  G) c
  49.             dir = 0;
    6 i# a1 k, t6 `# D/ k
  50.         }
    & G* F5 L+ |! b0 n1 H# ~3 ~1 b7 B3 R) G
  51.         if (0 == pulse)
    ( k2 E' N5 s# P" h  T
  52.         {/ F4 W6 o* x& |% W
  53.             dir = 1;
    ; P# ?7 H* ^$ g( U* s" J
  54.         }2 c6 v0 }( Q& p& d

  55. - J0 a+ P" f3 n
  56.         /* 设置PWM周期和脉冲宽度 */
    . ?" x0 U- o0 h
  57.         rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);& w1 \3 l% |% Z7 k2 o
  58.     }
    - i6 `9 U  z5 s8 ^5 ]. D
  59. }6 }3 K9 k0 k; s5 k9 Y1 K' H8 X  `
  60. /* 导出到 msh 命令列表中 */
    $ r! k. x  k$ N# k
  61. MSH_CMD_EXPORT(pwm_led_sample, pwm sample);
复制代码

0 ^4 H# ?. ]( k; _按这些参数 来驱动电机,为啥电机不动呢?使用pwm, 用的驱动板 四路电机.png ; V* J+ M% E  J! q) y! Z: m4 k
接线  电机控制1  正转,,pwm1 里面的外面的  都试着接pd12 的pwm 信号,发现没反应?1 m8 O+ m$ S+ t

' J' ]; I. I. ~; a' f( j
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-7-25 09:14:46 | 显示全部楼层
楼主,从代码上看,你的pd12好像不是pwm的输出信号引脚,你的pd12只是配置了一个输出模式,关于pwm信号,你的是配置了channel1,应该看看pwm channel1是哪个引脚的。
使用道具 举报 回复
发表于 2019-7-27 10:05:12 | 显示全部楼层
注释掉这两句就可以。
; G; J2 c+ u, B2 j4 v9 d/ L1 F /* 设置LED引脚脚模式为输出 */2 r0 y) C, m' p# x) _6 P
    rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
1 {7 \0 t8 V2 Z/ c3 I    /* 拉高LED引脚 */
# B5 F& A% @0 ?/ _    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
# d) T& u  p0 c2 v7 `注释掉这两句就可以。9 B, j! P; u2 m% J1 ^
/* 设置LED引脚脚模式为输出 */# {- g3 d" W9 _0 p7 R/ }, t& \
    rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);

: b2 D" Y6 n' V6 v2 x& K. X嗯,pwm设备需要用pwm的api,使用其他设备的api会有影响的
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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