MSP430 判断 旋转编码开关转动方向

msp430 是一款超低功耗的单片机,个人感觉市面上看到的教程远远少于Adrunio ,51和 stm32,可能是太底层了的原因吧。本文将使用MSP430F5529PL 来完成对于旋转编码开关转动方向的判断,以及使用串口工具进行结果显示。

目录

1. 旋转编码开关
2. 线路连接实物
3. 程序讲解
4. 效果展示

1、旋转编码开关

旋转编码开关,也就是所说的旋转编码器、数码电位器、Rotary Encoder 。它具有左转,右转功能,有的旋转编码开关还有按下功能。(本质上可以理解为3个开关)
在这里插入图片描述
端口接法
(1)A、B脚要接上拉电阻

(2)C 脚一般接地

(3)VCC、GDN 脚是下按键的开关接线

下面这张图是AC ,BC的信号
在这里插入图片描述
可以看到,要想获取到他的旋转方向,只要让A在上升沿或者下降沿来临时,检测B的电平即可。例如以A的上升沿为例,A在上升沿时,如果B的电位是低,那么是向右转,否则向左。那么怎么在A上升沿或者下降沿来临时获取B的值呢?聪明的大家一定想到了中断。

2、线路连接实物

在这里插入图片描述
A – P2.3
B – P2.4
C – GND
由于不用检测下压 VCC 和 GND 直接 空接。
上面两个导线,和旁边的短路环作用一样。

3. 程序讲解

#include <msp430f5529.h>

#define uchar unsigned char

uchar buffer0[] = {"逆时针\n"};
uchar buffer1[] = {"顺时针\n"};


// 启用串口调试, 波特率设置为9600
void setUart(){
  P4SEL = BIT4 +BIT5;           // 设置 4.4 和 4.5 为输出位
  UCA1CTL1 |= UCSWRST;          // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL_1;                     // CLK = ACLK 
  UCA1BR0 = 0x03;               // 32kHz/9600=3.41 (see User's Guide)
  UCA1BR1 = 0x00;               
  UCA1MCTL = UCBRS_3+UCBRF_0;   // Modulation UCBRSx=3, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;         // **Initialize USCI state machine**
}

// 串口输出字符串
void uartPrint(uchar code[], int len){
  unsigned int i;
  for(i=0; i<len; i++){
    UCA1TXBUF = code[i];
    while (!(UCA1IFG&UCTXIFG)); 
  }
}

// 主程序
void main(void)
{
  // 停止看门狗
  WDTCTL=WDTPW+WDTHOLD;
  // 设置1.0为输出啊端口,并且初始为低电平
  P1DIR |= BIT0; P1OUT &=~ BIT0;
  // 设置2.3为输入位, 接上拉电阻, 设置初始值为高电平
  P2DIR &=~ BIT3; P2REN |= BIT3; P2OUT |= BIT3;
  // 允许2.3触发中断, 中断标志位复位,设置中断
  P2IES &=~ BIT3; P2IFG &=~ BIT3; P2IE |= BIT3;
  // 设置2.4也位输入位, 接上拉电阻, 设置初始值位高电平
  P2DIR &=~ BIT4; P2REN |= BIT4; P2OUT |= BIT4;
  // 设置串口
  setUart();
  // CPU休息,GIE:打开全局中断使能
  __bis_SR_register(LPM0_bits +GIE);
  // 停止操作指令
  __no_operation();
}

// 进入中断
#pragma vector = PORT2_VECTOR
__interrupt void Port_2(void){
  if(P2IN & BIT4){  // 如果是2.4高电平
    // 串口打印 ”逆时针“
    uartPrint(buffer0, sizeof(buffer0));
  }else{
    // 串口打印 ”顺时针“
    uartPrint(buffer1, sizeof(buffer1));
  }
  // 中断标复位
  P2IFG &=~ BIT3;
}

4. 效果展示

在这里插入图片描述
结语:MSP430 的 生态等待大家一起去丰富,一起加油吧。

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
编码器是一种用于测量旋转运动的传感器,可以通过编码器的输出信号来确定位置、速度和方向等信息。MSP430f5529是一种微控制器,可以通过其GPIO端口读取编码器信号并进行处理。 以下是基于MSP430f5529读取编码器的原理及配置步骤: 1. 编码器信号的原理:编码器通常输出两路正交的方波信号,其中一个信号称为A相,另一个信号称为B相。A相和B相的相位差为90度,可以通过两个信号的上升沿或下降沿来计算旋转方向和速度等信息。 2. 配置MSP430f5529的GPIO端口:需要将MSP430f5529的GPIO端口配置为输入模式,并使能上拉电阻。通常将A相信号连接到P6.4端口,将B相信号连接到P6.5端口。 3. 读取编码器信号:可以通过轮询的方式读取编码器信号,或者使用中断的方式进行读取。在轮询方式下,可以在主循环中读取GPIO端口的状态,并根据A相和B相的变化来计算旋转方向和速度等信息。在中断方式下,可以配置GPIO端口的中断,当A相或B相发生变化时触发中断,并在中断服务函数中进行处理。 4. 计算编码器信息:根据A相和B相的变化,可以计算出编码器的旋转方向和速度等信息。通常使用计数器来记录旋转的脉冲数量,每个脉冲表示编码旋转一个单位,根据计数器的变化可以计算出旋转方向和速度等信息。 以上是基于MSP430f5529读取编码器的原理及配置步骤,需要根据具体的应用场景进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值