智能车制作

标题: 正交解码 求解 [打印本页]

作者: hi希特勒    时间: 2015-1-24 20:30
标题: 正交解码 求解
最近一直在调编码器,要用到正交解码,但除了原理啥都不懂,求大神详解,附一份正交解码的底层,和大家分享。void FTM_QUAD_init(void)
     {

       SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK;//时钟使能
       SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;//时钟使能

       FTM1_MODE |= FTM_MODE_FTMEN_MASK;//使能FTM所有功能
       FTM2_MODE |= FTM_MODE_FTMEN_MASK;//使能FTM所有功能

       FTM1_CNT = 0;//计数值初始化
       FTM1_CNTIN = 0;//初始值
       FTM1_MOD = 0xFFFF;//计数结束值
       FTM1_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式                          
       FTM1_QDCTRL |=FTM_QDCTRL_QUADEN_MASK; //使能正交解码
       FTM2_CNT = 0;//计数值初始化
       FTM2_CNTIN = 0;//初始值
       FTM2_MOD = 0xFFFF;//计数结束值
       FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式                          
       FTM2_QDCTRL |=FTM_QDCTRL_QUADEN_MASK; //使能正交解码

       PORT_PCR_REG(PORTA_BASE_PTR, 8)=PORT_PCR_MUX(6);//FTM1,A
       PORT_PCR_REG(PORTA_BASE_PTR, 9)=PORT_PCR_MUX(6);//FTM1,B
       PORT_PCR_REG(PORTA_BASE_PTR, 10)=PORT_PCR_MUX(6);//FTM2,A
       PORT_PCR_REG(PORTA_BASE_PTR, 11)=PORT_PCR_MUX(6);//FTM2,B

       FTM1_SC |= FTM_SC_CLKS(3);  //选择外部时钟
       FTM2_SC |= FTM_SC_CLKS(3);  //选择外部时钟
      }

作者: 沉默的萝卜    时间: 2015-1-25 15:25
同求,等大神解答
作者: 向往耄耋    时间: 2015-3-26 00:16
输入信号那四个端口可以改变吗?怎么改变的?求告知

作者: 申继鹏    时间: 2015-4-5 22:57
顶一下,怎么与速度联系起来啊
作者: 蓝猫    时间: 2015-4-6 13:14
申继鹏 发表于 2015-4-5 22:57
顶一下,怎么与速度联系起来啊

比如500线的编码器,车轮每转一圈,编码器就会发出500个脉冲,根据脉冲数的多少,就能知道车轮的速度


作者: 蓝猫    时间: 2015-4-6 13:16
申继鹏 发表于 2015-4-5 22:57
顶一下,怎么与速度联系起来啊

根据编码器反馈的数据,就能对车轮的速度进行控制。所以用编码器之后,程序里面往往用多少线而不是占空比


作者: 申继鹏    时间: 2015-4-6 14:10
蓝猫 发表于 2015-4-6 13:14
比如500线的编码器,车轮每转一圈,编码器就会发出500个脉冲,根据脉冲数的多少,就能知道车轮的速度

嗯,是这样的,我们用的是500线的,不过是双相的,转一圈输出2000个脉冲,用k60的正交解码可以判断速度方向。现在不明白的一点就是怎么把两轮的编码器脉冲数(count1,count2)与实际速度联系起来(目前仅知道(count1+count2)/2),还有速度的单位是什么呢?设定速度是以什么单位?试过了无数次,控制速度的PI加进去车根本没有反应啊,还是在原地平衡

作者: 蓝猫    时间: 2015-4-6 14:45
申继鹏 发表于 2015-4-6 14:10
嗯,是这样的,我们用的是500线的,不过是双相的,转一圈输出2000个脉冲,用k60的正交解码可以判断速度方 ...

正交解码只是为了辨别方向吧。
其实可以直接用每个控制周期多少线作为速度的单位的。当然如果你要转换成几米每秒也可以的。算出轮子周长,再根据500脉冲/秒来算出那个转换比例


作者: 蓝猫    时间: 2015-4-6 14:47
蓝猫 发表于 2015-4-6 14:45
正交解码只是为了辨别方向吧。
其实可以直接用每个控制周期多少线作为速度的单位的。当然如果你要转换成 ...

我是直接用脉冲数作为单位的,方便一点。
至于速度PI,你看看第七届官方电磁直立的技术报告吧,或者这个http://v.pps.tv/play_38NQTK.html


作者: 蓝猫    时间: 2015-4-6 14:47
发了个网站,需要审核,稍等一下
作者: hi希特勒    时间: 2015-4-6 21:05
申继鹏 发表于 2015-4-5 22:57
顶一下,怎么与速度联系起来啊

速度控制啊 先把编码器的度数转换成转/S 在进行PI控制 和直立控制差不多

作者: 申继鹏    时间: 2015-4-7 17:00
hi希特勒 发表于 2015-4-6 21:05
速度控制啊 先把编码器的度数转换成转/S 在进行PI控制 和直立控制差不多

江大的啊,你是周帆?

作者: hi希特勒    时间: 2015-4-8 15:52
申继鹏 发表于 2015-4-7 17:00
江大的啊,你是周帆?

不是 不过我认得他
作者: 申继鹏    时间: 2015-4-9 08:30
hi希特勒 发表于 2015-4-8 15:52
不是 不过我认得他

噢,前几天视频会议你们来了吗?
作者: 帅气、灰太郎    时间: 2015-6-1 21:52
你好,请问你们使用的KL46吗?有两个电机,这个芯片支持正交解码吗?我们准备换单片机,求这个KL46的资料,拜谢!!!
作者: hi希特勒    时间: 2015-6-2 09:17
帅气、灰太郎 发表于 2015-6-1 21:52
你好,请问你们使用的KL46吗?有两个电机,这个芯片支持正交解码吗?我们准备换单片机,求这个KL46的资料, ...

这个芯片我们这里没人用 建议用k60或者KL26,KL26没有正交解码,但可以加D触发器解决

作者: 帅气、灰太郎    时间: 2015-6-2 16:20
hi希特勒 发表于 2015-6-2 09:17
这个芯片我们这里没人用 建议用k60或者KL26,KL26没有正交解码,但可以加D触发器解决

恩,现在用的是K60但是由于区赛原因需要换单片机,然后就看上了KL26和46问下,KL26的底层库是用蓝宙的KL25用吗?还是自己配???





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2