OpenEdv-开源电子网

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

PWM输出控制好盈电调时老是提示无油门信号

[复制链接]

10

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-6-3
在线时间
4 小时
发表于 2015-7-26 11:48:19 | 显示全部楼层 |阅读模式
5金钱
我的是战舰版的STM32开发板,用timer3输出4路PWM信号,频率为50Hz,软件仿真时很好,但是当与电调连接后,电调提示无油门信号输出,请问怎么解决,急。

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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-26 12:07:50 | 显示全部楼层
贴代码吧,这样不知道怎么理解你的问题
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

10

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-6-3
在线时间
4 小时
 楼主| 发表于 2015-7-26 12:24:24 | 显示全部楼层
#include "timer.h"
#include "led.h"
#include "usart.h"

void TIM3_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //?±??????

TIM_TimeBaseStructure.TIM_Period = arr; //?è???????????ü??????×°????????×?????×°???????÷????????  ??????5000??500ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //?è??????×÷??TIMx?±?????????????¤·?????  10Khz??????????  
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //?è???±??·???:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM?ò??????????
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIMx???±???ù??????
 
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //???????¨??TIM3????,???í?ü??????

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3????
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //??????????0??
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //????????3??
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??±?????
NVIC_Init(&NVIC_InitStructure);  //?ù??NVIC_InitStruct?????¨???????????????èNVIC?????÷

TIM_Cmd(TIM3, ENABLE);  //????TIMx???è
 
}
//?¨?±?÷3????·??????ò
void TIM3_IRQHandler(void)   //TIM3????
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //?ì?é???¨??TIM????·??ú??·?:TIM ?????? 
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //????TIMx???????????í??:TIM ?????? 
LED1=!LED1;
}
}




//TIM3 WM??·??????? 
//PWM??????????
//arr??×?????×°??
//psc???±???¤·?????
void TIM3_PWM_Init(u16 arr,u16 psc)
{  
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //?????¨?±?÷3?±??
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //????GPIO???è??AFIO???????????é?±??

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3??·???????  TIM3_CH2->B5    
 
   //?è??????????????????????,????TIM3 CH2??PWM?????¨?? GPIOB.5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //???????ì????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//??????GPIO
  
   //??????TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //?è???????????ü??????×°????????×?????×°???????÷????????
TIM_TimeBaseStructure.TIM_Prescaler =psc; //?è??????×÷??TIMx?±?????????????¤·????? 
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //?è???±??·???:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM?ò??????????
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIMx???±???ù??????

//??????TIM3 Channel2 WM????  
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //?????¨?±?÷????:TIM?????í???÷??????2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±???????????
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±?????????
TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //?ù??T???¨???????????????èTIM3 OC2

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //?????¨?±?÷????:TIM?????í???÷??????2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±???????????
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±?????????
TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //?ù??T???¨???????????????èTIM3 OC2

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //?????¨?±?÷????:TIM?????í???÷??????2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±???????????
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±?????????
TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //?ù??T???¨???????????????èTIM3 OC2

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //?????¨?±?÷????:TIM?????í???÷??????2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±???????????
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????????:TIM????±?????????
TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //?ù??T???¨???????????????èTIM3 OC2

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //????TIM3??CCR2?????¤×°???????÷
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //????TIM3??CCR2?????¤×°???????÷
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //????TIM3??CCR2?????¤×°???????÷
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //????TIM3??CCR2?????¤×°???????÷
TIM_Cmd(TIM3, ENABLE);  //????TIM3


}
////////////////////////////////////////
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"

int main(void)
{

delay_init();       //???±??????????   
NVIC_Configuration();   //?è??NVIC????·?×é2:2??????????????2???ì????????
uart_init(9600);  //????????????9600
  LED_Init();      //LED??????????
  TIM3_PWM_Init(14499,99);
TIM_SetCompare2(TIM3,19000);
delay_ms(2000);
TIM_SetCompare2(TIM3,1000);
delay_ms(1000);
  while(1)
{  
LED1 = 1;
delay_ms(100);
LED1 = !LED1;
delay_ms(100);
TIM_SetCompare1(TIM3,10000);
TIM_SetCompare2(TIM3,10000);
TIM_SetCompare3(TIM3,10000);
TIM_SetCompare4(TIM3,10000);
}  
}
回复

使用道具 举报

10

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-6-3
在线时间
4 小时
 楼主| 发表于 2015-7-26 12:30:12 | 显示全部楼层
来个无乱码的

#include "timer.h" 
#include "led.h" 
#include "usart.h" 

void TIM3_Int_Init(u16 arr,u16 psc) 

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; 
NVIC_InitTypeDef NVIC_InitStructure; 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 

TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc; 
TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); 

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure);  

TIM_Cmd(TIM3, ENABLE); 
  


void TIM3_IRQHandler(void)  

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)

TIM_ClearITPendingBit(TIM3, TIM_IT_Update  ); 
LED1=!LED1; 







