PWM控制灯的亮度 - 问答 - 电子技术william hill官网 - 最好最受欢迎电子william hill官网 ! - 威廉希尔官方网站

PWM控制灯的亮度

718276 ( 楼主 ) 2015-2-13 17:01:59  只看该作者 倒序浏览
本帖最后由 徐雅平 于 2015-2-13 17:05 编辑 ' [9 R, V3 U/ L2 _* ~+ h

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

( x1 m/ W$ `* K0 j# U7 J6 h
9 U% J7 x+ Z5 S3 h4 n
0 m( h% X; X0 L1 w% M0 y

* J+ Y, o3 e2 o% L
' X5 _4 O' H$ {) \+ y+ ^/ e: l
试验一】直接配置PWM的占空比调节灯的亮度
修改程序如下:
6 g: N- T- e; C! r' `
COM.MXCHIP.HA-EMW3162MICOMICOEntrance.c下找到int application_start(void)这是应用程序开始的地方,如下图:
8 [" k) b$ q0 U- I

, a/ s3 L0 A1 @" C

6 w8 O/ e" V9 C% p' a* K4 u
在红框所示的位置加入如下代码,红框前面的语句是初始化的一些配置,调用MICO库函数即可点亮一盏灯。
, B( {3 [5 O9 c: M+ y
' d5 V9 p# ?4 n: v# k% L& F
Q】代码写好后怎么在硬件上找到PWM波形的接口?
    COM.MXCHIP.HA-EMW3162PlatformEMW3162platform.h中找到EMW3162 on EMB-380-S platform pindefinitions ...这里面是EMW3162 引脚的编号和功能的介绍。由于用的是MICO_PWM_1,找到所在的位置,用到硬件的引脚是MICO_GPIO_10,即编号为10的引脚。

0 Y) N+ j' C$ |7 @: g; q4 h! z
! [8 K8 F% c' m
9 T5 ]- z, A6 a" l* u7 U

' u& A7 c9 ~% C* @. T
6 P9 l3 j* L0 W. o8 g- N
在这个引脚上引出一根线,接一个灯,灯的另一端接地。然后编译并下载程序。

/ T$ ]6 C% s2 ~# ]$ \
2 M! I. e4 a; L; u: v
如下图是占空比为60%的亮度:
* d; T2 \" I4 O% b& H8 U
+ m, |$ Q6 P6 j; X  q1 w9 L" _% U
2 }/ ?! ?& h2 i2 C& G/ H- o+ F& a
【试验二】连网控制灯的亮度
    连网方式是通过EMW3162WIFI功能读取输入的数据,数据流是以HA协议格式传输的,十六进制输入的数据在MICO程序处理后作为PWM的占空比,从而达到连网控制的功能。
1、修改程序:
: m, L& B9 s" N, Q0 a* U2 k3 S
  找到文件COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.cHaProtocol.h里面的关于HA协议的枚举定义的地方,添加一个变量CMD_PWM
8 o# G  Q% @; f% n

4 \1 _, I* t5 K) U5 U
然后在COM.MXCHIP.HA-EMW3162ApplicationHaProtocol.c文件中找到调用前面定义的枚举的地方,添加如图红框里面所示代码:
' T4 {1 Z. B; ]. G0 j( l
代码分析:里面用到了p_reply这个量,追踪其定义的地方,是定义了一个mxchip_cmd_head_t*结构体的变量。
+ ]& e1 p! ?; o4 f( Z

. G+ s) R8 w/ i% |& G" ?
下面是mxchip_cmd_head_t 结构体的原型,这是HA传输数据的协议的格式,
- y/ t# H* z8 U
通过这个就知道MicoPwmInitialize((mico_pwm_t)MICO_PWM_1,50,(float)p_reply->data[0])这个函数里面参数p_reply->data[0]的意义了。
: o( b7 c8 \* P: N8 x: ?

+ _. L; k! L( p9 M4 p6 L
2、代码修改完之后,编译下载程序,然后就可以看到现象了。

- _8 d0 `5 r" G. N, ]2 @1 m
如下图打开串口,显示模块连到的网络的信息:
  U2 M- n0 o# n' n0 |4 E0 @$ g

3 T; o4 W% h% P5 p* U; s1 ]
打开TCP&UDP,以客户端的方式连接EMW3162模块的IP地址后,输入HA协议规定的数据流,读进数据位的值作为PWM波的占空比,从而控制灯的亮度。

8 }. u2 b# j; p" H& g2 H
3、试验现象:如下图读入不同的数值的时候灯的亮度不同。

" {# r- E& @9 \5 {1 `% C1 o/ f

; y! w5 Z/ |0 M4 E3 J

8 n# H4 T6 x2 Z' u& H
' m! @8 A* `" a* [1 Q% b) y' B

  J- i- a" T5 O6 ]; D
% _* W) L3 }; S& u

; @" S4 X. X' s% H4 _$ z
& y( k; }3 Y7 u6 }3 V- `( i% W4 M7 u* o1 z( Q7 s$ |" ?
奖励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, 2025-1-21 17:06 , Processed in 0.493190 second(s), Total 64, Slave 53 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

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