123
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 4«1234»
Модератор форума: 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(38Kb) · AVR.zip(13Kb)
Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 22.10.2011 - 00:3316
Модераторы
174 сообщений
Мужчина
Как опрашивать оптопару - пожалуй лучшим решением будет подключение оптопары к аналоговому компаратору МК, для этого на один вход компаратора подаем постоянное опорное напряжение, к другому входу подключаем оптопару. Как именно - зависит от типа ответной части оптопары (фоторезистор, фототранзистор, фотодиод). Таким образом, при мелькании шторки в просвете, в программе нижнего уровня будут вызываться прерывания, и тем чаще, чем быстрее вращается вал двигателя. Если шторка имеет одну непрозрачную секцию то прерывание будет вызываться с каждым оборотом вала двигателя, две секции - два раза за один оборот и т.д. Одним из вариантов обработчика этого прерывания будет инкремент переменной-счетчика. Опрашивая значение этой переменной, например, раз в секунду мы можем судить о том, сколько оборотов совершил вал за эту секунду. После каждого опроса счетчик надо обнулять. В реальности, конечно же, частоту опроса переменной-счетчика стоит брать выше, дабы избежать ее переполнения. Для двигателя с максимальной частотой 500 оборотов/сек и одной непрозрачной секцией на шторке достаточно проводить опрос дважды в секунду.

Плюс такого решения - прерывание 0х017 имеет низкий приоритет и не помешает обработке остальных прерываний.
Несмотря на это, даже если оно не будет обработанно десяток раз из-за обработки других более приорететных прерываний, это не повлияет на общий результат измерений в значительной степени.


Arduino - это зло!
Профиль Личное сообщение Дом. страница icq Skype
7
Отправлено 17.11.2011 - 20:5917
Начальная группа
7 сообщений
Мужчина
Сделал наконец-то ШИМ

ISIS:


Код:
Code

#define F_CPU 1000000UL //частота мк 8 гц
#include <avr/io.h> // общая библиотека
#include <avr/iom168.h> // atmega168
#include <util/delay.h> // для паузы: _delay_ms(1);
int main(void)
{
// "0" на ножку PD0 - обороты увеличиваются, на ножку PD1 - обороты уменьшаются
unsigned int i=0;

// порты ввода-вывода:
PORTB = 0x00;
DDRB = (1 << PB1);
PORTD = (1 << PD0)|(1 << PD1);
DDRD = 0x00;

// ШИМ, режим FAST PWM:
TCCR1A = (1 << COM1A1)|(0 << COM1A0)|(1 << WGM11)|(0 << WGM10);
TCCR1B = (1 << WGM13)|(1 << WGM12)|(0 << CS12)|(0 << CS11)|(1 << CS10);
TCNT1 = 0x00; // начальная установка счетчика
ICR1 = 0xFF; // задаем период ШИМ = 255
OCR1A = 0x00; // начальный коэффициент заполнения ШИМ

// основной цикл:
while(1){
if((PIND&(1 << PD0)) == 0) //если кнопка "больше" нажата
{if (i < 254){ // коэффициент заполнения ШИМ изменяется от 0 до 255
i++;    // увеличиваем i на единицу
OCR1A = i; // записываем переменную в регистр сравнения
_delay_ms(10); // задержка
}
}
if((PIND&(1 << PD1)) == 0) //если кнопка "меньше" нажата
{if (i > 0) // коэффициент заполнения ШИМ изменяется от 255 до 0
{i--; // уменьшаем i на единицу
OCR1A = i; // записываем переменную в регистр сравнения
_delay_ms(10); // задерПрошу помощи}}}


Сейчас:
- фотодачик! самое проблемное! помогите его подключить, пожалуйста!
- нужно перевести управление с кнопок на управление с ПК... порты miniUSB - USB (на пк), можно эмулятор COM-кий поставить...


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 17.11.2011 - 21:1718
Начальная группа
1798 сообщений
Мужчина
Попозже с компаратором помогу.
Вот тут что-то странное:
Code
#define F_CPU 1000000UL //частота мк 8 гц


Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 17.11.2011 - 21:2419
Начальная группа
7 сообщений
Мужчина
Quote (nightmare)
Попозже с компаратором помогу.
Вот тут что-то странное:
#define F_CPU 1000000UL //частота мк 8 гц

ага, тоже обратил внимание, когда вставлял код... я его как когда-то вбил, так и не менял, только внутри цикла все сидел... надо будет разобраться с этим местом)

спасибо, буду ждать)


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 17.11.2011 - 21:3220
Начальная группа
1798 сообщений
Мужчина
Там частота 1 Мгц, вместо 8 Гц (такого быть не может вообще).
Коментарий неверный.


Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 17.11.2011 - 23:5521
Начальная группа
1798 сообщений
Мужчина
В архиве модель для протеуса, прошивка, исходник прошивки и проект для AVR Studio 5.
Моторчик совершает 25 оборотов и останавливается.
Счетчик оборотов - переменая count.
Т.к. прерывание происходит по перепаду уровня, то чтобы моторчик навертел 25 оборотов его надо остановить тогда, когда в переменной counter будет число, равное количеству оборотов умножить на два.
Амплитуда импульсов на выходе с оптопары должна быть не менее 2.5 в, лучше больше (для уверенности).
Логический ноль - это напряжение от 0 до 1,3 В, а логическая единица – от 1,8 до 5 В.


Прикрепление
Hazze.rar(56Kb)
Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 18.11.2011 - 18:0822
Начальная группа
7 сообщений
Мужчина
nightmare здорово! спасибо огромное!!!

А вот это:

CRYSTAL идет на ножки PB6/XTAL1 и PB7/XTAL2 - этот момент не понял) это от ПК (crystal) на МК идет туда? или что-то другое?

сейчас сижу и читаю про внешние прерывания..


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 18.11.2011 - 18:3023
Начальная группа
1798 сообщений
Мужчина
Это кварцевый резонатор, деталька такая, от него мега тактируется. Поставил его, т.к. не нашел в свойствах в списке источников тактирования внутреннюю RC цепочку на 1 МГц.

PS: Нешел на 8 Мгц и фьюз CKDIV8.


Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 18.11.2011 - 18:4224
Начальная группа
7 сообщений
Мужчина
Quote (nightmare)
Это кварцевый резонатор, деталька такая, от него мега тактируется. Поставил его, т.к. не нашел в свойствах в списке источников тактирования внутреннюю RC цепояку на 1 МГц.

Это WatchDog Timer (сторожевой таймер) в свойствах МК в ISIS который? А об этом мне необходимо беспокоиться или это только для ISIS было необходимо?

Кажется мне остается только организовать ввод в МК значения переменной i для ШИМа и вывод с МК значения count от фотодачика)


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 18.11.2011 - 19:2825
Начальная группа
1798 сообщений
Мужчина
Quote
Это WatchDog Timer (сторожевой таймер) в свойствах МК в ISIS который?