void TIM3_PWM_Init(u16 arr,u16 psc) 
{   
GPIO_InitTypeDef GPIO_InitStructure; 
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; 
TIM_OCInitTypeDef  TIM_OCInitStructure; 


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE); 

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 
  
  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOB, &GPIO_InitStructure);
   
  
TIM_TimeBaseStructure.TIM_Period = arr; 
TIM_TimeBaseStructure.TIM_Prescaler =psc; 
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure); 
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init(TIM3, &TIM_OCInitStructure); 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);  

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); 
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  
TIM_Cmd(TIM3, ENABLE);



//////////////////////////////////////// 
#include "led.h" 
#include "delay.h" 
#include "key.h" 
#include "sys.h" 
#include "usart.h" 
#include "timer.h" 

int main(void) 
{

delay_init();          
NVIC_Configuration(); 
uart_init(9600);
  LED_Init();     
  TIM3_PWM_Init(14499,99); 
TIM_SetCompare2(TIM3,19000); 
delay_ms(2000); 
TIM_SetCompare2(TIM3,1000); 
delay_ms(1000); 
  while(1) 
{   
LED1 = 1; 
delay_ms(100); 
LED1 = !LED1; 
delay_ms(100); 
TIM_SetCompare1(TIM3,10000);
TIM_SetCompare2(TIM3,10000); 
TIM_SetCompare3(TIM3,10000); 
TIM_SetCompare4(TIM3,10000); 
}   
}
回复

使用道具 举报

10

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-6-3
在线时间
4 小时
 楼主| 发表于 2015-7-26 12:30:41 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
来个无乱码的 

#include "timer.h"  
#include "led.h"  
#include "usart.h"  

void TIM3_Int_Init(u16 arr,u16 psc)  
{  
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
NVIC_InitTypeDef NVIC_InitStructure;  

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  

TIM_TimeBaseStructure.TIM_Period = arr; 
TIM_TimeBaseStructure.TIM_Prescaler =psc;  
TIM_TimeBaseStructure.TIM_ClockDivision = 0;  
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
   
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );  

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;   
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
NVIC_Init(&NVIC_InitStructure);   

TIM_Cmd(TIM3, ENABLE);  
   
}  

void TIM3_IRQHandler(void)   
{  
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) 
{  
TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  
LED1=!LED1;  
}  
}  





void TIM3_PWM_Init(u16 arr,u16 psc)  
{    
GPIO_InitTypeDef GPIO_InitStructure;  
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
TIM_OCInitTypeDef  TIM_OCInitStructure;  


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  

GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);  
   
   
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_Init(GPIOB, &GPIO_InitStructure); 
    
   
TIM_TimeBaseStructure.TIM_Period = arr;  
TIM_TimeBaseStructure.TIM_Prescaler =psc;  
TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;  
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
TIM_OC1Init(TIM3, &TIM_OCInitStructure);  
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  
TIM_OC2Init(TIM3, &TIM_OCInitStructure); 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;  
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
TIM_OC3Init(TIM3, &TIM_OCInitStructure);  

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;  
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
TIM_OC4Init(TIM3, &TIM_OCInitStructure);   

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);   
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);   
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);   
TIM_Cmd(TIM3, ENABLE); 


}  
////////////////////////////////////////  
#include "led.h"  
#include "delay.h"  
#include "key.h"  
#include "sys.h"  
#include "usart.h"  
#include "timer.h"  

int main(void)  
{

delay_init();           
NVIC_Configuration(); 
uart_init(9600);
  LED_Init();      
  TIM3_PWM_Init(14499,99);  
TIM_SetCompare2(TIM3,19000);  
delay_ms(2000);  
TIM_SetCompare2(TIM3,1000);  
delay_ms(1000);  
  while(1)  
{    
LED1 = 1;  
delay_ms(100);  
LED1 = !LED1;  
delay_ms(100);  
TIM_SetCompare1(TIM3,10000);
TIM_SetCompare2(TIM3,10000);  
TIM_SetCompare3(TIM3,10000);  
TIM_SetCompare4(TIM3,10000);  
}    
}
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-7-26 20:36:36 | 显示全部楼层
在MDK的Edit->configuration选项对话框中有ENCODING复选框,在里面设置Chinese GB2312就贴不出乱码了。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-27 20:12:05 | 显示全部楼层
我去,你就不能打包么,这样看老半天,你牛
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-27 20:22:33 | 显示全部楼层
将下图中红色框框的内容按箭头位置放一下看看

现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-1-8
在线时间
4 小时
发表于 2016-1-16 08:50:45 | 显示全部楼层
楼主,STM32可以控制好盈电调?可以做四轴?
回复

使用道具 举报

24

主题

208

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2014-4-8
在线时间
160 小时
发表于 2016-1-16 14:58:17 | 显示全部楼层
控制电调,需要有两个参数,第一个是频率,第二个占空比。我觉得你是看说明书操作的,我如果是你的话,我会用示波器或者是逻辑分析仪看一下我的代码有没有错误,比如我要输出50的占空比却输出60了。第二个是你的电调有没有被刷过,要是被刷过的话,那你就需要自己去测了,比如从百分之1测试到百分之百
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 18:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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