你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32单片机太阳能电池板追日光跟踪系统设计

[复制链接]
STMCU小助手 发布时间:2022-5-11 13:48
一.硬件方案
本设计采用光电跟踪的方法,利用步进电机驱动,由光电传感器根据入射光线的强弱变化产生反馈信号到微机处理器。微机处理器运行程序,通过对跟踪机构进行控制,调整太阳能电池板的角度实现对太阳的跟踪。
主要由STM32单片机、2路光敏电阻、步进电机控制及电源组成;如图:

]H2}$P5K7OJZ~0G2A]Z(N%5.png

二.设计功能
(1)通过2个光敏电阻来检测光照,光敏电阻放在板子的2端,如果两个光敏电阻的阻值相同,则说明阳光正对,如果两个光敏阻值不同 ,则说明阳光没有正对,则,步进电机调整板子正对。
(2)预留一路光敏,属于预留未使用。

三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:

%5I`3)%_N_L3~9$LGDOK1QR.png

(2)PCB图如下:

3~Z0(W(3~(QWRZT$[S7C6.png

四.软件设计
(1)程序流程图

F~J4SH~RE%BU8TIYB~_ZP8F.png

(2)主程序源码


  1. int main(void)
  2. {
  3.         u16 adcx;
  4.         char midval;
  5.         delay_init();                     //延时函数初始化         
  6.         uart_init(115200);                 //串口初始化为115200
  7.   TIM3_Int_Init(29,7199);//3ms           
  8.         LED_Init();                                  //初始化与LED连接的硬件接口
  9.          Adc_Init();                                  //ADC初始化            
  10.          
  11.          while(1)//电机旋转在定时器中处理
  12.         {
  13.                   adcx=Get_Adc_Average(ADC_Channel_2,5);// PA2 AD转换
  14. //                voltA=(float)adcx*(3.3/4096)*2;               
  15.                         adNum1=(char)((long)adcx*999/4096);        
  16.                         delay_ms(5);
  17.                         adcx=Get_Adc_Average(ADC_Channel_1,5);        // PA1
  18.                         adNum2=(char)((long)adcx*999/4096);
  19.                         if(adNum1>adNum2)//右侧光强
  20.                         {
  21.                                 midval = adNum1-adNum2 ;
  22.                                 if(midval<10)        //左右光差不多时 停止转动
  23.                                 {
  24.                                         MOTOR_DIR =0;
  25.                                 }
  26.                                 else
  27.                                 {MOTOR_DIR = 2;}//正转
  28.                         }
  29.                         else                //左侧光强
  30.                         {
  31.                                 midval = adNum2-adNum1 ;
  32.                                 if(midval<10)                //左右光差不多时 停止转动
  33.                                 {
  34.                                         MOTOR_DIR =0;
  35.                                 }
  36.                                 else
  37.                                 {MOTOR_DIR = 1;}//反转
  38.                         }
  39.         
  40.         }                                                                                            
  41. }
复制代码



收藏 评论0 发布时间:2022-5-11 13:48

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版