小车循迹模块编程思路
所用模块:LM399红外对管循迹模块
特征:可同时搭载4个红外对管,进行黑白线检测
检测:当它探寻到黑线时候,DX口输出TTL电平接近于VCC电压
当它探寻到白线时候,DX口输出TTL电平近似为0.1V
实现功能:
让小车始终沿着黑线跑动,可以沿着黑线转弯(弯度测试),在黑线上可以设置断点,长度自己设定,路过间断线时,依然可以自主循迹到有黑线位置,并继续跑动。
初步想法:
无论是两个轮子的解构还是四轮结构,利用后面两个轮子作为主动轮,前面两个轮子作为从动轮。所以就得实现对后面两个电机的控制,需要用到一个L298 模块以及两个直流电机,他就得有四个模式:
1.直线行驶:两个电机转速相同
2.左转弯:左边电机转速<右边电机转速
3.右转弯:左边电机转速>右边电机转速
4.停止:左右两个电机都得同时停止
5.后退:左右两个电机转速相同,
选用三个红外对管进行循迹。设定左边右边中间的红外对管输出电平分别为L,R,M.
1.L=R=0,M=1,直行
2.M=L=1,R=0,左转
3.M=R=1,L=0,右转
4.M=L=0,R=1,右转
5.M=R=0,L=1,左转
6.M=R=L=0, 后退/停止
开始编程:
1.配备三个IO口,进行三路循迹光电对管的TTL电平读取。
PA2:L左边光电对管数据读取
PA3:M中间光电对管数据读取
PA4:R右边光电对管数据读取
2.得到的数据,反馈到光电处理函数:void guangdianchuli(void)
void guangdianchuli(void)
{
L=R=0,M=1,直行
M=L=1,R=0,左转
M=R=1,L=0,右转
M=L=0,R=1,右转
M=R=0,L=1,左转
M=R=L=0, 后退/停止
}
3.编写电机控制程序
首先需要分别控制两个电机,需要两路PWM
需要的定时器:TIM3
需要的IO口:PA6(TIM3_CH1),PA7(TIM3_CH2)
两路PWM分别控制L298N的使能端,控制它的占空比来控制电机的转速,以及直流电机转向。
A.直行函数:void motor_straight(void)
B.左转弯函数:void motor_left(void)
C.右转弯函数:void motor_right(void)
D.后退函数:void motor_retreat(void)
E.停止函数: void motor_stop(void)