脉宽调制子系统(Pluse-Width Modulation SubSystem--PWMSS)由增强高分辨率脉宽调制器(eHRPWM),强采集(eCAP),强正交编码脉冲(eQEP)三个模块构成。
eHRPWM
eHRPWM是一个比较实用的外围设备,它可以在最小的CPU开销下产生复杂的脉宽波形。一个完整的ePWM模块由两路PWM输出组成,EPWMA和EPWMB。
1, 专用的16位time-base用作周期或是频率控制
2, 两路PWM输出能按下面的方式配置:
1, 两个独立的PWM输出用作单沿操作
2, 两个独立的PWM输出用作双沿对称操作
3, 一个独立的PWM输出用作双沿对称操作
3, 可编程的中断事件,并且是最小的CPU开销
eCAP
eCAP模块既可以用作PWM功能,也可用作采集功能。
1, 专用的外部PIN脚
2, 32位Time Base计数器
3, 4*32位时间戳采集寄存器(CAP1-CAP4)
4, 预缩放的输入采集信号
5, 中断功能可以由任意四个采集事件触发
当前PWM驱动只能支持下面特性:
1, eHRPWMg与eCAP可以支持
2, eCAP只能支持PWM模式
PWMSS软件架构如下图:
驱动的配置:
选择eHRPWM驱动
Device Drivers ---> <*> PWM Support ---> <*> Davinci eHRPWM support选择eCAP驱动
Device Drivers ---> <*> PWM Support ---> <*> eCAP PWM support
eHRPWM can be controlled from the user space through SYSFS interface. SYSFS interface for eHRPWM is available at
/sys/class/pwm/ehrpwm.i:j
Where,
‘i’ is the eHRPWM instance ‘j’ is the eHRPWM ouptut 0 or 1[Each instance of eHRPWM has 2 channel outputs]
Various SYSFS Attributes
2 types of SYSFS attributes are available
Note
Type 1 attributes
Request PWM-SS for permission to use the module. Writing 1 to the request attribute Acquires the device and writing 0 to the request attribute Frees/Releases the device. Before performing any operations, device has to be requested first.
Example
target$ echo 1 > /sys/class/pwm/ehrpwm.2:0/request
target$ echo 0 > /sys/class/pwm/ehrpwm.2:0/request
Start or Stop the PWM Module. 0 – Stop Module, 1 – Start module.
Example
target$ echo 1 > /sys/class/pwm/ehrpwm.2:0/run
target$ echo 0 > /sys/class/pwm/ehrpwm.2:0/run
CAUTION
Before enabling the module, the module needs to be configured using below configuration attributes. Else proper operation is not assured.
Type 2 attributes
i.Setting the Period
Following attributes set the period of the PWM waveform.
Enter the period in HZ. Once the frequency is configured, make sure to set the duty cycle value.
Example
Setup PWM to generate a pwm signal of 100 HZ with 50% duty cycle.
target$ echo 100 > /sys/class/pwm/ehrpwm.2:0/period_freq target$ echo 50 > /sys/class/pwm/ehrpwm.2:0/duty_percent
Enter the period in nano seconds value.
Example
if the period is 1 sec , enter
target$ echo 1000000000 > /sys /class/pwm/ehrpwm.2:0/period_ns
ii.Setting the Duty
Following attributes set the duty of the PWM waveform.
Enter the Duty cycle value in percentage.
Example
To configure for 50% duty cycle, enter
target$ echo 50 > /sys/class/pwm/ehrpwm.2:0/duty_percent
duty_ns takes the duty cycle value in nano seconds.
Example
To configure for 0.5s, enter
target$ echo 500000000 > /sys /class/pwm/ehrpwm.2:0/duty_ns
iii.Setting the Polarity
Setup Signal Polarity
Example
To set the polarity to Active High, Enter
target$ echo 1 > /sys /class/pwm/ehrpwm.2:0/polarity
Example
To set the polarity to Active Low, Enter
target$ echo 0 > /sys /class/pwm/ehrpwm.2:0/polarity
Example Configuration:
Following example shows steps to configure the PWM for 100 HZ with 50% duty cycle.
target$ echo 1 > /sys/class/pwm/ehrpwm.2:0/request target$ echo 100 > /sys/class/pwm/ehrpwm.2:0/period_freq target$ echo 50 > /sys/class/pwm/ehrpwm.2:0/duty_percent target$ echo 1 > /sys/class/pwm/ehrpwm.2:0/run
Issuing above commands will generate PWM wave. This can be verified by probing to eHRPWM pin.
IMPORTANT
Haptics on Evaluation Module can be controlled through eHRPWM sysfs interface.
target$ echo 1 > /sys/class/pwm/ehrpwm.2:1/request target$ echo 250 > /sys/class/pwm/ehrpwm.2:1/period_freq target$ echo 50 > /sys/class/pwm/ehrpwm.2:1/duty_percent target$ echo 1 > /sys/class/pwm/ehrpwm.2:1/run
The current release of the driver supports only PWM mode. eCAP can be controlled from the user space through SYSFS interface. SYSFS interface for eCAP is available at
target$ cat /sys/class/pwm/ecap.i
Where,
‘i’ is the eCAP instance.
Various SYSFS Attributes
2 types of SYSFS attributes are available
Note
Type 1 attributes
Request PWM-SS for permission to use the module. Writing 1 to the request attribute Acquires the device and writing 0 to the request attribute Frees/Releases the device. Before performing any operations, device has to be requested first.
Example
target$ echo 1 > /sys/class/pwm/ecap.0/request
target$ echo 0 > /sys/class/pwm/ecap.0/request
Start or Stop the PWM Module. 0 – Stop Module, 1 – Start module.
Example
target$ echo 1 > /sys/class/pwm/ecap.0/run
target$ echo 0 > /sys/class/pwm/ecap.0/run
CAUTION
Before enabling the module, the module needs to be configured using below configuration attributes. Else proper operation is not assured.
Type 2 attributes
i.Setting the Period
Following attributes set the period of the PWM waveform.
Enter the period in HZ. Once the frequency is configured, make sure to set the duty cycle value.
Example
Setup PWM to generate a pwm signal of 100 HZ with 50% duty cycle.
target$ echo 100 > /sys/class/pwm/ecap.0/period_freq target$ echo 50 > /sys/class/pwm/ecap.0/duty_percent
Enter the period in nano seconds value.
Example
if the period is 1 sec , enter
target$ echo 1000000000 > /sys /class/pwm/ecap.0/period_ns
ii.Setting the Duty
Following attributes set the duty of the PWM waveform.
Enter the Duty cycle value in percentage.
Example
To configure for 50% duty cycle, enter
target$ echo 50 > /sys/class/pwm/ecap.0/duty_percent
duty_ns takes the duty cycle value in nano seconds.
Example
To configure for 0.5s, enter
target$ echo 500000000 > /sys /class/pwm/ecap.0/duty_ns
iii.Setting the Polarity
Setup Signal Polarity
Example
To set the polarity to Active High, Enter
target$ echo 1 > /sys /class/pwm/ecap.0/polarity
Example
To set the polarity to Active Low, Enter
target$ echo 0 > /sys /class/pwm/ecap.0/polarity
Example Configuration:
Following example shows steps to configure the PWM for 100 HZ with 50% duty cycle.
target$ echo 1 > /sys/class/pwm/ecap.0/request target$ echo 100 > /sys/class/pwm/ecap.0/period_freq target$ echo 50 > /sys/class/pwm/ecap.0/duty_percent target$ echo 1 > /sys/class/pwm/ecap.0/run
Issuing above commands will generate PWM wave. This can be verified by probing to eCAP pin.
IMPORTANT
Following are the 2 procedures to vary brightness of the LCD screen.
i. Setting duty percentage of pwm wave from eCAP sysfs files
target$ echo val > /sys/class/pwm/ecap.0/duty_percent
'val' can range from 0 to 100.
ii. Setting brightness from backlight sysfs files
target$ echo val > /sys/class/backlight/pwm-backlight/brightness