Описание: Хочу рабобраться с ШИМ. |
Поиск в теме | Версия для печати |
СКАЗОЧНИК |
Отправлено: 04 Марта, 2010 - 09:57:52
|

Главнокомандующий

Сообщений всего: 377
Дата рег-ции: Нояб. 2009
|
Прошу прощения... Схема вот:
(Добавление)
Не показаны фильтрующие кондеры.
Про датчики….
Просто датчик при закрытой шторке выдавал полный логический «0» = 0 Вольт, а при открытой шторке выдавал полный логический «1» = 4,5 Вольта. Схем как подключить такую штуку к МК не нашел, там везде кнопки и фотодиоды подключают на массу. Поэтому пришлось впаять пару транзисторов и резисторов. КТ315 – это те, которые под рукой оказались. Сразу скажу, после прошивки все работало, пока не подключил моторы. Тогда программа работала как ей было угодно. Причина оказалась простая – не достаточно подтягивающих резисторов на входе МК, подключил внешние, все отлично заработало.
Просто ИК бампер не ставил, ибо не эффективен (я так думаю).
И вот моя программа. Сильно не пугайтесь я просто значения перевел в 16-ричную систему и сразу присваивал на порт. =) Так меньше места на экране занимало. Советую, если что, пользоваться Виндовозным калькулятором, например у меня на Винде 7 есть возможность включить просто калькулятор, а если посмотреть в настройках, то там есть еще и инженерный и калькулятор для программистов, он очень удобно переводит из одной системы счисления в другую.
/**************************************************
Программа управления роботом с двумя ведущими моторами
Передний бампер с оптическими датчиками
Дата: 26 февраля 2010 года версия 1.05
**************************************************/
// Указать на какой частоте работает МК в Гц
#define F_CPU 8000000UL // Частота 8 MHz
#include <avr/io.h> // библиотека I/O
#include <util/delay.h> // библиотеки пауз
int main(void)
{
DDRD = 0x00; // все выводы порта D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех выводах порта D,
// включаем подтягивающие резисторы
DDRC = 0x3C;
while (!0) { // Бесконечный цикл
// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКOB
if (!(PIND & (1<<PIND6))) // проверить "0" на линии 6 порта D
{
PORTC = 0X3C; // STOP
_delay_ms(200); // Пауза
PORTC = 0X14; // назад
_delay_ms(100); // Пауза
PORTC = 0X3C; // STOP
_delay_ms(100); // Пауза
PORTC = 0X24; // RIGHT
_delay_ms(40); // Пауза
PORTC = 0X3C; // STOP
_delay_ms(100); // Пауза
}
if (!(PIND & (1<<PIND7))) // проверить "0" на линии 7 порта D
{
PORTC = 0X3C; // STOP
_delay_ms(200); // Пауза
PORTC = 0X14; // назад
_delay_ms(100); // Пауза
PORTC = 0X3C; // STOP
_delay_ms(100); // Пауза
PORTC = 0X18; // LEFT
_delay_ms(40); // Пауза
PORTC = 0X3C; // STOP
_delay_ms(100); // Пауза
}
PORTC = 0X28; // START
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы
А вопрос у меня такой…. =) Я только начал разбираться в АВРках, поэтому мало знаю, хотя стараюсь прочитать все, что с ними связано и литературы валом, однако, можете просто объяснить, можно ли в моей схеме управлять ШИМ на микросхему Л293ДНЕ и пример программного кода. Какой таймер включить, как организовать.
Я потом в Протеусе смоделирую и осциллограф подключу.
Просто смысл в том, что у меня один редуктор быстрее немного работает, чем другой, а хочется, чтобы робот ехал прямо. Видел интересные выдумки, где на колесе рисуют белые полосы, а ИК схема считывает скорость вращения колеса и корректирует ШИМ.
Спасибо за то, что прочитали…
С уважением, СКАЗОЧНИК. Прикреплено изображение
|
|
|
|
Поиск в теме | Версия для печати |
Страниц (1): [1] |
« Электронная мастерская » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
  |
|
|
|