OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
123
返回列表 发新帖
楼主: 草莽

基于SM32的脉冲输出定位控制(精确脉冲个数控制,PWM)

  [复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-11-29
在线时间
7 小时
发表于 2018-9-26 20:19:04 | 显示全部楼层
你好,原子哥。我把你的代码改成了库函数版的,可是没有输出,能帮我看下是什么原因吗?

[mw_shl_code=c,true]void TIM_Left_Init(u16 num,u16 frequency)
{      
       
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
                NVIC_InitTypeDef NVIC_InitStructure;
                TIM_OCInitTypeDef  TIM_OCInitStructure;
        GPIO_InitTypeDef  GPIO_InitStruct;
      
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能PC端口时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3的时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用IO时钟      
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);      
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出              
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;     
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
        GPIO_Init(GPIOC,&GPIO_InitStruct);
      
                target=num;
                current=0;
                if(frequency<20)  frequency=20;
       
        TIM_TimeBaseStructure.TIM_Period = 1000000/frequency-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
        TIM_TimeBaseStructure.TIM_Prescaler = 72-1; //设置定时器3预分频值,使定时器得到1MHz的计数频率
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

        TIM_ITConfig(  //使能或者失能指定的TIM中断
                TIM3, //TIM3
                TIM_IT_Update ,
                ENABLE  //使能
                );
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;       
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 0;       
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;       

        TIM_OC1Init(TIM3, &TIM_OCInitStructure);       
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
       
        TIM_CtrlPWMOutputs(TIM3,ENABLE);        //MOE 主输出使能       

        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
        TIM_ARRPreloadConfig(TIM3, ENABLE);
        TIM_SetCompare1(TIM3,TIM_TimeBaseStructure.TIM_Period/2);   //匹配值1等于重装值一半,是以占空比为50%

        TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
}


