МК - Моторчик - Фотопрерыватель
|
|
Участник
8 сообщений
Мужчина
|
Имеется: - средство разработки TE-Mini168 (ATmega168) - драйвер L293D - щелевой фотопрерыватель BITR9707 (DINT-5200) - программатор KIT BM9010 USB - электродвигатель F280-23100 9.0V (моторчик, на конце прикреплена типа шторка вида X, для датчика) - AVR Studio 5.0 - MathLab - Proteus 7 Professional
Необходимо: - все это дело собрать - написать прошивку: входные данные - для оборотов моторчика, выходные данные - данные с датчика - соединить с MathLab: нужно в зависимости от получаемых данных с датчика, управлять оборотами двигателя
P.S.: Пока что в ISIS запускал простейшую прошивку, написанную мною (впервые этим заниматься начал). Но чувствую что сам не справлюсь, особенно с MathLab. Как связать с MathLab вообще не понял.
Не до конца еще собран, т.к. пока что на стадии написания прошивки, а ее работу проверяю в эмуляторе ISIS. Сейчас вот пытаюсь разобраться с ШИМ сигналом от МК к драйверу. Кто-нибудь может помочь с кодом?
ISIS.zip
(38.4 Kb)
·
AVR.zip
(13.2 Kb)
|
|
|
|
|
Участник
8 сообщений
Мужчина
|
Что делает на данный момент данная прошивка: - В Proteus ждет число в терминале, после ввода начинает крутится с определенной скоростью. - Прошив МК - просто крутится во всю свою мощь, не реагируя на отправляемые в терминал значения.
UPDATE: Теперь работает как и раньше, оказывается программатор каким-то образом клинил МК... Теперь нужно убрать комариный писк при маленьких значениях ШИМ и добавить обработку сигнала ICP...
Code #define F_CPU 16000000UL //частота мк #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 #include <avr/io.h> // общая библиотека #include <avr/iom168.h> // atmega168 #include <util/delay.h> // для паузы: _delay_ms(1); #include <avr/interrupt.h> //Библиотека прерываний //Перечисляем прототипы функций void USART_Init(unsigned int ubrr); //Функция инициализации модуля USART unsigned char USART_Receive( void ); //Функция приема данных по протоколу USART void USART_Transmit(unsigned char data); //Функция передачи данных по протоколу USART unsigned int counter = 0; unsigned int x = 0;
ISR(TIMER1_CAPT_vect) { counter++; // счетчик оборотов if(counter >= 20) { //PORTC |= (1<<LED); // после остановки загорается лампочка USART_Transmit ('L'); } } void pwm_duty(unsigned char duty) { OCR0A = duty; // Timer0 output compare A }
void pwm_init() { TCCR0A = 0b10100011; // Fast PWM 8 Bit, Clear OCA0/OCB0 on Compare Match, Set on TOP TCCR0B = 0b00000011; // Used 64 Prescaler TCNT0 = 0; // Reset TCNT0 OCR0A = 0; // Initial the Output Compare register A & B OCR0B = 0; } int main(void) { DDRD = (1 << PD0)|(1 << PD1); DDRD = _BV(PD5) | _BV(PD6); // "1" DDRB = _BV(PB3); // "1" //DDRC = (1<<PC3); // для лампочки PORTB |= (1<<PB3); PORTD |= (1<<PD5);
// для ICP (16ШИМ + TIMSK): /* TCCR1A = (1 << COM1A1)|(0 << COM1A0)|(1 << WGM11)|(0 << WGM10); TCCR1B = (1 << WGM13)|(1 << WGM12)|(0 << CS12)|(0 << CS11)|(1 << CS10); TCNT1 = 0x00; ICR1 = 0xFF; OCR1A = 0x00; PORTB |= (1<<PB0); TIMSK1 = (1<<ICIE1); */
pwm_init(); USART_Init (MYUBRR); sei(); while (1) { x=USART_Receive(); USART_Transmit(x); pwm_duty(x); } } void USART_Init(unsigned int ubrr) { UBRR0H = (unsigned char)(ubrr>>8); UBRR0L = (unsigned char)ubrr; UCSR0B = (1<<RXEN0)|(1<<TXEN0); UCSR0C = (1<<USBS0)|(3<<UCSZ00); } unsigned char USART_Receive(void) { while ( !(UCSR0A & (1<<RXC0)) ); return UDR0; } void USART_Transmit(unsigned char data) { while ( !( UCSR0A & (1<<UDRE0)) ); UDR0 = data; }
Проект Proteus + AVRStudio: http://rapid.ufanet.ru/8971121
|
|
|
|
|
Участник
16 сообщений
Мужчина
|
Добрый вечер!
Лабораторный стенд собран, не без помощи добрых людей, и работает. Но требуется дороботка. На данный момент электродвигатель (тот же моторчик на 9V) питается как и МК от 5V через USB. И стенд бывает глючит, ШИМ западает, мне сказали, что это скорее всего как раз таки из-за того, что питаю так двигатель. Микросхема L293D питает двигатель от тока приходящего на 8 ножку (рисунок приложил), надо туда подать питание от другого источника. Подскажите, пожалуйста, будет ли работать нормально, если еще от одного USB питать его? Или, не знаю, как-нибудь к розетке приноровить или вообще от батарейки кроны... И как это подключение лучше всего осуществить, какие резисторы нужны будут и тд? Добавлено (27.11.2012, 19:22) --------------------------------------------- Если просто от другого USB запитать, то что-нибудь дополнительно нужно включать, между 8 ножкой L293D и портом USB, дабы к примеру порт USB не словил что-нибудь? Или можно просто банально на прямую?
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Quote (haze) из-за того, что питаю так двигатель. - верно говорят. Ри старте моторов напряжение просаживается и мк перезагружается (reset).
Quote (haze) как это подключение лучше всего осуществить, какие резисторы нужны будут и тд - надо смотреть какие моторчики ? От другого юсб... У них разводка по питанию одна вроде. Можно подать напряжение внешнее от кроны запросто. Минусы общие, а плюс на ножку. Главное ножки не перепутайте какая Vмикросхемы и какая Vмоторов, а то спалите микруху.
|
|
|
|
|
Участник
16 сообщений
Мужчина
|
Quote (S-T-A-L-K-E-R(А)) - надо смотреть какие моторчики ? От другого юсб... У них разводка по питанию одна вроде. Можно подать напряжение внешнее от кроны запросто. Минусы общие, а плюс на ножку. Главное ножки не перепутайте какая Vмикросхемы и какая Vмоторов, а то спалите микруху. Моторчик тот же, что в заголовке, 9V обычный. Мне советовали оптосимистрами как-то, но я сам никак не разберусь с ними, это точно... Наверное тогда просто плюс кроны подключу напрямую к 8 ножке L293D и все =) Интересно, есть ли какая-нибудь деталь, дабы крону можно было легко подсоединять/отсоединять, чтобы не было жесткой связки?..
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Quote (haze) есть ли какая-нибудь деталь, дабы крону можно было легко подсоединять/отсоединять, чтобы не было жесткой связки?.. - да такие есть. Есть боксы куда крону вставляют, и есть "клип-разъем" который с наконечником который подключают к кроне.
|
|
|
|
|
Участник
16 сообщений
Мужчина
|
Quote (S-T-A-L-K-E-R(А)) - да такие есть. Есть боксы куда крону вставляют, и есть "клип-разъем" который с наконечником который подключают к кроне. отлично, тогда завтра съезжу куплю =) спасибо! =)
|
|
|
|
|
Участник
74 сообщений
Мужчина
|
Есть "самодельный" выход: разбираем небольшими плоскогубчиками старую крону (снимаем жестяной корпус, лучше возле шва с нижней стороны кроны схватить и поворотом разорвать шов). Далее отделяем верхнюю площадку от самого элемента, припаиваем к 2 контактам площадки проводочки, и все.
|
|
|
|
|
Участник
16 сообщений
Мужчина
|
Подскажите, пожалуйста, как лучше всего 9 вольт от кроны понизить до 5 вольт? КРЕН 5 использовать, резисторами, диодами?
Quote (asmal95) Есть "самодельный" выход: разбираем небольшими плоскогубчиками старую крону (снимаем жестяной корпус, лучше возле шва с нижней стороны кроны схватить и поворотом разорвать шов). Далее отделяем верхнюю площадку от самого элемента, припаиваем к 2 контактам площадки проводочки, и все. К сожалению, не было старой кроны =) Возможно в следующий раз, там уже будет =)
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Quote (asmal95) "самодельный" выход - точно ! Я же сам так делал ) И забыл ...
|
|
|
|
|
Участник
74 сообщений
Мужчина
|
|
|
|
|
|
Участник
16 сообщений
Мужчина
|
Эх. Перепаял на выходных, теперь от кроны идет питания для моторчика. Но. Как западал ШИМ, так и западает. По ощущениям реже, пока что замечал, что он западает лишь при подключении к USB. Раньше вообще во время использования, слегка подвинешь - все, запал ШИМ. Меня еще что удивляет, так то, что RESET на плате для МК никак не влияет на восстановление, а если на секунду подсоединить к SPI программатор (который сам не подключен ни куда), то сразу же восстанавливается.
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Моторчик крутится без каких-либо изъянов типа трудной прокрутки или рваных вращений, или быстрого замедления... ? Когда рукой ось мотора крутим.
|
|
|
|
|
Участник
16 сообщений
Мужчина
|
Quote (S-T-A-L-K-E-R(А)) Моторчик крутится без каких-либо изъянов типа трудной прокрутки или рваных вращений, или быстрого замедления... ? Когда рукой ось мотора крутим. Без, свободно. Даже если пальцем тормозить, аж почти до полной остановки, все равно работает как обычно. Т.е. нагрузка на моторчик - не влияла ни разу...
|
|
|
|
|