完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我最近在写四轴飞行器
我的程序 启动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秒左右 程序就死了 风扇还在转 但是不往下执行也就是不再自加 其他的判断指令也不运行。 这个是什么情况呢 |
|
相关推荐
8个回答
|
|
恩是硬件干扰 我把硬件I2C去掉 换上自己写的软件I2C就OK了。
|
|
|
|
boot0 boot1怎么处理的
|
|
|
|
BOOT0接高
BOOT1 是接NER24L01的CE。。 跟硬件应该没什么关系 因为两套程序 一套会跑死 一套不会 我复制了不会跑死的那份的电机配置部分过来 结果还是跑死 我现在怀疑是时钟问题 因为之前用16Mhz外部晶振的时候也有出现这个情况 之后我2分频 又没问题了一段时间 但是之后又出这现问题 现在换回8Mhz晶振 2分频也取消了 还是有这个问题 |
|
|
|
|
|
|
|
驱动一个电机没有问题 但是驱动两个  ID 大概到50 程序就会停止 4个是10PID 就停止了
|
|
|
|
BOOT0 BOOT1应该串10K接地吧 你把BOOT1当普通IO口使用?
|
|
|
|
是不是硬件干扰也比较容易判断吧 你把电机拆了 看程序跑到这死不死机
|
|
|
|
请问程序解码电调那块是怎么写的,没有用飞控,只是用STM32最小板
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4461 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
333浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
331浏览 2评论
358浏览 2评论
347浏览 2评论
391浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 01:59 , Processed in 0.993185 second(s), Total 91, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号