一.硬件方案
d' P0 l: ^# A% U8 T1 T' n9 E本设计采用光电跟踪的方法,利用步进电机驱动,由光电传感器根据入射光线的强弱变化产生反馈信号到微机处理器。微机处理器运行程序,通过对跟踪机构进行控制,调整太阳能电池板的角度实现对太阳的跟踪。: m$ ~5 g1 S8 \& l0 e
主要由STM32单片机、2路光敏电阻、步进电机控制及电源组成;如图:7 w+ t$ I: E( }9 h- g5 D
6 L% x0 f2 N, S6 O$ i* D. w
/ q, I* R8 {# p# N v+ x- c. P/ y# h4 D! O, Y' R
二.设计功能8 i7 ~) V/ g# @$ [7 g5 Y
(1)通过2个光敏电阻来检测光照,光敏电阻放在板子的2端,如果两个光敏电阻的阻值相同,则说明阳光正对,如果两个光敏阻值不同 ,则说明阳光没有正对,则,步进电机调整板子正对。
3 r) d- @6 J. v(2)预留一路光敏,属于预留未使用。. y% f9 L$ C+ r( D/ }! x
7 u% q- P; e- Q1 v4 Z
三.设计原理图
) ~7 n. Y7 u& W0 K0 S+ R1 h(1)原理图主要采用AD软件进行设计,如图:
" j+ X. u" ?4 n6 j8 }4 \- W! }+ `- Y% c# h
4 e- o/ ?/ M& }$ N3 Y1 ^# K
' z m- h- U9 ]. u, k
(2)PCB图如下:
" C8 U: J6 U8 H5 y4 c+ P- X/ D+ H6 G# ~& X5 F( O
1 e N5 a- ^ [, X! D
( ]4 L) [$ H4 p$ A) B四.软件设计" R1 n8 P/ l% t
(1)程序流程图
/ }3 `$ ]2 k# ]. B0 |* B% n6 t4 a# T8 O# A4 `8 \1 f
: Q5 r0 z" x7 C& e/ `1 M: j" o* L
( B9 P# Y+ e3 v1 {7 x. K
(2)主程序源码
) j6 c+ r1 @% @1 T/ X
$ N9 Q1 v# `! f! C. N3 { {5 N
7 ?5 t/ s& t8 h2 L' w- int main(void)! b, e3 a% m! G, S# Y0 d6 [6 a
- {
0 s! d$ F% ?% B3 ?7 l3 r, i - u16 adcx;
/ g6 K# a$ R' U - char midval;- Q6 S& [4 j* ~' r/ o" R* j
- delay_init(); //延时函数初始化 / G1 s+ b* K, V* y' [3 [
- uart_init(115200); //串口初始化为115200" W7 l S% L* q/ r1 p
- TIM3_Int_Init(29,7199);//3ms 6 |3 O8 Y: [! K7 T2 _
- LED_Init(); //初始化与LED连接的硬件接口
4 ]* N# X O% `" u1 e - Adc_Init(); //ADC初始化 8 A1 B, [$ Z8 y" r
- 5 s" y% F' j$ l6 r; c& j; d
- while(1)//电机旋转在定时器中处理; _) Y- D8 E k# w# s
- {
+ V- d9 b" |; ^7 N1 V* i - adcx=Get_Adc_Average(ADC_Channel_2,5);// PA2 AD转换
; ]/ j3 z" Y/ _9 F5 `$ W/ n - // voltA=(float)adcx*(3.3/4096)*2; ! D( s8 j( S O1 F$ r
- adNum1=(char)((long)adcx*999/4096); : ]2 g% X6 B/ W: U7 D5 M2 z
- delay_ms(5);; e% U/ i: g( \9 J
- adcx=Get_Adc_Average(ADC_Channel_1,5); // PA1
$ W0 D8 |) Q) i4 u( Q - adNum2=(char)((long)adcx*999/4096);4 o2 J8 L" R( S) ~. k
- if(adNum1>adNum2)//右侧光强; d5 ~0 S! @8 s- q. q7 B: {
- {
, G; K0 p& D7 U$ w5 ^/ L9 f! }3 \ - midval = adNum1-adNum2 ;
6 w* Z. _7 y, y# p& J6 p - if(midval<10) //左右光差不多时 停止转动
7 r' D6 U ^ X# ~ - {( f3 N0 `' t& v: G' k3 i
- MOTOR_DIR =0;5 k' O: u9 w' x5 Q" i* W
- }
3 z( e4 Z& n# e2 ], u% X$ v - else# |8 ]$ r w% `% u: I' k/ l( R7 s
- {MOTOR_DIR = 2;}//正转3 R6 \: p0 c1 o; v- `1 C
- }+ A5 g6 ~/ A8 s' W' U/ g* w
- else //左侧光强
7 v2 R/ X; l( @& O$ I1 w" G- }. M2 m - {3 Q7 M- u& C( e F3 I7 b
- midval = adNum2-adNum1 ;
. U& k# I$ Z' S+ ^) f, j - if(midval<10) //左右光差不多时 停止转动
$ v* a) F3 o# t( N8 ~2 ?$ c - {
. ~/ x* T% P+ r* j* \" K) ~ - MOTOR_DIR =0;9 D, s" ~5 F# k/ ~0 B5 p
- }
9 v3 A& S" G$ m6 `" T - else- f, L0 C+ _ W# H, g
- {MOTOR_DIR = 1;}//反转
, a$ j& C, X3 e, G. l% M2 O- n - }7 G5 m0 D% L& j4 f) a5 L* c- w
- $ u# O: a* n) C) \5 h6 [. I1 r6 @# ]8 y
- }
: W1 l4 A2 c) D2 a+ X, A# r4 _/ | - }
* {, x$ U& v' O# Z$ \0 N
复制代码
# p B' q: y+ g3 x
T) K3 @, ]/ y( T
5 z. _. [+ O# e, |5 e; Q( ^6 ?3 _8 _ |