OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5872|回复: 18

谁有正交编码器的的例程,单独捕获A信号,和B信号,在网上找了好久都是断断续续的,看不懂

[复制链接]

19

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2018-10-8
在线时间
75 小时
发表于 2019-1-10 17:46:44 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2018-10-8
在线时间
75 小时
 楼主| 发表于 2019-1-10 17:46:45 | 显示全部楼层
你们看一下这个

STM32编码器Demo.rar

4.61 MB, 下载次数: 4764

回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10570
金钱
10570
注册时间
2017-2-18
在线时间
1913 小时
发表于 2019-1-10 18:12:59 | 显示全部楼层
帮顶~~
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-10 18:14:23 | 显示全部楼层
这个是STM32F407的使用,不过你要搞懂原理,因为要考虑到编码器的参数进行设置定时器的相关参数的,注意编码器的程序不是通用的

STM32-编码器-2019.1.8.rar

4.27 MB, 下载次数: 1278

回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-10 18:16:20 | 显示全部楼层
回复

使用道具 举报

19

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2018-10-8
在线时间
75 小时
 楼主| 发表于 2019-1-10 18:54:14 | 显示全部楼层
123将321 发表于 2019-1-10 18:14
这个是STM32F407的使用,不过你要搞懂原理,因为要考虑到编码器的参数进行设置定时器的相关参数的,注意编 ...

///**************************************************************************
//函数功能:单位时间读取编码器计数
//入口参数:定时器
//返回  值:速度值
//**************************************************************************/
int Read_Encoder(u8 TIMX)
{
    int Encoder_TIM;   
   switch(TIMX)
     {
       case 2:  Encoder_TIM= (int)TIM4 -> CNT;  TIM4 -> CNT=0;break;
         default:  Encoder_TIM=0;
     }
        return (int)Encoder_TIM;
}
//***********读计数TIM4个数**************
int TIM4_Encoder_Read(void)
{
    s16 data;
    data=(s16)(TIM_GetCounter(TIM4));//获取timx计数器值
                                                                                                                                           //其中x可以从1到17来选择Tim外围设备。
                                                                                                                                                 //计数器寄存器值。
    return (int)data;
}

//***************TIM4计数寄存器赋值***********
void TIM4_Encoder_Write(int data)
  {
    TIM4->CNT = data;
  }

//*****************TIM4用于编码模式*************
void TIM4_Configuration(void)
{
    TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能由APB1控制的TIM4端口时钟
    TIM_DeInit(TIM4);   //TIM4初始化
     
    //GPIO配置PB6,PB7
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);   //使能PB端口时钟
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //PB6,PB7 浮空输入
    GPIO_Init(GPIOB,&GPIO_InitStructure);
     
    //TIM4编码模式
    TIM_EncoderInterfaceConfig(TIM4,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
        /*
        配置timx编码器接口。*@param timx:其中x可以是1、2、3、4、5或8,以选择Tim外围设备。
        *@param Tim_encodermode:指定timx编码器模式。*此参数可以是以下值之一:
        *@Arg   Tim_encodermode_ti1:根据ti2fp2级别对ti1fp1边进行计数器计数。
        *@Arg   Tim_encoderMode_TI2:根据ti1fp1级别在ti2fp2边缘上计数器。
        *@Arg   Tim_encodermode_ti 12:计数器计数ti1fp1和ti2fp2边缘,这取决于其他输入的级别。
        *@param Tim_ic1极性:指定iC1极性*此参数可以是以下值之一:
        *@Arg   Tim_ic极性_Fall:IC下降边缘。*@Arg Tim_ic极性上升:IC
        */
     
    /* Time Base configuration */
    TIM_TimeBaseStructure.TIM_Prescaler = 0;                //不分频
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;              //设置计数器溢出后的重载初值
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);         //用以上参数初始化定时器时间基础模块     

    TIM_Cmd(TIM4, ENABLE);  //使能定时器4
}
int main(void)
{       
         int Speed,Number;//定义一个变量接收速度值
        delay_init();                     //延时函数初始化         
        LED_Init();                          //初始化与LED连接的硬件接口
        //TIM3_PWM_Init(8999,0);//不分频。PWM频率=72000/(899+1)=80Khz
         TIM4_Configuration();
         
         //arr=8999;
         /*
         频率:
//Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)
         */
        // dutyCircle(50,2);//占空比,频率
         while(1)
         {
                 Number=TIM4_Encoder_Read();//得到个数
                 Speed=Read_Encoder(4);//得到速度

         }

}
这个是我在网上找的我也不知道对不对
回复

使用道具 举报

