IAP15W413AS工业自动化控制之【07定时器产生特定频率脉冲】

  • SingleYork
  • LV5工程师
  • |      2017-08-12 14:36:57
  • 浏览量 1758
  • 回复:5
本帖最后由 SingleYork 于 2017-9-16 16:40 编辑 bg1.png

在前面章节里主要跟大家讲述了通过定时器来控制板子的输出,这一讲主要跟大家介绍如果使用定时器输出特定频率的脉冲。其实对于高手来将,这个东西应该就太简单了,根据频率计算出脉冲周期,然后根据周期设定定时器的定时时间不就好了么?没错,确实就是这样的!STC官方手册上也给出了一种计算输出频率的方式:

输出时钟频率=T0溢出率/2

T0如果工作在1T模式,那么输出时钟频率=(SYSclk)/(65536-)/2

T0如果工作在12T模式,那么输出时钟频率=(SYSclk)/12/(65536-)/2

可知,T0工作在1T模式的时候,定时器的重装值为:

=65536 -(SYSclk/输出时钟频率/2)

T0工作在12T模式的时候,定时器的重装值为:

=65536 -(SYSclk/12/输出时钟频率/2)

那么,根据以上计算方式,我们就可以来配置定时器了:

#define Fre_Mhz 1000    //1kHz



/**************** 定时器配置 ******************/

void        Timer_config(void)

{

        TIM_InitTypeDef                TIM_InitStructure;                                                //结构定义

        TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;                //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask

        TIM_InitStructure.TIM_Polity    = PolityLow;                                    //指定中断优先级, PolityHigh,PolityLow

        TIM_InitStructure.TIM_Interrupt = ENABLE;                                                //中断是否允许,   ENABLE或DISABLE

        TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                                        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext

        TIM_InitStructure.TIM_ClkOut    = DISABLE;                                                //是否输出高速脉冲, ENABLE或DISABLE

        TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / Fre_Mhz/2);        //初值

        TIM_InitStructure.TIM_Run       = ENABLE;                                                //是否初始化后启动定时器, ENABLE或DISABLE

        Timer_Inilize(Timer0,&TIM_InitStructure);                                                //初始化Timer0          Timer0,Timer1,Timer2,Timer3,Timer44

}

本例以OUT00输出脉冲为例,在定时器中断函数里面每中断一次便将OUT00取反,便可实现我们想要的功能:

/********************* Timer0中断函数************************/

void timer0_int (void) interrupt TIMER0_VECTOR        //1ms

{

    OUT00 = !OUT00;         //OUT00输出特定频率波形

}

笔者测试了三种频率的脉冲输出:1K、2K、10K,用示波器测得三种频率下的波形分别如下:

由于MOS管的缘故,在脉冲频率比较高的时候,波形就开始有点失真了,实际单片机本身输出的脉冲频率可以高达十几兆赫兹,但是实际应用当中,我们也未必用的上,一般控制步进电机,几K的脉冲基本够用了。

源代码:

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
千年迟 2017-08-13
不错,学习了:lol
0   回复
举报
发布
SingleYork 回复 2017-08-13
感谢支持,互相学习:)
1   回复
举报
7943603 回复 2017-08-14
不赖啊,姐姐。 程序工整,论点清楚明了,实验手段干净利索
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子