宜家定时器怎么用采集信号用哪个管脚

利用单片机定时器实现信号采样和PWM控制_中国百科网
中国百科网-实用知识供应者
您现在的位置: >
> 文章内容:
利用单片机定时器实现信号采样和PWM控制
  PWM控制方式广泛应用于各种控制系统中,但对脉冲宽度的调节一般采用硬件来实现。如使用PWM控制器或在系统中增加PWM电路[1]等,则本钱高、响应速度慢,而且PWM控制器与系统之间存在兼容题目。另外,控制系统中的信号采样通常是由A/D转换器来完成,因此检测精度要求较高时,调理电路复杂,而且因A/D的位数高,从而使设计的系统本钱居高不下。
  本文以应用于温度控制系统为例,先容利用MOTOROLA公司生产的新型单片机MSP430F413内的定时器Time_A设计可以用时间量进行温度采样以及实现PWM调节的方法。为了可在使用少量外围电路的情况下实现控制系统的高精度丈量和控制,一方面用时间量采样,在省往1片A/D的情况下得到12位的高精度;另一方面在定时中断内完全用软件实现PWM调节,以易于进行数据的通讯和显示。该系统在中断内可以解决波形产生的实时在线计算和计算精度题目,可精确、实时地计算设定频率下的脉冲宽度。
  1 单片机MSP430F413及定时器
  MSP430系列的单片机F413在超低功耗和功能集成上都有一定的特色,可大大减小外围电路的复杂性,它的实时处理能力及各种外围模块使其可应用在多个低功耗领域[2]。MSP430F413中通用16位定时器Timer_A有如下主要功能模块。
  (1)一个可连续递增计数至预定值并返回0的计数器。
  (2)软件可选择时钟源。
  (3)5个捕捉/比较寄存器,每个有独立的捕捉事件。
  (4)5个输出模块,支持脉宽调制的需要。
  定时器控制寄存器TACTL的各位可控制Timer_A的配置,并定义16位定时器的基本操纵,可选择原始频率或分频后的输进时钟源及4种工作模式。另外还有清除功能和溢出中断控制位。5个捕捉/比较寄存器CCRx的操纵相同,它们通过各自的控制寄存器CCTLx进行配置。
  2 时间量采样及PWM控制的实现原理
  以应用于温度控制系统为例,先容用定时器实现信号采样和PWM控制的方法。该温度控制系统包括单片机、温度丈量电路、负载驱动电路及电源控制、低电压检测和显示电路等其他外围部分。
  单片机MSP430F413中用于丈量和控制温度的主要I/O口有:
  P1.0:输出50Hz方波,用于产生三角波。
  P1.2:驱动温度控制执行元件,2kHz方波PWM输出。
  P2.0:脉宽捕捉。
  2.1 单片机端口的中断设置
  温度控制系统的50Hz方波输出、PWM输出和输进捕捉都是由定时中断来实现。这3个中断分别由P0、P1和P2口的外围模块引起,属于外部可屏蔽中断。初始化时,对这3个I/O口进行中断设置,并对Time_A控制寄存器TACTL设置,包括输进信号2分频、选用辅助时钟ACLK等。当定义完捕捉/比较寄存器后,重新赋值TACTL,启动定时器,开始连续递增计数。
  2.2 脉宽捕捉实现温度值的采样
  温度丈量电路将温度值转换为电压值,同时单片机产生的50Hz方波经电容充放电电路变换得到同频率的三角波,其电压值切割三角波,从而将温度值转换为相应宽度的脉冲送进单片机。波形变化如图1所示。
  通过设置CCTLx中的模式位,可将对应的捕捉/比较寄存器CCRx设定为捕捉模式,用于时间事件的精确定位。假如在选定的输进引脚上发生选定脉冲的触发沿,则定时器计数的值将被复制到CCRx中。根据这一原理,选定P2.0为输进引脚,设置CCTL2为捕捉模式,所测温度值由模拟量经丈量电路转换为脉冲后,P2.0捕捉脉冲下降沿,进进中断T2,得到与温度值一致的单位时间内的脉冲数,存进CCR2作进一步处理。
  这样,系统就在不使用A/D转换器的情况下完成了模数转换。由于单片机的时钟精确度高,而且时间量是一个相对精度极高的量,但本系统中用时间量进行温度采样可获得12位的高精度,同时采用50Hz脉冲,可以大大消除工频干扰。这些都为进行精确的温度控制提供了必要的条件。
  2.3 PWM信号天生原理
  将捕捉/比较寄存器CCR0和CCR1定义为比较模式,它们的输出单元OUT0和OUT1分别对应单片机引脚P1.0(TA0)和P1.2(TA1)。进进比较模式后,假如定时器CCRx的计数值即是比较寄存器x中的值,则比较信号EQUx输出到输出单元OUTx中,同时根据选定的模式对信号置位、复位或翻转。其中:设置EQU0将OUT0信号翻转,信号时钟与定时器时钟同步,这样就可以在P1.0引脚上得到50Hz的方波信号;设置EQU1输出模式为PWM复位/置位。
  设定模式下定时中断的输出如图2所示。根据设定的PWM复位/置位模式,若CCR1计数器溢出,则EQU1将OUT1复位;若CCR0计数器溢出,则EQU0将OUT1置位。利用CCR0和CCR1计数起始点的差值,实现占空比的变化,从而在P1.2上完成PWM输出。系统对占空比的调节是通过改变CCR1的基数来实现的。定时器时钟为2MHz、CCR1和CCR0的计数值为1 000时,可获得2kHz的PWM输出频率。负载驱动电路将单片机P1.2引脚输出的PWM信号放大滤波,用于驱动大功率的执行元件。
  3& 软件设计
  3.1 系统主程序
  在主程序中包括系统初始化、定时器的初始化、温度采样值的读进、负载驱动和显示等。系统进行温度值采样和PWM输出均在定时中断内完成,PWM输出脉冲的占空比则由PID算法得到。系统主程序流程图如图3所示。
  3.2 PID脉宽调节
  系统对脉宽的调制由PID算法实现。根据算法原理,本系统设计了一套完全由软件实现的PID算法,并且在控制过程中完成参数的自整定。PID调节的控制过程:单片机读出数字形式的实际温度Tn,然后和设定温度Tg相比较,得出差值en=Tn-Tg,根据en的正负和大小,调用PID公式,计算得到与输出电压Δun一致的占空比,调节温度的升降,同时寻找最优条件,改变PID参数。
  增量式PID控制算法的输出量[3]:
  PID调节程序直接写进单片机内,根据得到的值改变计数器CCR1的基数值,从而改变输出脉冲的占空比,达到调节PWM的目的。
  3.3 定时中断
  定时中断子程序流程如图4所示。系统采用的晶振频率为2MHz,T0中断的作用是得到频率为50Hz、占空比为90%的方波,用以产生三角波,并检查1个周期内是否有漏采的数据。T0模溢出翻转为高电平,输出比较间隔为18ms。其中,CCR0加了PWM的模,该值即为CCR0和CCR1的差值,用以产生输出所需的脉冲宽度。
  T1中断内处理的是控制端口的PWM输出,并检查1个周期内是否重复采集数据,T1输出比较产生低电平,输出比较间隔为20ms。T2中断捕捉温度丈量端口的脉宽,得到所测的温度值。
  4& 结束语
  利用单片机MSP430F413内的定时器Time_A进行温度采样以及实现PWM调节的方法,可以广泛用于具有端口捕捉功能的单片机中。与传统方法比较,它不仅可以简化丈量和控制电路的硬件结构,而且可以方便地建立人机接口,实现用软件调整参数,使控制更精确、实时、可靠。经过实验,该方法应用于温度控制系统中获得了预期的精确PWM调节波形。该方法同样可以用于其他单片机控制系统中。&&来源:lele
