可追踪太阳的太阳能电池板设计 1、选取可追踪太阳的太阳能电池板执行机构 减速比(减速比=输入转速÷输出转速=从动齿轮齿数÷主动齿轮齿 数):64 步距角:5.625度(64个脉冲一圈) 作用:通过输入的脉冲数,确定旋转的角位移,一般来控制小车轮子 的偏移角度等。 驱动方式:4相8拍(正转A-AB-B-BC-C-CD-D-DA-A......) 步进电机的相励磁的相励顺序: 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。) 2、开始在步进电机上搭载太阳能板 3、安装光照强度传感器模块 光照强度模块我选择的是BH1750模块,BH1750是一种IIC工作器件,我通过他采集光照强度,将数据反馈给步进电机,来使太阳能板调整方向追踪光照强度大的方向。 4、模块化程序 因为我做的系统比较大,为了使程序清晰条理,我使用模块化编程,下面是步进电机程序: - #ifndef __STEPMOTOR_H
- #define __STEPMKOTOR_H
- #include <reg52.h>
- void Stepmotor_Angle(unsigned int angle, unsigned char dir,unsigned char speed);
- void Stepmotor_Stop(void);
- void Stepmotor_Delayms(unsigned int x);
- #endif
- #include "stepmotor.h"
- code const unsigned char CCW[8] = {0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//顺时针旋转
- code const unsigned char CW[8] = {0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//逆时针旋转
- void Stepmotor_Delayms(unsigned int x)
- {
- unsigned char y;
- for( ; x > 0; x--)
- {
- for(y = 110; y > 0; y--);
- }
- }
- /***********************************************************************
- *函数名称; Step_Motor
- *函数参数: dir:方向位:dir = 0顺时针转,dir = 1逆时针转
- speed:
- 4:最快
- 10:最慢
- 其他速度自涸?~10之间选择合适的速度
- *函数功能: 步进电机按一定的方向转动
- *返 回 值: 无
- *函数作者:bqgup
- *完成日期:2017.9.12
- ************************************************************************/
- static void Step_Motor(unsigned char dir,unsigned char speed)
- {
- unsigned char i,j;
- for(j = 0; j < 8; j++)
- {
-
-
- for(i = 0; i < 8; i++)
- {
- if(dir == 0)
- {
- P1 = CCW[i];
- }
- else if(dir == 1)
- {
- P1 = CW[i];
- }
- Stepmotor_Delayms(speed);//最慢7档
- }
- }
- }
- /***********************************************************************
- *函数名称; Stepmotor_Angle
- *函数参数: angle:角度dir:方向dir = 0顺时针转,dir = 1逆时针转
- speed:旋转速度,从4往上加,数值越大,速度越慢,注意不能超过数据类型的规定大小
- *函数功能: 步进电机按一定的方向转动一定的角度
- *返 回 值: 无
- *函数作者: bqgup
- *完成日期:2017.9.12
- ************************************************************************/
- void Stepmotor_Angle(unsigned int angle, unsigned char dir,unsigned char speed)
- {
- unsigned int pulse;
- unsigned int i;
- pulse = angle / 11.25 + 0.5;
- for(i = pulse; i > 0; i--)
- {
- Step_Motor(dir,speed);
- }
- }
- void Stepmotor_Stop(void)
- {
- P1 = 0x00;
- }
复制代码
下面再附上BH1750光照强度模块采集程序
|