Gwvfbukn
获得 35 次赞
帮助过29人
用的1.2a的42步进电机,a4988做驱动,16细分模式,3.2khz每秒一圈定时器比较翻转模式,输入电机最大有效频率在16khz左右,但速度突变较大时会停转,10khz以下相对稳定,只写了个比例调节,根本站不起来。。感觉小车反应迟钝的多,比例系数大点好还是小点好?陀螺仪是mpu6050,用的dmp库,每秒大概100次pit角采样pid写的话p i d 三部分都有哪些影响啊?对输出占比大概各占多少,pit角为0时用加一个常量输出吗3节18650,电池放在电机的上面怎么写最简单?先能站起来就行了
输出比较有脉冲输出,卡死在初始化后面的函数,注释后后面函数正常会是哪里问题?定时器配置问题吗?GPIO_InitTypeDef GPIO_Structure; TIM_TimebaseInitTypeDef TIM_TimebaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; //开定时器时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 ENABLE); //配置pwm输出管脚 GPIO_Structure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_6; GPIO_Structure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA &GPIO_Structure); GPIO_SetBits(GPIOAGPIO_Pin_1 | GPIO_Pin_6); //初始化引脚 //配置中断优先级 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //中断源 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断通道使能 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应优先级 NVIC_Init(&NVIC_InitStructure); //初始化 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //中断源 NVIC_Init(&NVIC_InitStructure); //初始化 // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断 即周期 TIM_TimebaseStructure.TIM_Period = 1000 - 1; //周期 TIM_TimebaseStructure.TIM_Prescaler= 360-1;// 时钟预分频数 TIM_TimebaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割 0 TIM_TimebaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 TIM_TimebaseStructure.TIM_RepetitionCounter = 0; //高级定时器选项,普通定时器忽略即可 TIM_TimebaseInit(TIM2 &TIM_TimebaseStructure);// 初始化定时器 TIM_TimebaseInit(TIM3 &TIM_TimebaseStructure);// 初始化定时器 //初始化定时器通道: TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle; //翻转输出模式 TIM_OCInitStructure.TIM_Pulse = 500; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //状态使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; TIM_OC2Init(TIM2&TIM_OCInitStructure); //输出比较通道2初始化 TIM_OC1Init(TIM3&TIM_OCInitStructure); //输出比较通道1初始化 TIM_OC2PreloadConfig(TIM2 TIM_OCPreload_Disable); TIM_OC1PreloadConfig(TIM3 TIM_OCPreload_Disable); //失能预装载寄存器 TIM_ITConfig(TIM2TIM_IT_CC2ENABLE); TIM_Cmd(TIM2 ENABLE); TIM_ITConfig(TIM3TIM_IT_CC1ENABLE); TIM_Cmd(TIM3 ENABLE); TIM_CtrlPWMOutputs(TIM2 ENABLE); TIM_CtrlPWMOutputs(TIM3 ENABLE);中断函数:void TIM2_IRQHandler(void) //PA1 { if(TIM_GetITStatus(TIM2TIM_IT_CC2) == SET) { TIM_ClearITPendingBit(TIM2TIM_IT_CC2); i ++; if(i == 2) { i = 0; TIM2->ARR=1000; TIM_SetCompare2(TIM250); } } }void TIM3_IRQHandler(void) //PA6{ if(TIM_GetITStatus(TIM3TIM_IT_CC1) == SET) { TIM_ClearITPendingBit(TIM2TIM_IT_CC1); i ++; if(i == 2) { i = 0; TIM3->ARR=3000; //设置重装载值 改变这个可以改变频率 TIM_SetCompare1(TIM320); //设置比较值 } }}
做小车用的,用的1.2a的42步进电机,洞洞板上焊接了两个模块,ms1ms2ms3悬空了,一上电两个都冒烟了。。。会是哪里问题,转向和步进尚未编程,resetsleepvdd接了3.3,enable接了地,vmot接了12v,电机是红绿黄白的顺序接的,操作有问题吗?调节电流的旋钮默认没动,会是哪里的问题?还有步进细分和不细分对扭矩有什么影响,细分会更容易丢步吗?
波特率一致都是9600,程序和串口助手都设置偶校验,蓝牙也是偶校验,是哪里操作问题吗?只要把校验去了就没乱码了,加上校验全是乱码,一个正确的数据都没有。。