qiuq86 发表于 2013-8-20 09:20:54

请教,HCTL-2020解码芯片的使用

最近项目中用到Arduino去读取安装在电机背后的光电编码器数值,在低速的时候还好搞定,一旦电机高速运转时,Arduino就来不及用中断去处理事务。于是想到用HCTL-2020来解码的正交信号,但是我一直无法取到值,求指点。

另外想知道Arduino用什么方法可以判断2020的芯片好坏,以及是否正常工作。

还有一点,是我写的代码里,发送时钟信号的设定是否正确。2020用的是14MHz的时钟频率。

哦,对了,忘了说了,上面这个程序,输出值为0,编码器转动时没反应,还是输出0,给我的感觉好像就是这个芯片完全没有起作用,没有任何输出值。

我曾经考虑过,如果这个方案实在走不通的话,就专门用一块328去做解码工作,然后用类似的方式将解码结果输入给主芯片,不知道这种方案可行否,效率和这种专用的芯片相比如何?求指点。

代码如下:

const int Data_Pins = {30,33,35,37,43,45,47,49};
int SEL_Pin = 34; //set SEL pin
int OE_Pin = 36;//set OE pin
int RST_Pin = 42;
int CLK_Pin = 32;

void setup() {
pinMode (SEL_Pin, OUTPUT);
pinMode (OE_Pin, OUTPUT);
pinMode (RST_Pin, OUTPUT);

// Reset the chip
digitalWrite(RST_Pin, LOW);
delay(100);
digitalWrite(RST_Pin, HIGH);

pinMode (CLK_Pin, OUTPUT);
TCCR1A = B01000011; // Fast PWM change at OCR1A
TCCR1B = B11001;// System clock
OCR1A = 0; // 8 MHz

for (int i=0; i<8; i++) {
    pinMode(Data_Pins, INPUT);
}
pinMode(38, INPUT);

Serial.begin (9600);
Serial.print ("Start");
}

void loop() {
unsigned long value = 0;

// Read the high 8 bits
digitalWrite(OE_Pin, LOW); // OE = 0
digitalWrite(SEL_Pin, LOW); // SEL = 0
delay(100);

for (int i=0; i<8; i++){
    value = (value << 1) | digitalRead(Data_Pins);
}

// Read the low 8 bits
digitalWrite(SEL_Pin, HIGH); // SEL = 1
delay(100);

for (int i=0; i<8; i++){
    value = (value << 1) | digitalRead(Data_Pins);
}

digitalWrite(OE_Pin, HIGH); // OE = 1

Serial.print(digitalRead(38));
//Serial.print(value, BIN);
Serial.print(",");
Serial.println(value, DEC);
delay(1000);// Keep the data rate reasonable
}
页: [1]
查看完整版本: 请教,HCTL-2020解码芯片的使用