ourdev

  • 格式:pdf
  • 大小:723.59 KB
  • 文档页数:10

单片机实践之闭门造车安徽师范大学 07 级电子信息工程一、造车综述从 2003 年全国电子设计大赛以来智能小车一直备受青睐,大家都在前人的基础上纷纷 亮出自己的得意之作。

且大部分是以循迹小车为主题,主控芯片自然是用的赞助商提供的片 子为多。

其中飞思卡尔、MPS430 等都是智能小车的热门主控芯片,甚者有采用 FPGA、DSP、 ARM 来做控制台的, 个人觉得 Cortex‐M3 很适合,不过既然是单片机实践自然要从基础的做 起,这样以后也可以很方便的移植到 Cortex‐M3 上。

而此文为大家介绍的是采用STC12C5A60S2 为主控芯片,STC89S52 为从处理器搭建的智能小车平台。

简单介绍一下智能小车平台需要实现的功能:上位机无线遥控可发送速度、转向、行车 时间、轨迹、测距、自动蔽障等控制命令,同时可以反馈实时速度、距离、电源电压、功率 等状态数据。

二、总体方案测速采用光电管或者霍尔传感器来实现, 而这些传感器的待处理信号都是开关量也就是 周期性的脉冲,故测速需要占用两只定时器。

测距离目前常用的有超声波测距、红外测距两 种,这两种方案都至少占用一只定时器。

电机调速采用 PWM信号,如果采用定时器来产生 PWM 信号的话又需要占用一只定时器。

再算上一些串行口、定时器查询等估计别说是普通 的 AT89S52 就连 AVR 的片子也很吃力,所以采用两片单片机也变得合情合理了。

而且也为 以后扩展其他信号传感器提供接口。

一般片级通信多是采用 SPI 通信, 51的片子很少有支持, 所以大部分 SPI 多是软件模拟的(某些串行的 AD 转换)。

不过这里要是使用模拟的 SPI来实现 片级通信的话会由于没有 SPI 中断给通信带来很大的局限性,或者有些人会想到使用定时器 中断来查询实现软件模拟的 SPI片级通信, 而这样又会占用定时器(不考虑定时器服用的情况 下)。

分析考虑所需的资源,最终选取 STC12C5A60S2 作为主控制器,该芯片自带 2 路PWM 控制器、2 个定时器、2 个串行口支持独立的波特率发生器、3 路可编程时钟输出、10 位 AD 转换器、一个 SPI 接口等。

测速模块挂在 STC12C5A60S2 上面并配置一路PWM输出至直流电机驱动模块(后轮驱 动),同时通过光耦隔离控制直流电机转向以及步进电机步进节拍。

STC89S52 负责超声测距 通过串行口发送至 STC12C5A60S2。

主控芯片综合处理各方面的信息,通过另一个串行口与 PC 机通信。

无线模块最初采用自带串行接口的蓝牙模块,但由于蓝牙距离不够、重启系统 需重新配置等原因后期采用 NRF2401 来替代。

总体结构框图如下(采用 Microsoft Office Visio 绘制)图 1.智能小车总体结构框图三、硬件原理1、电机驱动:智能小车采用 12V 直流电机为后轮驱动力,6V步进电机为前轮转向控制提供动力,故 智能车平台需驱动 12V 直流电机和 6V步进电机。

由于需要控制小车的车速以及小车行驶的 方向(包括转向以及前进、后退、停车),直流电机驱动采用常用的 H 桥电路,通过控制信号 选通对管与否实现电机的正反转,并改变所加电压的占空比来改变电机转速。

这里采用电机 驱动专用芯片 L298N,该芯片可驱动两路 5‐36V 的直流电机或者一路四拍的步进电机。

同时 在 L298N 与主控芯片间通过四路光耦 TLP521‐4 隔离消除干扰信号。

搭建好电路后不要直接在小车上调试,外界一只相同电压的电机测试模块。

在STC12C5A60S2 上配置好串口、 PWM, 实现串口接收的数据直接赋值给 PWM 定时器 CCAP1L、 CCAP1H。

利用串口调试助手发送控制信息给 STC12C5A60S2,同时辅助外界电源更改L298N 的 IN1 和 IN2,共同完成L298N 电机驱动模块的调试。

图 2.直流电机驱动电路2、光电对管测速光电对管采用 TCRT5000,由一只特殊的发光二极管和光电三极管构成,当二极管发出的 光打在光电三极管的基极 B 上时三极管 CE 导通。

而正常情况下二极管的光不能到达光电管假设车轮均匀贴有n 片反射片, 的基极上, 故通过在车轮上贴反射片即可实现对小车的测速。

测得光电三极管的输出脉冲频率为 f,则车速=f/n。

为了提高测速的精度,在信号后级添加 比较器调理信号为标准的方波,调节比较器运放的偏置电压使方波信号最适合于测速。

同样适用外界电机(已配有自制的编码盘),给电机加电让其带动编码盘旋转,将光电对 管靠近编码盘,用示波器观测输出脉冲信号的有无与好坏,调节比较器偏置电压使脉冲最接 近于方波且幅度大于 3.3V。

图 3.光电对管测速电路3、超声测距超声波测距的方法有多种:如往返时间检测法、相位检测法、声波幅值检测法。

本设计 采用往返时间检测法测距。

其原理是超声波传感器发射一定频率的超声波, 借助空气媒质传 播,到达测量目标或障碍物后反射回来,经反射后由超声波接收器接收脉冲,其所经历的时 间即往返时间,往返时间与超声波传播的路程的远近有关。

测试传输时间可以得出距离。

假 定 s 为被测物体到测距仪之间的距离,测得的时间为T,超声波传播速度为 V表示,则有关 系式 S=VT/2 。

超声波发射部分是为了让超声波发射换能器 TCT40-16T能向外界发出 40 kHz 左右的 方波脉冲信号。

编程由单片机端口输出40 kHz 左右的方波脉冲信号,由于单片机端口输出功率不够,40 kHz 方波脉冲信号分成两路,送给一个由 74HC04 组成的推挽式电路进行功 率放大以便使发射距离足够远,满足测量距离要求,最后送给超声波发射换能器 TCT40- 16T以声波形式发射到空气中。

发射部分的电路,如图 4 所示。

图中输出端上拉电阻 R31, R32,一方面可以提高反向器 74HC04 输出高电平的驱动能力,另一方面可以增加超声换能 器的阻尼效果,缩短其自由振荡的时间。

图 4.超声发射电路上述 TCT40-16T发射的在空气中传播, 遇到障碍物就会返回,超声波接收部分是为了 将反射波(回波)顺利接收到超声波接收换能器 TCT40-16R 进行转换变成电信号,并对此电 信号进行放大、滤波、整形等处理后,这里用索尼公司生产的集成芯片 CX20106,得到一 个负脉冲送给单片机的 INT0 引脚,以产生一个中断。

图 5.超声接收电路接在 CX20106 的第五脚上的电阻,用以设置带通滤波器的中心频率 f0,阻值越大,中 心频率越低。

电路中采用一只粗调的可变电阻和一只精密调节的电阻串联而成。

调节函数信 号发生器产生 40K的方波,接在超声发射电路的输入端,同时用示波器观测超声接收电路 的输出端。

用书本等模拟障碍物,调节两只电阻观测示波器看接收端否会产生电平跳变。

若产生跳变则发射与接收电路调试完成。

4、电源模块对于小车而言电源是整个系统的咽喉,考虑到体积、重量、电能容量等。

这里我们选取8 节 1.5V锂电池串联起来作为总电源输出(12V),采用 LM78L05、LM317 构成整个电源模 块。

图 6.电源模块电路5、无线通信模块无线通信采用现成的串行接口的蓝牙模块,只需要配置主从机、信道、通信密钥、波特 率即可实现无线串行通信。

这样 PC 和主控 STC12C5A60S2 只需将通信理解为串行通信,给 程序构架带来便利。

