基于STM32的自动浇花器设计
- 格式:doc
- 大小:868.00 KB
- 文档页数:11
信电学院
电子信息工程专业CDIO三级项目项目设计说明书(2016/2017学年第二学期)
项目名称:基于STM32的自动浇花器设计
专业班级:
学生姓名:
学号:
指导教师:
设计成绩:
2017年7月13日
1、项目设计目的
以stm32单片机为核心,利用雨滴传感器及外围电路,完成花草周围湿度情况监测。要求通过雨滴传感器反馈的数据通过单片机处理进行实时控制。实现当湿度过低时,单片机自动控制外围电路水泵进行浇水,湿度高时停止浇水。然后将每一时刻的湿度情况通过串口显示在PC上。
2、项目设计正文
2.1设计要求
1、绘制电路原理图以及PCB图。
2、搭建实际硬件电路,实现功能。
3、确定元器件参数。
2.2电路设计
2.2.1 STM32单片机介绍
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103―增强型‖系列和STM32F101―基本型‖系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
单片机最小单元模块图,如2-1所示:
图2-1:单片机最小模块图
2.1.2 系统晶振电路设计
将STM32单片机上PD0和PD1连接到外部晶振电路上,系统选取的外部晶振为8MHz,外部晶振电路如图2-2所示:
图2-2 外部晶振电路
2.1.3 系统复位电路设计
将单片机的NRST引脚连接复位电路,复位电路如图2-3所示:
图2-3 复位电路
2.2.4 雨滴传感器模块
模块功能介绍:模块采用5V&9V&12V供电静态电流为5-12mA ,继电器负载能力为250V 10A(AC)~ 30V 10A(DC),接上电源,电源指示灯亮,感应板上没有水滴时,继电器不动作,开关指示灯灭,滴上一滴水,继电器吸合,启动相关设备,开关指示灯亮,擦掉上面的水滴,又恢复到原始状态。
模块供电:5V&9V&12V 静态电流:5-12mA
继电器负载能力:250V 10A(AC) 30V 10A(DC)
D0:是通过 LM393 芯片输出的TTL开关信号。
A0:传感器的模拟信号输出,可接到单片机上利用AD读取该值。
电位器:可以根据实际的应用需要改变阈值,配电位器调节灵敏度,控制在不同水份时,控制继电器的开启。
继电器开关输出说明:继电器线圈没有电压时,继电器没有吸合,公共端与常闭端接通,当有电压时,继电器吸合,公共端与常开端接通。
继电器接常开端电路接法:当继电器没有吸合时,公共端与常闭端接通,相当于开关断开,控制设备没电不工作。当继电器吸合时,公共端与常开端接通,相当于开关接通,设备有电工作。
继电器接常闭端电路接法:当继电器没有吸合时,公共端与常闭端接通,相当于开关闭合,电路接通,控制设备将有电工作。当继电器吸合时相当于开关断开,电路没电不工作。
功能介绍:接上5V 电源,电源指示灯亮,感应板上没有水滴时,DO 输出为高电平,开关指示灯灭,滴上一滴水,DO 输出为低电平,开关指示灯亮,刷掉上面的水滴,又恢复到,输出高电平状态。。。。AO 模拟输出,可以连接单片机的AD 口检测滴在上面的雨量大小。DO TTL 数字输出也可以连接单片机检测是否有雨
雨滴传感器单元模块图,如2-4所示:
图2-4二:雨滴传感器单元模块图
2.2.5稳压电源电路
直流稳压电源是常用的电子设备,它能保证在电网电压波动或负载发生变化时,输出稳定的电压。MC7805芯片,三端固定式集成稳压器将不稳定的直流电压转换成稳定的直流电压,REG1117-3.3芯片与电容进行滤波处理,使电路输出稳定的直流电压。
稳压电源电路模块图,如图2-5所示:
图2-5:稳压电源电路模块图
2.2.6系统下载器设计
系统的下载器电路,如图2-6所示:
图2-6:下载器电路
2.2.7系统电路原理图
1.系统电路原理图,如图五所示。
图2-7:数字电压表实际原理图
2.数字电压表实际电路PCB图,如图2-8所示。
图2-9:数字电压表实际PCB图
2.3程序设计
2.3.1 STM32内部ADC控制原理
STM32内部12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模
式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
ADC供电要求是2.4V - 3.6V
ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和ADC_SMPR1寄存器中的SMP[2:0]为更改每个通道可以分别用不同的时间采样总的转换时间如下计算:
Tconv = 采样时间 + 12.5个周期
例如:
当ADCCLK = 14MHz,采样时间为1.5周期
Tconv = 1.5 + 12.5 = 14周期 = 1us
以规则通道为例,一旦所选择的通道转换完成,转换结果将存放在ADC_DR寄存器中EOC(转换结束)标志将被置位,如果设置了EOCIE,则会产生中断。然后ADC将停止,直到下次启动。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生,
2.3.2程序中ADC时钟设置如下:
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
//设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
根据本次设计的需求及原理,ADC采样的功能设置如下:
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel= 1;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
2.3.3获取AD值函数如下:
u16 Get_Adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);