小车前进实验
1、主要目的
该部分为小车所有运动的根源。
2、PWM控速
电机不能直接又数字信号1和0接两端而产生运动,需要通过PWM对电机进行控速。我需要PWMA和PWMB对每一侧电机进行控制。
PWM速度控制系统通过脉宽调制器对大功率晶体管的开关时间进行控制,将直流电压转换成某种频率的方波电压,并通过对脉冲宽度的控制,改变输出直流平均电压的自动调速系统。
生成PWM信号在我的理解就是生成正弦信号,让电机产生交流电,从而导致电机运动,如下图所示:
而小车前进是由一个死循环控制的,然后在main函数中打开中断,让一个函数控制PWM信号产生。
1、打开中断并初始化
P2=0XC0;
TMOD=0X01;
TH0=0XFC;
TL0=0X66;
TR0=1;
ET0=1;
EA =1;
2、产生PWM信号(左右相同,只展示其中之一)
void pwm_out_right_motor(void)
{
if(Right_PWM_ON)
{
if(pwm_val_right<=push_val_right)
{
Right_motor_pwm=1;
}
else
{
Right_motor_pwm=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
Right_motor_pwm=0;
}
}
3、主运动控制
void run(void)
{
//×óµç»úÇ°½ø
Left_motor_go = 1;
Left_motor_back = 0;
push_val_left=10;
Right_motor_go=1;
Right_motor_back=0;
push_val_right=10;
return;
}
其中,单片机端口位置如下:
这次实验主要同的中断,所以如果有串口通信应该还得再多几个中断,接下来我会再把中断学深一点,然后回校测试代码,看看能不能在原来程序上走稳,不能的话就得学PID控制,又是很长一条路啊!!!!!!!!!!!!!!!!
参考文献
[1]脉冲宽度调制
[2]PWM速度控制工作原理