硬件设计
文件地址:
链接:https://pan.baidu.com/s/10SxMvtm6XljnL5f4XWn_Yg
提取码:0p7t
本设计是基于单片机红外感应自动洗手器的仿真设计,通过红外传感器电路感应,来控制水龙头电磁阀是否打开。完整的实现了基于单片机的红外感应自动洗手器仿真,模拟红外传感器,当有人靠近则电磁阀打开出水,人远离是水停止。
AD采集芯片采用的是ADC0832,该芯片资料简介如下:
.输入输出电平与TTL/CMOS相兼容;
· 5V电源供电时输入电压在0~5V之间;
· 工作频率为250kHz,转换时间为32μS;
· 一般功耗仅为15mW;
· 8P、14P—DIP(双列直插)、PICC 多种封装;
· 商用级芯片温宽为0°C to +70°C,工业级芯片温宽为−40°C to +85°C;
芯片接口说明:
· CS_片选使能,低电平芯片使能。
· CH0 模拟输入通道0,或作为IN+/-使用。
· CH1 模拟输入通道1,或作为IN+/-使用。
· GND 芯片参考0 电位(地)。
· DI 数据信号输入,选择通道控制。
· DO 数据信号输出,转换数据输出。
· CLK 芯片时钟输入。
· Vcc/REF 电源输入及参考电压输入(复用)。
驱动芯片采用的是L298,该芯片资料简介如下:
- 类型: 半桥
输入类型:非反相
输出数:4
电流-输出/通道:2A
电流-峰值输出:3A
电源电压:4.5V~46V
工作温度:-25°C~130°C
安装类型:通孔
封装/外壳:MulTIwatt-15(垂直,弯曲和错列引线)
供应商设备封装:15-MulTIwatt
包装:管件
器件型号L298N
制造商STMicroelectronics
产品型号MotionMotorControl
整体仿真图如下:
部分代码:
#include<reg52.h>
#include<intrins.h>
#include"Delay.h"
#include "Time.h"
#include "L298.h"
#include "main.h"
#include "ADC0832.h"
#define uint unsigned int
#define uchar unsigned char
unsigned long volt;//测量的电压值
unsigned char volt1=0;
unsigned char OPEN_Flag=0;
unsigned char one_times=0;
/*----------------------------------------------------------------------------------
main()_程序入口
----------------------------------------------------------------------------------*/
void main(void)
{
TIME_Init(); //定时器初始化
stop();
while(1)
{
ADC0832_data();
if( volt1 >= 16 )
{
OPEN_Flag = 1;
one_times = 1;
}
else
{
OPEN_Flag = 0;
if( one_times == 1 )
{
turn_left();
Delay_ms( 1000 );
one_times = 0;
}
stop();
}
}
}
.
#include "ADC0832.h"
#include "main.h"
//ADC0832端口引脚定义
sbit CS=P3^2; //将CS位定义为P3.2引脚
sbit CLK=P3^0; //将CLK位定义为P3.0引脚
sbit DIO=P3^1; //将DIO位定义为P3.1引脚
unsigned int AD_val; //储存A/D转换后的值
unsigned char Int,Dec; //分别储存转换后的整数部分与小数部分
unsigned int DATA_V;
unsigned int DATA_I;
unsigned char num = 0;
/*****************************************************
函数功能:将模拟信号转换成数字信号
***************************************************/
unsigned char ADC0832_data( void )
{
unsigned char i,dat;
CS=1; //一个转换周期开始
CLK=0; //为第一个脉冲作准备
CS=0; //CS置0,片选有效
DIO=1; //DIO置1,规定的起始信号
CLK=1; //第一个脉冲
CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平
DIO=1; //DIO置1, 通道选择信号
CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
CLK=0; //第二个脉冲下降沿
DIO=0; //DI置0,选择通道0
CLK=1; //第三个脉冲
CLK=0; //第三个脉冲下降沿
DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1
CLK=1; //第四个脉冲
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第四个脉冲
CLK=0;
dat<<=1; //将下面储存的低位数据向右移
dat|=(unsigned char)DIO; //将输出数据DIO通过或运算储存在dat最低位
}
CS=1; //片选无效
volt1 = dat*50/256;
return volt1; //将读书的数据返回
}
.
.