PWM控制灯的亮度 - 问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

PWM控制灯的亮度

718276 ( 楼主 ) 2015-2-13 17:01:59  显示全部楼层
本帖最后由 徐雅平 于 2015-2-13 17:05 编辑
( i' }& k" k" z2 G$ c
! E5 I- D* {& L$ r; D/ e  i4 N
体验完MICO神奇的功能后,小白想自己也用一下MICO,于是就选了一个最简单的试验开始:控制灯的亮度。为了深刻的理解WIFi的功能,试验中我分别体验了以下两个试验:
1、直接输入PWM占空比的值控制灯的亮度;
2、通过WIFI模块传输PWM的占空比,从而控制灯的亮灭;
   控制灯的亮灭要用到关于PWM的函数,所用到的函数块是:MicoPwmInitialize()MicoPwmStart()
  Q】如何找到这些函数定义的地方?
   PlatformCommonCortex-M3STM32F2xxMicoDriverPwm.c中有定义了PWM的初始配置的函数MicoPwmInitialize()以及启用PWM的函数 MicoPwmStart(),这些函数在MICO中都已经写好了,在我们用到的时候,只要找到相应的指令修改一下参数即可(详见下图)。
20.png 6 T6 Q+ l- ~, V& |; R$ e4 n

' Z$ e" X2 c! B+ H
21.png : d- |; J+ g1 ~2 }  Q' [; ]

8 ^6 m/ S/ V( l" i" X8 {) \! S4 Z
22.png
* C9 z) m2 n6 H) {
. X8 `0 }, g8 n
试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
; p7 {. X1 [# k0 @
COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
23.png
+ u) R5 g( e) @/ T' O

; _" \% }) F; K1 u4 @: m
- H% Q. ^" f* {5 g, m8 l) e
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。

7 O8 N9 f/ Z4 g
24.png
; b/ c& k7 y& H$ ~$ Y: q
Q】代码写好后怎么在硬件上找到PWM波形的接口?
    COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。
% v; R2 G0 ~! z& a1 b
25.png
% ~% o  g) p( J% z1 Z7 e
! P) s: B- ?% o) D4 q
26.png / Z6 B" m# _# b& K- T4 y
0 c; ^: I) z% G2 X& N2 e  ~; V/ b0 B
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
27.jpg 5 _; s( N( J) f2 V* j* j" a

- Z% A) _6 H# ?3 @$ N* A* s3 Y0 Q
如下图是占空比为60%的亮度:

3 w( i8 }$ g( Y# |
28.jpg 3 o% G& g, v- z: S' }  _- J

. \/ \, \, c% N% ?
【试验二】连网控制灯的亮度
    连网方式是通过EMW3162WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:
. d* a% }( v0 Y
  找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM
29.png 2 X" L* u0 |% ~: w" S' V/ ~

7 |- N  d# Z) G
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
30.png
! y* I  I3 b6 b8 B+ @, J
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
31.png 6 d: g, D: F8 t& l9 U
( K- ^5 p' T, X
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,

* |9 L$ }8 J- g) f
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
32.png
" d: U; r: x6 t8 ?! e9 g
  h, K8 {9 B4 u  N! M
2、代码修改完之后,编译下载程序,然后就可以看到现象了。

; V$ \8 Q& l- \. F- _
如下图打开串口,显示模块连到的网络的信息:

; m: m9 @3 @: m 33.png
& y- y: v4 Y" j- p
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
34.png

- S1 N; y% ~# H( V% X% z, m- `6 n
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
35.png 2 }2 r9 D6 s: q, \5 p  G( i

* F5 n$ c. n" H9 F
36.jpg
; J7 L5 q& @; ^2 f; u* h

. w7 f8 R* `; B7 Y% g: m7 \
37.jpg ; H$ j: g4 a  o; f2 [  T
+ y  E* `# F* q  d

( j+ ^: T# C; p* m1 j" w! E  @% A# H; d1 M( U2 u6 |5 l) N
% ]) z/ Q! m# G! o
奖励1积分

6个回复

smartlys 发表于 2015-2-28 10:10:40
我也想做类似功能的作品,先赞~~~
回复 1

举报 使用道具

1061386620 发表于 2015-3-15 21:39:35
看起来好复杂啊,我毕设要用FPGA来控制液晶显示屏的亮度,现在完全不知道该怎么办啊,该做些什么也完全没头绪啊。。。
回复 1

举报 使用道具

何家俊 发表于 2017-3-21 16:28:41
回复 1

举报 使用道具

Chris_z 发表于 2017-3-27 15:06:25
看起来好复杂啊,我毕设要用FPGA来控制液晶显示屏的亮度,现在完全不知道该怎么办啊,该做些什么也完全没头绪啊。。。
回复 1

举报 使用道具

你是我一首歌 发表于 2018-2-8 00:29:10
赞,楼主可否给个联系方式,我有问题需要请教。
回复 1

举报 使用道具

lyh_16311 发表于 2019-8-2 19:53:08
赞,学习了中………………
回复 1

举报 使用道具

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-3-28 23:15 , Processed in 0.443583 second(s), Total 88, Slave 68 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表