STM32f103 C8T6 编码盘

这几天和小组的成员在做平衡摆,这个平衡摆主要的模块是编码盘+步进电机+MPU6050+按键。

前几天已经用32f103的mini板子调试过一次,效果都还不错,想着换成C8T6机械结构就比较轻盈。但是想法往往和现实的差距挺大的,想着都是f103的板子,无非就是IO口不同,改了应该结果都差不多,但是差强人意呐,C8T6的编码器根本读不到计数器的值。

问了学长之后,C8T6的代码和mini的代码除了IO口不同之外,还有一个地方就是编码器。

mini板编码器IO设置的是浮空输入,而C8T6编码器的IO口需要上拉输入。

1、先介绍几种常用的IO输入输出方式:

 浮空输入:就相当于此端口在默认情况下什么都不接,呈高阻态。

 上下拉输入:输入高电平,然后接一个上拉电阻(起保护作用),上拉就表示该端口在默认情况下输入为高电平;下拉就是该IO口通过一个电阻与地相连,默认为低电平。以按键为例,下拉没按下为低电平,按下为高电平,上拉则相反。

开漏输出:就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电压。这种方式适合在连接的外设电压比单片机电压低的时候。

推挽输出:就是单片机引脚可以直接输出高电平电压,低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上上拉电阻。但如果输出端接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚。

2、编码器

对于编码器的初识还是在上学期做的小车上,利用编码器+pid算法实现了小车两轮转速的同步。当时只是大概知道编码器如何用,对于其中的原理不是很清楚,这次做摆利用编码器所测的值经过运算得到摆的角度来控制电机的转速。但编码器一直出错,因此对于编码器的原理进行了学习。

原理:

    如果两个信号相位差为90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向、根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距离、如果再加上定时器的话还可以计算出速度。

           è¿éåå¾çæè¿°

对于STM32的硬件编码器,当T1,T2脉冲是连续产生的时候计数器加一或减一一次,而当某个接口产生了毛刺或抖动,则计数器计数不变,也就是说该接口能够容许抖动。在STM32中,编码器使用的是定时器接口,通过数据手册可知,定时器1,2,3,4,5和8有编码器的功能,而其他没有。同时只有CH1和CH2是进行编码器模式的。编码器输入信号TI1,TI2经过输入滤波,边沿检测产生TI1FP1,TI2FP2接到编码器模块,通过配置编码器的工作模式,即可以对编码器进行正向/反向计数。如果用的是定时器3,则对应的引脚是在PC6和PC7上。

编码器正转向上计数,反转向下计数,方向在CR1的DIR位里

编码器的输出一般是开漏的,所以io口一定要上拉输入状态。但是我的见识太少,我见过的除了C8T6用的上拉输入,其他的都是浮空输入,上面已经提到浮空输入相当于高阻态,至于为什么,我查了很久都没有出来。。。。如果哪位大佬看见我的博客,麻烦给我讲讲呐!!!

以下是编码器IO配置的代码:

mini板:

GPIOA->CRL&=0X00FFFFFF;//PA6 PA7
GPIOA->CRL|=0X44000000;//浮空输入

C8T6:

GPIOA->CRL&=0X00FFFFFF;//PA6 PA7
GPIOA->CRL|=0X88000000;//上/下拉输入
GPIOA->ODR|=1<<6;//上拉
GPIOA->ODR|=1<<7;

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值