问答
直播中

718276

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

PWM控制灯的亮度

本帖最后由 徐雅平 于 2015-2-13 17:05 编辑
: C9 |: z& h' P0 B9 H& z6 K+ s. h
2 o, w. Y  E' l7 S- x% {' g
体验完MICO神奇的功能后,小白想自己也用一下MICO,于是就选了一个最简单的试验开始:控制灯的亮度。为了深刻的理解WIFi的功能,试验中我分别体验了以下两个试验:
1、直接输入PWM占空比的值控制灯的亮度;
2、通过WIFI模块传输PWM的占空比,从而控制灯的亮灭;
   控制灯的亮灭要用到关于PWM的函数,所用到的函数块是:MicoPwmInitialize()MicoPwmStart()
  Q】如何找到这些函数定义的地方?
   PlatformCommonCortex-M3STM32F2xxMicoDriverPwm.c中有定义了PWM的初始配置的函数MicoPwmInitialize()以及启用PWM的函数 MicoPwmStart(),这些函数在MICO中都已经写好了,在我们用到的时候,只要找到相应的指令修改一下参数即可(详见下图)。
20.png 4 {) ~" c1 F0 f3 ?3 m$ I
) N5 J, Q) z" U2 |: h5 @
21.png
. |" l2 q, J' H
+ g- w8 @$ _. W! s8 F
22.png , N. O& W2 ?2 @  Q1 p

* z) r5 ^1 b# D+ _
试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
2 x6 E( c- H( q" {( z& y% a
COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
23.png ' h! P3 O' {" N3 V

3 o9 x# J, ?# j( i  K
5 o9 b! v5 H% c+ ^* h& r+ N9 X6 C
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。
8 V. u: v# ^1 i$ H4 n$ f& M
24.png

/ _1 q) G& @& y6 |" c* f
Q】代码写好后怎么在硬件上找到PWM波形的接口?
    COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。
/ J, R& D: a- |  A3 d  b( G$ _
25.png / D# l! ]/ w) ]
, l" ~" f2 t  m0 ]* B3 `
26.png ; X( y* }  l  n" p" V
7 U; A6 \3 x5 i: V& B5 m/ @- T/ f" l
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
27.jpg
4 o+ l% I9 W9 l. _" r( c
) g3 X* [' E$ E0 }3 e; B
如下图是占空比为60%的亮度:
5 V- [; R0 G+ F3 t
28.jpg : S% o- V% e/ s) i
$ F7 d. f2 y7 D  s, e! ?
【试验二】连网控制灯的亮度
    连网方式是通过EMW3162WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:

+ P# N- N! m% }3 D/ \
  找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM
29.png : k9 s. ~0 v/ X, _! S
( Q  H6 K: a) f; ^
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
30.png
; Z% x7 r! {8 D$ b- K) G
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
31.png
/ I6 W% s: S5 D& Q
. W7 R( ]7 {3 c! p
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,

; ^' y4 ?3 n- l) c7 |5 u
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
32.png - h! Z5 ^* t0 N' w& R/ |+ L

# @: w  A- X9 K1 i) A6 T
2、代码修改完之后,编译下载程序,然后就可以看到现象了。

) J& d0 W0 ]4 y
如下图打开串口,显示模块连到的网络的信息:
! Z# h; W' P) H* m0 H) o0 t
33.png

6 b  O, }( k5 H2 o+ f3 b6 B
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
34.png

% ~! s1 W) ]1 F
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
35.png
; }, F+ }6 ^5 e/ [& J

5 q8 p+ _/ k5 E+ t1 ?5 ^
36.jpg
( G8 {+ O. U% b; S
4 `6 _: n  n; v5 u) |, ^! F
37.jpg
7 d2 f- W+ ^; ^6 q, i
1 h8 @* e/ n( T; m

3 i8 m. A) p4 u5 d3 }9 C5 K& O) L. w. a. v
, y9 x" [( }) d. g, o
已退回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
完善资料,
赚取积分