void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
                {
                        current++;
                        if(current==target)
                        {
                                TIM_Cmd(TIM3, DISABLE);
                        }
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源
                }
}[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

高级会员

Rank: 4

积分
927
金钱
927
注册时间
2018-5-7
在线时间
101 小时
发表于 2018-9-28 10:56:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-10-4
在线时间
1 小时
发表于 2018-10-11 16:00:34 | 显示全部楼层
棒!支持
回复 支持 反对

使用道具 举报

1

主题

36

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2018-10-14
在线时间
9 小时
发表于 2018-10-23 14:16:06 | 显示全部楼层
感谢大佬。学习了
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2017-6-26
在线时间
74 小时
发表于 2018-11-22 15:10:04 | 显示全部楼层
谢谢分享~~~
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-12-9
在线时间
5 小时
发表于 2018-12-9 22:44:33 | 显示全部楼层
学到了PWM怎嘛才能让小车动起来啊
回复 支持 反对

使用道具 举报

0

主题

21

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1612
金钱
1612
注册时间
2018-5-4
在线时间
444 小时
发表于 2018-12-17 16:19:35 | 显示全部楼层
楼主你好,我修改了一下你的例程,用的是TIM2,CH2通道的,但发现会脉冲丢失,电机走位不对,不知道哪里出了问题;
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-4-24
在线时间
4 小时
发表于 2019-5-7 15:57:12 | 显示全部楼层
辛勤的原子哥,好样的。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2019-5-9
在线时间
4 小时
发表于 2019-5-9 11:13:48 | 显示全部楼层
草莽 发表于 2014-11-9 22:00
回复【4楼】正点原子:
---------------------------------
原子哥是我们的榜样、又是我们湖南老乡、是做老 ...

原子是湖南的?
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
302
金钱
302
注册时间
2015-2-13
在线时间
25 小时
发表于 2019-5-9 11:23:15 | 显示全部楼层
这速度....
羡慕死我了....
回复 支持 反对

使用道具 举报

8

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2017-11-24
在线时间
43 小时
发表于 2019-5-16 09:36:03 | 显示全部楼层
大佬还是大佬
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-5-17
在线时间
2 小时
发表于 2019-5-18 11:21:22 | 显示全部楼层
能用其他的定时器驱动吗/
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-7-24
在线时间
3 小时
发表于 2019-8-3 15:36:14 | 显示全部楼层
LZNB  谢谢
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2019-7-23
在线时间
2 小时
发表于 2019-8-4 14:51:25 | 显示全部楼层
关注加一
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2019-5-28
在线时间
21 小时
发表于 2019-8-5 20:50:40 | 显示全部楼层
正好是想要的,解决问题了
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2019-8-29
在线时间
35 小时
发表于 2019-10-15 16:52:05 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-10-18
在线时间
0 小时
发表于 2019-10-18 20:52:02 | 显示全部楼层
很有用,谢谢
回复 支持 反对

使用道具 举报

1

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2019-10-19
在线时间
16 小时
发表于 2019-10-20 15:45:22 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-11-6
在线时间
5 小时
发表于 2019-11-6 22:33:16 | 显示全部楼层
世间美好与你环环相扣!
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-9-20
在线时间
13 小时
发表于 2020-3-16 18:10:04 | 显示全部楼层
想要从f103库函数改f407,希望能求教一下库函数版本
回复 支持 反对

使用道具 举报

10

主题

50

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2014-11-6
在线时间
24 小时
 楼主| 发表于 2020-3-17 17:06:24 | 显示全部楼层
caixangwen523 发表于 2018-6-4 14:34
楼主不是已经把加减速写到最后的例程中去了,怎么会说最大的问题是没有加减速,不适于步进跑高速,难不成 ...

说“最大问题是没有加减速……”的时间是2014年,带加减速的是后面补充的,不矛盾。
回复 支持 反对

使用道具 举报

0

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2014-9-18
在线时间
21 小时
发表于 2020-5-9 16:46:56 | 显示全部楼层

感谢楼主无私奉献!!赞一个啊
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2020-5-21
在线时间
9 小时
发表于 2020-6-5 11:13:00 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2020-5-21
在线时间
9 小时
发表于 2020-12-23 11:08:10 | 显示全部楼层
本帖最后由 W18434362896 于 2020-12-23 11:10 编辑

还没看,不过我这边已经实现了F4用定时器1和8实现精确定位控制,控制伺服驱动器。正在向着双轴联动方向学习。感觉单片的32F4只能实现双轴联动了吧,小白发言,无知勿喷,一起学习进步。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2017-6-12
在线时间
27 小时
发表于 2021-1-1 14:17:07 | 显示全部楼层
void TIM3_IRQHandler()      //定时器3全局中断函数
{
        long temp;
        if(TIM3_SR&0x0001)
        {
                if(PlusMinus==ON)  
                {
                        temp=Current;
                        temp++;       //如果方向为正,当前值加一  
                        Current=temp;
                }
                else   
                {
                        temp=Current;
                        temp--;       //否则方向为负,当前值减一
                        Current=temp;
                }
               

                if(Current==LadderTarget[LadderOrderNum])
                {
                        if(LadderOrderNum< (LadderNum<<1))
                        {
                                LadderOrderNum++;
                                TIM3_PSC=LadderPSC[LadderOrderNum];
                        }
                        else
                        {
                                TIM3_CR1&=~(1<<0);          
                                TIM3_CNT=0x0000;
                               
                                RunFlag=OFF;         
                        }
                }                               
               
                TIM3_SR=0x0000;
        }
}

为什么没有清除中断标志位。。
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2020-5-9
在线时间
43 小时
发表于 2021-1-25 09:18:33 | 显示全部楼层
感谢分享!!!
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-8-20
在线时间
3 小时
发表于 2021-1-25 19:23:13 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2021-1-25
在线时间
7 小时
发表于 2021-1-26 17:11:59 | 显示全部楼层
很棒】
回复 支持 反对

使用道具 举报

4

主题

178

帖子

0

精华

高级会员

Rank: 4

积分
668
金钱
668
注册时间
2019-7-28
在线时间
60 小时
发表于 2021-2-9 18:11:37 | 显示全部楼层
非常好的思路,但没看见HAL库方式,不过,学习了!
回复 支持 反对

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2018-1-30
在线时间
89 小时
发表于 2021-2-15 20:37:31 | 显示全部楼层
感谢楼主
回复 支持 反对

使用道具 举报

104

主题

313

帖子

0

精华

高级会员

Rank: 4

积分
893
金钱
893
注册时间
2014-11-13
在线时间
53 小时
发表于 2022-1-12 23:33:58 | 显示全部楼层
感谢无私奉献!!感谢无私奉献!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 20:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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