МК - Моторчик - Фотопрерыватель
|
|
Участник
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)
|
|
|
|
|
Модераторы
174 сообщений
Мужчина
|
Как опрашивать оптопару - пожалуй лучшим решением будет подключение оптопары к аналоговому компаратору МК, для этого на один вход компаратора подаем постоянное опорное напряжение, к другому входу подключаем оптопару. Как именно - зависит от типа ответной части оптопары (фоторезистор, фототранзистор, фотодиод). Таким образом, при мелькании шторки в просвете, в программе нижнего уровня будут вызываться прерывания, и тем чаще, чем быстрее вращается вал двигателя. Если шторка имеет одну непрозрачную секцию то прерывание будет вызываться с каждым оборотом вала двигателя, две секции - два раза за один оборот и т.д. Одним из вариантов обработчика этого прерывания будет инкремент переменной-счетчика. Опрашивая значение этой переменной, например, раз в секунду мы можем судить о том, сколько оборотов совершил вал за эту секунду. После каждого опроса счетчик надо обнулять. В реальности, конечно же, частоту опроса переменной-счетчика стоит брать выше, дабы избежать ее переполнения. Для двигателя с максимальной частотой 500 оборотов/сек и одной непрозрачной секцией на шторке достаточно проводить опрос дважды в секунду.
Плюс такого решения - прерывание 0х017 имеет низкий приоритет и не помешает обработке остальных прерываний. Несмотря на это, даже если оно не будет обработанно десяток раз из-за обработки других более приорететных прерываний, это не повлияет на общий результат измерений в значительной степени.
|
|
|
|
|
Начальная группа
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-кий поставить...
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Попозже с компаратором помогу. Вот тут что-то странное: Code #define F_CPU 1000000UL //частота мк 8 гц
|
|
|
|
|
Начальная группа
7 сообщений
Мужчина
|
Quote (nightmare) Попозже с компаратором помогу. Вот тут что-то странное: #define F_CPU 1000000UL //частота мк 8 гц ага, тоже обратил внимание, когда вставлял код... я его как когда-то вбил, так и не менял, только внутри цикла все сидел... надо будет разобраться с этим местом)
спасибо, буду ждать)
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Там частота 1 Мгц, вместо 8 Гц (такого быть не может вообще). Коментарий неверный.
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
В архиве модель для протеуса, прошивка, исходник прошивки и проект для AVR Studio 5. Моторчик совершает 25 оборотов и останавливается. Счетчик оборотов - переменая count. Т.к. прерывание происходит по перепаду уровня, то чтобы моторчик навертел 25 оборотов его надо остановить тогда, когда в переменной counter будет число, равное количеству оборотов умножить на два. Амплитуда импульсов на выходе с оптопары должна быть не менее 2.5 в, лучше больше (для уверенности). Логический ноль - это напряжение от 0 до 1,3 В, а логическая единица – от 1,8 до 5 В.
Hazze.rar
(55.9 Kb)
|
|
|
|
|
Начальная группа
7 сообщений
Мужчина
|
nightmare здорово! спасибо огромное!!!
А вот это: CRYSTAL идет на ножки PB6/XTAL1 и PB7/XTAL2 - этот момент не понял) это от ПК (crystal) на МК идет туда? или что-то другое?
сейчас сижу и читаю про внешние прерывания..
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Это кварцевый резонатор, деталька такая, от него мега тактируется. Поставил его, т.к. не нашел в свойствах в списке источников тактирования внутреннюю RC цепочку на 1 МГц.
PS: Нешел на 8 Мгц и фьюз CKDIV8.
|
|
|
|
|
Начальная группа
7 сообщений
Мужчина
|
Quote (nightmare) Это кварцевый резонатор, деталька такая, от него мега тактируется. Поставил его, т.к. не нашел в свойствах в списке источников тактирования внутреннюю RC цепояку на 1 МГц. Это WatchDog Timer (сторожевой таймер) в свойствах МК в ISIS который? А об этом мне необходимо беспокоиться или это только для ISIS было необходимо?
Кажется мне остается только организовать ввод в МК значения переменной i для ШИМа и вывод с МК значения count от фотодачика)
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Quote Это WatchDog Timer (сторожевой таймер) в свойствах МК в ISIS который? WatchDog здесь вообще не причем. Quote А об этом мне необходимо беспокоиться или это только для ISIS было необходимо? Если хотите, чтобы UART надежно работал, то нужно.
|
|
|
|
|
Начальная группа
7 сообщений
Мужчина
|
аа, понятно)) хорошо, тогда куплю, а какой взять? любой с 20pF?
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Кварц возьмите на 8 Мгц, вдруг кварца на 1 Мгц не хватит. Конденсаторы керамические емкостью от 12 до 20 Пф
|
|
|
|
|
Начальная группа
7 сообщений
Мужчина
|
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Где какие ножки посмотрите мультиметром. Связь с компом можно и по тому примеру сделать (не важно как), но логичнее использовать UART, тем более на плате, что на картинке он через переходник уже выведен на разъем mini-usb, какой смысл что-то с SPI городить?
|
|
|
|
|
Начальная группа
7 сообщений
Мужчина
|
Quote (nightmare) Где какие ножки посмотрите мультиметром. Связь с компом можно и по тому примеру сделать (не важно как), но логичнее использовать UART, тем более на плате, что на картинке он через переходник уже выведен на разъем mini-usb, какой смысл что-то с SPI городить? понятно просто тот пример с SPI был простым и понятным, а с UART, из тех что читал, не разобрался.. Значит UART)
|
|
|
|
|