Pwm使用参考

Version 1.0


1. 概述

Demo板支持4路PWM输出。


2. Dts配置


2.1. Demo板支持的PWM padmux

提供4组PWM,每组都有3种选择(Note:对于每一组,有且只能选择其中一种),具体如下表

表2-1

PWM Group Mode PAD
PWM0 7 PAD_KEY0
8 PAD_KEY10
10 PAD_GPIO1
PWM1 7 PAD_KEY1
8 PAD_KEY11
10 PAD_GPIO2
PWM2 7 PAD_KEY2
8 PAD_KEY12
10 PAD_GPIO3
PWM3 7 PAD_KEY3
8 PAD_KEY13
10 PAD_GPIO4

2.2. 配置pwm节点属性

  1. npwm:4:表示pwm有4组,此项按4配置即可,无需修改

  2. 如下pad-ctrl节点中的设置格式,按序为各个PWM输出的Pad设置。

    pad-ctrl = <PWM0_PAD  PWM1_PAD  PWM2_PAD  PWM3_PAD>;
    

    对于不需要输出PWM信号,可以将对应位置设为PAD_UNKNOWN,具体配置如下截图。

    pioneer3.dtsi:


2.3. Padmux功能配置

对于没有被配置为PWM输出的,需要将其注释掉。

pioneer3-ssc020a-s01a-demo-camera-padmux.dtsi


3. Kernel config

  1. 打开Kernel中对PWM的支持

  2. 打开SStar中PWM驱动配置


4. PWM的参数


4.1. 参数配置说明

目前支持输出的PWM clk为6MHz。

Ex:Set 5000Hz duty 25% pwm waveform

period_value = 1000000000 / 5000 = 200000

duty_value = period_value * 25%  = 50000

4.2. Duty_cycle

占空比。

Echo 50000> duty_cycle 表示占空比是25%。


4.3. Period

Frequency。

Echo 200000> period

表示5KHZ 的frequency 的pwm 波。


4.4. Enable/disable

使能;

echo 1 > enable


4.5. Polarity

极性。

如果是normal,那么duty_cycle=25%,表示高电平占的比例是25%。

如果是inversed,那么就反之。


5. 硬件举例


6. PWM测试


6.1. 检查PWM设置

Uboot下读取reg检查PWM设置:

103cca的bit0bit3对应PWM0,未设置;103cca的bit4bit7对应PWM1,设置mode10;103ccb的bit0bit3对应PWM2,设置mode10;103ccb的bit4bit7对应PWM3,设置mode10。与实际设置一致,检测正常。

Kernel下读取reg检查PWM设置:

Kernel下读取的是16位地址,0xca右移一位,读取65地址的数据。读取到的数据为0xAAA0,表示PWM0未设置,PWM1,PWM2,PWM3均设置为mode10,与实际设置一致。


6.2. Uboot下设置PWM

使用pwm工具设置,指令如下:

设置PWM1,PWM2,PWM3,分别对应gpio63,gpio64,gpio65:


6.3. Kernel下设置PWM

设置PWM1的周期,占空比,极性,使能状态。


7. DEMO示例


7.1. Kernel demo示例

测试源码test_pwm.c

当前测试平台背光使用PWM1,以PWM1测试为例:

  1. 编译源码生成测试bin。

    arm-linux-gnueabihf-gcc –o test_pwm test_pwm.c
    
  2. 挂载至板端,执行测试bin档

    读取PWM1默认设置:

    修改PWM1属性:

    依次设置极性为:

    inversed,占空比为75%,使能;

    normal,占空比为25%,使能;

    normal,占空比为25%,禁用;

    normal,占空比为25%,使能;

    可以观察到panel背光的变化,较亮,较暗,黑屏,较暗。测试demo设置生效。