原子哥,小弟第一次发帖子求救。
我用编码器测电机角速度 当电机速度2000RPM时显示转速为0,电机从静止到额定转速,STM32测出转速如图:
我的源码:
[mw_shl_code=c,true]int main()
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
PID_Oline_init(0,0,0); //PID在线调参初始化
delay_ms(200);
Timer2_Init(1000,719); //定时器2 定时器10ms中断
TIM4PWM_Init(1000,0); //定时器4 PWM B8输出
Encoder_Init(); //定时器3 编码器初始化
while(1);
}[/mw_shl_code]
[mw_shl_code=c,true]void TIM2_IRQHandler(void)
{
if(TIM2->SR&0X0001)//溢出中断
{
////////////////获得电机角速度///////////////////////////////////////////////////////////////////////////////////////
old_Encoder_Angle=Encoder_Angle;
Encoder_Angle=TIM3->CNT*360/1792; //从编码器获得角度 一圈1792脉冲
Encoder_Angle_Speed=(int)(Encoder_Angle+360-old_Encoder_Angle)%360; //角度转化为角速度
////////////////均值得平均速度/////////////////////////////////////////////////////////////////////////////////////////////
for(timer_i=0;timer_i<21;timer_i++)
speed_data_buf[timer_i]=speed_data_buf[timer_i+1];
speed_data_buf[21]=Encoder_Angle_Speed;
filter_res=mean_filter(speed_data_buf);
Encoder_Angle_Speed=filter_res;
////////////////求得PID数据并发送上位机//////////////////////////////////////////////////////////////////////////////////////////
PID_Get_Err(&filter_res,&Goal); //获取角速度以及角加速度
PID_res=PDCtrl_Res(); //得到输出值
TIM4->CCR3=PID_res; //输出给电机
Do_send_PIDOL(&Goal,&Encoder_Angle_Speed,&  ID_res); //发送给上位机
}
TIM2->SR&=~(1<<0);//清除中断标志位
}[/mw_shl_code]
[mw_shl_code=c,true]void Encoder_Init(void)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XF0FFFFFF;//PA6
GPIOA->CRL|=0X04000000;//浮空输入
GPIOA->CRL&=0X0FFFFFFF;//PA7
GPIOA->CRL|=0X40000000;//浮空输入
TIM3->  SC = 0x0;//预分频器
TIM3->ARR = 1792-1;//设定计数器自动重装值
TIM3->CR1 &=~(3<<8);// 选择时钟分频:不分频
TIM3->CR1 &=~(3<<5);// 选择计数模式:边沿对齐模式
TIM3->CCMR1 |= 1<<0; //CC1S='01' IC1FP1映射到TI1
TIM3->CCMR1 |= 1<<8; //CC2S='01' IC2FP2映射到TI2
TIM3->CCER &= ~(1<<1);//CC1P='0' IC1FP1不反相,IC1FP1=TI1
TIM3->CCER &= ~(1<<5);//CC2P='0' IC2FP2不反相,IC2FP2=TI2
TIM3->SMCR |= 3<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效
TIM3->CNT = 0; //初始值
TIM3->CR1 |= 0x01; //CEN=1,使能定时器
}[/mw_shl_code]
10ms电机最多转0.333圈,而且把定时器中断时间缩小也会有类似问题 |