Stm32读取海德汉光栅尺(绝对位置)

您所在的位置:网站首页 光栅尺如何使用 Stm32读取海德汉光栅尺(绝对位置)

Stm32读取海德汉光栅尺(绝对位置)

2024-07-16 02:21| 来源: 网络整理| 查看: 265

利用Stm32定时器的比较和捕获功能,读取光栅尺的脉冲。光栅尺的接线端为+5、GND、A+、B+、RI+、RI-、A-、B-。这里我只用到前五个端口。Stm32的管脚能容忍5v电压,但是还是害怕长时间通电会烧坏,所以就在A+、B+、RI+这三个引脚上都串联了一个10k的电阻(心理安慰)。所用光栅尺为海德汉的LS 138,其每隔1cm左右就会有一个绝对位置标志,海德汉的说明书有公式用于解算绝对位置。但是害怕出错,所以就将所有的绝对位置的间隔都读出了:

#include "stm32f10x.h" //ÔÚ¸ÃÍ·ÎļþÖÐĬÈ϶¨ÒåϵͳʱÖÓΪ72M #include "delay.h" #include "sys.h" #include "usart.h" //#include "led.h" //#include "key.h" #include "exti.h" #include "encode.h" #include "nvic.h" #include "math.h" const u16 table[33]={39840,40240,39760,40320,39680,40400,39600,40480,39520,40560,39440,40640,39360,40720,39280,40800,39200,40880,39120,40960,39040,41040,38960,41120,38880,41200,38800,41280,38720,41360,38640,41440,38560}; const u32 table2[33]={39840,80080,119840,160160,199840,240240,279840,320320,359840,400400,439840,480480,519840,560560,599840,640640,679840,720720,759840,800800,839840,880880,919840,960960,999840,1041040,1079840,1121120,1159840,1201200,1239840,1281280,1319840};

其中table是代表从左到右每个间断点对应的增量脉冲数,尺子总共33个绝对位置标志。table2就是从左到右,每个标志点对应的绝对位置。如果测试其它尺子,请先读取间断点对应的脉冲增量:

void EXTI1_IRQHandler(void) { u8 i; long distance; // if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1) { if(initflag==0){ initflag=1; count = TIM4->CNT; displacement1=breaktime*65536+count; } else{ count = TIM4->CNT;// displacement2=breaktime*65536+count; MRR=displacement2-displacement1; displacement1=displacement2; Show_32(MRR); } } } EXTI_ClearITPendingBit(EXTI_Line1); // }

整个工程文件,我已经上传到我的CSDN上了,大家可以下载试试。

http://download.csdn.net/download/fengyuzhe13/10195010



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3