Поверка секундомеров

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

По девайсу размышления:Ведь самодельный стенд тоже должен кто-то поверить сначала?
Так точно два пути:
1. подавать внешнюю частоту на МК от прецизионного генератора например Г3-122, стабильность частоты опорного генератора 5.10-9 за 15 мин, Погрешность установки частоты 5*10-7 сек за месяц (всего этого хватит с запасом), который в свою очередь поверяется. Диапазон частот 0,001 Гц…2 МГц, есть выход ТТЛ;
2. измерять точность частоты тактового генератора МК со своим кварцем, скорей всего будет удовлетворять точности.
Уже собрана макетная часть, обычный электромагнит с лентопротяги через рычаг нажимает на кнопку секундомера, запуская и останавливая его и обнуление его в третий раз.
Точность такого стенда должна….
Я прикрепил ГОСТ на поверку механических секундомеров, там все понятно, единственное там нет допустимой погрешности мех. секундомеров, идет ссылка на другой ГОСТ его у меня нет, по моему она не более 0,2 сек за 60 мин.
Но это я уточню.
Вообще у метрологов есть правило эталон должен быть точней поверяемого минимум в три раза.
Как учесть время нажатия и останова, т.к. началом отсчёта следует считать наверное начало движения стрелки секундомера!?
Время нажатия и останова происходят с началом счета и в конце счета, и соответственно это время затраченное на пуск и остановку взаимно вычитается, а погрешность разница пренебрегается, т.к. она ничтожна мала.
Пункты а и б и другие предложения - затратное дело и метод не изучен и не аттестован (не одобрен) Госстандартом РФ, больше геморроя.
Вложения
8.423-81.rar
ГОСТ на поверку мех-х секундомеров
(258.65 КБ) 353 скачивания
Начинающий
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Здравствуйте.
Уже довольно давно для местного ЦСМ сделали
"Стенд ... поверки механических секундомеров. Обеспечивает синхронный сброс, старт и останов через заданный интервал времени до 10 поверяемых секундомеров. Позволяет проводить поверку в горизонтальном и вертикальном положении. Управляется стандартным электронным секундомером СТЦ-1. Интервал времени задается на секундомере СТЦ-1.

Максимальное количество поверяемых секундомеров 10
Диаметр корпуса секундомеров 50...55 мм"
СТЦ-1 тот еще прибор, но он включен в Госреестр.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

Вот в архиве, если кому интересно, внешний вид и схема электрическая задающего генератора СТЦ-1. Я думал он поменьше будет :)
Вложения
-1.rar
(159.58 КБ) 443 скачивания
Последний раз редактировалось Digital Ср мар 25, 2009 21:23:13, всего редактировалось 1 раз.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

В общем, думаю, сначала надо будет подумать над тем, каким будет задающий генератор, от него вся точность зависеть будет. Т.е. на таймере0/таймере1 ли, а может на таймере2 в асинхронном режиме (с часовым кварцем) или может по внешнему тактированию с суперстабильного генератора. Т.е. по любому надо сформировать ТЗ для начала.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

СТЦ у меня нет, а то строил бы отношения с ним.
буду строить свой УПМС-1
По поводу задающего генератора. Мысль такая, что обязательно и то и другое. т.е. наличие внутреннего генератора так и возможность синхронизироваться от внешней частоты.
Начинающий
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

Не могу разобраться и посмотреть негде, как мне выводить на ЖКИ более двух цифр, например от 0 до 1000
Вот текст, который выводит 0-99
И КАКОЙ ЗДЕСЬ ПРИНЦИП
lcd_gotoxy(0,0);
lcd_putchar(sek/10+0x30);
lcd_putchar(sek%10+0x30);
Начинающий
Реклама
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Юрий Климчук писал(а):Не могу разобраться и посмотреть негде...
И КАКОЙ ЗДЕСЬ ПРИНЦИП
Принцип как принцип, не зная библиотеки рискну предположить

Код: Выделить всё

    lcd_gotoxy(0,0); // устанавливаем позицию вывода символов в 0 (1 строка, 1 столбец)
        lcd_putchar(sek/10+0x30); //выводим ASCII код числа sek/10 (т. е. прибавление к числу 0x30 дает его ASCII код) в установленную позицию, после вывода, как я понимаю позиция вывода символа автоматически инкрементируется
        lcd_putchar(sek%10+0x30); // выводим остаток от деления sek%10 в следующую позицию 
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

ЖКИ ещё не было необходимости применять, поэтому рискну предположить, что одна из причин - это переменная sek. Наверное она должна быть, в данном случае, типа int, а не char. Может я и не прав.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

Товарищи вот у меня почти готовый вариант поверочного устройства, но есть проблема, я ни как не могу разобраться, что нижно поменять в проге, что бы подключить кварц и какой, опять таки фузы, что с ними оставить или что то менять
Вложения
Taimer_ver2 - 3.rar
(70.19 КБ) 323 скачивания
Начинающий
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

1) По умолчанию AVR МК-ры поставляются с активированным внутренним генератором тактовой частоты на 1МГц.
Изменить источник тактирования на внешний можно с помощью программатора, т.к. по командам из программы фьюзы изменять нельзя. Про фьюзы для задающего генератора - см. таблицу 4 на стр.25 ДШ на ATMega8. Топик на флруме про фьюзы - http://radiokot.ru/forum/viewtopic.php?t=1279

2) Выдержка из вашей программы:

Код: Выделить всё

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFFFh
...
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1E;
OCR1AL=0x85;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm("sei")
   TCCR1B = 0;         //стоп таймер 1
