天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234

如何用單片機控制伺服電機?

更新時間: 2022-04-01
閱讀量:10898

伺服電機是我們常用的一種電機,在本文的案例中,將學習如何使用單片機控制伺服電機,案例以PIC16F877A單片機作為接口的連接與控制示例。

什么是伺服電機?

伺服電機是一種根據給定指令運行的特殊電機。它提供了精確的角度控制,這也意味著與其他電機通電即旋轉不同。伺服電機僅旋轉到一定程度或直到需要下一次旋轉,在這之前電機會停止不動并等待下一條指令,才能執行進一步的動作。所以,伺服電機需要借助伺服機電路進行控制才能按要求旋轉,它的角旋轉和最終運動由位置反饋決定,其控制線的輸入也決定了輸出軸所需的位置。

伺服電機與PIC16F877A接口的伺服電機電路圖:

20220401182021.jpg

它有一個非常簡單的電路圖。伺服電機的控制線直接連接到單片機的RB0引腳。該銷將提供電機所需的角位移。在這個項目中,假設我們正在使用一個角旋轉被限制在0°-180°的伺服電機。我們可以通過使用寬度變化的脈沖以最高精度控制電機的旋轉以達到所需的角度。

每20毫秒(20000微秒)后向伺服電機提供一個脈沖。電機的角位置由該脈沖的長度決定。角度位置0°、90°和180°在代碼中演示。

下面是用于控制伺服電機的PIC單片機接口的C代碼,我們在編譯器中編寫以下與PIC接口的伺服電機代碼:

void Rotation0() //0度
{
unsigned int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
Delay_us(800); //800us 脈沖
PORTB.F0 = 0;
Delay_us(19200);
}
}

void Rotation90() //90度
{
unsigned int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
Delay_us(1500); //1500us 的脈沖
PORTB.F0 = 0;
Delay_us(18500);
}
}

void Rotation180() //180 度

{
unsigned int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
Delay_us(2200); //2200us 的脈沖
PORTB.F0 = 0;
Delay_us(17800);
}
}

void main()
{
TRISB = 0; // PORTB作為輸出端口
do
{
Rotation0(); //0度
Delay_ms(2000);
Rotation90(); //90度
Delay_ms(2000);
Rotation180(); //180度
}while(1);
}

代碼開頭已經聲明了電機角旋轉0°、90°和 180°的各個函數。在本教程中,我們沒有使用PIC16F877A的實際脈沖寬度調制功能來生成脈沖。而是,脈沖是在程序延遲的幫助下產生的。特定角度的延遲持續時間等于電機旋轉到相應角度所需的脈沖長度。也就是說,對于0°角,脈沖寬度約為800ms,因此在PORT引腳RB0設置為高時引入了800ms的延遲。同樣,旋轉90°需要1500ms的脈沖,180°角度需要2200ms。

在主程序中,將PORTB設置為輸出端口,三個函數都被調用,它們之間有2000ms的延遲。該程序使電機以某種模式旋轉,比如0°–90°–180°–0°等等。這將在無限循環“do-while”循環中持續運行,直到程序中止。

以上就是英銳恩單片機開發工程師分享的如何用單片機控制伺服電機?。英銳恩專注單片機應用方案設計與開發,提供8位單片機、16位單片機、32位單片機。

联系我们: 东平县| 垣曲县| 佳木斯市| 英德市| 平南县| 桂阳县| 塔河县| 云浮市| 莲花县| 阳春市| 准格尔旗| 凭祥市| 宁阳县| 霍城县| 喀什市| 南溪县| 伊金霍洛旗| 金溪县| 抚州市| 高台县| 温泉县| 万盛区| 洛川县| 和田市| 锡林郭勒盟| 嘉善县| 天门市| 开远市| 绥宁县| 永川市| 体育| 綦江县| 德惠市| 龙江县| 石嘴山市| 滕州市| 津南区| 鄯善县| 大竹县| 安仁县| 嵩明县|