3020|2

33

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

5.EV_HC32F460_Timer之正交编码器调试 [复制链接]

  本帖最后由 gao_hex 于 2021-5-23 23:40 编辑

简介

Timer

HC32F460 中与 PWM 相关的外设有

– 3 个多功能 16bit PWM Timer(Timer6)
– 3 个 16bit 电机 PWM Timer(Timer4)
– 6 个 16bit 通用 Timer(TimerA)
– 2 个 16bit 基础 Timer(Timer0)

    其中(Timer6)支持 6 路互补 PWM输出,可以用做正交编码器接口、而(Timer4)3 个电机 PWM,支持 18 路互补 PWM 输出、通用定时器(TimerA)、支持 3 路 3 相正交编码输入及 48 路独立可调占空比的 PWM 、

    通用定时器(Timer0)是一个可以实现同步计数 、异步计数两种方式的基本定时器。该定时器内含 2 个通道,可以在计数期间产生比较匹配事件。该事件可以触发中断,也可作为事件输出来控制其它模块等。

正交编码器

        在本章中需要配置调试的是正交编码器功能,在这几个定时器外设中有正交编码接口功能的 Timer 为 Timer6 和 TimerA

Timer6 中将 TIM6_<t>_PWMA 输入看作 AIN 输入、 TIM6_<t>_PWMB 输入看作 BIN 输入、TIM6_TRIGA-B 中的任意一个输入看作 ZIN 输入, Timer6 就可以实现三路输入的正交编码计数。

TimerA 中将 TIMA_<t>_CLKA 输入看作 AIN 输入、 TIMA_<t>_CLKB 输入看作 BIN 输入、TIMA_<t>_TRIG 输入看作 ZIN 输入, TimerA 就可以实现三路输入的正交编码计数。

       在 TimerA 中共计 6 个单元,每个单元有八个通道

硬件

       本章硬件端口的确定要从自己选定的正交编码端口去查找,我们使用TimerA的正交编码功能,我们要找到的是TIMA_<t>_CLKA、TIMA_<t>_CLKB、TIMA_<t>_TRIG,这三类端口(其中t=1~6)对应编码器的 ABZ在数据手册的引脚功能表中我们能找到相应的引脚,其引脚复用功能4、5、6都是关于TimerA 的,本章官方的示例代码中我们结合文档详细讲解其配置和使用。通过理解官方 Encoder 功能的配置来学习如和使用 HC32F460的Encoder 功能。

       在官方的 Encoder 功能的例程中使用的是端口PE9 PE11(除PA11、PA12不支持5V耐压外其余全支持5V耐压),我用的是伺服电机上的5V光电编码器。

使用的接口

 

如上图所示编码器 AB 的接口在 PE9 PE11

软件

先对大概的配置做个简介,这样感觉更好去理解。TimerA 的工作时钟源为 PCLK1,配置正交编码器需要使用到单片机的中断,中断单片机的灵魂,这里先简单讲解一下与本篇章相关的中断,至于整体的中断感觉还要像时钟那样单独写一篇,我脚着有必要,哈哈。华大的中断和STM32的中断有点差别的,目前先简单讲解一下。在配置的时候会遇到两个单词首写,Inc Dec 这两个,对我的英语水平感觉 Up Down 比较好,哈哈。

Increase  增加

Decline  下降

时钟初始化函数

系统时钟的初始化这个和前面讲解都类似的,可以参照代码中的注释及前面时钟介绍的文章很好理解的,下面的是系统时钟代码的注释及配置流程。主要时配置了几个工作时钟的频率,这个工作时钟在用户手册的4.4节有详细介绍,可以参照用户手册来了解学习。然后就是倍频器的配置了,主要时配置MPLL 因为MPLLP是系统时钟的选择源之一。配置流程及代码含义的详细请查看下列代码的配置。

下图红框标注的要去用户手册了解一下,用户手册 7.4.1 章。

TimerA的配置函数概述

配置使能 TimerA 单元1的时钟,配置端口功能的复用,然后就是TimerA 的基础初始化,TimerA 的正交编码功能初始化,最后其对相关的中断功能进行初始化。TimerA的基础功能配置为锯齿波模式,不与其他单元一起启动,配置周期基准(寄存器PERAR)。 编码器功能的配置,配置为当 ClkB 为高电平时 ClkA 上升沿时硬件递加有效(TMRA_HCUPR[6]),当 ClkB 为低电平时 ClkA 下降沿时硬件递减有效(TMRA_HCDOR[5]),使能 ClkA ClkB输入端口滤波功能使能,滤波采样基准时钟选择CA CB (PCLK1的四分频)这个地方用户手册上写的PCLK 我理解的是PCLK1,大家可以注意看一下。

 中断的配置,这个地方需要花点时间理解,目前的话我理解的是中断可以随意配置到中断向量表的任意一个,配置相对稍稍麻烦些,或者不熟悉的原因。

TimerA的配置函数代码详注

上述对配置过程大致做了概括,下面的话就看代码了。下面对代码的每一句进行了详细注释,中断的注册函数相对比较麻烦一点,会放在中断的篇章中讲解,大致和时钟概述那篇差不多的形式,单独写一篇。

中断回调函数处理

代码中是使相应的LED电平进行反转。

溢出中断函数处理

更新中断函数处理

编码器的处理,看下图逻辑分析仪对编码器的采样图,这个编码器的话是差分的接口,所有我们直接看通道0、2(或者1、3),假设Channel0连接在端口ClkA 上,Channel2连接到端口ClkB上,我们配置的是当 ClkB 为高电平时 ClkA 上升沿时硬件递加有效、当 ClkB 为低电平时 ClkA 上升沿时硬件递减有效。对照下图中我们看Channel0上升沿时对应Channel2的电平状态,可以看出硬件递加对应的电机顺时针旋转时的编码器波形,硬件递减对应的时电机逆时针旋转时的编码器波形。这样对应编码器的精度能计算出电机位置了,Z的话是计算电机转的圈数。

顺时针旋转

逆时针旋转

主函数 main() 处理

主函数内容就比较简单,这里不用详细讲了,看注释就可。

总结

       大概内容差不多了,说一下感受吧,中断可以随意配置到向量表的任意一个,我这么理解的,但是吧我是觉得终端配置是有些繁琐的,但是写的库函数就不必担心这些东西了,只要调用相应的函数即可,写寄存器的话就稍稍比较麻烦些了。总体感觉还是不错毕竟刚刚上手。接下来会写篇关于中断的吧,毕竟是单片机的灵魂,有必要写一篇,这个就到这里了。如有错误之处还请大佬指出,互相学习,嘿嘿。

 

注释好的代码在附件中,互相交流学习。

 

 

Timera_Encoder.7z

748.43 KB, 下载次数: 46

最新回复

楼主有空可以介绍一下华大的中断和STM32单片机,在中断有哪些配置不一样的地方   详情 回复 发表于 2021-5-24 20:22
点赞 关注
 
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

楼主有空可以介绍一下华大的中断和STM32单片机,在中断有哪些配置不一样的地方

点评

嗯嗯  在写了,下班时间写一点,周末没事的话,周日前可以写好,  详情 回复 发表于 2021-5-24 23:43
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
Jacktang 发表于 2021-5-24 20:22 楼主有空可以介绍一下华大的中断和STM32单片机,在中断有哪些配置不一样的地方

嗯嗯  在写了,下班时间写一点,周末没事的话,周日前可以写好,

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表