....
while(1)
{
if (PINB.1==0)          // Пуск
           {
            TCCR1B = 0b00000101; //старт таймер 1 
....
Вот смотрите:

В настройках таймера1 вами указано TCCR1B=0x05;. Т.е. подаче питания на МК, после начала выполнения программы, в момент инициализации таймера1 он начнёт отсчёт, после выполнения этой строки, и, далее, в строке TCCR1B = 0; //стоп таймер 1 - остановится.

ИМХО это лишнее (TCCR1B=0x00; пусть лучше будет сначала), т.к. ведь в основном цикле программы вы и так будете запускать таймер1 - строка TCCR1B = 0b00000101; //старт таймер 1.

3) Далее:

В комментариях к настройкам таймера1 указано // Clock value: 7,813 kHz

- предделитель (прескалер) таймера1 выбран как TCCRB1=0x05, т.е. 0b00000 101 и, смотря по таблице 40 на стр.98 ДШ на ATMega8 равен 1024.

Чтобы погрешность не набегала, частота задающего генератора МК должна быть кратной этому значению, т.е. прикупить надо будет кварцевый резонатор с частотой 7813Гц*1024=8.000512МГц.

Можно и на 8МГц поставить, но 8000000(Гц)/7813(Гц)=1023,9344681940355817227697427365. Т.е. немного не 1024, но насколько это критично в вашем случае не знаю, может и пойдёт, если кварца на 8.000512МГц не достать будет.

П.С. При кварце 8МГц cvavr выдаёт в мастере настроек таймера1 значение 7.813 вместо 7.8125. Просто он его округляет до третьего знака после запятой.
Последний раз редактировалось Digital Пн апр 13, 2009 20:31:49, всего редактировалось 4 раза.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

По поводу того, что cvavr выдаёт в мастере настроек таймера1 значение 7,183 вместо 7,8125. Да тогда при делении 8000000/7,8125 получается ровно 1024. А может быть так и происходит, ну округляет он, а делит нормально?
Вообще я немного разочеровался в ответе, то есть точности мне не видать, я вот наткнулся на схему с DS1307 и заинтересовался, единственная проблема, cvavr не понимает его библиотеку, соответственно ошибка и нет компиляции. Или может быть её как то можно прописать? Хочу попробывать перенести свой алгоритм с последней программы с использованием DS1307
У меня сразу куча вопросов:
1. А вообще прав ли я что нужно для повышения точности 1 секунды использовать DS1307
2. Как в проге использовать Старт и стоп этой DS1307
3. А если cvavr не понимает DS1307, чего тогда я здесь пишу?

Я прикрепляю файл с использованием DS1307, прога хорошая для переделки под мою задачу. Что то изменить в hex файле не получается, из за библиотеки DS1307.

[/code]
Вложения
DS1307.rar
(50.82 КБ) 272 скачивания
Начинающий
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

Поправил чуток свой пост выше, а то вижу запутал вас.
Юрий Климчук писал(а):По поводу того, что cvavr выдаёт в мастере настроек таймера1 значение 7,183 вместо 7,8125. Да тогда при делении 8000000/7,8125 получается ровно 1024. А может быть так и происходит, ну округляет он, а делит нормально?
Ровно то получается, но число 7812,5 в таймер1 не запишешь. Записать можно только целочисленное, например число 7813. 7813 в 16-ричной системе записывается как 0х1E85 к слову, это как раз в настройках таймера1 строки:

Код: Выделить всё

OCR1AH=0x1E; 
OCR1AL=0x85;
Я хотел сказать, что прескалер таймера будет делить именно на 1024 и при 8МГц-м кварце будет набегать некоторая погрешность, которую надо учитывать при расчётах (ведь для чего-то же ваш таймер1 считает именно до числа 7813). Т.е. просто у вас 1 секунда будет фактически равна 0,99993600409573787277614232689108 сек. А в часе будет 3599,7696147446563419941123768079 секунд. Т.е. ошибка 0,230385255343658005887623193 сек. в час. А вам надо наверное втрое меньше? Тогда генератор можно и подстроить. У того же СТЦ-1 есть подстройка задающего генератора (см. схему электрическую задающего генератора СТЦ-1 в архиве -1.rar на этой странице). Т.е. можно предусмотреть подстроечные элементы и затем по точному частотомеру подстроить свой 8-ми мегагерцовый кварц так, чтобы генератор МК с ним работал на частоте на 512Гц выше. Подстройка частоты должна быть предусмотрена в таком устройстве ещё и потому, что ёмкость монтажа кварц так или иначе "подстроит" немного. А cvavr конечно округляет.
Юрий Климчук писал(а):Вообще я немного разочеровался в ответе, то есть точности мне не видать,...
Ну мои ответы далеко не от "последней инстанции". Да и зачем сразу на DS-ки кидаться. Можно и на таймере вполне. Вот например посмотрите: http://radiokot.ru/forum/viewtopic.php? ... 2%E0%EC%E8
Последний раз редактировалось Digital Вт апр 14, 2009 18:32:44, всего редактировалось 3 раза.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

То есть, если я Вас правильно понял, я оставляю все как есть ( 8 МГц кварц, прескалер таймера на 1024), вывожу контрольный сигнал на ногу и считаю частотометром в режиме компарирования с эталонным генератором, ошибку поправляю кондёром желательно с малым ТКЕ.
Начинающий
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

Да, это я и хотел сказать.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

А delay_ms (1000) без поправки 0,999.... секунд?
Начинающий
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

В справке к cvavr есть раздел: Delay Functions.

Вот выдержка из него:

Код: Выделить всё

Before calling the functions the interrupts must be disabled, otherwise the delays will be much longer then expected. Also it is very important to specify the correct AVR chip Clock frequency in the Project|Configure|C Compiler|Code Generation menu.
Т.е. получается два важных момента при использовании этой функции:

1. Перед вызовом функции все прерывания, если они используются должны быть запрещены, а после - вновь разрешены. Ну это для вашего устройства может и не требуется.
2. Очень важно правильно указать частоту генератора МК в проекте (т.к. задержки будут рассчитываться с учётом её значения).

Т.е. я хочу сказать, что точность задержки обусловлена авторскими расчётами задержек в cvavr и насколько точны эти расчёты неизвестно. Ну разве что опытным путём...

П.С. А вы разобрались как у вас отсчёт каждую секунду происходит, как это получается?
Последний раз редактировалось Digital Вт апр 14, 2009 20:13:30, всего редактировалось 1 раз.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

Как-бы случайно так возник совет по конструкции печатной платы.

Т.к. МК предполагается использовать для управления соленоидом (электромагнитом по сути), то его надо расположить подальше от самой платы с МК, чтобы не было наводок на кварцевый резонатор. А сам кварцевый резонатор лучше всего расположить и подключить так, как показано на верхнем рисунке приложенного документа (см. в emc_page12.zip). Т.е. главное из рисунка следует, что к объединающей дорожке "корпус кварца (если он в smd-исполнении конечно)-->конденсаторы кварца-->gnd (vss) МК" ничего более, что должно к gnd подключаться не надо подключать; со стороны МК только можно (к участку, где "ground plane").

А выход на соленоид как схемотехнически реализовать планируете?
Вложения
emc_page12.zip
(87.17 КБ) 270 скачиваний
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

Digital писал(а):П.С. А вы разобрались как у вас отсчёт каждую секунду происходит, как это получается?
8000000(Fкварца)/1024(делитель таймера)=8712,5
Это число записываем в шеснадцатиричном виде
OCR1AH=0x1E, OCR1AL=0x85 округлён до 7813
Теперь таймер считает до этого числа и сбрасывается каждую секунду, происходит инкременирование моей секунды.
Что то мне подсказывает, что здесь все завязано на период
1сек/8МГц=0,125 мкс, дальше 1/7812,5=0,000128с, а 1/7813=0,000127029...
в расчетах разобрался, а физике процесса по моему нет
7812,5(действительно делит)/7813(можно записать)=0,99993600... сек

За способ подключения кварца отдельное спасибо, обязательно это учту.
По схеме подключения электромагнита, думаю просто найти рабочую схему и скопировать её или вариант еще у меня валяется плата с PIC от автосигнализации там сидят две релюхи должно быть подключенные к МК через транзистор, ну еще не разбирался.
Да подскажите, как на прямую вывести частоту с МК на частотомер для контроля.
Начинающий
Открыл глаза
Аватара пользователя
Сообщения: 78
Зарегистрирован: Сб сен 13, 2008 16:23:09
Откуда: Kaluga

Сообщение Digital »

Юрий Климчук писал(а):Да подскажите, как на прямую вывести частоту с МК на частотомер для контроля.
Нда, это нетривиальная задача (как сделать так чтобы и частота кварца не уходила при измерениях от ёмкости подключаемого "измерителя" и, с точностью до n-го знака можно было проконтролировать). Может ещё дополнительную темку по этой проблеме вам создать? Так, моё решение - это сделать отдельный режим для поверки (типа если нажать и удерживать какую-нибудь кнопку и включить питание устройства, то МК конфигурировался бы определённым образом) и уже по какому-нибудь выходу МК измерять "поделённую" частоту. Выход в этом случае лучше всего использовать "железный" таймера1 МК, а сам таймер использовать без прерываний от него.

П.С. Ну это "слёту" так сказать мысль, может где и не продумал.
Юрий Климчук писал(а):еще у меня валяется плата с PIC от автосигнализации там сидят две релюхи должно быть подключенные к МК через транзистор
Там скорее всего силовой ключ (типа BTS141, BSP77) с "быстрым" диодом для гашения противо-ЭДС, т.к. для варианта с транзистором потребуется шунтирование диодом, а обычный будет увеличивать время выключения соленоида.
Последний раз редактировалось Digital Ср апр 15, 2009 18:31:42, всего редактировалось 1 раз.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Вс авг 31, 2008 07:51:22
Откуда: Астрахань

Сообщение Юрий Климчук »

Подключаться однозначно к выходу МК, и использовать тот-же таймер только вот незадача, как вывести частоту 1 сек на ножку через delay_ms (1000) или может быть по другому, сразу с таймера?
А вообще наверное, чтобы не мучится тактировать МК внешним прецизионным генератором, где кстати можно выставить 8000512 Гц в моем случае или даже 32768 Гц
По первому вопросу если есть соображения прошу поделиться.
Начинающий
Ответить

Вернуться в «AVR»