Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 4
  • «
  • 1
  • 2
  • 3
  • 4
Модератор форума: nightmare, Huntswarrior, Aleks_Crow  
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » МК - Моторчик - Фотопрерыватель (*icon-0*)
МК - Моторчик - Фотопрерыватель
Отправлено 20.10.2011 - 18:451
Участник
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)
Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 16.05.2012 - 20:4646
Участник
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


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 27.11.2012 - 19:2247
Участник
16 сообщений
Мужчина
Добрый вечер!

Лабораторный стенд собран, не без помощи добрых людей, и работает. Но требуется дороботка.
На данный момент электродвигатель (тот же моторчик на 9V) питается как и МК от 5V через USB. И стенд бывает глючит, ШИМ западает, мне сказали, что это скорее всего как раз таки из-за того, что питаю так двигатель. Микросхема L293D питает двигатель от тока приходящего на 8 ножку (рисунок приложил), надо туда подать питание от другого источника. Подскажите, пожалуйста, будет ли работать нормально, если еще от одного USB питать его? Или, не знаю, как-нибудь к розетке приноровить или вообще от батарейки кроны... И как это подключение лучше всего осуществить, какие резисторы нужны будут и тд?

Добавлено (27.11.2012, 19:22)
---------------------------------------------
Если просто от другого USB запитать, то что-нибудь дополнительно нужно включать, между 8 ножкой L293D и портом USB, дабы к примеру порт USB не словил что-нибудь? Или можно просто банально на прямую?



Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3417 сообщений
Мужчина
Quote (haze)
из-за того, что питаю так двигатель.

- верно говорят. Ри старте моторов напряжение просаживается и мк перезагружается (reset).

Quote (haze)
как это подключение лучше всего осуществить, какие резисторы нужны будут и тд

- надо смотреть какие моторчики ? От другого юсб... У них разводка по питанию одна вроде. Можно подать напряжение внешнее от кроны запросто. Минусы общие, а плюс на ножку. Главное ножки не перепутайте какая Vмикросхемы и какая Vмоторов, а то спалите микруху. kind


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 29.11.2012 - 16:1649
Участник
16 сообщений
Мужчина
Quote (S-T-A-L-K-E-R(А))
- надо смотреть какие моторчики ? От другого юсб... У них разводка по питанию одна вроде. Можно подать напряжение внешнее от кроны запросто. Минусы общие, а плюс на ножку. Главное ножки не перепутайте какая Vмикросхемы и какая Vмоторов, а то спалите микруху.

Моторчик тот же, что в заголовке, 9V обычный. Мне советовали оптосимистрами как-то, но я сам никак не разберусь с ними, это точно... Наверное тогда просто плюс кроны подключу напрямую к 8 ножке L293D и все =) Интересно, есть ли какая-нибудь деталь, дабы крону можно было легко подсоединять/отсоединять, чтобы не было жесткой связки?..


Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3417 сообщений
Мужчина
Quote (haze)
есть ли какая-нибудь деталь, дабы крону можно было легко подсоединять/отсоединять, чтобы не было жесткой связки?..

- да такие есть. Есть боксы куда крону вставляют, и есть "клип-разъем" который с наконечником который подключают к кроне.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 30.11.2012 - 14:5951
Участник
16 сообщений
Мужчина
Quote (S-T-A-L-K-E-R(А))
- да такие есть. Есть боксы куда крону вставляют, и есть "клип-разъем" который с наконечником который подключают к кроне.

отлично, тогда завтра съезжу куплю =) спасибо! =)


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 30.11.2012 - 15:3852
Участник
74 сообщений
Мужчина
Есть "самодельный" выход: разбираем небольшими плоскогубчиками старую крону (снимаем жестяной корпус, лучше возле шва с нижней стороны кроны схватить и поворотом разорвать шов). Далее отделяем верхнюю площадку от самого элемента, припаиваем к 2 контактам площадки проводочки, и все.


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 05.12.2012 - 14:2453
Участник
16 сообщений
Мужчина
Подскажите, пожалуйста, как лучше всего 9 вольт от кроны понизить до 5 вольт? КРЕН 5 использовать, резисторами, диодами?

Quote (asmal95)
Есть "самодельный" выход: разбираем небольшими плоскогубчиками старую крону (снимаем жестяной корпус, лучше возле шва с нижней стороны кроны схватить и поворотом разорвать шов). Далее отделяем верхнюю площадку от самого элемента, припаиваем к 2 контактам площадки проводочки, и все.

К сожалению, не было старой кроны =) Возможно в следующий раз, там уже будет =)


Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3417 сообщений
Мужчина
Quote (asmal95)
"самодельный" выход

- точно ! Я же сам так делал ) И забыл ...


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 05.12.2012 - 15:5555
Участник
74 сообщений
Мужчина
Quote (haze)
как лучше всего 9 вольт от кроны понизить до 5 вольт?

Да, крен5А (не 5б - он на 6 вольт) или его зарубежным аналогом 7805. я пользуюсь такой схемкой: http://newrobots-world.servodroid.ru/publ/mt_8/stabilizator/8-1-0-49


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 10.12.2012 - 16:2756
Участник
16 сообщений
Мужчина
Эх. Перепаял на выходных, теперь от кроны идет питания для моторчика. Но. Как западал ШИМ, так и западает. По ощущениям реже, пока что замечал, что он западает лишь при подключении к USB. Раньше вообще во время использования, слегка подвинешь - все, запал ШИМ. Меня еще что удивляет, так то, что RESET на плате для МК никак не влияет на восстановление, а если на секунду подсоединить к SPI программатор (который сам не подключен ни куда), то сразу же восстанавливается.


Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3417 сообщений
Мужчина
Моторчик крутится без каких-либо изъянов типа трудной прокрутки или рваных вращений, или быстрого замедления... ? Когда рукой ось мотора крутим.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 10.12.2012 - 17:4358
Участник
16 сообщений
Мужчина
Quote (S-T-A-L-K-E-R(А))
Моторчик крутится без каких-либо изъянов типа трудной прокрутки или рваных вращений, или быстрого замедления... ? Когда рукой ось мотора крутим.

Без, свободно. Даже если пальцем тормозить, аж почти до полной остановки, все равно работает как обычно. Т.е. нагрузка на моторчик - не влияла ни разу...


Профиль Личное сообщение Дом. страница icq Skype
0
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » МК - Моторчик - Фотопрерыватель (*icon-0*)
  • Страница 4 из 4
  • «
  • 1
  • 2
  • 3
  • 4
Поиск: