全志R128应用开发案例-中断方式驱动旋转编码器_第1页
全志R128应用开发案例-中断方式驱动旋转编码器_第2页
全志R128应用开发案例-中断方式驱动旋转编码器_第3页
全志R128应用开发案例-中断方式驱动旋转编码器_第4页
全志R128应用开发案例-中断方式驱动旋转编码器_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页全志R128应用开发案例—中断方式驱动旋转编码器

中断方式驱动旋转(编码器)

旋转编码器是一种位置(传感器),可将旋钮的角位置(旋转)转换为用于确定旋钮旋转方向的输出(信号)。

由于其坚固性和良好的数字控制;它们被用于许多应用中,包括(机器人)技术,CNC机器和打印机。

旋转编码器有两种类型-绝对式和增量式。绝对编码器为我们提供旋钮的精确位置(以度为单位),而增量编码器报告轴已移动了多少增量。

编码器内部是一个槽形磁盘,该磁盘连接到公共接地引脚C以及两个接触针A和B。旋转旋钮时,A和B根据旋转旋钮的方向以特定顺序与公共接地引脚C接触。

当它们接触公共接地时,它们会产生信号。当一个引脚先于另一引脚接触时,这些信号就会彼此错开90°。这称为正交编码。

顺时针旋转旋钮时,首先连接A引脚,然后连接B引脚。逆时针旋转旋钮时,首先连接B引脚,然后连接A引脚。

通过跟踪每个引脚何时与地面连接或与地面断开,我们可以使用这些信号变化来确定旋钮的旋转方向。您可以通过在A更改状态时观察B的状态来做到这一点。

我们搭建电路,如下:

载入方案

我们使用的开发板是R128-Devkit,需要开发C906核心的应用程序,所以载入方案选择r128s2_module_c906

$sourceenvsetup.sh$lunch_(rtos)1

勾选GPIO驱动

mrtos_menuconfig找到下列驱动

DriversOp(ti)ons>socrelateddevicedrivers>GPIOdevices>[*]enableG(PI)Odriver[*]enbaleGPIOhalAPIs(Te)stcommand

编写程序

打开你喜欢的编辑器,修改文件:lichee/rtos/projects/r128s2/module_c906/src/main.c

引入头文件

#include

使用GPIO配置引脚

配置GPIO的上下拉状态使用hal_gpio_set_pull(gpio_pin_tpin,gpio_pull_status_tpull);来设置。这里我们设置PA25引脚为默认上拉状态。

hal_gpio_set_pull(GPIOA(25),GPIO_PULL_UP);配置GPIO输入输出模式使用hal_gpio_set_direction(gpio_pin_tpin,gpio_direction_tdirection);来设置GPIO的输入输出模式,这里配置为输入模式。

hal_gpio_set_direction(GPIOA(25),GPIO_DIRECTION_INPUT);配置GPIO的MUX功能GPIO通常有多种功能,需要配置MUX选择需要的功能,使用hal_gpio_pinmux_set_function(gpio_pin_tpin,gpio_muxsel_tfunction_index);来设置GPIO的复用功能,这里配置为GPIO输入模式(GPIO_MUXSEL_IN)

hal_gpio_pinmux_set_function(GPIOA(25),GPIO_MUXSEL_IN);获取GPIO的电平使用inthal_gpio_get_data(gpio_pin_tpin,gpio_data_t*data);来获取GPIO的电平

gpio_data_tgpio_data;hal_gpio_get_data(GPIOA(25),申请配置中断使用hal_gpio_to_irq方法来申请中断号。hal_gpio_irq_request绑定中断服务,hal_gpio_irq_enable启用中断。这里配置一个

//存放中断号uint32_tirq_clk;//申请中断号ret=hal_gpio_to_irq(ENC_CLK,if(ret完整代码

#include#include#include#include#include"interrupt.h"#include#include#include#include#include#include"(FreeRTOS).h"#include"task.h"#include"tinatest.h"externintamp_init(void);//定义旋转编码器的引脚#defineENC_CLKGPIOA(24)#defineENC_DTGPIOA(25)#defineENC_SWGPIOA(29)//相关全局变量存储intencode_counter=0;intencode_current_clk;intencode_lask_clk;intcurrent_dir=0;//编码器中断处理函数stat(ic)hal_irqreturn_tgpio_irq_encode(void*data){//获取引脚的高低电平状态gpio_data_tclk_value=GPIO_DATA_LOW;gpio_data_tdt_value=GPIO_DATA_LOW;hal_gpio_get_data(ENC_DT,hal_gpio_get_data(ENC_CLK,//判断当前数据状态encode_current_clk=clk_value;if(encode_current_clk!=encode_lask_clkcurrent_dir=1;}else{//反转encode_counter--;current_dir=-1;}printf("Direction=%d,Counter=%dn",current_dir,encode_counter);}//刷新当前状态encode_lask_clk=encode_current_clk;return0;}void(cpu)0_app_entry(void*pa(ram)){intret=0;//初始化系统资源amp_init();//A24->CLK,A25->DT.A29->SWhal_gpio_set_pull(ENC_CLK,GPIO_PULL_DOWN_DISABLED);hal_gpio_set_direction(ENC_CLK,GPIO_DIRECTION_INPUT);hal_gpio_pinmux_set_function(ENC_CLK,GPIO_MUXSEL_IN);//获取初始编码器CLK状态gpio_data_tclk_data;hal_gpio_get_data(ENC_CLK,encode_lask_clk=clk_data;hal_gpio_set_pull(ENC_DT,GPIO_PULL_DOWN_DISABLED);hal_gpio_set_direction(ENC_DT,GPIO_DIRECTION_INPUT);hal_gpio_pinmux_set_function(ENC_DT,GPIO_MUXSEL_IN);//存放CLK,DT中断号uint32_t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论