问答
直播中

718276

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

PWM控制灯的亮度

本帖最后由 徐雅平 于 2015-2-13 17:05 编辑 6 N7 M' V/ L2 x  d3 U! ^

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

' Z: l( I) r/ T2 r
21.png / g3 V1 u* O' @3 r1 b
# R# x/ a  \) T5 |! q# p
22.png % k) N+ U* L; ~. h) J: d

! s* L) ]% T& s' s; i
试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
0 U0 h; X  ?: y; V3 o5 `6 W, ?6 w! C
COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
23.png
: R' A. M& D1 `. H6 v
) z" k. R  u8 v  t: i+ g- n

8 r. I1 {" U$ k9 }/ }! p; m
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。
4 n9 x' [  s) \8 a8 T! D1 {
24.png
; H2 l, Y9 Y. z% v% P
Q】代码写好后怎么在硬件上找到PWM波形的接口?
    COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。

8 J6 [+ c7 D6 t: z5 `
25.png
6 r+ [6 j( `7 [% J3 U
6 x6 I' I, \! |
26.png / c' K! s9 N1 ?. j9 k0 y
4 _4 z8 k) Y' ~, `" S5 }$ `
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
27.jpg
* W; g5 f# g' v9 I2 N: K6 L
; ]2 r5 [5 N7 M
如下图是占空比为60%的亮度:
% c3 T1 S1 A% P8 W. I
28.jpg
3 M8 R2 O% h0 @

5 Q9 q" U1 R4 \
【试验二】连网控制灯的亮度
    连网方式是通过EMW3162WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:

3 r5 a3 v9 t3 N2 a6 F" [3 ~
  找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM
29.png
& v; |! @& t% Z. T, \$ ~8 H
5 @: `# r5 t2 k! G8 Q5 n9 C. r; Y
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
30.png
5 b4 X( V+ D! T8 U
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
31.png
0 K) n9 _$ p' P  |% e" ^9 y# [

2 D8 R9 }* N( u9 ?1 n5 T" Y; s
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,
1 @' H% S/ g6 u. ]& J
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
32.png
0 w& z! _% z5 ^

6 e7 M7 {$ ~: ?. J- ]
2、代码修改完之后,编译下载程序,然后就可以看到现象了。
8 q6 c& S% U0 X$ r0 l( o
如下图打开串口,显示模块连到的网络的信息:

8 {, r. b! A5 n3 B, g 33.png

) V/ v  B* @! Z
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
34.png

; K. V8 \" ~+ A3 o
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
35.png
3 S. H; F/ h  u

. {5 y: t2 _. I/ {4 ]( w
36.jpg
0 {. d) B! c1 j* N# V: b
1 M' u3 U- g- M6 {# e( Q1 e
37.jpg 7 B" O. ?6 F* t1 E2 C$ u  b
) G- j8 G1 K  ^: E* V. b
. u. n6 |9 ~; `& a. J# K5 Y" Q
. r, h- F4 C& h6 u
* b7 j& l% x/ b
已退回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
完善资料,
赚取积分