硬石社区

 找回密码
 立即注册
查看: 909|回复: 2

[STM32F1] 步进电机梯形加减速例程定时器计数的疑问

[复制链接]

8

主题

18

帖子

2918

积分

副船长

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

积分
2918
发表于 2019-1-12 22:33:41 | 显示全部楼层 |阅读模式
例程里面对比较计数的设置有这么一句话
srd.step_delay = (int32_t)((T1_FREQ_148 * sqrt(A_SQ / accel))/10);

按照宏定义我算了下,srd.step_delay已经超过了0xFFFF了,看了下数据手册,定时器1的计数也是16位的吧,这样不会溢出吗?
我改动了一下例程,用的定时器2,然后比较方式是将ARR和CNT同时设置成同一个数来触发中断,然后IO翻转(这样可以随意任意一个IO出PWM了),由于溢出问题,我将STEPMOTOR_TIM_PRESCALER改成7了,然后驱动器的细分按照注释设成了16,步进电机就正常了,所以想问一下,注释里面
//#define STEPMOTOR_TIM_PRESCALER               3  // 步进电机驱动器细分设置为:   32  细分
#define STEPMOTOR_TIM_PRESCALER               7  // 步进电机驱动器细分设置为:   16  细分
//#define STEPMOTOR_TIM_PRESCALER               15  // 步进电机驱动器细分设置为:   8  细分
//#define STEPMOTOR_TIM_PRESCALER               31  // 步进电机驱动器细分设置为:   4  细分
//#define STEPMOTOR_TIM_PRESCALER               63  // 步进电机驱动器细分设置为:   2  细分
//#define STEPMOTOR_TIM_PRESCALER               127  // 步进电机驱动器细分设置为:   1  细分

这些对应关系是怎么想出来的?我试过将STEPMOTOR_TIM_PRESCALER设成7,MICRO_STEP还是32,匀速时转的速度慢了好多
回复

使用道具 举报

8

主题

18

帖子

2918

积分

副船长

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

积分
2918
 楼主| 发表于 2019-1-12 22:35:42 | 显示全部楼层
硬石的例程是默认#define STEPMOTOR_TIM_PRESCALER               3
的,这样定时器就溢出了,我改成了7同时细分也按照注释改了下,就好了
回复 支持 反对

使用道具 举报

8

主题

18

帖子

2918

积分

副船长

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

积分
2918
 楼主| 发表于 2019-1-13 14:36:21 | 显示全部楼层
看了下视频讲解,懂了,srd.min_delay = (int32_t) ((10*(2*3.14159/(FSPR*MICRO_STEP))*T1_FREQ) / speed);对应关系就是MICRO_STEP变大了多少倍,T1_FREQ就缩小多少倍,或者反过来,确保srd.min_delay这个最大速度计数值为一个定值,这个值大了转得就慢,小了转得就快(前提是能达到最大速度)

@硬石,后面的 步进电机机械原点回归指令 这些代码有没讲解的资料呢,我只找到代码,单看代码如果没注释还不怎么好理解
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc. ( 粤ICP备16080364号

GMT+8, 2019-7-16 06:39 , Processed in 0.081329 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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