中级会员
 
- 积分
- 323
- 金钱
- 323
- 注册时间
- 2018-1-23
- 在线时间
- 40 小时
|
SPEED_transform()是实时转速返回函数,但是这个函数只能返回程序刚开始执行的电机速度,仿真发现转速是实时变化的,只是没有返回。
这是主函数
int Real;
int Expect;
int main()
{
uchar str4[] = "R Rate: RPM";
uchar str5[] = "S Rate: RPM";
KEY_Config();
PNS_Config();
delay_init();
uart_init(9600);
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2 );
TIM3_Config();
PWM_Config(999,0);
SPEED_Config(0xffff,0);
LCD1602A_CONFUG();
while (1)
{
LCD1602_Show_Str(0,1,str5);
LCD1602_Show_Str(0,0,str4);
Real = SPEED_transform();
Expect = KEY_Position();
PID_Figure(Real, Expect);
}
}
这是 SPEED_transform()函数体 没有定义的变量都是全局变量
转速实测 可以实时变化
int SPEED_transform()
{
u8 STATE;
if(IN1 ==0 && IN2 ==0)
{
val[3] = 0;
val[2] = 0;
val[1] = 0;
val[0] = 0;
LCD1602_Show_array1(9,1,val);
}
if(IN1 ==1 && IN2 == 0)
{
STATE =0XFB;
LCD1602_Dis_OneChar(8,1,0xfb);
}
if(IN1 ==0 && IN2 == 1)
{
LCD1602_Dis_OneChar(8,1,0xfd);
STATE =0XFD;
}
if(STATE == 0XFD)
{
SPEED = -SPEED;
}
//delay_ms(100);
return SPEED;
}
void TIM3_IRQHandler()
{
if(TIM_GetITStatus(TIM3,TIM_FLAG_Update) )
{
CAPTURE_ST = TIM_GetCapture1(TIM4);
CAPTURE_VAL = (int)(60*CAPTURE_ST/334);
SPEED = CAPTURE_VAL;
val[3] = CAPTURE_VAL%10;
CAPTURE_VAL/=10;
val[2] = CAPTURE_VAL%10;
CAPTURE_VAL/=10;
val[1] = CAPTURE_VAL%10;
CAPTURE_VAL/=10;
val[0] = CAPTURE_VAL%10;
LCD1602_Show_array1(9,1,val);
TIM_SetCounter(TIM4,0);
}
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
}
|
|