OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 寻迹小车 FollowMe―― 之七:单MCU控制的程序设计

共1条 1/1 1 跳转至

寻迹小车 FollowMe―― 之七:单MCU控制的程序设计

工程师
2011-03-15 14:34:06    评分
寻迹小车 FollowMe―― 之七:单MCU控制的程序设计
写于: 星期二 17 十月 @ 23:08:06
 
智能机器人开发本来应当着手轨迹检测和走轨迹控制的程序设计,但为了让学习者更易实施,此篇改为基于单MCU控制的程序设计,本篇主要完成电机驱动部分,即将前面所述的电机驱动合并到一个MCU中。


寻迹小车 FollowMe ―― 之七:单MCU控制的程序设计

作者:Hanker

前面的章节:

  1. 车的主体
  2. 控制部分中的电机驱动器设计
  3. 轨迹采样及逻辑控制部分硬件设计
  4. 开环控制功能
  5. 电机测速及转速控制
  6. 电机驱动部分调试

本来应当着手轨迹检测和走轨迹控制的程序设计,但为了让学习者更易实施,此篇改为基于单MCU控制的程序设计,本篇主要完成电机驱动部分,即将前面所述的电机驱动合并到一个MCU中。

从前一篇文章中已看到,使用我原来设计的方案在这个小车上有些不合理,如果再加上一个控制板,则更显“臃肿”,而正巧我认识的一个大学生基于前面的设计自己做了修改,采用一片MCU完成小车寻迹的所有功能,从设计的PCB上看,这个方式更适合学习者采纳,所以我暂且放弃了前面的设计,用这块PCB继续完成后面的内容――寻迹控制。

7、单MCU控制的程序设计 7.1、硬件简介

这个学生所作的修改主要是将原来设计的三个MCU功能合并到一个MCU中,简化了一些备用的功能,如转动方向采集、无线模块控制等,而主要功能实现的电路与原来相同,如:电机的驱动部分、码盘的采样部分、轨迹的采样部分。

主要修改的是MCU的资源分配,电路如下:

图中:
P2.0 ― P2.3 ―― 电机1 (左)驱动,使用PCA2 ;
P2.4 ― P2.7 ―― 电机 2 (右)驱动,使用PCA3;
P3.7 ―― 电机1 (左)的码盘采样,使用PCA0;
P3.5 ―― 电机2 (右)的码盘采样,使用PCA1;
P1.0 ― P1.3 ―― 4路轨迹采样,使用内部的AD转换;
P3.3 ―― 用于轨迹采样控制;
P3.4 ―― 用于工作指示灯,便于监测系统的工作状态;
P1.4 ― P1.7 ―― 保留,作为扩充,可以作为4路AD输入,也可以连接SPI外设;
INT0 ―― 保留,能有一个中断输入,对于许多应用都是十分有益的。

他在设计PCB时还设计了一个扩展区,可以方便的焊接一些器件以扩充功能。

焊好的控制硬件如下:
(点击看大图)


组装后:
(点击看大图)


底部:
(点击看大图)


前视(注意光电采样器的安装,用的是网线,因是单股硬线,所以可以固定,而且便于调整)
(点击看大图)

 

7.2 程序设计概述

由于此程序将要完成小车寻迹的所有功能,如果再集中在一个程序文件中处理,将给阅读、调试带来困难,也不便于维护,而且也不符合正规的程序开发方式。

因为正规的程序开发通常需要多人合作,各人负责一部分功能,所以必须将程序分成多个独立的模块,每个模块涉及一个相对独立的功能,相互间确定好接口,这样才能合作完成一个功能复杂的程序。学习者也应当尝试这种模式。

目前这个小车项目分为4个模块:

主控模块 ―― 初始化系统,根据消息调度各模块的功能;
电机驱动模块 ―― 包含所有与电机驱动有关的函数,接受控制命令,并付诸实施;
轨迹采样模块 ―― 包含所有与轨迹采样有关的处理,结果为与处理后的轨迹状态;
轨迹控制模块 ―― 读取轨迹采样所获取的信息,根据需求和策略输出相应的电机控制命令;将调试的相关功能也纳入此模块。

学会多模块编程是能进行嵌入式应用软件编写的重要标志。

7.3 主控模块程序设计

主控模块只负责初始化系统的硬件和软件,而且为了使各模块的相关功能更加内聚,将属于各模块的硬件、变量初始化也交给各功能模块处理,主控程序只负责初始化自用的变量。

此外,主控模块只负责根据消息调用相应模块的处理函数,具体如何处理这些消息由各功能模块中的对应函数决定。

这样设计主要是为了日后便于向使用RTOS(Real - Time Operating System)过渡,因为一个略为复杂的应用如果需要程序可靠、可维护,最好使用RTOS。所以作为学习者有必要了解、掌握相关的知识。

7.4 电机驱动模块程序设计

因为驱动的H桥电路、码盘采样电路均未变,所以控制的逻辑也不用修改,只需完成:

a) 对应I/O口定义的修改,以适应新的MCU资源分配;
b) 将两个电机的控制逻辑整合到一个MCU中。

主要工作是逻辑整合。

电机 1 的引脚控制逻辑关系:
P2.0 - CTL 1, H 桥的左上臂,0 电平输出导通, 1 电平输出截止
P2.1 - CTL 2, H 桥的左下臂,1 电平输出导通, 0 电平输出截止
P2.2 - CTL 3, H 桥的右上臂,0 电平输出导通, 1 电平输出截止
P2.3 - CTL 4, H 桥的右下臂,1 电平输出导通, 0 电平输出截止

电机1控制逻辑:

引脚 桥臂 单极性正转 单极性反转 双极性 惰行 刹车
前半周 后半周 前半周 后半周 前半周 后半周
P2.3 右下 1 1 0 0 1 0 0 1
P2.2 右上 1 1 0 1 1 0 1 1
P2.1 左下 0 0 1 1 0 1   1
P2.0 左下 0 1 1 1 0 1 1 1

电机2 与电机1完全相同,只是映射在P2口的高4位。

前面所做的单个电机的控制程序,可以很方便的移植过来。

首先将所有与电机对应的变量改为2维数组,一维对应一个电机。

然后在程序中所有涉及电机变量的初始化和赋值的地方改为循环,有关的函数增加一个电机序号参数输入,函数中修改为根据序号处理相应的数组单元。

上述修改的关键在于变量的构建,合理的变量将大大减少程序的处理难度。

在电机输出及测速中断的处理中,没有使用下标变量方式来节省代码,因为需要速度,可以仔细比较使用下标变量时的目标代码与直接指定下标时的差别。

此部分功能暂未作任何改进和添加,只是将两个电机的驱动并入了一个MCU控制。

7.5 轨迹采样模块程序设计

轨迹采样器为4个反射式光电采样器,经缓冲后作背景光减除处理,之后放大送单片机AD转换。

此模块完成:
1)采样器的输出AD转换;
2)将AD结果转换为是否在轨迹上的逻辑值;
3)进行预处理,输出轨迹偏移位置信息。

本来期望能按照国外那个桌面寻迹小车的处理方式对采样信号预处理的,但是仔细分析后发现,按目前所用的采样器及轨迹的关系(轨迹通常为 2cm 宽,而采样器距地面5




关键词: 寻迹     小车     FollowMe     之七     控制     程序设计    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]