PWM是指一種周期可調(diào)、占空比可調(diào)的穩(wěn)定脈沖輸出,即通常所說(shuō)的脈寬調(diào)制脈沖信號(hào)。這種信號(hào)在工業(yè)自動(dòng)控制中有廣泛的應(yīng)用。英利公司的嵌入式Linux主板EM9160可支持3路獨(dú)立的PWM輸出,輸出頻率范圍從1Hz–10MHz,占空比從1%-99%。與EM9160的其他硬件資源一樣,應(yīng)用程序?qū)M9160的PWM功能的操作也是通過(guò)驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)的。下表列出的是EM9160的PWM資源配置情況:
PWM編號(hào) |
設(shè)備文件名 |
輸出管腳 |
PWM1 |
'/dev/em9x60_pwm1' |
GPIO12 |
PWM2 |
'/dev/em9x60_pwm2' |
GPIO14 |
PWM3 |
'/dev/em9x60_pwm3' |
GPIO15 |
PWM功能的操作很簡(jiǎn)單,在打開(kāi)設(shè)備文件后,通過(guò)兩個(gè)IOCTL命令來(lái)實(shí)現(xiàn)PWM的啟動(dòng)和停止:
IOCTL命令 |
備注 |
|
EM9X60_PWM_IOCTL_START |
是 |
設(shè)置 PWM的頻率和占空比,并啟動(dòng) |
EM9X60_PWM_IOCTL_STOP |
否 |
停止PWM脈沖輸出 |
啟動(dòng)PWM的命令,通過(guò)雙參數(shù)數(shù)據(jù)結(jié)構(gòu)來(lái)傳遞必要的參數(shù):
struct double_pars
{
unsigned int par1;
unsigned int par2;
};
在上述結(jié)構(gòu)中,par1用于設(shè)置PWM的輸出頻率,單位為Hz;而par2用于設(shè)置PWM的輸出占空比,單位為% 。若我們需要生成38KHz脈沖用于紅外串口數(shù)據(jù)的調(diào)制,則:
struct double_pars paras;
paras.par1 = 38000; // -》 38000Hz = 38KHz
paras.par2 = 50; // -》 50%
若我們希望用PWM1輸出38KHz信號(hào),其主要的代碼為:
int fd = open(‘/dev/em9x60_pwm1’, O_RDWR); //打開(kāi)設(shè)備文件
通過(guò)IOCTL函數(shù)啟動(dòng)PWM:
int rc = ioctl(fd, EM9X60_PWM_IOCTL_START, ?s); //啟動(dòng)PWM
或暫停PWM輸出:
int rc = ioctl(fd, EM9X60_PWM_IOCTL_STOP, NULL); //暫停PWM
在使用PWM中需要注意以下幾點(diǎn):
1、EM9160所有的PWM通道都是與GPIO管腳復(fù)用的,因此需避免在設(shè)計(jì)出現(xiàn)GPIO的使用與PWM沖突。
2、若串口‘/dev/ttyS2’或‘/dev/ttyS4’-‘/dev/ttyS6’之一被設(shè)置作為ISO7816的接口,它將自動(dòng)占用PWM2或PWM3作為SCK時(shí)鐘的輸出,因此應(yīng)用程序也不應(yīng)當(dāng)打開(kāi)對(duì)應(yīng)的PWM設(shè)備文件,以避免資源沖突。
3、當(dāng)PWM設(shè)備文件關(guān)閉、及執(zhí)行來(lái)close(fd)后,對(duì)應(yīng)的管腳會(huì)恢復(fù)成輸入狀態(tài)的GPIO,這時(shí)仍然可以通過(guò)GPIO的設(shè)備文件“/dev/em9x60_gpio”來(lái)操作這些管腳。
-
Linux
+關(guān)注
關(guān)注
87文章
11207瀏覽量
208717 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6084瀏覽量
35154
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論