海德汉光栅尺
利用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
相关阅读
小编由于下载project2016版爬各种论坛,发现最终他们都是几种收费打赏的形式进行下载,下面为大家提供一种傻瓜式教程: Project2016软
作为一名混迹于软文营销市场的资深广告主,在各种软文营销网站都曾有过发稿经验。而如何在鱼龙混杂的软文市场中觅得一个优质的软文
时间限制: 1000 ms 内存限制: 65536 KB提交数: 10333 通过数: 7040【题目描述】 输入一个浮点数,输出这个浮点数的绝
A5创业网(公众号:iadmin5)1月28日报道,有赞在年会宣布未来执行996工作制,甚至举例称工作家庭平衡不好可以离婚。有赞CEO白鸦发文做出回
AssignmentTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15