Оглавление:

Микроконтроллер AVR. Широтно-импульсная модуляция. Контроллер двигателя постоянного тока и яркости светодиода: 6 ступеней
Микроконтроллер AVR. Широтно-импульсная модуляция. Контроллер двигателя постоянного тока и яркости светодиода: 6 ступеней

Видео: Микроконтроллер AVR. Широтно-импульсная модуляция. Контроллер двигателя постоянного тока и яркости светодиода: 6 ступеней

Видео: Микроконтроллер AVR. Широтно-импульсная модуляция. Контроллер двигателя постоянного тока и яркости светодиода: 6 ступеней
Видео: ШИМ на Attiny 13, AVR, CodeVisionAvr 2024, Ноябрь
Anonim
Image
Image

Всем привет!

Широтно-импульсная модуляция (ШИМ) - очень распространенный метод в телекоммуникациях и управлении мощностью. он обычно используется для управления мощностью, подаваемой на электрическое устройство, будь то двигатель, светодиод, динамики и т. д. Это в основном метод модуляции, в котором ширина несущего импульса изменяется в соответствии с сигналом аналогового сообщения..

Мы делаем простую электрическую схему для управления скоростью вращения двигателя постоянного тока в зависимости от силы света. Мы собираемся использовать светозависимый резистор и функции микроконтроллера AVR, такие как аналого-цифровое преобразование, для измерения интенсивности света. Также мы собираемся использовать Dual H-Bridge Motor Driver Module-L298N. Обычно он используется для управления скоростью и направлением двигателей, но может использоваться и для других проектов, например для управления яркостью определенных световых проектов. Также в нашу схему добавлена кнопка для переключения направления вращения двигателя.

Шаг 1: Описание

Описание
Описание
Описание
Описание

У каждого тела в этом мире есть некоторая инерция. Двигатель вращается при каждом включении. Как только он выключится, он остановится. Но это не прекращается сразу, на это нужно время. Но прежде чем он полностью остановится, он снова включается! Таким образом, он начинает двигаться. Но даже сейчас для достижения полной скорости требуется некоторое время. Но прежде чем это произойдет, его отключают и так далее. Таким образом, общий эффект этого действия заключается в том, что двигатель вращается непрерывно, но с меньшей скоростью.

Широтно-импульсная модуляция (ШИМ) - это сравнительно недавний метод переключения мощности для обеспечения промежуточного количества электроэнергии между полностью включенным и полностью выключенным уровнями. Обычно цифровые импульсы имеют одинаковый период времени включения и выключения, но в некоторых ситуациях нам нужно, чтобы у цифрового импульса было больше / меньше времени включения / выключения. В методе ШИМ мы создаем цифровые импульсы с неравным количеством включенного и выключенного состояния, чтобы получить требуемые промежуточные значения напряжения.

Рабочий цикл определяется процентом длительности высокого напряжения в полном цифровом импульсе. Его можно рассчитать по:

% рабочего цикла = T вкл / T (время периода) x 100

Возьмем постановку проблемы. Нам нужно сгенерировать сигнал PWM 50 Гц с рабочим циклом 45%.

Частота = 50 Гц

Период времени, T = T (вкл.) + T (выкл.) = 1/50 = 0,02 с = 20 мс

Рабочий цикл = 45%

Таким образом, решая согласно приведенному выше уравнению, мы получаем

T (вкл.) = 9 мс

T (выкл.) = 11 мс

Шаг 2: Таймеры AVR - режим ШИМ

Таймеры AVR - режим PWM
Таймеры AVR - режим PWM
Таймеры AVR - режим PWM
Таймеры AVR - режим PWM

Для создания ШИМ AVR содержит отдельное оборудование! Используя это, ЦП инструктирует аппаратное обеспечение производить ШИМ определенного рабочего цикла. ATmega328 имеет 6 выходов ШИМ, 2 из которых расположены на таймере / счетчике 0 (8 бит), 2 - на таймере / счетчике 1 (16 бит) и 2 - на таймере / счетчике 2 (8 бит). Timer / Counter0 - простейшее устройство ШИМ на ATmega328. Timer / Counter0 может работать в 3-х режимах:

  • Быстрая ШИМ
  • ШИМ с коррекцией фазы и частоты
  • ШИМ с фазовой коррекцией

каждый из этих режимов может быть инвертированным или неинвертированным.

Инициализировать Timer0 в режиме PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - настроить WGM: Fast PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - установить режим сравнения выходов A, B

TCCR0B | = (1 << CS02) - установить таймер с предварительным делителем = 256

Шаг 3: Измерение интенсивности света - АЦП и LDR

Измерение интенсивности света - АЦП и LDR
Измерение интенсивности света - АЦП и LDR
Измерение интенсивности света - АЦП и LDR
Измерение интенсивности света - АЦП и LDR
Измерение интенсивности света - АЦП и LDR
Измерение интенсивности света - АЦП и LDR

Светозависимый резистор (LDR) - это преобразователь, который меняет свое сопротивление, когда свет падает на его поверхность.

