序
🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机控制的太阳能光伏双轴自动追光系统设计
1 系统的硬件设计
1.1 51单片机模块
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。
图1-1 单片机最小系统
1.2 光电转换、步进电机模块
电路板上安装有4个不同方位的光敏电阻,光敏电阻的电阻值在强度不相同的环境太阳光照射下会不断发生相应的变化,电压同样也会随着光敏电阻值的变化而产生变化。光敏电阻值越大,光敏电阻的外电压越大。通过pcf8591模数转换芯片将模拟信号转换成数字信号。然后单片机通过不同的电压值来判断光敏电阻接收到的不同光照强度,从而控制步进电机转到一个合适的位置。
ULN2803是一个8输入8输出的驱动芯片,这里用的是五线四相步进电机,其实质是单片机控制IO口循环驱动。
U4RL210KAINOVDDAtNIAOUTAFN2VREFATN3AGNDRLOIOK
图1-2 光电转换模块电路图
P27I
N[NNNNNN[N
rlTlT1T1rlT1T1T1rTrrrTrTrrrTrrrru-uuuuuuuooooooooGNDVCC—ULN2803GNDVCC卜1817|16|~isr14
疙盈机P35432步进电机
图1-3 步进电机模块电路图
1.3 时钟、按键模块
时钟芯片的1脚、4脚是分别是VCC、GND为时钟供电,2、3脚接一个晶振,为时钟提供一个基准频率。SCLK(时钟)、IO(IO数据)、RST(使能复位)三个管脚与单片机进行通信外接一个4.7K的上拉电阻来提高通信的稳定性,还有1个VCC接备用电池,持续为时钟供电,使时钟不同停止。
按键其中一端接的是地,而另一端接的是单片机IO口,又因为单片机IO口默认是高电平,所以当按键被按下的时刻,其实相当于IO口与地进行相连接,IO口电平被强制拉低了,当按键松开时,IO口又变成低电平,所以说只要检测哪个按键接的IO口是低电平,就可以知道明确的哪一个按键是被按下的。
图1-4 时钟模块电路图
图1-5 按键模块电路图
1.4 液晶显示模块
有十六个管脚,其中有8个管脚是数据传输管脚,专门负责与单片机进行数据交互(D0-D7)的工作,还有三个管脚是模块数据命令使能端,也就是控制管脚,它们分别接单片机的P0、P11、P2管脚,有两组VCC、GND,1组是为液晶的背景进行供电,另一组是为液晶整个模块进行供电。VO管脚是对比度调节管脚,经过一个3K电阻进行接地来达到一个比较好的显示状态。LCD1602液晶显示模块
图1-2 液晶显示模块电路图
2 系统的软件设计
2.1系统整体软件设计
本系统设计整体软件程序流程图如下图所示:
图2-1 整体软件流程图
主程序如下: void main(void)
{
TMOD=0x01;//定时器初始化配置
TH0=0xf6;//定时器0赋初值
TL0=0x3b;
EA=1;//打开总中断
//打开定时器0中断//打开定时器0//AD部分初始化cls();//液晶屏初始化ET0=1;
TR0=1;
init();
LCD1602
Init_time_ds1302(16,12,14,16,5,30,3,12);//DS1302 默认时间模式化 16
年12月14日X时X分X秒星期X最后是校准值
Read_alltime_ds1302(Time); //读取 DS1302 中的所有时间数据
Read_dat_ds1302(Time+7,0xC3,4);//读取 DS1302 中的启动停止时间数据
while(1) {
if(state==0)Read_time_ds1302(Time);//如果是系统处于非设置状态则去读取当前时间数据 ShowCode();//液晶显示函数调用
ButtonCode();//按键控制函数调用
〃上光敏电阻读值〃下光敏电阻读值〃左光敏电阻读值〃右光敏电阻读值AD_Down=read_add(0x00); AD_Up=read_add(0x01);
AD_Right=read_add(0x02);
AD_Left=read_add(0x03);
AD_Down==0 | |AD_Up==255| | AD_Up==0 | ||| AD_Left==255 || AD_Left==0)if(AD_Down==255 || AD_Right==255 || AD_Right==0
{
//判断传感器是否错误SYS_ERROR=1;
}else
{
SYS_ERROR=0;
}
//调用自动控制函数ProcCode();
}
}
自动模式流程图:
自动模式下,单片机通过采光板上的四个光敏电阻,来检测采光板上下左右四个方向的光强度值,然后控制步进电机工作,使采光板正面移动到与光强度值最大的一方垂直。
控制部分程序如下:
voidinit_1()interrupt1//定时器0中断服务程序每2.5ms中断一次
{
TH0=0xf6;
TL0=0x3b;//重新赋初值
if(Up_CB)//步进电机转动控制程序部分〃上转转动标志位触发
{
P2=P2&0xf0 |FirstSet_FWD [loop];〃上转动控制
}elseif(Down_CB)〃下转转动标志位触发
{ P2=P2&0xf0|FirstSet_REV[loop];〃下转动控制
}else {
P2=P2&0xf0;〃停止转动
if(Left_CB)//左转转动标志位触发
{
P2=P2&0x0f |Secondset_FWD[loop];//左转动控制
}elseif(Right_CB)//右转转动标志位触发
{
P2=P2&0x0f |Secondset_REV[loop];//右转动控制
}else
{
P2=P2&0x0f;〃停止转动
}
loop=(loop+1)%8;//循环变量自加
if(SYS_ERROR==1)〃如果传感器错误
{
blink_ms++;
if(blink_ms>39)//如果传感器连续错误超过100ms系统错误错误指示
{
blink_ms=0;
led_1=!led_1;
led_2=led_1;
}
}
ms++;
if(ms>200)〃以1S的速度显示各个光敏电阻的数据
{
ms=0;
s1=!s1;//设置时间时以1S的闪烁数据做设置项提示
ShowDat1=AD_Up;//显示数据赋值
ShowDat2=AD_Down;
ShowDat3=AD_Left;
ShowDat4=AD_Right;
}