Ⅰ 单片机开发中,如何获取一个旋扭的转动角度
方案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)。
可通过中断方法读旋转编码器的编码。
通过两次读的编码,计算出旋转角度。
程序需要注意两点:旋转方向的处理和模数的处理。具体程序处理略。
简单叙述至此,希望能对你有所帮助。