[转]十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(一)模块初始化()

 

先放上这一系列的链接:

 

  1. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(一)模块初始化
  2. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(二)图像处理
  3. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(三)寻灯策略Part.①
  4. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(四)寻灯策略Part.②
  5. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(五)分段控速
  6. 十三届智能汽车竞赛 信标对抗组 思路参考 程序参考(六)避障

 

正文开始:
我们车模使用的是B车型,它为后驱单电机,前转向SD-5舵机。这个车型的优点很粗暴,就是后驱电机动力很强大,满速的时候能让车飞起来然后把轮胎瞬间甩掉;它的缺点也很明显,由于它是单电机,后轮为被动的机械差速,因此其转向能力相比双电机的C车型差的不是一点半点。十三届之前,老款C车型的电机动力不行,轮子半径也小,速度因此较慢,B车自然是更好的选择,信标对抗组的好成绩很多都是B车拿下的。到我们十三届,组委会推出了新款C车型,轮子半径加大了,动力增强了,配合上C车一直以来的优秀转向性能,简直是“天选之子”。然而…年少天真的我们队三个人当时并没意识到C车改款的提升有多大,依旧选择了昔日王者B车型。最后事实也给新款C车证明了它的强大,十三届信标对抗组的排行榜几乎被新C车占领了,B车模则没有了昔日的辉煌。

 

我们使用的主控为恩智浦的K60芯片。

 

主要的传感器有:硬件二值化的OV7725摄像头;E18-D80NK光电管用来检测一定距离内的障碍物;E6A2-CW3C500编码器用来测后驱轮子转速。

 

这一次就先分享一下首先是各个模块的初始化(使能):

 

  • 其中左、中、右三个红外光电管只需要普通GPIO口的输入模式来使能,一定距离内探测到障碍物则会返回低电平,反之为高电平,E18-D80NK光电管上提供了调节旋钮,可以使用一字螺丝刀调节探测距离。

 

gpio_init(PTE6,GPI,0) ;                    //红外  中
gpio_init(PTE7,GPI,0) ;                    //红外  左
gpio_init(PTE8,GPI,0) ;                    //红外  右

 

  • 初始化测速编码器则需要FTM正交解码功能。

 

ftm_quad_init(FTM1);                        //FTM1 正交解码初始化

 

  • 舵机和电机都依赖主控输出的PWM信号来工作。
    ①B车型的SD-5舵机为数字舵机,查资料可以知道其较好的PWM工作频率为300Hz左右,因此我们将输出给舵机的PWM信号频率设为300Hz;在PWM频率不变的情况下,舵机的打角角度只与PWM占空比有关,初始化时一般都将前轮打正,因此需要找到前轮打正时对应的PWM占空比,我这里找到占空比为57%(由于舵机安装方式或占空比调节分辨率等情况不同,大家的车模找到的值不一定和我的一样)。后面想让小车自动控制转向其实就是PWM频率不用改变的情况下动态地调整PWM的占空比,从而实现不同角度、不同半径的转向。
    ②车模电机通过驱动电路连接主控芯片,驱动电路能把主控输出的PWM信号转换为平均电压。当PWM占空比为0%(即一直输出低电平)时,驱动电路输出给电机的电压也为0V;当PWM占空比为100%(即一直输出高电平),则驱动电路将输出驱动电路的最高电压,此时电机稳定后的转速为最高转速(注意:设计的驱动电路板输出不要超出电机的工作电压范围哦!)。一般控制驱动电路的PWM频率可以高一些,我这里设置20000Hz,初始化时让电机为停止状态,因此正反两条PWM占空比都设为0%。后面想让小车自动控制速度其实就是PWM频率不用改变的情况下动态地调整PWM的占空比,从而实现调节车速。

 

FTM_PWM_init(FTM2,CH1,300,570);             //舵机PWM初始化

FTM_PWM_init(FTM0,CH0,20000,0); //反        //电机PWM初始化
FTM_PWM_init(FTM0,CH1,20000,0); //正

 

  • OV7725摄像头的初始化。

 