19

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2018-10-8
在线时间
75 小时
 楼主| 发表于 2019-1-10 19:26:06 | 显示全部楼层
123将321 发表于 2019-1-10 18:14
这个是STM32F407的使用,不过你要搞懂原理,因为要考虑到编码器的参数进行设置定时器的相关参数的,注意编 ...

while(1)
        {
                num=circle_count*20+TIM_GetCounter(TIM2);
                delay_ms(100);
               
        }
这里这个参数为什么要成20
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-11 08:46:50 | 显示全部楼层
逸雨 发表于 2019-1-10 19:26
while(1)
        {
                num=circle_count*20+TIM_GetCounter(TIM2);

我设置了定时器一个周期计数20,circle_count是溢出中断次数(包含方向,你看下中断函数就知道方向了),溢出一次就计数20了,所以circle_count*20是计算circle_count次中断读到编码数
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-11 08:55:26 | 显示全部楼层
逸雨 发表于 2019-1-10 18:54
///**************************************************************************
//函数功能:单位时 ...

应该还要设置定时器引脚设置吧 TIM_ICInit()
你可以配置两个IO,跟编码器引脚短接,IO口模拟编码器脉冲,验证可不可行
另外你那个贴出来的程序,采集到的编码脉冲最大频率应该是1.2k
回复

使用道具 举报

19

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2018-10-8
在线时间
75 小时
 楼主| 发表于 2019-1-11 11:03:21 | 显示全部楼层
123将321 发表于 2019-1-11 08:46
我设置了定时器一个周期计数20,circle_count是溢出中断次数(包含方向,你看下中断函数就知道方向了), ...

        delay_init(168);//延时初始化
       
        uart_init(115200);//串口初始化波特率为115200       
        LED_Init();//初始化与LED连接的硬件接口
这里需要设置波特率吗,
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-11 11:23:41 | 显示全部楼层
逸雨 发表于 2019-1-11 11:03
delay_init(168);//延时初始化
       
        uart_init(115200);//串口初始化波特率为115200       

没有关联的    编码器初始化就这个函数Encoder_Init();       
你看下我发的那个网址,看我写的配置编码器的思路
回复

使用道具 举报

19

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2018-10-8
在线时间
75 小时
 楼主| 发表于 2019-1-12 17:21:17 | 显示全部楼层
123将321 发表于 2019-1-11 11:23
没有关联的    编码器初始化就这个函数Encoder_Init();       
你看下我发的那个网址,看我写的配置编码器的思 ...

我想问一下编码器和正交编码器有什么区别
回复

使用道具 举报

19

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2018-10-8
在线时间
75 小时
 楼主| 发表于 2019-1-12 17:21:49 | 显示全部楼层
123将321 发表于 2019-1-11 11:23
没有关联的    编码器初始化就这个函数Encoder_Init();       
你看下我发的那个网址,看我写的配置编码器的思 ...

我想问一下编码器和正交编码器有什么区别
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-14 08:39:46 | 显示全部楼层
逸雨 发表于 2019-1-12 17:21
我想问一下编码器和正交编码器有什么区别

正交编码器 AB信号高低电平交变,表示编码变化和方向。正交编码器属于编码器,编码器在配置时,有个配置是设置为 上升沿或者下降沿 或者 A变化时计数 或者 A变化时计数,这些就对应不同编码器类型,如果只设置为在A上升沿计数,就不是正交编码器了,但是是编码器
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2019-1-14 09:52:08 | 显示全部楼层
谢谢分享
回复

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5265
金钱
5265
注册时间
2012-8-25
在线时间
1025 小时
发表于 2019-1-14 10:50:34 | 显示全部楼层
逸雨 发表于 2019-1-12 17:21
我想问一下编码器和正交编码器有什么区别

马和白马的关系。正交编码器是编码器一种。主要是说它出的信号是正交信号。
回复

使用道具 举报

27

主题

143

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1243
金钱
1243
注册时间
2016-1-23
在线时间
487 小时
发表于 2019-3-19 22:17:16 | 显示全部楼层
逸雨 发表于 2019-1-10 17:46
你们看一下这个

谢谢分享
回复

使用道具 举报

3

主题

72

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1305
金钱
1305
注册时间
2015-12-3
在线时间
160 小时
发表于 2019-7-25 10:14:57 | 显示全部楼层
标记下                  
。。。。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-10-25
在线时间
3 小时
发表于 2019-10-25 15:23:02 | 显示全部楼层
逸雨 发表于 2019-1-10 17:46
你们看一下这个

这个代码是相关的硬件介绍吗?麻烦发给我一下:113316152@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-1 02:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表