LDR изготавливаются из полупроводниковых материалов, что обеспечивает им светочувствительные свойства. Эти LDR или ФОТОРЕЗИСТОРЫ работают по принципу «фотопроводимости». Этот принцип говорит о том, что всякий раз, когда свет падает на поверхность LDR (в данном случае), проводимость элемента увеличивается или, другими словами, сопротивление LDR уменьшается, когда свет падает на поверхность LDR. Это свойство уменьшения сопротивления для LDR достигается благодаря тому, что это свойство полупроводникового материала, используемого на поверхности. LDR в большинстве случаев используются для обнаружения наличия света или для измерения интенсивности света.

Для передачи внешней непрерывной информации (аналоговой информации) в цифровую / вычислительную систему мы должны преобразовать их в целые (цифровые) значения. Этот тип преобразования выполняется аналого-цифровым преобразователем (АЦП). Процесс преобразования аналогового значения в цифровое значение известен как аналого-цифровое преобразование. Короче говоря, аналоговые сигналы - это сигналы реального мира вокруг нас, такие как звук и свет.

Цифровые сигналы представляют собой аналоговые эквиваленты в цифровом или числовом формате, которые хорошо понимаются цифровыми системами, такими как микроконтроллеры. АЦП - одно из таких аппаратных средств, которое измеряет аналоговые сигналы и выдает цифровой эквивалент того же сигнала. Микроконтроллеры AVR имеют встроенное средство АЦП для преобразования аналогового напряжения в целое число. AVR преобразует его в 10-битное число от 0 до 1023.

Мы используем аналого-цифровое преобразование уровня напряжения из схемы делителя с LDR для измерения силы света.

Инициализировать АЦП:

TADCSRA | = (1 << ADEN) - Включить АЦП

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - установить предделитель АЦП = 128

ADMUX = (1 << REFS0) - установить эталон напряжения = AVCC; - установить Input Channel = ADC0

Посмотрите видео с подробным описанием микроконтроллера ADC AVR: AVR Microcontroller. Измерение интенсивности света. АЦП и LDR

Шаг 4: Контроллер двигателя постоянного тока и модуль драйвера двигателя с двойным Н-мостом-L298N

Контроллер двигателя постоянного тока и модуль драйвера двигателя с двойным Н-мостом-L298N
Контроллер двигателя постоянного тока и модуль драйвера двигателя с двойным Н-мостом-L298N
Контроллер двигателя постоянного тока и модуль драйвера двигателя с двумя Н-мостами-L298N
Контроллер двигателя постоянного тока и модуль драйвера двигателя с двумя Н-мостами-L298N
Контроллер двигателя постоянного тока и модуль драйвера двигателя с двойным Н-мостом-L298N
Контроллер двигателя постоянного тока и модуль драйвера двигателя с двойным Н-мостом-L298N

Мы используем драйверы двигателей постоянного тока, потому что микроконтроллеры в целом не могут выдавать ток не более 100 миллиампер. Микроконтроллеры умные, но не сильные; Этот модуль добавит микроконтроллерам немного мускулов для управления двигателями постоянного тока большой мощности. Он может управлять 2 двигателями постоянного тока одновременно до 2 ампер каждый или одним шаговым двигателем. Мы можем контролировать скорость с помощью ШИМ, а также направление вращения двигателей. Также он используется для управления яркостью светодиодной ленты.

Описание пина:

Порт OUT1 и OUT2, предназначенный для подключения двигателя постоянного тока. OUT3 и OUT4 для подключения светодиодной ленты.

ENA и ENB являются контактами включения: подключая ENA к высокому уровню (+ 5 В), он включает порт OUT1 и OUT2.

Если вы подключите контакт ENA к низкому уровню (GND), он отключит OUT1 и OUT2. Аналогично для ENB и OUT3 и OUT4.

IN1 - IN4 - это входные контакты, которые будут подключены к AVR.

Если IN1-высокий (+ 5V), IN2-низкий (GND), OUT1 становится высоким, а OUT2 становится низким, таким образом мы можем управлять двигателем.

Если IN3-высокий (+ 5V), IN4-низкий (GND), OUT4 становится высоким, а OUT3 становится низким, таким образом, светодиодная лента горит.

Если вы хотите изменить направление вращения двигателя, просто поменяйте полярность IN1 и IN2, аналогично для IN3 и IN4.

Подавая сигнал PWM на ENA и ENB, вы можете управлять скоростью двигателей на двух разных выходных портах.

Плата может принимать номинальное напряжение от 7 В до 12 В.

Перемычки: есть три перемычки; Перемычка 1: если вашему двигателю требуется питание более 12 В, необходимо отключить перемычку 1 и подать желаемое напряжение (макс. 35 В) на клемму 12 В. Принесите еще один источник питания 5 В и вход на клемму 5 В. Да, вам необходимо ввести 5 В, если вам нужно подать напряжение более 12 В (когда перемычка 1 снята).

