问答
直播中

718276

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

PWM控制灯的亮度

本帖最后由 徐雅平 于 2015-2-13 17:05 编辑
: w* S7 p- G: `' _) `6 q
$ I$ ]( O5 r/ M$ X# H. B
体验完MICO神奇的功能后,小白想自己也用一下MICO,于是就选了一个最简单的试验开始:控制灯的亮度。为了深刻的理解WIFi的功能,试验中我分别体验了以下两个试验:
1、直接输入PWM占空比的值控制灯的亮度;
2、通过WIFI模块传输PWM的占空比,从而控制灯的亮灭;
   控制灯的亮灭要用到关于PWM的函数,所用到的函数块是:MicoPwmInitialize()MicoPwmStart()
  Q】如何找到这些函数定义的地方?
   PlatformCommonCortex-M3STM32F2xxMicoDriverPwm.c中有定义了PWM的初始配置的函数MicoPwmInitialize()以及启用PWM的函数 MicoPwmStart(),这些函数在MICO中都已经写好了,在我们用到的时候,只要找到相应的指令修改一下参数即可(详见下图)。
20.png
4 v, _7 Z9 l+ h3 e! A

0 D1 m( f' [4 ]3 q
21.png ' C& o% w) j& _$ B+ g$ r. R" A
- |$ S6 y! k/ z. @  z0 D
22.png 5 F. S; q) `. R

* K( I' `4 u; H
试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:

9 D1 c6 _  i  n$ j
COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
23.png & m; A2 j' ~/ }, u- P
! _' P' n" P$ H4 v
8 x, I0 q  J# @1 t- ]3 [3 s! r
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。
$ T8 g. {3 X- W0 P5 k
24.png

% q/ e2 s8 a+ F* X" w. @
Q】代码写好后怎么在硬件上找到PWM波形的接口?
    COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。
- |+ _4 s! F$ f+ k9 D! U
25.png + u1 W. ^) X" {0 ?; R2 D. h3 K0 Z
+ ^' P  W$ p! G" v: H1 z
26.png 6 X. N( J* b$ g8 ]( Z! i2 }- [

6 [7 R5 u! E. s2 [, }' j& U
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
27.jpg 2 w' O( w- E2 R5 k% x
2 Z, W6 B# c4 x
如下图是占空比为60%的亮度:
2 h2 Q+ o% m6 b7 R5 I& j
28.jpg / A- K: b# Q7 v9 w

( O6 U& d) u, x; N0 ~+ F, l" c" \
【试验二】连网控制灯的亮度
    连网方式是通过EMW3162WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:
' ]2 ^$ p; J) O
  找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM
29.png 8 Y5 o# Z: T2 }) @- s! g$ c! U

% A3 |+ ^1 p5 k. |
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
30.png # S+ K# `  L" i" W. C
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
31.png
: U) s! p8 B3 m% y/ I

2 R; [: N- B3 Y' I& \( {
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,

4 l5 Q0 O% ]# J( n
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
32.png ! P$ `! d5 r& N9 }; x% Z$ S

4 l/ R8 m- T! s/ F
2、代码修改完之后,编译下载程序,然后就可以看到现象了。

+ R1 t" _- b" ]% F9 M
如下图打开串口,显示模块连到的网络的信息:
+ `) S; t9 M1 n1 i
33.png

  f8 W9 T1 O( _9 X
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
34.png

+ f  V2 y0 [* C$ z; {9 B
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
35.png % O$ c! g" r2 A: {

! s2 {4 ~( m, r  c0 D4 ?' q2 j
36.jpg # O" b" s- @* [; D
. r7 w% X  w/ L& w1 X1 T! x3 i" n
37.jpg
6 P" R) s5 ^7 _0 j6 B
; p& X! C% K3 l$ ^- y- V$ ~

, W; y3 `9 y7 u7 i9 c/ s/ j8 y, G/ P1 U9 H& s7 C
% m* V: j9 Y" ]# ~
已退回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
完善资料,
赚取积分