[经验分享] GD32F350体验之十(太阳位置算法的移植)

RCSN   2018-9-30 23:13 楼主
    该算法代码是由美国国家可再生能源实验室本根据Jean Meeus的《天文算法》一书中给出的算法,实现对太阳高度角和方位角的计算,有效时间范围和精度分别为:-2000-6000年,±0.0003 度。https://bbs.eeworld.com.cn/thread-494254-1-1.html   再次,有一个坛友54哥已经早就在论坛分享过,并且做出了两种不同算法的比较,我也是借鉴他的思路代码来进行简化和设计,并且在此基础上,加入上位机可以通过天气预报和地图获取相关天气信息来辅助太阳追踪器。这个下帖会继续分享。
   楼主本贴的目的在于太阳位置算法--SPA天文算法的研究和移植。具体算法可以参考Jean Meeus的《天文算法》一书。我只是根据美国国家可再生能源实验室的代码进行解析。对于《天文算法》这本书,确实需要初级天文知识和高数知识才能看得明白,而且涉及的知识面很多,我也是通过代码来进行一个简约的计算方式分析。

    SPA算法需要的参数比较多,之所以要用到上贴的RTC时间,同样也需要当地的时区、经纬度、年平均温度等来算出此刻太阳的位置,即是高度角和方位角,该天内日出时刻,日落时刻。进而根据其参数来实现对太阳跟踪。
    1.png
   在此我也做了相对应的QT天气预报和地图,从而对其当天的天气信息和地图经纬度信息进行提取下发给下位机,从而辅助太阳追踪器,比如如果当天是阴天,则太阳追踪器则不进行追踪,停留在最初位置等等。上位机的开发会在下个帖子进行分享思路。
   2.png

1084534438 欢迎交流  [加油,一切皆有可能]

回复评论 (6)

明天待续。。难得放假,睡个懒觉
1084534438 欢迎交流  [加油,一切皆有可能]
点赞  2018-9-30 23:37
在天文计算中,超出0~360度范围的角度经常是会出现的,比如快速运动的天体,月球等自转中甚至还会出现更大的角度;但是由于一些程序设计语言可能对于大的角度的三角哈数计算结果是不准确的,可能也是为了方便,所以还是需要把一个大范围的角度转换到0到360度或者0到180度。因此算法第一个接口函数就是写的弧度转角度、角度转弧度、角度转换0!~360度等角度。 1.png


计算机不能直接计算出以度分秒方式表示的角度的三角函数。在使用三角函数之前,应该把角度转换成以度为单位的十进制小数形式。因此,在计算 23°26′49″的余弦时要先把角度转化成为 23.44694444°,然后再用余弦函数计算。 不太清楚的是,转换成角度之后还得转换为弧度单位。这个在代码中,频繁出现这个接口转换,最终得目的还是为了方便建立一个统一单位。赤经通常用时、分、秒方式来表示。如果需要计算赤经
的三角函数,需要把赤经转换成用度为单位来表示(然后再转换成以弧度为单位),请注意 1h 对应于 15°
  比如计算时差角和地心距离函数接口sun_right_ascension_parallax_and_topocentric_dec,就是将其纬度、地心太阳赤纬角度等先其转换为0~360角度。再将其三角函数转换后再次转换为弧度返回。
2.png
     几乎在spa的算法接口中,都会用到这些转换,这样使得算法在程序语言设计上更加容易设计




1084534438 欢迎交流  [加油,一切皆有可能]
点赞  2018-10-2 00:41
厉害的啊
点赞  2020-12-12 15:05

能分享一下代码么?最近也在学习,谢谢

点赞  2020-12-14 10:43

厉害啊

点赞  2023-6-9 15:08

先理清楚思路,然后好好研究一下代码,挺有意思的一个项目

点赞  2023-8-24 20:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复