Вход 5 В предназначен для правильного функционирования ИС, поскольку снятие перемычки отключит встроенный регулятор 5 В и защитит от более высокого входного напряжения с клеммы 12 В.

Клемма 5 В действует как выход, если напряжение питания составляет от 7 до 12 В, и действует как вход, если вы подаете напряжение более 12 В и перемычку убираете.

Перемычка 2 и перемычка 3: если вы удалите эти две перемычки, вам нужно будет ввести сигнал включения и отключения с микроконтроллера, большинство пользователей предпочитают удалить две перемычки и подать сигнал с микроконтроллера.

Если вы оставите две перемычки, выходы OUT1 на OUT4 будут всегда включены. Помните перемычку ENA для OUT1 и OUT2. Перемычка ENB для OUT3 и OUT4.

Шаг 5: Написание кода для программы на C. Загрузка файла HEX во флэш-память микроконтроллера

Написание и сборка приложения микроконтроллера AVR на языке C с использованием интегрированной платформы разработки - Atmel Studio.

#ifndef F_CPU # define F_CPU 16000000UL // сообщение частоты кристалла контроллера (16 МГц AVR ATMega328P) #endif

#include // заголовок для включения управления потоком данных по контактам. Определяет контакты, порты и т. Д. #Include // заголовок для включения функции задержки в программе

#define BUTTON1 2 // кнопочный переключатель, подключенный к контакту 2 порта B #define DEBOUNCE_TIME 25 // время ждать, пока кнопка "de-bouncing" #define LOCK_INPUT_TIME 300 // время ждать после нажатия кнопки

// Timer0, PWM Initialization void timer0_init () {// настраиваем таймер OC0A, вывод OC0B в режим переключения и режим CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // устанавливаем таймер с предварительным делителем = 256 TCCR0B | = (1 << CS02); // инициализируем счетчик TCNT0 = 0; // инициализировать значение сравнения OCR0A = 0; }

// Инициализация АЦП void ADC_init () {// Включить АЦП, частота дискретизации = osc_freq / 128 устанавливает предделитель на максимальное значение, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Выбираем опорное напряжение (AVCC)

// Состояние переключателя кнопки unsigned char button_state () {

/ * кнопка нажата, когда бит BUTTON1 сброшен * /

если (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

если (! (PINB & (1 <

}

возврат 0;

}

// Инициализация портов void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2 - КНОПКА ПРЯМОГО ПОРТА B = 0b00010110;

DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Устанавливаем все выводы PORTC на низкий уровень, что выключает его. }

// Эта функция считывает значение аналого-цифрового преобразования. uint16_t get_LightLevel () {_delay_ms (10); // Подождите некоторое время, пока канал не будет выбран ADCSRA | = (1 << ADSC); // Запускаем преобразование АЦП, устанавливая бит ADSC. Запишите 1 в ADSC

в то время как (ADCSRA & (1 << ADSC)); // Дождемся завершения преобразования

// До тех пор ADSC снова становится 0, цикл выполняется непрерывно _delay_ms (10); возврат (ADC); // Возвращаем 10-битный результат

}

// Эта функция повторно отображает число из одного диапазона (0-1023) в другой (0-100). uint32_t map (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

int main (пусто)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // инициализация АЦП

в то время как (1)

{i1 = карта (get_LightLevel (), 0, 1023, 0, 100);

OCR0A = i1; // Установка выходного регистра сравнения канала A OCR0B = 100-i1; // Устанавливаем выходной регистр сравнения канала B (инвертированный)

if (button_state ()) // Если кнопка нажата, переключить состояние светодиода и задержку на 300 мс (#define LOCK_INPUT_TIME) {PORTB ^ = (1 << 0); // переключаем текущее состояние вывода IN1. ПОРТБ ^ = (1 << 1); // переключаем текущее состояние вывода IN2. Изменить направление вращения двигателя на обратное.

ПОРТБ ^ = (1 << 3); // переключаем текущее состояние вывода IN3. ПОРТБ ^ = (1 << 4); // переключаем текущее состояние вывода IN4. Светодиодная лента выключена / включена. _delay_ms (LOCK_INPUT_TIME); }}; возврат (0); }

Программирование завершено. Затем построим и скомпилируем код проекта в шестнадцатеричный файл.

Загрузка HEX-файла во флеш-память микроконтроллера: введите в окне командной строки DOS команду:

avrdude –c [имя программиста] –p m328p –u –U flash: w: [имя вашего шестнадцатеричного файла]

В моем случае это:

avrdude –c ISPProgv1 –p m328p –u –U flash: w: PWM.hex

Эта команда записывает шестнадцатеричный файл в память микроконтроллера. Посмотрите видео с подробным описанием записи флеш-памяти микроконтроллера: Запись флеш-памяти микроконтроллера…

Ok! Теперь микроконтроллер работает в соответствии с инструкциями нашей программы. Давай проверим!

Шаг 6: электрическая схема

Электрическая схема
Электрическая схема
Электрическая схема
Электрическая схема

Подключайте компоненты в соответствии с принципиальной схемой.

Рекомендуемые: