Добрый день.
Имеется Линейный индуктосин (линейка), запитывается головка через усилители sin/cos частотой 1 Кгц сдвинутые на 90 градусов,
с линейки считывается и усиливается усилителем. Необходимо измерять и подсчитывать сдвиг фазы выхода с линейки относительно sin или cos .
Кто подскажет как мне организовать все это на микроконтроллере, sin/cos вырабатывает МК., выход буду ловить прерыванием.
Фиксировать переходы через 0 .
Запитку головки сделал, вот код:
#include ‹stdio.h›
#include ‹avr/io.h›
#include ‹util/delay.h›
#include ‹avr/interrupt.h›
char c=0;
ISR (TIMER0_OVF_vect)
{
TCNT0=208;
switch(c) {
case 0: PORTA=0b10;
break;
case 1: PORTA=0b00;
break;
case 2: PORTA=0b01;
break;
case 3: PORTA=0b11;
}
if (c‹3) c++; else c=0;
}
//-------КООРДИНАТА Z -----------
ISR( INT0_vect )
{
}
ISR( INT1_vect )//-------КООРДИНАТА Х -----------
{
}
ISR( INT2_vect )//-------КООРДИНАТА Y -----------
{
}
//-------------------------------------------------------------------------
int main(void)
{
DDRD=0x80;
PORTD=0xff;
DDRB=0x00;
PORTB=0xff;
DDRA=0xff;
GICR |= (1 ‹‹ INT0)|(1 ‹‹ INT1)|(1 ‹‹ INT2); // Разрешаем внешнее прерывание на входе INT0
MCUCR=(1‹‹ISC11) | (0‹‹ISC10) | (1‹‹ISC01) | (0‹‹ISC00);
MCUCSR=(0‹‹ISC2) ;
/***Настраиваем таймер0***/
TCCR0 = 3;
TIMSK |=(1‹‹TOIE0);//|(1‹‹TICIE1)); // Запускаем таймер
TCCR1B = (0‹‹CS12)|(1‹‹CS11)|(0‹‹CS10);//|(0‹‹ICES1)|(0‹‹ICNC1); // настраиваем делитель
TCNT1 = 0 ; // выставляем начальное значение TCNT1
sei(); // выставляем бит общего разрешения прерываний
while (1)
{
}
}
Фото запитка головки.
Вот видео : при движении линейки или головки что происходит.
https://disk.yandex.ru/i/6JdgSKkpyea17Q