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

利用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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fengyuzhe13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值