OpenEdv-开源电子网

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

启动电机后 程序死了。

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-11-20
在线时间
0 小时
发表于 2015-11-21 14:07:06 | 显示全部楼层 |阅读模式
5金钱
我最近在写四轴飞行器 
我的程序 启动4个电机后 程序就死了 完全不动需要重启 

别人的程序 启动电机没问题 

同样的板子(都是改变PWM 占空比) 这事什么问题嘞 


void Motor_Init(void ){ 
GPIO_InitTypeDef  GPIO_InitStructure; //IO口配置参数 
TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure; //定时器配置参数 
TIM_OCInitTypeDef  TIM_OCInitStructure; // 


//使能时钟 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); 
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 

//设置电机使用到得管脚 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 ;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_Init(GPIOA, &GPIO_InitStructure); 

TIM_TimeBaseInitStructure.TIM_Period = eriod_Max; 
TIM_TimeBaseInitStructure.TIM_Prescaler = 2; 
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure); 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_Pulse = 0; 
TIM_OC1Init(TIM2,&TIM_OCInitStructure); 
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable); 


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_Pulse = 0; 
TIM_OC2Init(TIM2,&TIM_OCInitStructure); 
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable); 


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_Pulse = 0; 
TIM_OC3Init(TIM2,&TIM_OCInitStructure); 
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable); 

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_Pulse = 0; 
TIM_OC4Init(TIM2,&TIM_OCInitStructure); 
TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable); 

TIM_ARRPreloadConfig(TIM2, ENABLE); 
TIM_Cmd(TIM2,ENABLE); 





void Motor_Working(uint16_t DutyC1,uint16_t DutyC2,uint16_t DutyC3,uint16_t DutyC4){ 
static uint16_t lastDuty1=0,lastDuty2=0,lastDuty3=0,lastDuty4=0; 
//DutyC1 = DutyC1>eriod_Max?Period_MaxutyC1; 
//DutyC2 = DutyC2>eriod_Max?Period_MaxutyC2; 
//DutyC3 = DutyC3>eriod_Max?Period_MaxutyC3; 
//DutyC4 = DutyC4>eriod_Max?Period_MaxutyC4; //校正 


if(lastDuty1!=DutyC1){TIM2->CCR2 = DutyC1;lastDuty1=DutyC1;} 
if(lastDuty2!=DutyC2){TIM2->CCR1 = DutyC2;lastDuty2=DutyC2;} 
if(lastDuty3!=DutyC3){TIM2->CCR3 = DutyC3;lastDuty3=DutyC3;} 
if(lastDuty4!=DutyC4){TIM2->CCR4 = DutyC4;lastDuty4=DutyC4;}//更新占空比 


这是程序
用的是ANO 四轴的板子

我在主程序里 设置了一个 static uin16_t PID;

一段时间内 PID+=10
Motor_Working(PID,PID,PID,PID);
这样PID=10  风扇转大概2秒左右 程序就死了 风扇还在转 但是不往下执行也就是不再自加 其他的判断指令也不运行。
这个是什么情况呢

最佳答案

查看完整内容[请看2#楼]

回复【7楼】freewayflyer: --------------------------------- 恩是硬件干扰 我把硬件I2C去掉   换上自己写的软件I2C就OK了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-11-20
在线时间
0 小时
 楼主| 发表于 2015-11-21 14:07:07 | 显示全部楼层
回复【7楼】freewayflyer:
---------------------------------
恩是硬件干扰 我把硬件I2C去掉   换上自己写的软件I2C就OK了。
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
976
金钱
976
注册时间
2014-7-4
在线时间
237 小时
发表于 2015-11-21 16:38:07 | 显示全部楼层
boot0  boot1怎么处理的
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-11-20
在线时间
0 小时
 楼主| 发表于 2015-11-21 17:40:21 | 显示全部楼层
回复【2楼】freewayflyer:
---------------------------------
BOOT0接高 

BOOT1 是接NER24L01的CE。。  跟硬件应该没什么关系

因为两套程序
一套会跑死 一套不会

我复制了不会跑死的那份的电机配置部分过来 结果还是跑死 我现在怀疑是时钟问题

因为之前用16Mhz外部晶振的时候也有出现这个情况 之后我2分频 又没问题了一段时间

但是之后又出这现问题

现在换回8Mhz晶振  2分频也取消了  还是有这个问题
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-11-20
在线时间
0 小时
 楼主| 发表于 2015-11-21 17:41:28 | 显示全部楼层


回复2L的图=。=
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-11-20
在线时间
0 小时
 楼主| 发表于 2015-11-21 18:27:03 | 显示全部楼层
回复【4楼】Joenslee:
---------------------------------
驱动一个电机没有问题 但是驱动两个  ID 大概到50 程序就会停止  4个是10PID 就停止了
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
976
金钱
976
注册时间
2014-7-4
在线时间
237 小时
发表于 2015-11-23 09:21:53 | 显示全部楼层
回复【3楼】Joenslee:
---------------------------------
BOOT0  BOOT1应该串10K接地吧   你把BOOT1当普通IO口使用?
回复

使用道具 举报

69

主题

269

帖子

0

精华

高级会员

Rank: 4

积分
976
金钱
976
注册时间
2014-7-4
在线时间
237 小时
发表于 2015-11-23 09:33:36 | 显示全部楼层
是不是硬件干扰也比较容易判断吧 你把电机拆了  看程序跑到这死不死机
回复

使用道具 举报

1

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2015-11-4
在线时间
72 小时
发表于 2015-11-27 14:01:38 | 显示全部楼层
请问程序解码电调那块是怎么写的,没有用飞控,只是用STM32最小板
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-1-31 20:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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