不过需要考虑通信接口的问题:STC12C5A60S2 是 5V电压供电,TXD 和 RXD 的通信电信号自然是以 5V为参考电平;蓝牙模块是 3.3V电压供电,TXD 和 RXD 的通信电信号自然是以 3.3V为参考电平。

所以我们需要添加电平转换, 实现 STC12C5A60S2 与蓝牙模块的正常通信。

一般电平转换可以使用专用的芯片 74xHCT或 164245,电阻分压 法、OC/OD 器件法、晶体管上拉电阻法等。

不过对比几种方案同时考虑电平兼容、电源次 序、速度/频率、输出驱动能力等,最终选取晶体管法,电路如下,图中 NPN 的管子可以选 取 8050,1815 等,不过倒不是所有的NPN 的管子都可行,调试时使用 9014 就不能实现正 常通信,估计是输出驱动能力不够的缘故。

由于蓝牙的通信范围约束,我们还采用射频 NRF2401 来实现远距离的无线通信,由于篇幅有限这里不予细述。

图 7.5V转 3.3V电路图 8.3.3V转 5V电路图 9.蓝牙模块电路四、软件构架1、主控STC12C5A60S2配置 STC12C5A60S2 定时器 0 为定时器方式 2、10ms 中断,定时器 1 为计数器方式,初 值为 0。

累计 100 次定时器 0 中断为 1 秒,此时 TL1即光电对管输入的脉冲频率,最终 Speed=L*TL1/n(n 为后轮上反射纸的片数,L 为后轮的周长)。

同时在此一秒内触发 AD 采集一 次电源电压 Voltage送入内存。

当 Voltage 低于与设电压值时蜂鸣器报警。

配置 STC12C5A60S2 串行口 2 为方式 2、独立波特率发生器 9600、允许接收中断。

当串 口 2 接收到 PC 机数据转入中断处理程序,检测接收到的数据最高位,以此来区分数据是控 制信号还是速度信息。

配置 STC12C5A60S2 串行口 1 为方式 1、波特率固定、允许接收中断。

当串口 1接收到从 处理器 STC89S52 数据将转入中断处理程序,将接收到的数据处理后送至主控的内存当中, 以备主控芯片使用,同时等待PC 命令随时传给PC 机控制台。

配置 STC12C5A60S2 脉宽调制 PWM 为 8 位、无中断。

主程序中循环执行 PwmContral 函 数实时更改PWM定时器 CCAP1L、CCAP1H 的值。

PwmContral()程序如下(AutoFlags 为超声自动调速标志):uchar Pid(uchar Setpoint,uchar Achieved){float P=5,I=1,D=0.5;float Eun=0.0,En=0.0,En1=0.0,En2=0.0;int Output0=0,Output1=50;En=Setpoint‐Achieved;Eun=P*En‐I*(En‐En1)+D*(En1‐En2);Eun=Eun/500;Output0=Output1+(int)Eun;Output1=Output0;En2=En1;En1=En;return Output0;}uchar AutoDistance(uchar D,uchar S){uint Output;uint t;t=D/S;Output=0xff‐0.75*t;return Output;}void PwmContral(){if(AutoFlags==1){PwmTemp= AutoDistance(Distance,Speed);if(PwmTemp>256)PwmTemp=256;if(PwmTemp<0)PwmTemp=0;PwmLower=PwmTemp;PwmHigher=PwmTemp;CCAP1L=PwmLower;CCAP1H=PwmHigher;}if(AutoFlags==0){if((Speed‐ContralSpeed)<=‐100||(Speed‐ContralSpeed)>=100)PwmTemp=Pid(ContralSpeed,Speed);if(PwmTemp>256)PwmTemp=256;if(PwmTemp<0)PwmTemp=0;PwmLower=PwmTemp;PwmHigher=PwmTemp;CCAP1L=PwmLower;CCAP1H=PwmHigher;}}图 10.PwmContral 子程序流程2、从处理器STC89S52配置 STC89S52 串行口为方式 1、波特率固定、允许接收中断(与主控的串行口 1 作双机 通信交换数据信息)。