完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void esc_init(void)
{ tiM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); TIM_TimeBaseInitStructure.TIM_Period=2499; TIM_TimeBaseInitStructure.TIM_Prescaler=83; TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP; GPIO_Init(GPIOB,&GPIO_InitStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=1000; TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; TIM_OC1Init(TIM4,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC2Init(TIM4,&TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC3Init(TIM4,&TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC4Init(TIM4,&TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_Cmd(TIM4,ENABLE); delay_init(168); TIM_SetCompare1(TIM4,2000); TIM_SetCompare2(TIM4,2000); TIM_SetCompare3(TIM4,2000); TIM_SetCompare4(TIM4,2000); delay_ms(1000); delay_ms(1000); delay_ms(1000); TIM_SetCompare1(TIM4,1000); TIM_SetCompare2(TIM4,1000); TIM_SetCompare3(TIM4,1000); TIM_SetCompare4(TIM4,1000); delay_ms(1000); delay_ms(1000); delay_ms(1000); }这个是电调的程序 int main(void) { IIC_Init(); timer_init(); esc_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); TIM_SetCompare1(TIM4,1000); TIM_SetCompare2(TIM4,1000); TIM_SetCompare3(TIM4,1000); TIM_SetCompare4(TIM4,1000); delay_ms(1000); delay_ms(1000); while(1) { TIM_SetCompare1(TIM4,1500); TIM_SetCompare2(TIM4,1500); TIM_SetCompare3(TIM4,1500); TIM_SetCompare4(TIM4,1500); } }这个是主函数 飞控还不完整 但我只想让电机转起来看看效果 但不知道这代码哪里出问题了 通电以后电机就响一声然后抖一下就没了 电调用的是新西达30A的电调 有大佬知道问题所在吗 |
|
相关推荐
13个回答
|
|
//***************************************************
//TIM4用于PWM控制马达 //arr:自动重装值 //psc:时钟预分频数 //*************************************************** void TIM4_Init(uint16_t arr,uint16_t psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_TIM4); TIM_TimeBaseStructure.TIM_Prescaler = psc; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数 TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0; //初始有效电平比例为0 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平为有效电平 TIM_OC1Init(TIM4,&TIM_OCInitStructure); TIM_OC2Init(TIM4,&TIM_OCInitStructure); TIM_OC3Init(TIM4,&TIM_OCInitStructure); TIM_OC4Init(TIM4,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_Cmd(TIM4,ENABLE); Moto_PWM(0,0,0,0); } //************************************************* //马达转速控制程序 //************************************************* void Moto_PWM(int16_t MOTO1_PWM,int16_t MOTO2_PWM,int16_t MOTO3_PWM,int16_t MOTO4_PWM) { if(MOTO1_PWM>999) MOTO1_PWM=999; if(MOTO2_PWM>999) MOTO2_PWM=999; if(MOTO3_PWM>999) MOTO3_PWM=999; if(MOTO4_PWM>999) MOTO4_PWM=999; if(MOTO1_PWM<0) MOTO1_PWM=0; if(MOTO2_PWM<0) MOTO2_PWM=0; if(MOTO3_PWM<0) MOTO3_PWM=0; if(MOTO4_PWM<0) MOTO4_PWM=0; //4个PWM通道 TIM4->CCR1=MOTO1_PWM; TIM4->CCR2=MOTO2_PWM; TIM4->CCR3=MOTO3_PWM; TIM4->CCR4=MOTO4_PWM; } 这是我从我程序里复制出来的初始化程序,是没有问题的。这里我没开时钟是因为我在我其它地方开了,就不贴出来了。 |
|
|
|
在线等 急急急
|
|
|
|
大家别光看啊 说说看法嘛
|
|
|
|
GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_TIM4); |
|
|
|
|
|
|
|
确实 没有波形出来 但这个问题出在哪里啊 我已经调成50HZ的频率了
|
|
|
|
你加上我上面发的那四行试试,那几行也是必须的。
|
|
|
|
TIM4_Init(999,0); //0不分频,则每(1/80)us计1次数,最大计时到12.5us,即PWM的周期为12.5us,频率为80KHz
我控制的是空心杯电机,你用电调的话,改一下重装值和预分频值。 |
|
|
|
全换成了你的代码 用的是定时器1和PA8,9,10,11四个口 只有一个电机隔一秒动一下 其他三个没反应
|
|
|
|
|
|
|
|
|
|
可以直接用,你控制电调的话要改一改,我只是贴出来给你参考一下。其实跟你程序里四个TIM_SetCompare1(TIM4,1500)一样的功能,只不过我直接控制寄存器的。
你要是用I2C的话,两块芯片代码基本上可以直接套用,不过他们的芯片ID不一样,就是芯片手册里的WHO_AM_I寄存器,其它寄存器应该都一样的,具体还要看手册,我没仔细对比过。 要是SPI的话,那就不能套用了,mpu6050是不支持SPI的。 |
|
|
|
感谢大佬解答
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4442 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
312浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
296浏览 2评论
311浏览 2评论
311浏览 2评论
352浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 23:01 , Processed in 0.995175 second(s), Total 103, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号