打印

关于STM32如何利用TIM3的输入捕获实现用M/T法测电机的转速?

[复制链接]
8887|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wenwenyuanyuan|  楼主 | 2013-7-24 14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很高兴能在这里认识各位,我最近开始学习STM32,很多方面都不是很明白,这里希望各位能给我一点帮助,谢谢了!!
我想利用STM32的TIM3的输入捕获实现用M/T法测电机的转速,自己写的程序老出问题,不知道各位谁有相关的程序,能不能指导我一下。或者发我邮箱也可以(815636527@qq.com
沙发
wenwenyuanyuan|  楼主 | 2013-7-24 16:24 | 只看该作者
怎么没有人啊!!!

使用特权

评论回复
板凳
uet_cache| | 2013-7-24 18:49 | 只看该作者
没有现成的东西的。你可以把你的问题指出来看看。

使用特权

评论回复
地板
wenwenyuanyuan|  楼主 | 2013-7-24 20:05 | 只看该作者
就是说TIM3中如何配置后可以得到时钟脉冲的个数,一个定时器能不嫩用作捕获外部脉冲技术的同时技术自己的时钟脉冲个数,把这两个用两个变量表示出来,这样就可以了,我现在是不知道怎么配置了。,有那个大大帮助我一下啊???

使用特权

评论回复
5
wenwenyuanyuan|  楼主 | 2013-7-25 09:30 | 只看该作者
求指导啊各位,怎么没有人呐???

使用特权

评论回复
6
airwill| | 2013-7-25 09:55 | 只看该作者
wenwenyuanyuan 发表于 2013-7-24 20:05
就是说TIM3中如何配置后可以得到时钟脉冲的个数,一个定时器能不嫩用作捕获外部脉冲技术的同时技术自己的时 ...

错别字真多!

用捕获中断就可以计数捕获外部脉冲, 并通过定时器的值, 计算脉冲之间的时间.

使用特权

评论回复
7
wenwenyuanyuan|  楼主 | 2013-7-25 16:01 | 只看该作者
真心不好意思,打字的时候没有注意看!!谢谢指点!

使用特权

评论回复
8
wenwenyuanyuan|  楼主 | 2013-7-25 16:10 | 只看该作者
请教一下如何利用STM32的TIM4对正交编码的外部脉冲信号计数,当定时到10ms产生一个中断后读出10ms内的全部脉冲数???

使用特权

评论回复
9
zeluo| | 2013-7-25 19:11 | 只看该作者
这方面应该现成的资料不多  楼主   这一块  你需要多花点时间  好好琢磨琢磨

使用特权

评论回复
10
wenwenyuanyuan|  楼主 | 2013-7-26 07:56 | 只看该作者
嗯嗯,刚刚对stm32有所了解,尤其是对库函数的使用非常不熟悉!!

使用特权

评论回复
11
wenwenyuanyuan|  楼主 | 2013-7-26 14:58 | 只看该作者
求各位指导一下,我下面的程序,我配置TIM1给互补输出,通道一占空比为80%,通道二为50%,通道三位20%,软件仿真后,其相应的通道输出和配置的一样为80%、50%和20%,但是相应的互补输出通道却全是20%,要求应该和相应配置的一样为80%、50%和20%啊,这是问什么呢?
#include"stm32f10x.h"
void GPIO_init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;//声明端口结构,需要放在前面
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//开启相应端口时钟
//        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        //*端口A8,A9,A10是TIM1_PWM波的输出端***************************?
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PWM波设为复用推挽输出
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//端口频率可设为2,10,50??
        GPIO_Init(GPIOA,&GPIO_InitStructure);//启动A端口
        //***************************************************************************
        //**************端口B13,B14,B15是TIM1_PWM波的互补输出端**********************
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//端口频率可设为2,10,50
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//PWM波的复用推挽输出
        GPIO_Init(GPIOB,&GPIO_InitStructure);//启动B端口
}
//**************************************************************************
//****TIM1_PWM波1通道初始化*************************************************
void TIM1_PWM_1_init(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_OCInitTypeDef TIM_OCInitStructure;
        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
        TIM_TimeBaseStructure.TIM_Period=1000-1;
        TIM_TimeBaseStructure.TIM_Prescaler=72-1;
        TIM_TimeBaseStructure.TIM_ClockDivision=0;
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Down;
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

        TIM_ARRPreloadConfig(TIM1,ENABLE);//使能TIM1在ARR上的预装载寄存器
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//选择定时器模式TIM脉冲宽度调制模式1
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//选择输出比较状态
        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//选择互补输出比较状态
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//选择输出极性
        TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;//选择互补输出极性
        TIM_OCInitStructure.TIM_Pulse=800;//设置待装入捕获比较寄存器的脉冲值       
        TIM_OC1Init(TIM1,&TIM_OCInitStructure);//捕获比较匹配器结构1通道赋值
        TIM_OCInitStructure.TIM_Pulse=500;//设置待装入捕获比较寄存器的脉冲值
        TIM_OC2Init(TIM1,&TIM_OCInitStructure);
        TIM_OCInitStructure.TIM_Pulse=200;//设置待装入捕获比较寄存器的脉冲值
        TIM_OC3Init(TIM1,&TIM_OCInitStructure);

        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);//使能TIM1在CCR1上的预装载寄存器
        TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
        TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);
        //死区设置
        TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;//TIM1_OSSRState设置在运行模式下非工作状态选项
        TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;//TIM1_OSSIState设置在空闲模式下非工作状态选项(使能TIM1 OSSI状态)
        TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;//TIM1_LOCKLevel设置了锁电平参数(不锁任何位)
        TIM_BDTRInitStructure.TIM_DeadTime=0x00;//这里调整死区大小0-0xff,TIM1_DeadTIM1指定了输出打开和关闭状态之间的延时
        TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;//TIM1_Break使能或者失能TIM1刹车输入(失能TIM1刹车输入)
        TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;//TIM1_BreakPolarity设置TIM1刹车输入管脚极性(TIM1刹车输入管脚极性高)
        TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;//TIM1_AutomaticOutput使能或者失能自动输出功能(自动输出功能使能)
        TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);//(设置刹车特性,死区时间,锁电平,OSSI,OSSR状态和AOE(自动输出使能))
        TIM_Cmd(TIM1,ENABLE);//使能或者失能指定的TIM1
        TIM_CtrlPWMOutputs(TIM1,ENABLE);//使能或者失能TIM1外设的主输出
}

使用特权

评论回复
12
cjhk| | 2013-7-26 18:58 | 只看该作者
不是很了解   楼主   帮你顶一个   看看别人的意见吧   不是很了解啊  顶一个  

使用特权

评论回复
13
wenwenyuanyuan|  楼主 | 2013-7-27 22:46 | 只看该作者
好的,多多支持啊!!!

使用特权

评论回复
14
wenwenyuanyuan|  楼主 | 2013-7-29 12:04 | 只看该作者
兄弟们顶一个啊,难道没有人知道怎么解决吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

56

帖子

0

粉丝