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

PWM控制灯的亮度

718276 ( 楼主 ) 2015-2-13 17:01:59  显示全部楼层
本帖最后由 徐雅平 于 2015-2-13 17:05 编辑 0 a% [! K  f, c" [
5 T% B$ \1 c5 Z$ `! V
体验完MICO神奇的功能后,小白想自己也用一下MICO,于是就选了一个最简单的试验开始:控制灯的亮度。为了深刻的理解WIFi的功能,试验中我分别体验了以下两个试验:
1、直接输入PWM占空比的值控制灯的亮度;
2、通过WIFI模块传输PWM的占空比,从而控制灯的亮灭;
   控制灯的亮灭要用到关于PWM的函数,所用到的函数块是:MicoPwmInitialize()MicoPwmStart()
  Q】如何找到这些函数定义的地方?
   PlatformCommonCortex-M3STM32F2xxMicoDriverPwm.c中有定义了PWM的初始配置的函数MicoPwmInitialize()以及启用PWM的函数 MicoPwmStart(),这些函数在MICO中都已经写好了,在我们用到的时候,只要找到相应的指令修改一下参数即可(详见下图)。
20.png
. i$ M! Y2 G/ i) t  q4 X& C

  a# T1 J" B& [* F3 \8 P0 a- h( C
21.png
& J4 d) Y, E9 v- Q3 x
) Z! C& ]7 P! r2 ]1 G
22.png ' B  F. H& U! M9 \. f1 s: K2 Y. f
% y9 H1 B% Z! D( B! L- \3 H
试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
; F0 s8 V2 i$ Q, v5 {+ s
COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
23.png + E% M5 I' W; N1 v' ]5 n

3 Q; \) J, D  f1 T! b# Z
3 T" [( U6 X# l$ L/ y* `
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。
+ B5 y1 ]  ~: F
24.png
$ ~' M# n7 y& A0 f5 H/ V- U
Q】代码写好后怎么在硬件上找到PWM波形的接口?
    COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。
3 U) H6 I) {. j. M8 k
25.png * a- ]* f1 l2 v/ E$ `4 F

4 J  g% I# j0 K, J8 g) Z
26.png
& A1 S2 `  ?9 `. A( W: ]

' ?0 f# H5 s/ M9 b- @/ I* d
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。
27.jpg 2 E' q3 y" G; a# X5 J0 J
9 |9 w: |0 z* U/ o0 z! v# u  w0 v
如下图是占空比为60%的亮度:
- j+ i2 T% M) ?9 x
28.jpg
6 {* E+ O2 }" [9 T8 a7 m/ W& ?

" s& [3 e5 Q& |  w
【试验二】连网控制灯的亮度
    连网方式是通过EMW3162WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:
$ T( |- ?) J2 G; L  P% c
  找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM
29.png
0 p$ U: T* v, \4 J

9 ]" i& P+ U: w
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
30.png
1 a6 F" w5 q, g) Q0 J, D8 Y
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
31.png ' C  S1 Z- D, [# W' W4 R: C

! D2 P% T+ t  U7 J8 l6 U8 T( ?
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,
- S1 }& B3 x1 o# ?$ Q; _7 z- Z
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
32.png
0 q1 [. g& h: C9 Q0 L7 r

: x5 y: u+ \/ c2 \: s5 N
2、代码修改完之后,编译下载程序,然后就可以看到现象了。

8 ~9 x# `5 D/ U) K4 ]# B
如下图打开串口,显示模块连到的网络的信息:

& k4 q! I3 d# V, S: A5 H 33.png
! Q. t# n, ]+ z
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。
34.png
/ `( ^; p9 l- ~8 W' Y- Y
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。
35.png # f  ]$ A! \: u: z
' T6 _8 K3 q# M  d2 o) l3 q
36.jpg , z6 S+ ^' Z) ]: G- e% T3 I
+ R1 y  [$ |% H
37.jpg ' a/ }/ B0 R9 c, P
- c2 `. T0 m0 u5 @3 B4 E

$ i2 j  D! A, p3 H( P; `& `0 K9 Q
5 D6 \7 U/ c8 H3 \
. i7 O) t, O; Y' v
奖励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-29 16:07 , Processed in 0.584173 second(s), Total 86, Slave 66 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

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