一.硬件方案- o! [/ c* j! ~! ~ ^/ D
本设计采用光电跟踪的方法,利用步进电机驱动,由光电传感器根据入射光线的强弱变化产生反馈信号到微机处理器。微机处理器运行程序,通过对跟踪机构进行控制,调整太阳能电池板的角度实现对太阳的跟踪。
8 s# P: ^1 A% F6 ?$ Q& K# G7 D/ {主要由STM32单片机、2路光敏电阻、步进电机控制及电源组成;如图:
. N* b4 f3 M* M* m3 \1 I$ b& B, A
2 i; Y1 V. L9 h1 B! }" O6 V' V
' {% V% E. I3 ~4 K3 s( |5 c- e Q
二.设计功能) [1 m$ ?9 T. n- y0 ?6 A
(1)通过2个光敏电阻来检测光照,光敏电阻放在板子的2端,如果两个光敏电阻的阻值相同,则说明阳光正对,如果两个光敏阻值不同 ,则说明阳光没有正对,则,步进电机调整板子正对。8 a) W; T) `2 G" {4 M8 Q
(2)预留一路光敏,属于预留未使用。+ }- `2 H: L) `' C
& x0 p7 z8 r; n5 n% |
三.设计原理图
( C7 Y* G) k2 Y% z9 ?6 c' d, i(1)原理图主要采用AD软件进行设计,如图:" E+ Y% f: E) w" ?
1 R& W- v2 Q8 E; M% m& O% _
! a& V. W& v9 n1 | K" a
3 H) B" t% C4 U8 R L3 {: W% X(2)PCB图如下:# e/ e; V: ^/ w$ G" q
3 Y3 Z# z S+ `4 k, J' Q. |# S
, U6 h( Q, z, L4 I4 ~9 H. R; w! O9 A9 {: S! g3 R, U
四.软件设计; W/ f7 _' A' `0 ^1 Y' {% D
(1)程序流程图/ u6 n* s! T( N' {1 C5 a
9 Z) Q& G! R2 o; j0 }
% Y5 K- o# j( ^1 u- _$ U% F& M! y7 Z
(2)主程序源码
: ^# T: P& X0 B
K' w) m K+ o: O8 P3 c- 4 ]8 k2 a* |3 a2 ^
- int main(void)8 l6 E* c5 s* }8 i7 }: ]( C' J
- { 8 j9 X, m) S& q9 u5 j
- u16 adcx;
! P8 l6 W. S: ` - char midval;
! O5 Q3 f9 T' b$ ~; W - delay_init(); //延时函数初始化
o2 y) J% a8 r2 G6 ?" p5 {7 D - uart_init(115200); //串口初始化为115200
1 t; X1 l! o7 b$ v# Y - TIM3_Int_Init(29,7199);//3ms ) u* k' Z# ?. ?7 w1 A% B
- LED_Init(); //初始化与LED连接的硬件接口
6 J) {, D* D8 s3 y9 N/ Z7 C2 Z - Adc_Init(); //ADC初始化
4 \7 M' ~ F( j" n; Q! Z -
" g' A+ K- D( g0 Y! m0 o# l - while(1)//电机旋转在定时器中处理$ G2 Z$ e8 M/ w# L9 e
- {
8 W0 w4 I; r) X" x, @2 ]* v - adcx=Get_Adc_Average(ADC_Channel_2,5);// PA2 AD转换- e7 p8 Z% B8 Q% l0 B! K
- // voltA=(float)adcx*(3.3/4096)*2; # a3 w6 \4 E+ h5 d+ Q( F5 x6 D
- adNum1=(char)((long)adcx*999/4096); * @5 s, e9 R9 N N. t
- delay_ms(5);
( |- l. L9 ?' } H( S; ? - adcx=Get_Adc_Average(ADC_Channel_1,5); // PA1
! ~3 w$ D& o2 Q9 c: f- u - adNum2=(char)((long)adcx*999/4096); c' n e& J( Q# r' J; I/ {
- if(adNum1>adNum2)//右侧光强" A4 a7 J; c) a4 V( o
- {
- W* O) `0 \. |. b, Y5 J - midval = adNum1-adNum2 ;9 w$ g6 O5 c5 p- y/ k
- if(midval<10) //左右光差不多时 停止转动6 ]. ]& X1 y1 |: b4 m. C
- {+ F3 q5 M b% T- I5 V: ]8 H
- MOTOR_DIR =0;
( R8 Y( G5 ?% U' z' f7 i - }$ M2 }$ C" r2 ]! G0 c9 p
- else
5 z9 u, [) X$ k5 f4 X1 w - {MOTOR_DIR = 2;}//正转6 h- h' [8 P: \& `9 }2 s
- }
0 j; _ i% P7 t' W {: c - else //左侧光强
; q ]4 g- c* n6 d - {
- J/ X% A4 y& W0 J/ g, B. K - midval = adNum2-adNum1 ;
$ \$ a+ _' A0 z! o' T: R4 |9 _ - if(midval<10) //左右光差不多时 停止转动
, ]; B# t; \8 a6 G4 t0 q - {9 q, n3 f' L- o3 U* K9 [0 ~
- MOTOR_DIR =0;+ W5 \# p% s' ]7 s
- }
" [5 e5 e+ b, z! R# m5 K; D - else
& z& V% {2 g- I+ r( ` - {MOTOR_DIR = 1;}//反转
' M2 A: y' s. C/ k - }6 H* z) f' D+ S9 U3 h
-
! u; s/ x( p P% N - }
: f$ o D) U9 K0 E - }/ r& [% P# L# R, s5 |
复制代码 6 `; k9 y% F4 [9 j
9 J8 X: c5 T. A1 c; Z2 J
. a) C4 }, X* D
|