歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 嵌入式Linux工控板的PWM功能

嵌入式Linux工控板的PWM功能

日期:2017/2/28 16:28:24   编辑:Linux教程
PWM是指一種周期可調、占空比可調的穩定脈沖輸出,即通常所說的脈寬調制脈沖信號。這種信號在工業自動控制中有廣泛的應用。英利公司的嵌入式Linux工控板EM9160可支持3路獨立的PWM輸出,輸出頻率范圍從1Hz–10MHz,占空比從1%-99%。與EM9160的其他硬件資源一樣,應用程序對EM9160的PWM功能的操作也是通過驅動程序來實現的。下表列出的是EM9160的PWM資源配置情況:

PWM編號

設備文件名

輸出管腳

PWM1

''/dev/em9x60_pwm1''

GPIO12

PWM2

''/dev/em9x60_pwm2''

GPIO14

PWM3

''/dev/em9x60_pwm3''

GPIO15

PWM功能的操作很簡單,在打開設備文件後,通過兩個IOCTL命令來實現PWM的啟動和停止:

IOCTL命令

參數

備注

EM9X60_PWM_IOCTL_START

設置 PWM的頻率和占空比,並啟動

EM9X60_PWM_IOCTL_STOP

停止PWM脈沖輸出

啟動PWM的命令,通過雙參數數據結構來傳遞必要的參數:

struct double_pars
{
unsigned int par1;
unsigned int par2;
};

在上述結構中,par1用於設置PWM的輸出頻率,單位為Hz;而par2用於設置PWM的輸出占空比,單位為% 。若我們需要生成38KHz脈沖用於紅外串口數據的調制,則:

struct double_pars paras;
paras.par1 = 38000; // -> 38000Hz = 38KHz
paras.par2 = 50; // -> 50%

若我們希望用PWM1輸出38KHz信號,其主要的代碼為:

int fd = open(''/dev/em9x60_pwm1'', O_RDWR); //打開設備文件
通過IOCTL函數啟動PWM:
int rc = ioctl(fd, EM9X60_PWM_IOCTL_START, &paras); //啟動PWM
或暫停PWM輸出:
int rc = ioctl(fd, EM9X60_PWM_IOCTL_STOP, NULL); //暫停PWM

在使用PWM中需要注意以下幾點:

1、EM9160所有的PWM通道都是與GPIO管腳復用的,因此需避免在設計出現GPIO的使用與PWM沖突。
2、若串口''/dev/ttyS2''或''/dev/ttyS4''-''/dev/ttyS6''之一被設置作為ISO7816的接口,它將自動占用PWM2或PWM3作為SCK時鐘的輸
出,因此應用程序也不應當打開對應的PWM設備文件,以避免資源沖突。
3、當PWM設備文件關閉、及執行來close(fd)後,對應的管腳會恢復成輸入狀態的GPIO,這時仍然可以通過GPIO的設備文件
“/dev/em9x60_gpio”來操作這些管腳。

Copyright © Linux教程網 All Rights Reserved