pwm中脉冲数如何统计

发表在 网络学习营2019-4-30 15:17 [复制链接] 8 494

以下是根据官方的例程写得一个简单的PWM的程序,控制步进电机,由于步进电机的正反转的位置有差异,所以除了通过延时控制波的时间,有什么方法可以获得PWM的脉冲数?0 u# j: _3 q, J$ f

! k- p* \9 W% j: sstruct rt_device_pwm *pwm_dev;      /* PWM设备句柄 */
+ L/ L+ s  g3 o- B4 B0 ]' i' B/ {8 M: z( K- _/ k; `
//一个脉冲的程序,输出频率为 2KHz,占空比为 pulse / period,pulse 值不能超过 period) v8 w& @0 l; F: M8 K6 z6 E
static void motor_thread_entry(void *parameter)
! a, A% V/ U& ^4 S{ ; t* D- |0 w8 r6 F6 w/ X! v, c
                rt_uint32_t period, pulse;
* |6 ~6 g5 F. \, J; P5 {5 F6 A' {8 \& z: O
                period = 250000;    /* 周期为0.25ms,单位为纳秒ns,频率太快每次控制会抖动 */
/ \+ `- k. q- ]! q: C, }                pulse  = 125000;    /* PWM脉冲宽度值,单位为纳秒ns,此时占空比为 pulse / period = 0.5 */( Z5 A8 K0 {4 J9 E) D
       
3 ^" z: a8 V6 j0 f                /* 设置PWM周期和脉冲宽度 */% |8 U7 M$ z* Y! n6 p
                rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
8 p+ _! g7 m$ t                rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);               //使能设备                                                                                " `& T9 x" K5 O
                rt_thread_mdelay(cylinder_number);                                     //800代表延时1圈对应的时间                                                               
* M1 i+ u6 e, `; z( Y$ ~5 a                 rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL);      
: z! o! C+ t0 I4 M1 J0 M9 i
8 v0 w7 @' X# q6 X}( N; k6 x- w/ t, f; Z5 L
2 Q& t) G! m' l1 C
static rt_thread_t tid3 = RT_NULL;
6 ^2 Z$ T3 I/ u- ~% P1 O+ Y/ U; g, C
int motor(void): G3 C  X6 y* l/ y
{        4 C* z& a5 `2 D2 y# d: ^
                /* 查找设备 */# s! y1 }# Z" w+ G" N) N/ ?
                pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);$ s1 |/ G) }* w& t9 [# \2 }
        0 t6 n. w) }# {- k0 e
          if (pwm_dev == RT_NULL)% A3 ]; g7 I, J9 R! e+ r
    {
9 E6 o- J- `& A( g8 W2 N5 N        rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
- N, i! p: Z/ e( b0 j        return RT_ERROR;
$ q- A4 k  ^# m1 R% w) r    }                & \# k7 g) Y) b, C
        0 l4 c! `  Y# x
                /********************************创建线程***************************************/' w7 L( N. Q4 `, b! h2 c
                /* 动态创建线程1,名称是thread1,入口是thread1_entry*/
9 U/ _* K* N. S1 y    tid3 = rt_thread_create("pwm_dev",
4 f, b9 T3 B0 H  F                            motor_thread_entry, RT_NULL,
! d9 W8 N  ~: Y% V9 P1 y                            THREAD_STACK_SIZE,: B, N4 _" @% V+ V# S# {2 Z  j
                            THREAD_PRIORITY, THREAD_TIMESLICE);1 a4 d4 g/ I+ i& U! H) A) m
; t; Q+ q+ f% A; s3 F# H% y
    /* 如果获得线程控制块,启动这个线程 */6 Z1 }5 S  @7 z1 c4 \& o
    if (tid3 != RT_NULL)
% T  d6 Z0 y* }2 L        rt_thread_startup(tid3);3 I2 L9 T. h& I$ h- b* \. Q
                               
+ V$ D0 ]; g2 {" u- t1 g& e          return 0;9 }0 v) ~9 y+ I& p6 Q; t
}7 r9 D; M! ^$ N; F% r

  w1 M& F1 y; M1 I5 L" w& I/ s) n. i
: \, O; U2 {2 t" w5 Z0 c' d5 \# r
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-4-30 15:23:18 | 显示全部楼层
为什么没有相应的api
使用道具 举报 回复
发表于 2019-4-30 16:03:34 | 显示全部楼层
这个功能可以到 github 上去提功能 issue,这样能更快的推动来实现它。
使用道具 举报 回复
发表于 2019-5-2 10:35:31 | 显示全部楼层
yqiu 发表于 2019-4-30 16:03, k  o1 Q( `. C" K! F, w2 c
这个功能可以到 github 上去提功能 issue,这样能更快的推动来实现它。
6 b1 D7 s/ t, ~4 G2 G0 ^
懂了,还没这个功能哈哈
使用道具 举报 回复
发表于 2019-5-21 13:08:10 | 显示全部楼层
请问脉冲数楼主怎么统计的?解决了嘛
3 Q9 O1 F& t- P: ]
使用道具 举报 回复
发表于 2019-5-24 16:21:07 | 显示全部楼层
cyz13 发表于 2019-5-21 13:08) U& g( y1 u. L" y% [! w) O/ Q
请问脉冲数楼主怎么统计的?解决了嘛

* p8 v1 ]4 G8 M5 M2 c没有,尝试过外部接线,将脉冲输出通过接线与io相接,再通过io口输入中断来计数,对我要做的实验来说不是太准,你可以试一下,不过这个方式也不太好
使用道具 举报 回复
发表于 2019-5-25 10:31:59 | 显示全部楼层
pwm用输出比较模式就可以计数脉冲,但是不知rtt的框架支持不
使用道具 举报 回复
发表于 2019-5-27 08:16:31 | 显示全部楼层
STM32可以用主从模式stm32主从模式定时器产生精确脉冲个数,其他的可以把输出通过CPU引脚接到另一个定时器的输入来计数
使用道具 举报 回复
发表于 2019-6-21 09:49:53 | 显示全部楼层
类似的问题
3 l8 l7 G7 K/ b: n) e
0 j3 C- T1 I( U; O4 B7 |https://www.rt-thread.org/qa/thread-11830-1-1.html
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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