360度 旋转编码器实物如下:

KY-040旋转编码器模块

工作电压:5V

一圈脉冲数:20

旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转计数不像电位计,这种转动计数是没有限制的。配合旋转编码器上的按键,可以复位到初始状态,即从0开始计数。

工作原理:增量编码器是一种将旋转位移转换为一连串数字脉冲信号的旋转式传感器。这些脉冲用来控制角位移。在Eltra编码器中角位移的转换采用了光电扫描原理。读数系统以由交替的透光窗口和不透光窗口构成的径向分度盘(码盘)的旋转为依据,同时被一个红外光源垂直照射,光把码盘的图像投射到接收器表面上。接收器覆盖着一层衍射光栅,它具有和码盘相同的窗口宽度。接收器的工作是感受光盘转动所产生的变化,然后将光变化转换成相应的电变化。再使低电平信号上升到较高电平,并产生没有任何干扰的方形脉冲,这就必须用电子电路来处理。读数系统通常采用差分方式,即将两个波形一样但相位差为180°的不同信号进行比较,以便提高输出信号的质量和稳定性。读数是再两个信号的差别基础上形成的,从而消除了干扰。

增量编码器给出两相方波,它们的相位差90°,通常称为A通道和B通道。其中一个通道给出与转速相关的信息,与此同时,通过两个通道信号进行顺序对比,得到旋转方向的信息。还有一个特殊信号称为Z或零通道,该通道给出编码器的绝对零位,此信号是一个方波与A通道方波的中心线重合。

现在实现检测这个增量编码器正转还是反转

我们这里用读取IO的方式来读取数据,来判断是正转还是反转。

单片机型号:STM32L052K8*

接线:CLK  接  PA0

DT   接  PA1

SW  接  PA2

int main(void)
{/* USER CODE BEGIN 1 */unsigned char dt;unsigned char clk,key;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */printf("\n\r****wantin****\n\r");/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf("\n\**************\n\r");clk = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin);dt = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin);key = HAL_GPIO_ReadPin(SW_GPIO_Port,SW_Pin);if(1 == clk){printf("\n\clk == 1\n\r");}else{printf("\n\clk == 0\n\r");}if(1 == dt){printf("\n\dt == 1\n\r");}else{printf("\n\dt == 0\n\r");}if(1 == key){printf("\n\key == 1\n\r");}else{printf("\n\key == 0\n\r");}HAL_Delay(1000);}/* USER CODE END 3 */
}

实现效果来看,不理想:

不管你正转还是反转,CLK和DT这两个引脚的电平,都是成0、1交替,而且两个的电平一致,根本无法区分正转还是反转。

随后,将其插上电源,用示波器测试了一下这两个引脚产生的波形。效果如下:

采集中断0口,接的clk信号

正转的波形图:黄色的线为clk,蓝色的线为dt

下降沿触发,采集到的电平  都为低电平  clk = 0   dt = 0;

反转的波形图:黄色的线为clk,蓝色的线为dt

下降沿触发,采集到的电平  clk = 0   dt = 1;

通过波形可以看出,正反转是有波形区别的,如何实现正反转检测,可以使用中断的方式来实现。

采用下降沿触发方式来采集波形的变化。

int main(void)
{/* USER CODE BEGIN 1 */unsigned char dt;unsigned char clk,key;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */printf("\n\r****wantin****\n\r");/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf("\n\**************\n\r");if(10 == spped_counter){printf("\n\***正转***\n\r");}else{printf("\n\***反转***\n\r");}
//    clk = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin);
//    dt = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin);
//    key = HAL_GPIO_ReadPin(SW_GPIO_Port,SW_Pin);
//    if(1 == clk)
//    {
//        printf("\n\clk == 1\n\r");
//    }
//    else
//    {
//        printf("\n\clk == 0\n\r");
//    }
//    if(1 == dt)
//    {
//        printf("\n\dt == 1\n\r");
//    }
//    else
//    {
//        printf("\n\dt == 0\n\r");
//    }
//    if(1 == key)
//    {
//        printf("\n\key == 1\n\r");
//    }
//    else
//    {
//        printf("\n\key == 0\n\r");
//    }HAL_Delay(1000);}/* USER CODE END 3 */
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)  //外部中断 回调函数
{if(GPIO_Pin == CLK_Pin) //检测到有变化就进来处理{if(HAL_GPIO_ReadPin(CLK_GPIO_Port,CLK_Pin) == HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin))  //clk pb0 == dt pb1spped_counter=10;        //  表示 正转elsespped_counter=100;        //  表示 反转}
}

效果如下:

