OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3799|回复: 5

定时器延时抖动

[复制链接]

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-11-10
在线时间
16 小时
发表于 2017-3-6 14:16:31 | 显示全部楼层 |阅读模式
5金钱


实现功能:STM32上升沿触发开启定时器,延时5us后在相应通道输出脉冲信号
做      法:使用STM32定时器单脉冲方式
问      题:用示波器观察延时精度,在时间轴上存在~15ns抖动
请问有没有可能完全去除抖动或者竟可能减小抖动,定时器相应的配置如下:
[mw_shl_code=applescript,true]void Onepulse_TIM4_Init(u16 arr,u16 psc)
{
        //此部分需手动修改IO口设置
        RCC->APB1ENR|=1<<2;         //TIM14时钟使能   
        RCC->AHB1ENR|=1<<1;           //使能PORTB时钟       

       
        //GPIO B6,B7初始化设置
        GPIO_AF_Set(GPIOB,6,2);        //PB6复用定时器4
        GPIO_Set(GPIOB,PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出


        GPIO_Set(GPIOB,PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOB,7,2);        //PB7复用定时器4

        GPIO_Set(GPIOB,PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOB,8,2);        //PB8复用定时器4
       
/*---------------------------------------------------------------
        TIM4定时器时钟为 84M
        TIM4_CH2配置成输入捕获模式  TIM4_CH1配置为PWM2输出模式
        TIM4_CH2检测到一个上升沿后,经过一定的延时时间,输出一个脉冲
        PWM2模式增计数下,计数值小于比较值为无效电平及低电平
-----------------------------------------------------------------*/
        TIM4->CR1|=1<<3;         //选择定时器为单脉冲模式
    TIM4->SMCR|=6<<4;                //选择触发源为IC2
        TIM4->SMCR|=6<<0;                //(触发模式),使用 TI2FP2 启动计数器



//-------------------------------------------------------------------------
         
         //TIM4->CCMR1|=1<<2;   //不延时输出
       
//--------------------------------------------------------------------------               
               
        //定时器设置
        TIM4->ARR=arr;                  //设定计数器自动重装值   
        TIM4->PSC=psc;                  //预分频器
        TIM4->CR1|=0<<8;         //不分频
        TIM4->CR1|=0<<4;         //增计数模式       
               
        //输入配置
        TIM4->CCMR1|=1<<8;                //CC2S=01         选择输入端 IC2映射到TI2上
        TIM4->CCER|=0<<5;                 //CC2P=0        上升沿捕获        CC2P=1        下降沿捕获       
        TIM4->CCMR1|=0<<12;                 //IC2F=0000 配置输入滤波器 不滤波
        TIM4->CCMR1|=0<<10;         //IC2PS=00         配置输入分频,不分频
        TIM4->CCER|=0<<7;                 //CC2NP=0       
        TIM4->CCER|=1<<4;                 //CC2E=1         允许捕获计数器的值到捕获寄存器中
                       
        //输出配置
        TIM4->CCMR1|=7<<4;          //CH1 PWM2模式                    
        TIM4->CCMR1|=1<<3;         //CH1 预装载使能               
        TIM4->CCER|=1<<0;           //OC1 输出使能       
        TIM4->CCER|=0<<1;           //OC1 高电平有效       
       
       
                        //输出配置CH3
        TIM4->CCMR2|=7<<4;          //CH1 PWM2模式                    
        TIM4->CCMR2|=1<<3;         //CH1 预装载使能               
        TIM4->CCER|=1<<8;           //OC3 输出使能       
        TIM4->CCER|=0<<9;           //OC3 高电平有效       
       
       
        TIM4->CR1|=1<<7;           //ARPE使能
}
[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2017-3-6 16:11:27 | 显示全部楼层
IO口外部加上拉,切换为开漏输出模式,有可能是驱动力不够导致的。我猜
活到老,学到老。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-6 18:17:43 | 显示全部楼层
15ns已经很小的了吧?  试试不用中断服务函数,直接改为全部硬件的方式,看看吧。
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-11-10
在线时间
16 小时
 楼主| 发表于 2017-3-6 20:19:16 | 显示全部楼层
正点原子 发表于 2017-3-6 18:17
15ns已经很小的了吧?  试试不用中断服务函数,直接改为全部硬件的方式,看看吧。

我没有使用中断方式,直接用单脉冲方式实现
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-11-10
在线时间
16 小时
 楼主| 发表于 2017-3-6 20:21:34 | 显示全部楼层
kingnike 发表于 2017-3-6 16:11
IO口外部加上拉,切换为开漏输出模式,有可能是驱动力不够导致的。我猜

我明天试试。。。。另外延时时间上存在50ns误差,请问你觉得是什么原因造成的?
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2017-3-7 08:23:35 | 显示全部楼层
周瑛子 发表于 2017-3-6 20:21
我明天试试。。。。另外延时时间上存在50ns误差,请问你觉得是什么原因造成的?

先检查下你的初始化代码,然后再看下是不是你的其他任务太多挤占了CPU,没有全部代码和环境,不好下结论。
活到老,学到老。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 02:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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