[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
устройство для измерения силы удара.
podvoynuyДата: Понедельник, 20.01.2014, 20:00 | Сообщение # 1
Группа: Пользователи
Сообщений: 3

Статус: Offline
Здравствуйте все форумчане! Май нейм ис Николай.  Я только начал заниматься МК и увлекся. Хочу собрать устройство для измерения силы удара. Принцип действия в моем понимании:
Сигнал от датчика в милливольтах через усилитель идет на ножку МК а именно к АЦП. После преобразования сигнала в аналоговый, значеня сохраняется на подключенную флешку (не знаю хватит ли встроенной памяти МК...  поэтому наверняка буду подключать флешку). Устройство в корпусе из стеклопластика см.. фото. Проблема № 1 как подключить к одному входу в АЦП шесть датчиков? Именно столько нужно их. Пока выкладываю фото, но буду дополнять инфой.

буду благодарен за комментарии и критику!
Прикрепления: 7047518.jpg (71.4 Kb)




Сообщение отредактировал 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
Блин, ну только сегодня такая идея возникла! Ну вот, говорят мысли блуждают, а не приходят.
Вообщем у меня несколько другая идея. Использовать акселерометр. Т.к.  у меня груша (которую нельзя скушать)  tommy  , засунуть в неё Акселерометр. Зная вес груши, и ускорение, которое мы ей придадим, можно вычислить силу удара. Осталось формулу найти.;)


 
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
}
}
Прикрепления: 1137932.gif (6.0 Kb)


 
  • Страница 1 из 1
  • 1
Поиск: