1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于51单片机的智能汽车雨刷控制系统方案原理图程序设计

基于51单片机的智能汽车雨刷控制系统方案原理图程序设计

时间:2023-02-28 19:07:20

相关推荐

基于51单片机的智能汽车雨刷控制系统方案原理图程序设计

总体设计

设计的总体思路是:运用雨滴传感器感应雨量的大小,把感应信号输给单片机系统,然后通过软件控制雨刷电机根据相应的环境做出不同的转动。例如,当检测为小雨量的时候,电机工作在小雨模式(电机旋转一个来回要停留10秒再继续进行旋转);当检测为中大雨的时候则,启动中大雨运转模式(电机旋转一个来回停止5秒后再继续工作);当检测为大雨的时候,则启动大雨运转模式(电机连续进行来回旋转)。设计中运用STC89C51单片机,步进电机采用ULNAN驱动芯片进行驱动。

2.1.2 总体设计框架图

自动雨刷控制系统总体设计框图如图2-1所示,整体设计由6个部分构成,分别是:单片机最小系统、LCD1602显示模块、按键控制模块、雨量感应传感模块、步进电机控制电路模块。

单片机最小系统是自动雨刷控制系统的核心,连接数据采集端、状态显示端和命令控制端;

本设计中的显示部件由LCD1602显示模块组成,主要功能是显示雨量大小状态显示,雨量最低开启值显示,比较直观显示整个系统的状态;

键盘模块主要是雨量上下限值按键控制模块,实现手动操作设置雨量大小上下限值的设定;

雨量传感器采用专用的湿度传感器,成本低,控制灵活,电阻是模拟信号,需要经过信号调理电路,将其转变成数字信号传送给单片机;

步进电机控制电路模块是系统的控制端,其控制命令来源于单片机,但是是由传感器感应雨量大小触发的。

原理图:

单片机最小系统包括复位电路和时钟电路两部分,其中复位电路是由按键、保护电阻、上拉电阻和电容组成,可以实现按键手动复位和上电自动复位,与单片机的9脚复位端相连。52单片机是高电平复位,所以给单片机加5V电源(上电)启动时的,电容充电相当于短路,RSTET上的电压就是VCC,这时单片机就是复位状态。

最小系统如图4-1所示。

晶振电路。此单片机内部包括一个反相放大器和一个高增益,它的输入端为引脚XT1,其输出端为引脚XT2。通过两个引脚在并接一个振荡器和两个电容就构成了一个自激振荡器。STC89C51RC电路采用11.0592MHZ的晶振,

步进电机驱动电路

由于步进电机是一种将电脉冲信号转换成直线或角位移的执行元件,它不能直接接到交直流电源上,而必须使用专用电路控制驱动器。典型步进电机控制系统:控制器可以发出脉冲频率从几赫兹到几十千赫兹可以连续变化的脉冲信号,它为环形分配器提供脉冲序列。环形分配器的主要功能是把来自控制环节的脉冲

序列按一定的规律分配后,经过功率放大器的放大加到步进电机驱动电源的各项输人端,以驱动步进电机的转动。

步进电机主要通过ULN芯片进行驱动,驱动电路包括ULN主芯片,1个排阻,1个220uf电容。IN1-IN4为信号输入端,与单片机P1.0-P1.3接口对接进行驱动,同时需要10K的上拉排阻。IN1-IN4变化不同信号,OUT3-5作为输出信号控制电机旋转。ULN的8号引脚GND接地,9号引脚COM接VCC。驱动电路如图4-2所示。

按键电路

单片机组成的小系统中,有的需要人机交互功能,按键是最常见的输入方式。最常见的按键电路大致有,一对一的直接连接和动态扫描的矩阵式连接两种。一对一的直接连接就是一个按键直接对应一个CPU的输入口,这样的电路简单直接,一个按键独占一个端口,在按键数量较少端口数量富裕时可以直接使用。但很多场合需要的按键数比较多,要尽量少地占用端口就必须使用矩阵式的按键链接。

由于本设计按键所需不多,加上复位按钮一共4个按钮。因此每个按钮占用一个单片机接口。电路图如图4-4所示。P3.2-P3.4接的是单片机的P3端口,如果对应的按键被按下就会有对应的功能,最终实现对雨刷的控制。按键电路如图4-3所示:

系统软件

#include <REGX52.H>#include <ADC0832.H>#include <LCD1602.H> #include <eeprom52.H>uchar i=0;uint dat; uint dat1=0;uint dat2=0;uint dat_value=0;uint DJ_dat=0,ms=0,ms_1=0;uchar loop=0;sbit key_1=P3^1;sbit key_2=P3^2;sbit key_3=P3^3;sbit key_4=P3^4;sbit led0=P2^0;sbit led1=P2^1;bit key_1_flag=0;bit key_2_flag=0;bit key_3_flag=0;bit key_4_flag=0;bit A_M=1;uchar speed_flag=0;uint Value=1000;uint water_h=0;uint water_l=0;uchar state=0;bit star_off=1,zheng_fan=1,s0=0,ir_on=0;uchar zz[]= //正转数据{0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};uchar fz[]= //反转数据{0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};void display(){LCD1602_write(0,0x80);LCD1602_writebyte("Water:");if(dat>99) LCD1602_write(1,0x30+dat/100%10);elseLCD1602_write(1,' ');if(dat>9) LCD1602_write(1,0x30+dat/10%10); elseLCD1602_write(1,' ');LCD1602_write(1,0x30+dat%10);LCD1602_writebyte("% ");if(A_M==0) LCD1602_writebyte("A ");else LCD1602_writebyte("M ");if(star_off==0) LCD1602_writebyte("K ");else LCD1602_writebyte("G ");LCD1602_write(1,0x30+speed_flag%10);LCD1602_writebyte(" ");dat_value=dat;LCD1602_write(0,0xC0);LCD1602_writebyte("H:");if(state==1&&s0) LCD1602_writebyte(" ");else{if(water_h>99) LCD1602_write(1,0x30+water_h/100%10);elseLCD1602_write(1,' ');if(water_h>9) LCD1602_write(1,0x30+water_h/10%10); elseLCD1602_write(1,' ');LCD1602_write(1,0x30+water_h%10); }LCD1602_writebyte("% ");LCD1602_writebyte("L:");if(state==2&&s0) LCD1602_writebyte(" ");else{if(water_l>99) LCD1602_write(1,0x30+water_l/100%10);elseLCD1602_write(1,' ');if(water_l>9) LCD1602_write(1,0x30+water_l/10%10); elseLCD1602_write(1,' ');LCD1602_write(1,0x30+water_l%10); }LCD1602_writebyte("%"); }void key_dispose(){if(key_1==0){LCD1602_delay(20);if(key_1_flag){key_1_flag=0;state=(state+1)%3;}}else key_1_flag=1;if(key_2==0){LCD1602_delay(20);if(key_2_flag){key_2_flag=0;if(state==1) {if(water_h<100) water_h++; SectorErase(0x2000);byte_write(0x2000,water_h);}if(state==2){if(water_l<water_h-1) water_l++;SectorErase(0x2200);byte_write(0x2200,water_l);} if(state==0){A_M=~A_M; star_off=1;} }}else key_2_flag=1;if(key_3==0){LCD1602_delay(20);if(key_3_flag){key_3_flag=0;if(state==1) {if(water_h>water_l+1) water_h--;SectorErase(0x2000);byte_write(0x2000,water_h);}if(state==2){if(water_l>0) water_l--;SectorErase(0x2200);byte_write(0x2200,water_l);}if(state==0){if(A_M==1){star_off=~star_off;if(star_off==0) speed_flag=1;else speed_flag=0;}} }}else key_3_flag=1;if(key_4==0){LCD1602_delay(20);if(key_4_flag){key_4_flag=0;if(A_M){ speed_flag=(speed_flag+1)%3;}}}else key_4_flag=1;if(A_M==0) {led0=0;led1=1;}else {led1=0;led0=1;}if(speed_flag==2){Value=260;}else if(speed_flag==1||speed_flag==0) {Value=500;}}void police_dispose(){ir_on=0;if(dat_value>water_h){star_off=0; speed_flag=2;}else if(dat_value>=water_l&&dat_value<=water_h) {star_off=0; speed_flag=1; } else if(dat_value<water_l){star_off=1; speed_flag=0; }}void main(){water_h=byte_read(0x2000);water_l=byte_read(0x2200);if(water_h<water_l||water_h>100||water_l<0){water_h=60;water_l=10;}TMOD=0x11;TH1=0x3c;TL1=0xb0;TH0=0x3c;TL0=0xb0;ET1=1;ET0=1;EA=1;TR0=1;TR1=1;LCD1602_cls();while(1){if(A_M==0) { police_dispose();if(star_off==0){ if(DJ_dat==0) loop=0;while(DJ_dat<180){P1=P1&0xf0|zz[loop];loop=(loop+1)%8;if(loop==0) DJ_dat++;LCD1602_delay(Value);} if(DJ_dat==120)loop=0; while(DJ_dat!=0){P1=P1&0xf0|fz[loop];loop=(loop+1)%8;if(loop==0) DJ_dat--;LCD1602_delay(Value);}} }else {if(speed_flag!=0) {if(star_off==0){ if(DJ_dat==0) loop=0;while(DJ_dat<180){P1=P1&0xf0|zz[loop];loop=(loop+1)%8;if(loop==0) DJ_dat++;LCD1602_delay(Value);} if(DJ_dat==120)loop=0; while(DJ_dat!=0){P1=P1&0xf0|fz[loop];loop=(loop+1)%8;if(loop==0) DJ_dat--;LCD1602_delay(Value);} }}else {loop=0; DJ_dat=0;}} } //1毫秒定时}void time_1(void) interrupt 1{TH0=0x3c;TL0=0xb0;ms_1++; if(i<10){i++;dat1+=A_D(0);//满量程0-255 实际完全浸入水中是255-36= 2190-219 }else{i=0; dat1=dat1/10;if(dat1<=36) dat1=36;dat1=dat1-36;dat=100-(dat1/2.19); dat1=0; }if(ms_1>=10) {ms_1=0;s0=~s0;}}void time_0(void) interrupt 3{TH1=0x3c;TL1=0xb0;display();key_dispose();}

.

链接:/s/1DZ-mRJ2Vway1UkccvNx-7g

提取码:li7c

.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。