【STM32学习】(22)STM32实现360度旋转编码器相关推荐

  1. 【精心挑选】10款基于 jQuery 的图片360度旋转插件

    之前的文章向大家分享了实现网站功能的各种优秀的 jQuery 插件,今天这篇文章向大家推荐10款基于 jQuery 的图片360度旋转插件,同时还有非常详细的制作教程可以学习和参考.图片旋转展示是一种 ...

  2. 精心挑选10款基于 jQuery 的图片360度旋转插件

    之前的文章向大家分享了实现网站功能的各种优秀的 jQuery 插件,今天这篇文章向大家推荐10款基于 jQuery 的图片360度旋转插件,同时还有非常详细的制作教程可以学习和参考.图片旋转展示是一种 ...

  3. 旋转矩阵中6保6_40岁阿姨发明新型手推车,可以360度旋转,干活效率提升6倍

    科技,其实很有趣!大家好,欢迎收看本期木易机械 40岁阿姨发明新型手推车,能够360度旋转,干活效率提升6倍 科技的发展是我们有目共睹的,不仅是那些震惊世界的发明,就在我们的日常生活中,也有很多的小发 ...

  4. 360度旋转图片小特效

    现在,在这个网络发达的时代,一些电子商务公司,需要将自己线上的产品给买家或用户看,为了能让用户了解的更全面,那么把一个物件的产品要展示到方方面面,就要运用到360度旋转图片特效,因为上次有朋友叫我帮她 ...

  5. jQuery 图像 360 度旋转插件

    13 款最热门的 jQuery 图像 360 度旋转插件推荐 时间:02月07日 在 web 页面上使用 jQuery 图像 360 度旋转插件是最美也是最方便的显示图像的方式.这些超级棒的 360° ...

  6. js产品360度旋转预览图片插件

    下载地址 纯js实现的产品360度旋转预览图片插件.该js特效仅使用120行代码,即可实现通过滑块.或鼠标手动360度旋转图片,以及自动360度旋转图片的效果. dd:

  7. 360环物如何发布html,制作网页上的360度旋转全景图PixMaker使用详细教程

    PixMaker是一个简单方便的360度全景图片制作软件,它可以将描写一个环型场景的多个连续图片无缝地接合在一起,形成一个360度"场景"图片.可以在网页上播放,使你的页面更加生动 ...

  8. 图片可以360度旋转类似广告代码

    图片可以360度旋转类似广告代码 <div style='height:60px; line-height:50px; text-align:center; color: #b2b2b2;'&g ...

  9. html5图片自动翻转,纯js实现360度旋转预览图片特效

    这是一款纯js实现360度旋转预览图片特效.该js特效仅使用120行代码,即可实现通过滑块.或鼠标手动360度旋转图片,以及自动360度旋转图片的效果. 使用方法 HTML结构 import Roll ...

  10. spritespin.js插件实现图片360度旋转

    1. 官网:http://spritespin.ginie.eu/: SpriteSpin是一个jQuery插件,可将图像帧转换为动画.它需要一个图像阵列或一个精确的精灵片,并像翻转书一样逐帧播放它们 ...

最新文章

  1. 如何设置网页自动刷新(JSP,JS,HTML)
  2. winform解决跨线程调用windows窗口控件
  3. Mybatis解析动态sql原理分析
  4. 【ERP】如何根据系统币种(扩展)精度来动态产生数字的格式(FORMAT MASK)
  5. 群里分享的react的收藏一下!今日周末,改了个表单验证然后无所事事了!
  6. java程序设计经典课堂讲课_Java程序设计与开发经典课堂
  7. python测试驱动开发 中文版_GitHub - starryrbs/python_tdd: 使用Python测试驱动开发完成Django项目...
  8. 理解JavaScript原型
  9. Xtreme ToolkitPro 编译选项
  10. as4配置本地gradle_Gradle和Maven的区别
  11. Hbuilder无法正常运行微信小程序模拟器到指定页面为启动页
  12. ufs 固态硬盘_东芝首发UFS 3.0闪存:性能媲美高端PC 固态硬盘
  13. excel与access结合运用_当excel不够用时,如何利用Access进行数据分析?
  14. uni-app的生命周期说明及平台差异性说明
  15. Cube实现天空盒子,看了你自己也能做
  16. 转龚文祥的一篇文章:对看起来很美的网站要保持审慎的乐观
  17. 怎样关联多个 Excel 档工作表(Sheet)中的数据
  18. java转义字符 \\
  19. ACC-5595反射内存交换机
  20. 计算机中的图形(Graphic)和图像(Image)

热门文章

  1. NLP实践——Few-shot事件抽取《Building an Event Extractor with Only a Few Examples》
  2. 酷开系统AI智能让生活更简单化
  3. python中如何将矩阵中的元素赋值为两倍_python给矩阵内元素赋值
  4. 什么是443端口?HTTPS是什么端口?如何工作
  5. 魔兽世界资料片:燃烧的远征
  6. hdu 4966 GGS-DDU 最小树形图
  7. c语言邻接表的普里姆算法,图的遍历和生成树求解实现(邻接矩阵、邻接表 —图的深度广度遍历算法的实现和最小生成树PRIM和KRU...
  8. RestAssured实现POST请求
  9. allure企业级定制报告
  10. 分辨率、帧率、码率之间的关系