Pwm使用参考
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节点属性¶
-
npwm:4:表示pwm有4组,此项按4配置即可,无需修改
-
如下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¶
-
打开Kernel中对PWM的支持
-
打开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测试为例:
-
编译源码生成测试bin。
arm-linux-gnueabihf-gcc –o test_pwm test_pwm.c
-
挂载至板端,执行测试bin档
读取PWM1默认设置:
修改PWM1属性:
依次设置极性为:
inversed,占空比为75%,使能;
normal,占空比为25%,使能;
normal,占空比为25%,禁用;
normal,占空比为25%,使能;
可以观察到panel背光的变化,较亮,较暗,黑屏,较暗。测试demo设置生效。