初级会员

- 积分
- 64
- 金钱
- 64
- 注册时间
- 2018-4-12
- 在线时间
- 10 小时
|
10金钱
纯小白,做毕设刚刚接触STM32,需要捕获遥控器的PWM信号并发送两路控制电机,时间有限没法仔细研究,就在例程的基础上进行了改动,但是捕获到高电平的值有时会跳变成0,这样就没法对电机实现稳定的控制。这个问题已经困扰我几天了,实在想不到解决办法,所以想请教论坛里的各位大佬,就算提出一些可能存在的问题也可以,非常感谢!
主函数如下
#include "sys.h"
#include "timer.h"
extern u8 TIM2CH1_CAPTURE_STA; //输入捕获状态
extern u16 TIM2CH1_CAPTURE_VAL; //输入捕获值
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
TIM1_PWM_Init(15999,90); //72000000/(15999+1)/9=50Hz
TIM2_Cap_Init(0XFFFF,72-1); //1Mhz
while(1)
{
u16 static temp=1500;
if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到一次高电平
{
if(TIM2CH1_CAPTURE_VAL>1000&TIM2CH1_CAPTURE_VAL<2000)
temp=TIM2CH1_CAPTURE_VAL;
TIM2CH1_CAPTURE_VAL-=300;
TIM_SetCompare1(TIM1 ,16000-TIM2CH1_CAPTURE_VAL);
TIM2CH1_CAPTURE_STA=0; //开启下一次捕获
}
if(!TIM2CH1_CAPTURE_STA&0X80) //未捕获到高电平
{
// if(TIM2CH1_CAPTURE_VAL<=1000|TIM2CH1_CAPTURE_VAL>=2000)
TIM2CH1_CAPTURE_VAL=temp;
// break;
TIM2CH1_CAPTURE_VAL-=300;
TIM_SetCompare1(TIM1 ,16000-TIM2CH1_CAPTURE_VAL);
TIM2CH1_CAPTURE_STA=0;
}
}
}
捕获值也就是TIM2CH1_CAPTURE_VAL正常会在800-1600之间变化,是我想要的区间,但是在调试时发现偶尔会跳变成0.
|
|