WatchDog здесь вообще не причем.
Quote
А об этом мне необходимо беспокоиться или это только для ISIS было необходимо?

Если хотите, чтобы UART надежно работал, то нужно.


Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 18.11.2011 - 20:1826
Начальная группа
7 сообщений
Мужчина
аа, понятно)) хорошо, тогда куплю, а какой взять? любой с 20pF?


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 18.11.2011 - 21:4927
Начальная группа
1798 сообщений
Мужчина
Кварц возьмите на 8 Мгц, вдруг кварца на 1 Мгц не хватит.
Конденсаторы керамические емкостью от 12 до 20 Пф


Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 21.11.2011 - 15:0528
Начальная группа
7 сообщений
Мужчина
Quote (nightmare)
Кварц возьмите на 8 Мгц, вдруг кварца на 1 Мгц не хватит.
Конденсаторы керамические емкостью от 12 до 20 Пф

понял =) спасибо =)

Добавлено (21.11.2011, 15:05)
---------------------------------------------
nightmare:
- Задумался о том что пора паять и до меня дошло, что я не в курсе к каким ножкам соединять датчик...




- И вопрос по передачи данных об оборотах и приеме данных для управления оборотами: по данному примеру можно реализовать или я не то читаю?


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 21.11.2011 - 17:4629
Начальная группа
1798 сообщений
Мужчина
Где какие ножки посмотрите мультиметром.
Связь с компом можно и по тому примеру сделать (не важно как), но логичнее использовать UART, тем более на плате, что на картинке он через переходник уже выведен на разъем mini-usb, какой смысл что-то с SPI городить?


Профиль Личное сообщение Дом. страница icq Skype
37
Отправлено 21.11.2011 - 18:0830
Начальная группа
7 сообщений
Мужчина
Quote (nightmare)
Где какие ножки посмотрите мультиметром.
Связь с компом можно и по тому примеру сделать (не важно как), но логичнее использовать UART, тем более на плате, что на картинке он через переходник уже выведен на разъем mini-usb, какой смысл что-то с SPI городить?

понятно
просто тот пример с SPI был простым и понятным, а с UART, из тех что читал, не разобрался.. Значит UART)


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