1、 基于 AVRMega16 的测速系统 1.设计的目的与意义: 本设计的速度测量主要应用于轮式设备的速度测量中(如车辆,转轮等) ,特别适用于如自行车,人力三轮车等要求低成本的应用中 。 本研究的目的是通过单片机的控制实现速度的测量和超速的报警,其中有七段数码管输出速度的值,有控制按钮来控制 Km/h 和 m/s 显示,由蜂鸣器来进行报警。 2. 设计内容与方法: 本设计的速度测量主要是测量转轴的角速 度,利用角速度和线速度的转换关系转换为线速度,从而测量出物体的行进速 度。角速度的测量利用红外光发射和探测而测出转轴的角速度,利用单片机的处理并用七段数码管输出速度值。如果速度超过指定值时,蜂鸣
2、器发出响声提示。 3设计电路图 : 4.硬件功能说明: 本部分包括对硬件设计思想的说明和硬件用途的说明。 硬件设计思想说明:本课程设计主要是通过测量轮式车的轮轴转动角速度,转换为小车行进的线速度。这要求我们要设计一个信号采集源来采集角速度信息传递到单片机进行处理。我们利用红外反射接收对管产生电信号,利用固定在轴上的挡板来使轴运动信息与电信号关联,最后输入单片机处理。单片机转换的 速度值通过四位七段数码管来显示 ,如果超速通过蜂鸣器来提示超速,同时又 led闪烁来提醒。 信号收集转换系统说明: 原理如图所示 我们的挡板开孔将 360分为四等分,这样做可以提高精度。将挡板放置于光电对管发射管和接收
3、管之间。轴的周期性运动使挡板周期性的遮挡发射管与接收管的红外线传播,是光电对管产生周期性的电信号,最后通过接线传输到单片机。 光电对管 原理 如图所示。 光电对管是由红外线发光二极管和光明三极管组成,我们在集电极串入 1k的电阻,输出集电极电压值。当光电三级管导通时由于集电极有电流流过会使输出电 压降低使呈现低电平状态,当三极管截止时,输出电压近似等于 +5V,呈现为高电平。 信号由 PD6口输入。 速度显示系统说明: 七段数码管如图示。 我们选用的是四位集成的共阳极七段数码管,采用 PA0 PA7口分别控制 ap七段和小数点,利用 PC0, PC1, PC6, PC7口分别控制 1、 2、
4、3、 4位的七段数码管显示。最终实现 四位 动态扫描 显示 。 蜂鸣器电路如图所示。 我们利用 PD0口来控制蜂鸣器的工作,当 PD0口输出为高电平时,三极管导通蜂鸣器发声。 PD0口为低电平时三极管截止,蜂鸣器中没有电流流过,不工作 LED电路如图示。 我们利用 PD1口来控制 LED的显示,当超速时, PD1口周期性的输出高电平使 LED灯闪烁提示超速。未超速时输出低电平二极管不导通。 键盘电路如图。 我们采用 PD2口作为键盘检测口。当检测到键盘按下时,七段数码管显示为 Km/h。正常情况下显示为 m/s。 5.软件设计流程与设计思想 软件流程:软件流程图如下所示。 软件设计思想:我们课
5、程设计的测速功能主要是由单片机内部定时器 T0实现的, 通过 T0的精确定时测出两次脉冲时间,转换成脉冲频率,最后转换为所求速度。 6.系统测试: 我们通过 Proteus仿真软件对软件部分行了测试。 图中为当输入的脉冲频率为10Hz是输出输出值。 图中为输入频率为 30Hz时的输出值 第三张图的输入脉冲为 45Hz。 分析三张图中结果输出值与输入值的比例近似相等,说明测速部分基本运行正常。 按键和显示转换部分测试 当 10 #include unsigned int f_time=0,l_time=0;/ f_time l_time即 first 和 last, 存储两次间隔的初始态和末态
6、,以 timer1的时序为单位。 float time=0; /time 记录两次时间间隔 , 以秒为单位 char point=3; /小数点的位置 double v; /速度 const char led_713=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x39,0x00; const char position4=0xfe,0xfd,0xbf,0x7f; char dis_buf4=0; char v_ok=0; /v_ok=1时 显示速度 , 预定 0.5s刷新一次速度 #define SECOND 3906.25 /一秒钟 #define R 1.5 /车轮半径 void port_init(void) PORTA = 0x00; DDRA = 0xff; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; /m103 output only DDRC = 0xff; PORTD = BIT(2); DDRD = BIT(0)|BIT(1); /TIMER1 initialize - prescale:1024 / WGM: 0) Normal, TOP=0xFFFF / desired value: 0.1Hz