OV7725_INC();                               //设置行场中断
IICWriteGpio_inintOV();                     //设置SCCB引脚
while(ov7725_probe()==0);                   //初始化寄存器
ov7725_set_image_size(IMAGE_SIZE);          //设置图像大小

 

  • 至此整个小车的必备模块都初始化完成了。不过为了方便调车、验证算法,一般小车上还需要使用按键、拨码开关、屏幕和串口传输等模块。可以自行选择和添加。

 

gpio_init(PTB20,GPI_UP,0) ;                 //按键1
gpio_init(PTB21,GPI_UP,0) ;                 //按键2

gpio_init(PTC8,GPI_UP,0) ;                  //拨码开关1
gpio_init(PTC9,GPI_UP,0) ;                  //拨码开关2
gpio_init(PTC10,GPI_UP,0) ;                 //拨码开关3
gpio_init(PTC11,GPI_UP,0) ;                 //拨码开关4

OLED_Init();                                //OELD显示初始化

uart_init(UART4 , 115200);                  //串口初始化 串口:UART4 波特率:115200

 

  • 为了应对现场比赛时环境光的影响,我们还增加了额外的四个方向红外探头,用来探测信标灯的大概方位。与光电管类似,它也是只需要普通GPIO口的输入模式来使能即可。

 

gpio_init(PTE9,GPI,0) ;                     //红外探头  左前
gpio_init(PTE10,GPI,0) ;                    //红外探头  右前
gpio_init(PTE11,GPI,0) ;                    //红外探头  右后
gpio_init(PTE12,GPI,0) ;                    //红外探头  左后

 

  • 各模块的初始化到这里就完成了。最后附上完整的模块初始化程序。

 

/************************主函数***************************/
void main(void)
{
  DisableInterrupts;   //禁止总中断

  uart_init(UART4 , 115200);//串口初始化 串口:UART4 波特率:115200

  gpio_init(PTE6,GPI,0) ;                     //红外  中
  gpio_init(PTE7,GPI,0) ;                     //红外  左
  gpio_init(PTE8,GPI,0) ;                     //红外  右
  
  gpio_init(PTE9,GPI,0) ;                     //红外探头  左前
  gpio_init(PTE10,GPI,0) ;                    //红外探头  右前
  gpio_init(PTE11,GPI,0) ;                    //红外探头  右后
  gpio_init(PTE12,GPI,0) ;                    //红外探头  左后
  
  gpio_init(PTB20,GPI_UP,0) ;                 //按键1
  gpio_init(PTB21,GPI_UP,0) ;                 //按键2

  gpio_init(PTC8,GPI_UP,0) ;                  //拨码开关1
  gpio_init(PTC9,GPI_UP,0) ;                  //拨码开关2
  gpio_init(PTC10,GPI_UP,0) ;                 //拨码开关3
  gpio_init(PTC11,GPI_UP,0) ;                 //拨码开关4

  ftm_quad_init(FTM1);                        //FTM1 正交解码初始化

  FTM_PWM_init(FTM2,CH1,300,570);             //舵机PWM初始化

  FTM_PWM_init(FTM0,CH0,20000,0); //反        //电机PWM初始化
  FTM_PWM_init(FTM0,CH1,20000,0); //正

  OLED_Init();    							  //OELD显示初始化

  OV7725_INC();                               //设置行场中断
  IICWriteGpio_inintOV();                     //设置SCCB引脚
  while(ov7725_probe()==0);                   //初始化寄存器
  ov7725_set_image_size(IMAGE_SIZE);          //设置图像大小
   
  OLED_Fill(0x00);//黑屏
  
  EnableInterrupts;   //开启总中断  
  
  while(1)
  {
  }
}

 

这次就先到这里,往后我还会不定期的继续更新信标对抗组这个系列相关内容,包括我们使用的寻灯策略、避灯策略、分段控制等等。


---------------------
作者:ZZM丶
来源:CSDN
原文:https://blog.csdn.net/qq_41833526/article/details/109388571
 

你可能感兴趣的:(智能车,智能车,信标组)