• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# PWM概述
2
3## 简介
4
5- 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称**脉宽调制**,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中.
6- PWM的频率:是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);
7- PWM占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例:
8- 总结:
9  PWM就是在合适的信号频率下,通过一个周期里改变占空比的方式来改变输出的有效电压
10
11  PWM频率越大,响应越快,
12
13## 接口说明
14
15### 包含头文件:
16
17```c
18#include "lz_hardware.h"
19```
20
21#### 1. PWM设备IO初始化
22
23```c
24unsigned int PwmIoInit(PwmBusIo io);
251) 参数说明:
26   io:  PWM设备io配置
272) 返回值:
28   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
29```
30
31#### 2. PWM设备初始化接口
32
33```c
34unsigned int LzPwmInit(unsigned int port);
351) 参数说明:
36   port:  PWM设备id
372) 返回值:
38   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
39```
40
41#### 3. PWM设备释放接口
42
43```c
44unsigned int LzPwmDeinit(unsigned int port);
451) 参数说明:
46   port:  PWM设备id
472) 返回值:
48   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
49```
50
51#### 4. PWM设备启动接口:
52
53```c
54unsigned int LzPwmStart(unsigned int port, unsigned int duty, unsigned int cycle);
551) 参数说明:
56   port:  PWM设备id
57   duty:  脉宽时间/高电平时间(ns)
58   cycle:  总周期时长(ns)
592) 返回值:
60   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
61```
62
63#### 5. PWM设备停止接口:
64
65```c
66unsigned int LzPwmStop(unsigned int port);
671) 参数说明:
68   port:  PWM设备id
692) 返回值:
70   成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
71```
72
73## 使用实例
74
75```c
76#include "lz_hardware.h"
77
78#define BUZZER_IO 3
79
80PwmBusIo g_buzzer  = {
81	.pwm = {.gpio = GPIO0_PC3, .func = MUX_FUNC2, .type = PULL_DOWN, .drv = DRIVE_KEEP, .dir = GPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},
82	.id = FUNC_ID_PWM3,
83	.mode = FUNC_MODE_NONE,
84};
85
86unsigned int pwm_sample()
87{
88	unsigned int ret = LZ_HARDWARE_SUCCESS;
89	//初始化pwm
90	if (PwmIoInit(g_buzzer) != LZ_HARDWARE_SUCCESS)
91		return LZ_HARDWARE_FAILURE;
92	if (LzPwmInit(BUZZER_IO) != LZ_HARDWARE_SUCCESS)
93		return LZ_HARDWARE_FAILURE;
94
95	//启动pwm控制蜂鸣器,响铃3秒
96	LzPwmStart(BUZZER_IO, 160000, 200000);
97	ToyMsleep(3000);
98	//关闭蜂鸣器
99	LzPwmStop(BUZZER_IO);
100
101	if (LzPwmDeinit(BUZZER_IO) != LZ_HARDWARE_SUCCESS)
102		return LZ_HARDWARE_FAILURE;
103
104	return LZ_HARDWARE_SUCCESS;
105}
106```
107