立创开源|太阳能逐日系统

发布于:2023-01-04 ⋅ 阅读:(309) ⋅ 点赞:(0)

**概述:**本设计采用STC15系列单片机作为主控,用4个光敏模块作为光线采集,同时用单片机自带的AD转换功能采集4个方向的电池板电压,来判断那个方向的光照强度比较高,从而使用单片机来控制两路舵机来调整角度。
系统介绍
原理图使用立创EDA(专业版)进行绘制,原理图包括 主控电路,显示接口电路,电源电路,LED显示电路,电压采集电路,舵机接口电路,独立按键电路,光敏模块采集电路。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**程序概述:**AD数据的采集 以及 定时器控制舵机
uint Get_ADC10bitResult(uchar channel) //channel = 0~7
{
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
nop();
nop();
nop();
nop();
while((ADC_CONTR & ADC_FLAG) == 0);
ADC_CONTR &= ~ADC_FLAG;
//返回10位AD值
return (((uint)ADC_RES << 2) | (ADC_RESL & 3));
}
//AD通道配置程序

uchar i;
for(i=0;i<10;i++)
{
x0+=Get_ADC10bitResult(0);
x1+=Get_ADC10bitResult(1);
y0+=Get_ADC10bitResult(2);
y1+=Get_ADC10bitResult(3);
}
x0=x0/30;
x1=x1/30;
y0=y0/30;
y1=y1/30;
//AD采集 采集30次 取个平均值
void Timer0_Init(void)
{
TMOD |=0x01;
TH0=-high_ms>>8;
TL0=-high_ms;
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1;
}
//定时器初始程序

void timer() interrupt 1
{
switch(Pwm_Flag)
{
case 1: PWM=1; TH0=-pwm[0]>>8; TL0=-pwm[0]; break; // 高电平持续时间pwm[0]
case 2: PWM=0; TH0=-(high_ms-pwm[0])>>8; TL0=-(high_ms-pwm[0]); break; //低电平时间10-pwm[0] ms
case 3: PWM2=1; TH0=-pwm[1]>>8; TL0=-pwm[1]; break; // 高电平持续时间pwm[1]
case 4: PWM2=0; TH0=-(high_ms-pwm[1])>>8; TL0=-(high_ms-pwm[1]); break; //低电平时间10-pwm[1] ms
default: TH0=0xff; TL0=0x80; Pwm_Flag=0;
}
Pwm_Flag++;
}
//定时器中断子程序,用来产生脉冲驱动 舵机。

详细逐日系统

本文含有隐藏内容,请 开通VIP 后查看