首页 >> 大全

360°旋转中空编码器EC35原理及驱动程序

2023-12-09 大全 27 作者:考证青年

一:基本介绍 1:产品介绍

EC35编码器主要用于频率调节,高度调节,温度调节及音量调节等参数调节。注意编码器避免储藏于高温潮湿及腐蚀的场所,拆包装后未使用完的剩余产品请在防潮防毒的环境下保存。

2:产品参数:

额定:10mA 5VDC

使用温度范围:–40ˆ to +85℃

输出电压:1mA 5V DC(电阻负载)时 2.5V以下

耐电压:300V AC for

操作寿命:50,

3:输出波形

旋转编码器怎么样与驱动器接线__旋转编码器工作原理

逻辑分析仪测试的正转波形

逻辑分析仪测试的反转波形

4:原理分析

由逻辑分析仪测试的波形可知,以A为触发源,当编码器正转的时候,C先变为低电平,紧接着是B。所以编码器正转时波形变化为依次为:A—C—B—A—C....。同理可知编码器反转时波形变化为依次为:A—B—C—A—B....

二:程序设计 1:程序思路

本篇设计为编码器三个引脚中任意一个引脚触发单片机中断后,通过单片机读取另外两个引脚的状态,从而判断旋钮旋转方向。

以A引脚为例:将连接编码器引脚A的单片机引脚设置为上升沿触中断,当该引脚触发中断后,如果先读到B变低电平,则此时编码器为反转。如果先读到C变低电平,则此时编码器为正转。

同理以B引脚为例:将连接编码器引脚B的单片机引脚设置为上升沿触中断,当该引脚触发中断后,如果先读到C变低电平,则此时编码器为反转。如果先读到A变低电平,则此时编码器为正转。

........

2:程序编写

①:初始化初始化EC35编码器 A B C 三个引脚

		/* 初始化EC35编码器 A B C 三个引脚 */rcu_periph_clock_enable(EC35_A_CLK);gpio_init(EC35_A_PORT,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,EC35_A_PIN);rcu_periph_clock_enable(EC35_B_CLK);gpio_init(EC35_B_PORT,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,EC35_B_PIN);rcu_periph_clock_enable(EC35_C_CLK);gpio_init(EC35_C_PORT,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,EC35_C_PIN);

②:设置中断

    rcu_periph_clock_enable(RCU_AF);//打开复用时钟nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);//选择优先级组/* 配置EC35编码器 C 引脚中断 */nvic_irq_enable(C_EXTIx_IRQn, 2U, 0U);//配置抢占优先级、子优先级gpio_exti_source_select(C_PORT_SOURCE_GPIOx, C_PIN_SOURCE_x );//配置中断源exti_init(C_EXTI_x, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//配置中断方式exti_interrupt_flag_clear(C_EXTI_x);//清除标志位/* 配置EC35编码器 B 引脚中断 */nvic_irq_enable(B_EXTIx_IRQn, 2U, 1U);gpio_exti_source_select(B_PORT_SOURCE_GPIOx, B_PIN_SOURCE_x);exti_init(B_EXTI_x, EXTI_INTERRUPT, EXTI_TRIG_FALLING);exti_interrupt_flag_clear(B_EXTI_x);/* 配置EC35编码器 A 引脚中断 */nvic_irq_enable(A_EXTIx_IRQn, 2U, 2U);gpio_exti_source_select(A_PORT_SOURCE_GPIOx, A_PIN_SOURCE_x);exti_init(A_EXTI_x, EXTI_INTERRUPT, EXTI_TRIG_FALLING);exti_interrupt_flag_clear(A_EXTI_x);

③:初始化串口

#include "gd32f303r_start.h"static rcu_periph_enum COM_CLK[COMn] = {EVAL_COM1_CLK, EVAL_COM2_CLK};
static uint32_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};
static uint32_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};
static uint32_t COM_GPIO_PORT[COMn] = {EVAL_COM1_GPIO_PORT, EVAL_COM2_GPIO_PORT};
static rcu_periph_enum COM_GPIO_CLK[COMn] = {EVAL_COM1_GPIO_CLK, EVAL_COM2_GPIO_CLK};void gd_eval_com_init(uint32_t com)
{uint32_t com_id = 0U;if(EVAL_COM1 == com){com_id = 0U;}else if(EVAL_COM2 == com){com_id = 1U;}/* enable GPIO clock */rcu_periph_clock_enable(COM_GPIO_CLK[com_id]);/* enable USART clock */rcu_periph_clock_enable(COM_CLK[com_id]);/* connect port to USARTx_Tx */gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, COM_TX_PIN[com_id]);/* connect port to USARTx_Rx */gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, COM_RX_PIN[com_id]);/* USART configure */usart_deinit(com);usart_baudrate_set(com, 9600U);usart_receive_config(com, USART_RECEIVE_ENABLE);usart_transmit_config(com, USART_TRANSMIT_ENABLE);usart_enable(com);
}

④:中断函数,当编码器正转时串口打印 ++ 当编码器反转时串口打印 --

/*
如果先读到A引脚为低电平,则代表编码器此时正转。
如果先读到B引脚为低电平,则代表编码器此时反转。
*/
void EXTI10_15_IRQHandler(void)
{	static	int a;if(RESET != exti_interrupt_flag_get(C_EXTI_x)) {for(a=0;a<200;a++)//调节a

⑤:main.c文件

#include "gd32f30x.h"
#include "gd32f303r_start.h"
#include "systick.h"
#include 
#include "EC35.h"int main(void)
{	systick_config();gd_eval_com_init(EVAL_COM1);EC35_Init();while(1) {			}
}/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{usart_data_transmit(EVAL_COM1, (uint8_t)ch);while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));return ch;
}

3:运行结果

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了