问答
直播中

718276

12年用户 50经验值
擅长:可编程逻辑 模拟技术 控制/MCU RF/无线
私信 关注

PWM控制灯的亮度

本帖最后由 徐雅平 于 2015-2-13 17:05 编辑   r3 k1 N: N  s' V$ M5 p. [/ z

: [, j# h3 I) y  r/ ^: P4 s
体验完MICO神奇的功能后,小白想自己也用一下MICO,于是就选了一个最简单的试验开始:控制灯的亮度。为了深刻的理解WIFi的功能,试验中我分别体验了以下两个试验:
1、直接输入PWM占空比的值控制灯的亮度;
2、通过WIFI模块传输PWM的占空比,从而控制灯的亮灭;
   控制灯的亮灭要用到关于PWM的函数,所用到的函数块是:MicoPwmInitialize()MicoPwmStart()
  Q】如何找到这些函数定义的地方?
   PlatformCommonCortex-M3STM32F2xxMicoDriverPwm.c中有定义了PWM的初始配置的函数MicoPwmInitialize()以及启用PWM的函数 MicoPwmStart(),这些函数在MICO中都已经写好了,在我们用到的时候,只要找到相应的指令修改一下参数即可(详见下图)。
20.png 3 m1 m! F3 U2 P: y$ R3 u

, W; s  x& k* T, p% k
21.png ; ~6 L6 _4 ^3 k
- o' X, {: e6 f8 z; h& c& x4 d
22.png
* g% z- h8 h- L! a4 P* N9 c

$ M9 |; s* j- U/ I: o0 U; q3 {0 P5 E
试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
: G; N# k; L/ T9 k! p  k
COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
23.png - S" q% y8 x- i
$ J. D- s0 h6 H. r* c& c( _7 F5 @
& [5 I7 q/ C. i( G" a
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。

, ], H% @; q7 T' A& x
24.png

" B+ W5 W! c' T  \
Q】代码写好后怎么在硬件上找到PWM波形的接口?
    COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。

& l6 |, s) M2 M. D' z9 J9 p
25.png
. ^) e( S: u# L

  ?  m3 n7 f4 M/ a. p' ?( D6 M' B$ f
26.png ! r* {% A$ x. ^( F

- G7 p" C" }" e- o5 @
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
27.jpg
# B, z. d0 p) C: y; i8 L& [, h

: ?7 l% P+ I& g. Y( R% ]/ q
如下图是占空比为60%的亮度:

. J$ [/ m. a* {' T7 j( L' T6 g
28.jpg * h7 P& y1 Z# d; @2 D. w0 w

5 h- c8 q* }6 T0 t
【试验二】连网控制灯的亮度
    连网方式是通过EMW3162WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:
. N8 Q' K2 q. ~- t: k
  找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM
29.png ( q/ S; E4 i: _7 ^( x
) k& `9 {* o! t4 o% f
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
30.png
. I% b, v  ^0 {  t
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
31.png
% g! r1 T# V5 G
: G/ M* G0 D2 F1 d1 _
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,
0 a2 S, T& c9 Y& B* F5 W; m
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
32.png 6 J$ V' ~' Y9 v0 B5 T# }
0 [6 a5 c3 O1 X4 l) E- \
2、代码修改完之后,编译下载程序,然后就可以看到现象了。
+ o. N0 X- F1 j; O2 N& \, m
如下图打开串口,显示模块连到的网络的信息:

. q' {  u3 m3 U1 P, ^7 b$ n# @" x 33.png

9 r6 }# K9 t+ z! e. N
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
34.png

" [' L( ?' F, k6 E, N5 c) l
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
35.png + @5 U0 W, x* L, M% [$ f6 V

- P& S" I1 W  W4 v3 d# q! [9 l
36.jpg
- s2 P; Y% h  [

; M+ t1 f1 ^" f. ]& E
37.jpg
% Z% E, x5 e2 v9 o2 o% B( @

2 H* R0 Z( y9 _- v6 N5 a1 e

9 G. w# o8 t7 c0 `1 P6 A+ A( u1 j* q8 r% ]& J' G

2 @# L# U1 k' n" ^
已退回1积分

回帖(6)

smartlys

2015-2-28 10:10:40
我也想做类似功能的作品,先赞~~~
举报

1061386620

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

何家俊

2017-3-21 16:28:41
举报

Chris_z

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

你是我一首歌

2018-2-8 00:29:10
赞,楼主可否给个联系方式,我有问题需要请教。
举报

lyh_16311

2019-8-2 19:53:08
赞,学习了中………………
举报

更多回帖

发帖
×
20
完善资料,
赚取积分