Ⅰ 單片機開發中,如何獲取一個旋扭的轉動角度
方案1:旋鈕上裝一個高精度的電位器,電位器兩邊的引腳接上電源,每次開機單片機通過AD值讀取電位器中間腳的電壓值,根據電壓值來判斷角度。優點:成本低。缺點:電位器的精度不高,角度也達不到340度,你要定做電位器。
方案2:旋鈕上裝一個絕對角度感測器。缺點:不知道有沒有解析度這么高的感測器。
Ⅱ 旋轉編碼器與單片機怎麼連,測角度用
旋轉編碼器有A、B兩個信號線,分別接單片機的兩個IO口
A先出現高電平表示正轉,反之A是低電平,B出現高電平,編碼器是反轉
Ⅲ 單片機控制光電編碼器怎樣測角度
選用絕對碼編碼器(格雷碼)就可以測角,極方便。
Ⅳ 51單片機,可不可以通過可旋式電位器通過阻值的變化來測量當前角度呢
這樣的電位器必須是線性阻值的,即每個相同的角度阻值相同,但高精度的線性電位器很少,所以測量結果誤差比較大,沒有使用價值
Ⅳ 旋轉編碼開關加單片機實現角度檢測
直接按照你的思維就可以了,不用步進電機的,你要是要旋轉角度才要用步進電機。具體的可以在網路文庫搜索「數字旋轉編碼開關的原理及使用方法」參考一下就可以了,還不明白再追問。
Ⅵ 角度檢測裝置 使用MCS-51單片機作為控制器,採集旋轉式滑動變阻器的角度。根據當前的角度值確定單
該題目的主要目的看起來是通過一個輸入(滑動變阻器或手動輸入)來輸出一個PWM
所以你問的問題 按鍵輸出一路方波 輸出方波就是題目的目的
Ⅶ 用C51單片機測量轉軸角度在1602中顯示!
旋轉編碼器+單片機+1602 (單片機把旋轉編碼器的數據換算成角度輸出到1602)
旋轉編碼器 網路一下 很多資料
Ⅷ 51單片機開發板和絕對式編碼器連接測量角度的程序
#include <reg52.h>
#include "inc/delay.h"
#include "inc/hc595.h"
#define uchar unsigned char
#define uint unsigned int
sbit PIN_ROTARY_A = P2^0; //引腳1介面
sbit PIN_ROTARY_B = P2^1; //引腳2介面
sbit PIN_ROTARY_C = P2^2; //按下的介面
sbit PIN_ROTARY_D = P2^3; //按下的介面
//uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/* 存儲待發送的數據 */
/* 1->8的段碼表 */
code unsigned char ucDis_Segmentcode[16] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 位碼表 */
code unsigned char ucDis_Bitcode[8] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
uchar dis_XS[8] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d};
uchar count = 0;
uchar flag;
uchar Last_BMB_status;
uchar Current_BMB_status;
void display()
{
uchar i;
dis_XS[0] = ucDis_Segmentcode[count/100]; //百位
dis_XS[1] = ucDis_Segmentcode[count%100/10]; //十位
dis_XS[2] = ucDis_Segmentcode[count%10]; //個位
if(i < 2)
{
i++;
}
else
{
i = 0;
}
// for (i = 0; i < 3; i++ )
{
Send_Data(dis_XS[i], ucDis_Bitcode[i]);
//PIN_ROTARY_D = 0;
// Delay1ms(1);
}
}
//************************************************
void main()
{
TMOD=0x01; //定時器0,工作方式1
TH0=0xD8;
TL0=0xF0; //給定時器裝上初值,10ms中斷一次
ET0=1; //打開定時器中斷
EA =1; //打開總中斷
TR0=1; //啟動定時器0
while(1)
{
//display();
Last_BMB_status=PIN_ROTARY_B;
while(!PIN_ROTARY_A) //BMA為低電平時
{
Current_BMB_status = PIN_ROTARY_B;
flag = 1; //標志位置為1說明編碼開關被旋轉了
}
if(flag == 1)
{
flag = 0; //時刻要注意這一點!給標志位清零
if((Last_BMB_status == 0)&&(Current_BMB_status == 1)) //BMB上升沿表示正轉
{
count++;
if(count == 255)
{
count = 0;
}
}
if((Last_BMB_status == 1)&&(Current_BMB_status == 0)) //BMB下降沿表示反轉
{
count--;
if(count == 0)
{
count = 255;
}
}
}
}
}
//***********************************************
void timer0() interrupt 1//定時器0的中斷服務程序
{
TH0=0xF8; // TH0=0xD8;
TL0=0xF0; //再次裝入初值
display(); //每隔10ms顯示一次
if(!PIN_ROTARY_C) //按下旋轉編碼開關則計數清零
{
count = 0;
}
PIN_ROTARY_D = !PIN_ROTARY_D;
}
Ⅸ 測風向的問題,單片機作測風儀,用什麼方法可以測量出風向牌偏轉的角度
測風向其實就是測角度,用一個旗帶動一個絕對編碼器一圈為360度,分為東西南北,用一個編碼器可以測量到旋轉的角度(建議用絕對編碼器因為編對編碼器斷電後再上電還能知道其角度)將360度分成256份(假如編碼器輸出0到256)這樣一來將讀到的數字信號0到256轉換為角度即可,假如數字0對應正東那麼256除四等64,那麼數字64為正南,128為正西,……
Ⅹ 旋轉編碼器跟51單片機連接如果需要測量出旋轉角度應該怎麼弄啊,謝謝
相對型旋轉編碼器:
將A、B路脈沖接入8051(或8031)單片機的脈沖輸入埠。用程序讀入脈沖的8種狀態(即A為高電平;A非為低電平;A↑為A的上跳沿;A↓為A的下跳沿。B 類似),並有8種組合,其中四種組合表示旋轉編碼器正轉,另四種組合表示旋轉編碼器反轉(具體略)。
根據旋轉編碼器每轉的編碼數,以及選擇的倍率(一般為4倍),計算脈沖當量(即每個脈沖對應的轉角--度/脈沖)。
單片機發出讀脈沖指令,計數器開始累加脈沖輸入個數,直到單片機發出停止指令。由程序計算出旋轉角度。
以上是由主程序讀脈沖,也可以中斷方式讀脈沖。具體程序處理略。
絕對型旋轉編碼器:
將旋轉編碼器的編碼信號通過並行口接入8051(或8031)單片機的數據輸入埠。
旋轉編碼器每轉對應n個編碼,計算每度角度對應m個編碼(即m=n/360)。
可通過中斷方法讀旋轉編碼器的編碼。
通過兩次讀的編碼,計算出旋轉角度。
程序需要注意兩點:旋轉方向的處理和模數的處理。具體程序處理略。
簡單敘述至此,希望能對你有所幫助。