有关stm32的正交和编解码

摘要: 有关正交和编解码,我先表述什么是正交和编解码,,,,实际上姓名挺伟岸上的,,,,還是先说编号器吧看一下我使用过的一种编号器编号器的 线 数 ,是说编号器转一圈輸出是多少个单脉冲,,...

有关正交和编解码,我先表述什么是正交和编解码,,,,实际上姓名挺伟岸上的,,,,還是先说编号器吧

看一下我使用过的一种编号器

编号器的 线 数 ,是说编号器转一圈輸出是多少个单脉冲,,,假如一个编号器是500线,,,表明这一编号器转一圈相匹配的数据信号线会輸出500个单脉冲,,,,为何说成相匹配的,,,针对上边的编号器来讲是那样的,,,,可是有的编号器里边有许多线,,,有的数据信号线是转一圈就輸出相匹配是多少线的单脉冲,,,有的数据信号线是转一圈就輸出一个单脉冲,,,,这就需要看编号器的材料了......

看着我上边使用过的这一编号器,,应用A,B,VCC,GND这四根线,,

编号器转一圈A数据信号线会輸出500个单脉冲,,,,B数据信号线也会輸出500个单脉冲,,但是

正转的情况下

翻转的情况下

正转的情况下数据信号线A先輸出数据信号,B数据信号线后輸出

翻转的情况下数据信号线B先輸出数据信号,A数据信号线后輸出

假定仅仅单纯性的测正转单脉冲或是单纯性的测翻转单脉冲,那麼只必须用片式机随便挑选一个数据信号线就可以了了,,随后便是单脉冲计数,,,,

假如说如果一个电动机具有正转又有翻转,,,,我觉得了解这一电动机肯定正转了是多少圈

那麼就必须用正转的圈数减掉翻转的圈数了,,,,,,那麼难题来啦,,,如何测正转圈数和翻转圈数

实际上传统式的作法

有关D开启器,,,,当clk引脚来一个升高沿,D引脚是啥电平,,那麼Q就輸出甚么电平,,Q非,,与Q反过来

如今假如说电动机正转

能看到每每B来升高沿的情况下,A数据信号总为高电平,,,因此Q会輸出高电平

设定A为升高沿进到其,,,终断涵数

随后分辨一下Q是不是为高电平,假如为高电平正变化量自加一

假如电动机翻转

能看到每每B来升高沿的情况下,A数据信号总为低电平,,,因此Q会輸出低电平

设定B为升高沿进到其,,,终断涵数

随后分辨一下Q是不是为低电平,假如为低电平翻转自变量自加一

 随后 正变化量减掉翻转自变量就可以获得电动机究竟正转了是多少圈......那样便会获得一个相对性的自变量,,这一自变量呢,便是片式机正交和编解码的值

简言之片式机的正交和编解码作用便是获得一个正翻转,,,相对性的自变量,,,,这一自变量呢,,你正转的情况下他会加,你翻转的情况下他会减,

但是呢,,,,STM32的这一自变量有点儿坑,,,是太坑了,,,他內部界定的这一自变量的种类是无标记整形,,,换句话说0---65535,,,,,,,,,,,,,

假如立即运用STM32的正交和编解码作用,,立即读这一值,,那样呢便会出現很不便的难题,,,,

假定你正转转到10,随后翻转转到0以后還是翻转,,他便会刚开始从65535刚开始向下减了,,,,假定转来到60000,,你又刚开始正转了,一直翻过65535以后,他又刚开始从0刚开始往上添了,,,,如果你的电动机便是那样的反复,并且正转与翻转频次每一次都会转变,,,,,,,你怎样写程序到来到究竟正转了是多少圈??????????因此说STM32简直太坑了,,,害的我与我同学们写优化算法检测优化算法耽误了二天,,,,,,,最终還是会出現BUG,,,,,,,,在网上也是有高手写相近的优化算法来测算出究竟转的圈数,,,,,,,,,,,,,,

最总我打算用最实质的方式也便是运用D开启器,,,,,,,但是由于手头并沒有D开启器,,,可是STM32正交和编解码內部本质便是用的D开启器来做分辨的,,,,,

并且他出示了一个寄放器来分辨是正转還是翻转

if((TIM3- CR1 TIM_CounterMode_Down) == TIM_CounterMode_Down)//往下计数

else

便是往上计数......也便是能指出正翻转,,,,,

因此我也开启他的正交和编解码作用,,便是把A,B数据信号线既接正交和编解码引脚上,又接在单脉冲计数终断引脚上

void EXTI0_IRQHandler(void)//翻转终断
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET) //???????EXTI Line??
{
EXTI_ClearITPendingBit(EXTI_Line0); //???????
if((TIM3- CR1 TIM_CounterMode_Down) == TIM_CounterMode_Down)//???
{
cnt--;

}
}
}

/*************** ????1??,???? B1 *********************/
void EXTI1_IRQHandler(void)//正转终断
{
if(EXTI_GetITStatus(EXTI_Line1) != RESET) //???????EXTI Line??
{
EXTI_ClearITPendingBit(EXTI_Line1); //???????
if((TIM3- CR1 TIM_CounterMode_Up) == TIM_CounterMode_Up)//???
{
if((TIM3- CR1 TIM_CounterMode_Down) == TIM_CounterMode_Down);//???
else
cnt++;
}
}
}

 那样得话省了D开启器了,,,,,,,

看过一眼K60的正交和编解码的自变量

尽管是32位了可是,,,,,,,是无标记的,,,,,,假如仅用正交和编解码作用,,翻转又要考虑到优化算法了,,,,,,,,,,,,,,,,,,,,,

 最终另附程序免费下载详细地址,,,,B1,A6接正转的那一条数据信号线,,,,B0,A7接翻转的那一条数据信号线,,串口1,PA9..PA10,,,波特率115200会复印出去究竟转了是多少圈

s/1pLPLyht  登陆密码  9t84

实际上其实不是在说正交和编解码如何用,,只是说正交和编解码是个如何件事情,,,,,,,



联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:免费小程序制作