资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

包含go语言蜡烛图的词条

【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出

在前一小节中介绍了点亮第一个LED灯,这里我们准备进阶尝试下,输出第一段PWM波形。(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的。)

创新互联服务项目包括保定网站建设、保定网站制作、保定网页制作以及保定网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,保定网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到保定省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

这里爪爪熊准备写成一个golang的库,并开源到github上,后续更新将直接更新到github中,如果你有兴趣可以和我联系。 github.com/dpawsbear/bear_rpi_go

我在很多的教程中都看到说树莓派的PWM(硬件)只有一个GPIO能够输出,就是 GPIO1 。这可是不小的打击,因为我想使用至少四个 PWM ,还是不死心,想通过硬件手册上找寻蛛丝马迹,看看究竟怎么回事。

手册上找寻东西稍等下讲述,这里先提供一种方法测试 树莓派3B 的 PWM 方法:用指令控制硬件PWM。

这里通过指令的方式掌握了基本的pwm设置技巧,决定去翻一下手册看看到底PWM怎么回事,这里因为没有 BCM2837 的手册,根据之前文章引用官网所说, BCM2835 和 BCM2837 应该是一样的。这里我们直接翻阅 BCM2835 的手册,直接找到 PWM 章节。找到了如下图:

图中可以看到在博通的命名规则中 GPIO 12、13、18、19、40、41、45、52、53 均可以作为PWM输出。但是只有两路PWM0 PWM1。根据我之前所学知识,不出意外应该是PWM0 和 PWM1可以输出不一样的占空比,但是频率应该是一样的。因为没有示波器,暂时不好测试。先找到下面对应图:

根据以上两个图对比可以发现如下规律:

对照上面的表可以看出从 BCM2837 中印出来的能够使用在PWM上的就这几个了。

为了验证个人猜想是否正确,这里先直接使用指令的模式,模拟配置下是否能够正常输出。

通过上面一系列指令模拟发现,(GPIO1、GPIO26)、(GPIO23、GPIO24)是绑定在一起的,调节任意一个,另外一个也会发生变化。也即是PWM0、PWM1虽然输出了两路,可以理解成两路其实都是连在一个输出口上。这里由于没有示波器或者逻辑分析仪这类设备(仅有一个LED灯),所以测试很简陋,下一步是使用示波器这类东西对频率以及信号稳定性进行下测试。

小节:树莓派具有四路硬件输出PWM能力,但是四路中只能输出两个独立(占空比独立)的PWM,同时四路输出的频率均是恒定的。

上面大概了解清楚了树莓派3B的PWM结构,接下来就是探究如何使用Go语言进行设置。

因为拿到了手册,这里我想直接操作寄存器的方式进行设置,也是顺便学习下Go语言处理寄存器的过程。首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手册,发现只有偏移,没有找到基地址。

经过了一段时间的努力后,决定写一个 树莓派3B golang包开源放在github上,只需要写相关程序进行调用就可以了,以下是相关demo(pwm)(在GPIO.12 上输出PWM波,放上LED灯会有呼吸灯的效果,具体多少频率还没有进行测试)

以下是demo(pwm) 源码

go语言的reflect(反射)

1、反射可以在运行时 动态获取变量的各种信息 ,比如变量的类型、类别;

2、如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法);

3、通过反射,可以修改 变量的值 ,可以调用关联的方法;

4、使用反射,需要import " reflect ".

5、示意图:

1、不知道接口调用哪个函数,根据传入参数在运行时确定调用的具体接口,这种需要对函数或方法反射。

例如以下这种桥接模式:

示例第一个参数funcPtr以接口的形式传入函数指针,函数参数args以可变参数的形式传入,bridge函数中可以用反射来动态执行funcPtr函数。

1、reflect.TypeOf(变量名),获取变量的类型,返回reflect.Type类型。

2、reflect.ValueOf(变量名),获取变量的值,返回reflect.Value类型reflect.Value是一个结构体类型。

3、变量、interface{}和reflect.Value是可以互相转换的,这点在实际开发中,会经常使用到。

1、reflect.Value.Kind,获取变量的 类别(Kind) ,返回的是一个 常量 。在go语言文档中:

示例如下所示:

输出如下:

Kind的范畴要比Type大。比如有Student和Consumer两个结构体,他们的 Type 分别是 Student 和 Consumer ,但是它们的 Kind 都是 struct 。

2、Type是类型,Kind是类别,Type和Kind可能是相同的,也可能是不同的。

3、通过反射可以在让 变量 在 interface{} 和 Reflect.Value 之间相互转换,这点在前面画过示意图。

4、使用反射的方式来获取变量的值(并返回对应的类型),要求数据类型匹配,比如x是int,那么久应该使用reflect.Value(x).Int(),而不能使用其它的,否则报panic。

如果是x是float类型的话,也是要用reflect.Value(x).Float()。但是如果是struct类型的话,由于type并不确定,所以没有相应的方法,只能 断言。

5、通过反射的来修改变量,注意当使用SetXxx方法来设置需要通过对应的指针类型来完成,这样才能改变传入的变量的值,同时需要使用到reflect.Value.Elem()方法。

输出num=20,即成功使用反射来修改传进来变量的值。

6、reflect.Value.Elem()应该如何理解?

图中的蜡烛图形态都代表啥意思啊?

一根K线记录的是股票在一天内价格变动情况。将每天的K线按时间顺序排列在一起,就组成了股票价格的历史变动情况,叫做K线图。K线将买卖双方力量的增减与转变过程及实战结果用图形表示出来。经过近百年来的使用与改进,K线理论被投资人广泛接受。

K线又被称为蜡烛图,据说起源于十八世纪日本的米市,当时日本的米商用来表示米价的变动,后因其标画方法具有独到之处,因而在股市及期市中被广泛引用。它是以每个交易日(或每个分析周期)的开盘价、最高价、最低价、和收盘价绘制而成,K线的结构可分为上影线、下影线及中间实体三部分。

K线是一条柱状的线条,由影线和实体组成。中间的矩形称为实体,影线在实体上方的细线叫上影线,下方的部分叫下影线。实体分阳线和阴线。

K线可以分为日K线、周K线、月K线,在动态股票分析软件中还常用到分钟线和小时线。K线是一种特殊的市场语言,不同的形态有不同的含义。

K线图有直观、立体感强、携带信息量大的特点,蕴涵着丰富的东方哲学思想,能充分显示股价趋势的强弱、买卖双方力量平衡的变化,预测后市走向较准确,是各类传播媒介、电脑实时分析系统应用较多的技术分析手段。


文章名称:包含go语言蜡烛图的词条
URL分享:http://cdkjz.cn/article/hdgjgj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220