测试指南
测试环境
硬件
开发板
示波器,用于观察输出PWM信号的波形
软件
PC端的串口终端软件,用于PC和开发板进行串口通信
RT-Thread 系统自带的 pwm 命令行工具
软件配置
当打开 RT-Thread 系统的 PWM设备驱动框架,就会在启动时注册生成 pwm 命令。
动态配置 PWM
使用 pwm 命令来配置某一通道的步骤:(以通道3为例)
1.使用 probe 参数,选择一个 PWM 设备(PWM/EPWM),其中 pwm 命令只支持 probe 一个设备。
2.使用 set 参数,设置通道3的周期、占空比
3.enable 通道3
4.运行期间也可以动态 set 通道3的周期、占空比
aic /> pwm
Usage:
pwm probe <device name> - probe pwm by name
pwm enable <channel> - enable pwm channel
pwm disable <channel> - disable pwm channel
pwm get <channel> - get pwm channel info
pwm set_pul <channel> <irq_mode> <period> <pulse> <pulse cnt> - set pwm pulse
pwm set <channel> <period> <pulse> - set pwm channel info
aic /> pwm probe pwm
probe pwm success
aic /> pwm set 3 1000000 600000
pwm info set on pwm at channel 3
aic /> pwm enable 3
pwm channel 3 is enabled success
aic />
aic /> pwm set 3 1000000 100000
pwm info set on pwm at channel 3
aic /> pwm set 3 1000000 900000
pwm info set on pwm at channel 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
在修改通道3的参数时,需要借助示波器来观察确认输出的方波信号是否符合预期。
5.指定数目脉冲输出
aic /> pwm set_pul 3 0 1000000 500000 5
pwm pul set on pwm at channel 3
aic /> [I] aic_pwm_irq()198
isr cnt:5,disabled the pwm3 interrupt now.
aic /> pwm set_pul 3 0 1000000 500000 5
pwm pul set on pwm at channel 3
aic /> [I] aic_pwm_irq()198
isr cnt:5,disabled the pwm3 interrupt now.****
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
脉冲输出的方向与action配置有关,同时指定脉冲数目输出依赖中断,中断模式需要与action配置相对应。
其中irq_mode范围为0-3,依次为:
0: TBCTR=CMPA且计数器正在递增时触发事件
1: TBCTR=CMPA且计数器正在递减时触发事件
2: TBCTR=CMPB且计数器正在递增时触发事件
3: TBCTR=CMPB且计数器正在递减时触发事件
例如下面以通道3为例说明,使用 pwm_status 查看action配置。
aic /> pwm_status
In PWM V1.00:
Module Enable: 1, IRQ Enable: 0x8
Ch En Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO
0 0 Up 24000000 0 - - - - - -
- - - - - -
1 0 Up 24000000 0 - - - - - -
- - - - - -
2 0 Up 24000000 0 - - - - - -
- - - - - -
3 1 Up 24000000 0 - - - Low Hgh -
- - - Low Hgh -
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
通道3默认配置为CAU动作,所以此处irq_mode配置为0。同时由于CAU为Low,所以输出的脉冲方向为下降沿。
简要编程指南
struct rt_device_pwm *pwm_dev = RT_NULL;
pwm_dev = (struct rt_device_pwm *)rt_device_find("pwm");
if (pwm_dev == NULL) {
rt_kprintf("can't find pwm device!\n");
return -RT_ERROR;
}
rt_pwm_set(pwm_dev, 3, 10000, 5000);
rt_pwm_enable(pwm_dev, 3);
rt_pwm_set_output(pwm_dev, 2, 10000, 5000, 0);
rt_pwm_set_output(pwm_dev, 2, 10000, 2000, 1);
rt_pwm_enable(pwm_dev, 2);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
小技巧
1.RT-Thread PWM 子系统中的 open/read/write/control 接口设计不太友好,建议按照使用上述接口。
2.使用 rt_pwm_set_output 可实现同一 PWM 通道,同一周期下的两种不同占空比输出。