устройство для измерения силы удара.
|
|
podvoynuy | Дата: Понедельник, 20.01.2014, 20:00 | Сообщение # 1 |
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Здравствуйте все форумчане! Май нейм ис Николай. Я только начал заниматься МК и увлекся. Хочу собрать устройство для измерения силы удара. Принцип действия в моем понимании: Сигнал от датчика в милливольтах через усилитель идет на ножку МК а именно к АЦП. После преобразования сигнала в аналоговый, значеня сохраняется на подключенную флешку (не знаю хватит ли встроенной памяти МК... поэтому наверняка буду подключать флешку). Устройство в корпусе из стеклопластика см.. фото. Проблема № 1 как подключить к одному входу в АЦП шесть датчиков? Именно столько нужно их. Пока выкладываю фото, но буду дополнять инфой.
буду благодарен за комментарии и критику!
Сообщение отредактировал podvoynuy - Понедельник, 20.01.2014, 20:15 |
|
| |
Петр | Дата: Понедельник, 20.01.2014, 20:31 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 47
Статус: Offline
| У МК обычно больше одного входа АЦП и модель с б и 6ольшим числом входов не сложно найти. Тот же ATmega8.
|
|
| |
Aleks8383 | Дата: Понедельник, 20.01.2014, 20:32 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 104
Статус: Offline
| А зачем именно к одному входу АЦП,возьмите самую распространённкую атмегу 8 у неё как раз 6 входов ацп,да и измеряйте на здоровье,а если мега 8 в СМД корпусе так там вообще 8 входов АЦП.А что за датчики будут,тензорезисторы какие небудьили что небудь цифровое? Петр уже ответил,опередил.
Сообщение отредактировал Aleks8383 - Понедельник, 20.01.2014, 20:32 |
|
| |
kip96 | Дата: Понедельник, 20.01.2014, 23:11 | Сообщение # 4 |
Группа: Свой человек
Сообщений: 170
Статус: Offline
| Блин, ну только сегодня такая идея возникла! Ну вот, говорят мысли блуждают, а не приходят. Вообщем у меня несколько другая идея. Использовать акселерометр. Т.к. у меня груша (которую нельзя скушать) , засунуть в неё Акселерометр. Зная вес груши, и ускорение, которое мы ей придадим, можно вычислить силу удара. Осталось формулу найти.;)
|
|
| |
podvoynuy | Дата: Понедельник, 20.01.2014, 23:12 | Сообщение # 5 |
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Петр, Aleks8383, спасибо что ткнули носом!) Я неправильно понял литературу, которая у меня есть. Насколько я теперь уже выяснил- ножки подсоединенные к АЦП это група "с"? Наверно в качестве датчиков будут тензорезистивные или пьезоэлектрические.
|
|
| |
exersizze | Дата: Понедельник, 20.01.2014, 23:31 | Сообщение # 6 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
|
в случае с ATMega8, да порты С. акселерометр будет здесь кстати думаю. kip96, ускорение на массу по второму закону и будет сила ;)
|
|
| |
kip96 | Дата: Вторник, 21.01.2014, 00:18 | Сообщение # 7 |
Группа: Свой человек
Сообщений: 170
Статус: Offline
| Ну да. Я про формулу, которая из показаний акселерометра (MMA7361) ускорение выводит. Прикупил такой для управления радиомоделью. Но думаю какой-нить цифровой прикупить.
|
|
| |
podvoynuy | Дата: Пятница, 14.03.2014, 22:51 | Сообщение # 8 |
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Добрый вечер. Вот некоторые наработки в моем устройстве ... Все лепил по материалам:http://www.doneathome.ru/archives/497 http://www.gaw.ru/html.cgi/txt/app/Atmel/memory/at45_to_avr.htm Сделал схемку. Вопрос будет ли работать? Ну и сам код прошивки далее. Жду советов и критики господа. // от источника: http://www.doneathome.ru/#/archives/497 // -Wl,-u,vfprintf -lprintf_flt -lm (подключение дробных чисел)
#define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <stdio.h> void init_adc() //-ініціалізація АЦП { ADMUX = 0b01000000; //выбираем источник питания АЦП ADCSRA|=(1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);// устанавливаем предделитель ADCSRA|=(1 << ADEN);// Включаем АЦП } // Функция запуска преобразования АЦП и чтения результата unsigned int read_adc(unsigned char adc_input) { ADMUX|=0x0E&adc_input; //определяем на какой ножке измеряем V _delay_us(10); // Задержка на установление опорного напряжения ADCSRA |= (1 << ADSC); // Запуск преобразования АЦП while ((ADCSRA & (1 << ADIF))==0);// Ожидание окончания преобразования return ADCW; } int main(void) { init_adc();// инициализируем АЦП } // от источника: (http://www.gaw.ru/html.cgi/txt/app/Atmel/memory/soft.htm) write_to_flash(ADC-0x1D5); // чтение данных, преобразование 8 бит и сохранение во флэш void write_to_flash(unsigned char flash_data) //запис на флеш { static unsigned int buffer_counter; static unsigned int page_counter; unsigned char temp = 0x80; if((ACSR & 0x02)) // если флаг установлен, то новые данные должны быть установлены { buffer_counter = 0; page_counter = 0; // сброс счётчика если должны бытьзаписаны новые данные ACSR &= 0xFD; // очистка флага сигнала } while(!(PINB & 0x02)); // проверказанятости флэша PORTB &= ~DF_CHIP_SELECT; // включение DataFlash SPDR = BUFFER_1_WRITE; while (!(SPSR & temp)); // ожиданиезавершения передачи SPDR = 0x00; // не важно while (!(SPSR & temp)); // ожиданиезавершения передачи SPDR = (char)(buffer_counter>>8); // не важно + первые два бита буфера адреса while (!(SPSR & temp)); // ожидание завершения передачи SPDR = (char)buffer_counter; // буфер адреса (макс. 2^8= 256 страниц) while (!(SPSR & temp)); // ожидание завершения передачи SPDR = flash_data; // запись данныхв регистр данных SPI while (!(SPSR & temp)); // ожиданиезавершения передачи PORTB |= DF_CHIP_SELECT; // выключение DataFlash buffer_counter++; if (buffer_counter > 528) // если буфер заполнен, то его содержимое записывается в страницупамяти { buffer_counter = 0; if (page_counter < 4096) // если память не заполнена { PORTB &= ~DF_CHIP_SELECT; // включить DataFlash SPDR = B1_TO_MM_PAGE_PROG_WITHOUT_ERASE; // записать данные из буфера 1 в страницу while (!(SPSR & temp)); // ожиданиезавершения передачи SPDR = (char)(page_counter>>6); while (!(SPSR & temp)); // ожиданиезавершения передачи SPDR = (char)(page_counter<<2); while (!(SPSR & temp)); // ожидание завершения передачи SPDR = 0x00; // не важно while (!(SPSR & temp)); // ожиданиезавершения передачи PORTB |= DF_CHIP_SELECT; // выключение DataFlash page_counter++; } else } }
|
|
| |