本站所收集信息资料为网络转载 版权属各作者 并已著明作者 旨在资源共享、交流、学习之用,请勿用于商业用途,本站并不保证所有信息、文本、图形、链接及其它内容的绝对准确性和完整性,故仅供访问者参照使用。
Mail: Copyright by ;All rights reserved.所属子分类:
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
&刚刚开始做定时器输入捕获的时候在这个论坛上找了好久,都没有人分享,也有很多人问,无奈自己动手写了。花了一天的时间,这个东西真的不好写了,对比了库的例子,仿真,等。可以说付出了很多。现在完成了和大家分享。希望大家多多支持。这个程序是在定时器输入捕获的基础上看手册完成的,程序说明:1、程序中定时器4的PB6用于输出频率为1K,占空比为50%的PWM信号。
&&&&&&&&&&&&&& 2、定时器2的PA0用于输入捕获,当程序下到板子上,只有两个脚连在一起才会发生捕获。
&&&&&&&&&&&&&& 3、串口用于发送捕获的值到PC机上。
&&&&&&&&&&&&&& 4、定时器2的CCR1存PWM信号的频率,CCR2存高电平时间。
这里声明一下,如果你要捕获的PWM信号不在ARR,PSC计算的范围内,请自己先计算再使用本程序。
#include "stm32f10x_lib.h"
#include "sys.h"
#include "delay.h" //延时子函数
#include "usart.h"
u16&& IC1V
u16&& IC2V
u16&& DutyC
void PWM_Init(u16 arr,u16 psc);
void Capture_Init(u16 arr,u16 psc);
int& main(void)
& Stm32_Clock_Init(9); //系统时钟设置
& delay_init(72);//延时函数初始化&
& uart_init(72,9600);
& PWM_Init();& //不分频。PWM频率==5Khz
& Capture_Init();&
& while(1)
& &Frequency = 1000000/IC1V
&&DutyCycle = (IC2Value*100)/IC1V//占空比=(IC2Value/IC1Value)*100;
&&printf("Frequency = %d\r\n",Frequency);
&&printf("DutyCycle = %d\r\n",DutyCycle);&
&&printf("suqingxiao\r\n");&
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void PWM_Init(u16 arr,u16 psc)
&//此部分需手动修改 IO口设置&
&RCC-&APB2ENR|=1&&0;&&& //&
&RCC-&APB1ENR|=1&&2;&&&&&& //TIM4 时钟使能
&RCC-&APB2ENR|=1&&3;&&& //使能PORTB时钟
&GPIOB-&CRL&=0XF0FFFFFF;//PB6 输出&
&GPIOB-&CRL|=0X0B000000;//复用功能输出&&&&&&
&GPIOB-&ODR|=1&&6;//PB6 上拉&&
&TIM4-&ARR=//设定计数器自动重装值&&
&TIM4-&PSC=//预分频器不分频&
&TIM4-&CCMR1|=7&&4;& //CH1 PWM2模式&&&&&
&TIM4-&CCMR1|=1&&3; //CH1 预装载使能&&&&&&
&TIM4-&CCER|=1&&0;& //OC1& 输出使能&&&&&
&TIM4-&CR1=0x0080;& //ARPE使能&&
&TIM4-&CR1|=0x01;&&& //使能定时器 3&
&TIM4-&CCR1&& = 500;& //占空比初值 =& 1440*50% = 720&&&&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&&&
void Capture_Init(u16 arr,u16 psc)
&//此部分需手动修改 IO口设置&
&RCC-&APB2ENR|=1&&0;&&& //&
&RCC-&APB1ENR|=1&&0;&&&&&& //TIM2 时钟使能
&RCC-&APB2ENR|=1&&2;&&& //使能PORTA时钟
&&TIM2-&ARR=& //设定计数器自动重装值//刚好1ms&&&
&TIM2-&PSC=& //预分频器,
&GPIOA-&CRL&=0XFFFFFFF0;//PA0 输出&
&GPIOA-&CRL|=0X;//复用功能输出&&&&&&
&GPIOA-&ODR|=1&&0;//PA0 上拉
&TIM2-&SMCR|=0x00D4;
&//TIM2-&SMCR|= 1&&5; //MSM=1 主/从模式
&//TIM2-&SMCR|= 5&&4; //TS=101 触发选择
&//TIM2-&SMCR|= 4&&0; //SMS=100 复位模式
&TIM2-&CCMR1|=1&&0;//CC1S=01 选择输入端&
&TIM2-&CCMR1|=3&&4; //IC1F=0011配置输入滤波器
&TIM2-&CCER|=0&&1; //CC1P=0&选择有效转换边沿& 上升沿有效
&TIM2-&CCMR1|=0&&2; //IC1PS=00 配置输入分频
&TIM2-&CCER|=1&&0; //CC1E=1 允许捕获计数器的值到捕获寄存器中
&TIM2-&CCMR1|=2&&8;//CC2S=10 选择输入端
&TIM2-&CCER|=1&&5; //CC2P=1&选择有交转换边沿 下降沿有效
&TIM2-&CCER|=1&&4; //CC2E=1 允许捕获计数器的值到捕获寄存器中
&TIM2-&DIER|=1&&1;&& //允许更新捕获中断&&&&
&TIM2-&CR1|=0x01;&&& //使能定时器2
& &MY_NVIC_Init(1,3,TIM2_IRQChannel,2);//抢占1,子优先级3,组2&&&&&&&&&
//定时器2中断服务程序&
void TIM2_IRQHandler(void)
{ &&&&& &&& &&&&&&
&IC1Value = TIM2-&CCR1;//读取CCR1也可以清CC1IF标志位
&IC2Value = TIM2-&CCR2;//读取CCR1也可以清CC2IF标志位&&&&&& &&&& &&&&&&&
&TIM2-&SR&=~(1&&1);//清除中断标志位 &&&&
成功只是最后一小步的坚持!
注册时间: 10:41
回复数: 51773
主题数: 369
酷贴数:27
论坛积分:55580
来自: 湖南
我的淘宝小店:
注册时间: 20:54
回复数: 346
主题数: 35
论坛积分:551
回复【楼主位】&suqingxiao&:
---------------------------------
谢谢楼主的分享。
1、我用楼主的代码在原子的板子上做实验,串口调试助手接收的数据很不稳定,而且也不准确。
2、PWM_Init();&&//不分频。PWM频率==5Khz&
&&&&Capture_Init();&
&还有上面Capture_Init();&里面的参数与PWM_Init();&&里面的参数有什么具体关系呢?
串口调试助手显示的部分数据:
Frequency&=&45575
DutyCycle&=&15200
suqingxiao
Frequency&=&671
DutyCycle&=&87
suqingxiao
Frequency&=&515
DutyCycle&=&92
suqingxiao
Frequency&=&511
DutyCycle&=&92
suqingxiao
Frequency&=&47619
DutyCycle&=&8757
suqingxiao
Frequency&=&534
DutyCycle&=&87
suqingxiao
Frequency&=&501
DutyCycle&=&87
suqingxiao
Frequency&=&504
DutyCycle&=&89
suqingxiao
Frequency&=&45575
DutyCycle&=&19277
suqingxiao
Frequency&=&45575
DutyCycle&=&18355
suqingxiao
Frequency&=&45575
DutyCycle&=&17744
suqingxiao
Frequency&=&45575
DutyCycle&=&16700
suqingxiao
Frequency&=&45575
DutyCycle&=&16700
suqingxiao
永远保持一颗学习的心态。
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
不稳定不确定说明你重载太少了,已经溢出了。你可以改大一点Capture_Init();&这样可以测几十HZ.
成功只是最后一小步的坚持!
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
这个程序我已经测试过了,应该不会溢出的,我现在再拷过去测试,也没有见溢出啊,我不知道你那边是不是时间不对。
下面是我后来再拷到工程中测试的数据。你测试如果不行再把重载改大点吧。
suqingxiao
Frequency&=&1000
DutyCycle&=&50
suqingxiao
Frequency&=&1000
DutyCycle&=&50
suqingxiao
Frequency&=&1000
DutyCycle&=&50
成功只是最后一小步的坚持!
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
还有上面Capture_Init();&里面的参数与PWM_Init();&&里面的参数有什么具体关系呢?&谢谢!
关系是:Capture_Init()中的2000是用于计数的,就是触发后到下一次触发的计数,如果捕获的PWM信号周期太长20000不够会有溢出的。PWM_Init();&&中的1000是重载,当设置72-1时,分频为1M,重载1000,就是1M/1000=1K。
如果Capture_Init()设置72-1,说明分频为1M,1M的频率在计数1K的信号那计数器要计数1000次,这个1000次要在Capture_Init()中的2000内,
如果1000次大于Capture_Init()中的2000,那就会溢出了。
所以,如果PWM_Init();&&中的1000这个数很大,那Capture_Init()中的2000要比它大就得了。这样就不会溢出了。
成功只是最后一小步的坚持!
注册时间: 20:54
回复数: 346
主题数: 35
论坛积分:551
回复【5楼】&suqingxiao&:
---------------------------------
谢谢suqingxiao的回复,我再做做实验。
永远保持一颗学习的心态。
注册时间: 20:54
回复数: 346
主题数: 35
论坛积分:551
回复【5楼】&suqingxiao&:
---------------------------------
suqingxiao,我换了一块别家的板子运行你的程序,结果是正确的。
难道我的原子板子坏了,可是我下了个跑马灯的程序可以正常运行。很诡异。
永远保持一颗学习的心态。
注册时间: 20:54
回复数: 346
主题数: 35
论坛积分:551
回复【7楼】&科科1987&:
回复【5楼】&suqingxiao&:
---------------------------------
suqingxiao,我换了一块别家的板子运行你的程序,结果是正确的。
难道我的原子板子坏了,可是我下了个跑马灯的程序可以正常运行。很诡异。
---------------------------------
找出问题了。
是串口调试助手显示刷新的速度远远慢于所接收的速度。把PA0与PB6连接之前,收到许多数据,在连接两引脚之后,这些数据还在不停的刷新,误以为是当前的数据。解决办法就是点击停止显示,再点继续显示,就可以了。
永远保持一颗学习的心态。
注册时间: 22:44
回复数: 28
论坛积分:55
回复【楼主位】&suqingxiao&:
---------------------------------
楼主,APB1的时钟只有36M,为什么这里Capture_Init()设置72-1,说明分频为1M,分频是1M呢?应该是2M的啊
注册时间: 10:41
回复数: 51773
主题数: 369
酷贴数:27
论坛积分:55580
来自: 湖南
回复【9楼】&xin2893&:
---------------------------------
看时钟树图.
我的淘宝小店:
注册时间: 22:44
回复数: 28
论坛积分:55
回复【10楼】&正点原子&:
---------------------------------
懂了,谢谢!先还是没自习看APB1的时钟,先以为到APB1的时钟本来就是36然后预分频2的话定时器最后得到的还是36M所以出问题了,现在懂了,呵呵
注册时间: 14:51
回复数: 24
论坛积分:42
来自: 广州
回复【楼主位】&suqingxiao&:
---------------------------------
请问楼主,为什么定时器2要设置两个输入呀?不是每一个通道对应一个选择输入端嘛?求指教..
他山之石,可以攻玉.
注册时间: 14:51
回复数: 24
论坛积分:42
来自: 广州
回复【1楼】&正点原子&:
---------------------------------
请问原子哥。问楼主,为什么定时器2要设置两个输入呀?不是每一个通道对应一个选择输入端嘛?出来了一个2呢?
IC1Value&=&TIM2-&CCR1;//读取CCR1也可以清CC1IF标志位
&IC2Value&=&TIM2-&CCR2;//读取CCR1也可以清CC2IF标志位&&&&&&&&&&&&&&&&&&&
&TIM2-&SR&=~(1&&1);//清除中断标志位&&&&&&
他山之石,可以攻玉.
注册时间: 22:33
回复数: 26
论坛积分:38
回复【楼主位】&suqingxiao&:
---------------------------------
最近我也在刚学捕获,感谢楼主的程序给了我很大的帮助啊。(*^__^*)
&
我发现楼主关于捕获的IO口配置的那一部分可以稍稍优化一下
&GPIOA-&CRL&=0XFFFFFFF0;//PA0&输出&
&GPIOA-&CRL|=0X;//复用功能输出&&&&&&
&GPIOA-&ODR|=1&&0;//PA0&上拉
可以不用写,因为只要CCxS不为00,则通道被配置为输入,手册P267
而且注释好像也有错误哦!
注册时间: 22:33
回复数: 26
论坛积分:38
回复【10楼】&正点原子&:
---------------------------------
我将楼主的程序研究了一下,把他修改成了用PA1口的PWM捕获输入
&void&Capture_Init(u16&arr,u16&psc)
{
&//此部分需手动修改&IO口设置
&&
&RCC-&APB2ENR|=1&&0;&&&&&&&&&&&&&&&&//辅助功能开启&
&RCC-&APB1ENR|=1&&0;&&&&&&&&&&&&&&&&&//TIM2&时钟使能
&RCC-&APB2ENR|=1&&2;&&&&&&&&&&&&&&//使能PORTA时钟
&&&
&TIM2-&ARR=&&&&&&&&&&&&&&&&&&&//设定计数器自动重装值//刚好1ms&&&
&TIM2-&PSC=&&&&&&&&&&&&&&&&&//预分频器,
&&
//TIM2-&SMCR|=0x00D4; &&&&&&&&&&&&&&//
//&TIM2-&SMCR|=&1&&7;&&&&&&&&&&&&&&&&&//MSM=1&主/从模式,似乎没用到
//&TIM2-&SMCR|=&5&&4;&&&&&A&&&&&&&&&&&&&&//1&&t&&TS=101&触发选择
&TIM2-&SMCR|=&6&&4;&&&&&&&&&&&&&&&//&&TS=110&触发选择,选择TI2FP2
&&TIM2-&SMCR|=&4&&0;&&&&&&&&&&&&&&&&&&&//2&&SMS=100&复位模式,这个必须有,选中的触发输入信号(TRGi)的上升沿重新初始化计数器,并且产生一个更新寄存器的信号
//捕获周期
//&TIM2-&CCMR1|=1&&0;&&&&&B&&&&&&&//3&&&CC1S=01&选择输入端&&&&&&CC1通道被配置为输入,IC1映射到TI1上
&TIM2-&CCMR1|=2&&0;&&&&&&&&&&&&&&&&&//cc1通道被配置为输入,IC1映射到TI2上&& &&
//&TIM2-&CCMR1|=3&&4;&&&&&&C&&&&&&//4&&&&IC1F=0011配置输入滤波器,
&TIM2-&CCMR1|=3&&12;&&&&&&&&&&&&&&&//&&&&&IC2F=0011配置输入滤波器&&,对TI2滤波&
&TIM2-&CCER|=0&&1;&&&&&&&&&&&&&&&&&&&&//5&&&&CC1P=0&选择有效转换边沿,不反相,捕获发生在IC的&&
&TIM2-&CCMR1|=0&&2;&&&&&&&&&&&&&&&&&//6&&&&IC1PS=00&配置输入分频&定义CC1的预分频系数&&
&TIM2-&CCER|=1&&0;&&&&&&&&&&&&&&&&&&&&//7&&&&CC1E=1&允许捕获计数器的值到捕获寄存器中,该位决定了计数器的值能否捕获入TIMx_CCR1寄存器中
&//捕获下降沿
//&TIM2-&CCMR1|=2&&8;&&&&&D&&&&&&//8&&&CC2S=10&选择输入端
&TIM2-&CCMR1|=1&&8;&&&&&&&&&&&&&&//CC2S=01&选择输入端&&&&IC2输入,映射于TI2
&TIM2-&CCER|=1&&5;&&&&&&&&&&&&&&&&&//9&&&&CC2P=1&选择有交转换边沿&
&TIM2-&CCER|=1&&4;&&&&&&&&&&&&&&&&&//10&&&&CC2E=1&允许捕获计数器的值到捕获寄存器中
&TIM2-&DIER|=1&&1;&&&//允许更新捕获中断&&&&
&&&&
&TIM2-&CR1|=0x01;&&&&//使能定时器2
&&&MY_NVIC_Init(1,3,TIM2_IRQChannel,2);//抢占1,子优先级3,组2&&&&&&&&&
}
因为只要CCxS不为00,则通道被配置为输入,所以我将楼主对于IO口配置那部分删除
对于楼主的程序,我认为只有四个地方需要重新配置,已经用ABCD标注,
至于未修改的部分,我理解是对ICx进行配置,所以只要将ICx与TIx按要求对应上,其他对ICx的配置部分就不需要修改
而且有个地方一直不是很理解,就是字母A标注出的那句话,TI1对应TI1FP1,TI2对应TI2FP2??
这个程序调了一天了,还是一点头绪都没有,原子哥帮忙看看呐
注册时间: 10:41
回复数: 51773
主题数: 369
酷贴数:27
论坛积分:55580
来自: 湖南
输入捕获还没研究过...
我的淘宝小店:
注册时间: 22:33
回复数: 26
论坛积分:38
回复【楼主位】&suqingxiao&:
---------------------------------
好吧&,呼叫楼主,呼叫楼主,问题在第15楼。
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
QQ&&请注STM32
成功只是最后一小步的坚持!
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
A:这里是定时器输入口1,我是IC1映射到TI1,&所以是从TI1PF1触发的,具体请看PWM输入图表。
B:通道选择请看手册,CC1通道被配置为输入,IC1映射到TI1上
C:输入滤波器请看手册
D:从输入选择了CCR2,通道TI2.
成功只是最后一小步的坚持!
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
你几个问题点没有把握好,
一个是映射,
一个是主输入,
一个是从输入,
只有从输入才有第一个跳变复位,第二个跳变存在CCR2或者CCR1中,
主输入可以先CCR1,也可能选择CCR2,这里要从输入配合,他们不能同用一个CCR.
这几个问题你能搞清楚了,就很清楚了。
成功只是最后一小步的坚持!
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
//TIM2-&SMCR|=0x00D4;&&&&&&&&&&&&&&&//&
这里不能去掉,PWM输入模式要有一个从模式,从模式是设置成了第一个跳变复位。
成功只是最后一小步的坚持!
注册时间: 09:01
回复数: 88
主题数: 20
论坛积分:348
来自: 广东
主从要分清,选择哪个输入通道就要选择相应的存贮CCR.
成功只是最后一小步的坚持!
注册时间: 22:00
回复数: 133
主题数: 59
论坛积分:310
来自: 山东
回复【楼主位】&suqingxiao&:
---------------------------------
楼主您好!我也在研究PWM输入的问题没搞明白我仿真了一下你的程序和我的程序结果是一样的
也就是说&&当CHI上升沿是产生了捕捉CCR1=CNT&&CNT=0;程序继续运行当PA0口产生下降沿时CCR2的值=0;CNT的值是脉冲数但是CCR2的值=CNT才对啊??
是我的软件有问题还是你的程序有问题&帮忙解决一下吧
谢谢了。困扰我号几天了
注册时间: 22:00
回复数: 133
主题数: 59
论坛积分:310
来自: 山东
回复【15楼】&shaojunyun&:
---------------------------------
我怎么仿真您的程序都以个效果啊&郁闷了总是一个行一个不行&只能捕捉到一个沿
注册时间: 22:00
回复数: 133
主题数: 59
论坛积分:310
来自: 山东
晕了!仿真软件有问题今天把板子拿来试了一下实现了原来是我的问题,看来我以前的程序也是对的,谢谢各位了
注册时间: 15:02
回复数: 12
论坛积分:24
谢谢楼主分享!!!
&&&我还是对哪个主从模式有点搞不懂希望楼主赐教&
注册时间: 16:49
论坛积分:2
手册上PWM输入模式那时有图有说明,你还是先去认真看一下吧。要我一两句话也说不清楚。主要还是自己理解。
注册时间: 16:49
论坛积分:2
回复【23楼】&shenhao7752376&:
回复【楼主位】&suqingxiao&:
---------------------------------
楼主您好!我也在研究PWM输入的问题没搞明白我仿真了一下你的程序和我的程序结果是一样的
也就是说&&当CHI上升沿是产生了捕捉CCR1=CNT&&CNT=0;程序继续运行当PA0口产生下降沿时CCR2的值=0;CNT的值是脉冲数但是CCR2的值=CNT才对啊??
是我的软件有问题还是你的程序有问题&帮忙解决一下吧
谢谢了。困扰我号几天了
---------------------------------
这个你可以看PWM输入模式下的时序图就很清楚了,CH1产生捕获是CH2复位,下一个上升沿来时CH1产生中断CCR1=CNT,下降沿时CCR2=CNT.
注册时间: 15:41
论坛积分:18
来自: 南京
回复【楼主位】&suqingxiao&:
---------------------------------
&PWM_Init();&&//不分频。PWM频率==5Khz&&&楼主&&这条语句没有分频吗?72—1是怎么回事啊
注册时间: 10:41
回复数: 51773
主题数: 369
酷贴数:27
论坛积分:55580
来自: 湖南
<div class="edit_area" id="2就是72.
我的淘宝小店:
注册时间: 08:39
回复数: 56
主题数: 25
论坛积分:131
LZ&&&&&&&&&&&&&&&&&TIM2-&SMCR|=0x00D4;&这一句代码。&
SMS【2:0】=100&复位模式&–&选中的触发输入(TRGI)的上升沿重新初始化计数器,并且产生一个更新寄存器的信号。
TS[2:0]=101滤波后的定时器输入1(TI1FP1)&。&
MSM=1&触发输入(TRGI)上的事件被延迟了,以允许在当前定时器(通过TRGO)与它的从定时器间的完美同步。这对要求把几个定时器同步到一个单一的外部事件时是非常有用的。
不大明白为什么要这么设置,能简单解释下么~谢谢了&
注册时间: 15:20
回复数: 140
主题数: 18
论坛积分:294
回复【4楼】&suqingxiao&:
---------------------------------
IC1Value&=&1000
IC2Value&=&499
Frequency&=&1000
DutyCycle&=&49
---------------
IC1Value&=&1000
IC2Value&=&499
Frequency&=&1000
DutyCycle&=&49
---------------
IC1Value&=&1000
IC2Value&=&499
Frequency&=&1000
DutyCycle&=&49
---------------
我的占空比一直都是49%,而且我采集了高电平的个数是499,这个应该是硬件的原因还是软件的原因呢
注册时间: 15:20
回复数: 140
主题数: 18
论坛积分:294
回复【13楼】&内有元基&:
---------------------------------
每个定时器有四个输入捕获通道IC1、IC2、IC3、IC4。且IC1&IC2一组,IC3&IC4一组。并且可是设置管脚和寄存器的对应关系。且同一个TIx输入映射了两个ICx信号。这两个ICx信号分别在相反的极性边沿有效。
注册时间: 15:20
回复数: 140
主题数: 18
论坛积分:294
回复【26楼】&stc-mp3&:
---------------------------------
输入捕获模式中的一个特例:PWM输入模式见STM32参考手册P267,里面输入捕获模式里面的寄存器设置有一个详细的论述
注册时间: 22:46
回复数: 21
论坛积分:21
来自: 河南
多谢楼主分享&&&正郁闷
注册时间: 16:48
回复数: 269
论坛积分:296
来自: 海外
多谢分享。
注册时间: 10:47
论坛积分:23
来自: 成都
注册时间: 02:26
回复数: 43
论坛积分:70
注册时间: 19:04
回复数: 36
论坛积分:63
把这个程序写进我的开发板,中断进不了。郁闷了。不知道怎么检查问题
注册时间: 19:04
回复数: 36
论坛积分:63
回复【39楼】&云中的太阳&:
把这个程序写进我的开发板,中断进不了。郁闷了。不知道怎么检查问题
---------------------------------
用示波器检查了一下PWM输出,50%的占空比,是没问题的。。
注册时间: 21:38
回复数: 81
主题数: 37
论坛积分:192
我是用TIM3_CH2做的试验,CH2 捕捉PWM频率,CH1捕捉高电平 。寄存器的会写,可是库函数的不知道怎么放在一起。
用下面的方法可以调通,请问楼至怎么把寄存器部分写成库函数,如果照着IC2改,就把之前的配置覆盖了
&& TIM3_ICInitStructure.TIM_Channel = TIM_Channel_2; //CC2S=01 && &选择输入端 IC2映射到TI2上
& && &TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_R&& &//上升沿捕获
& && &TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI ; //映射到TI2上
& && &TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;&& & //配置输入分频,不分频
& && &TIM3_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
&& &TIM3-&CCMR1|=2&&0;//CC1S=10 选择输入端
&&& TIM3-&CCER|=1&&1; //CC1P=1 选择有交转换边沿 下降沿有效
&&& TIM3-&CCER|=1&&0; //CC1E=1 允许捕获计数器的值到捕获寄存器中
&& &TIM_ICInit(TIM3, &TIM3_ICInitStructure);
注册时间: 16:02
回复数: 96
论坛积分:117
其实可以整个库函数的啊
注册时间: 05:40
回复数: 24
论坛积分:24
谢谢分享,记号备用!
注册时间: 09:04
回复数: 41
主题数: 12
论坛积分:77
可用,感谢楼主分享
请选择一个版面...
STM32-F0/F1/F2专区
STM32-F3/F4专区
MSP430专区
ARM7/ARM9/ARM11专区
其他Cortex系列
uCOS & uCGUI & Emwin
trochili(飞鸟)操作系统
中国RTOS联盟
FPGA/CPLD/DSP专区
数字,模拟,高频电路
编程语言学习
蓝牙/WIFI/Zigbee等通信技术
开发工具专栏
UOL 单片机面向对象语言
DIY大赛专区
DIY项目资料专区
论坛建设区
二手交易专栏
& 开源电子网() |

我要回帖

更多关于 宜家定时器怎么用 的文章

 

随机推荐