Модуль управления двигателем постоянного тока на PIC контроллере (dc motor)

Для экспериментального образца мы решили применить один из дешевых PIC микроконтроллеров серии PIC16F690 стоимостью около 1 доллара. Методика, принцип и логика работы взята с официальной документации Microchip 41214a.pdf. В качестве силовых ключей решили использовать одни из самых дешевых полевых транзисторов IRLFZ44N (0,2 $) и драйвера управления транзисторами IR2109.

Схема приведена на рис 1

DC_Motor1

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

Для реверсивного режима:

img2

Для прямого режима:

img1

Получилась вот такая плата (На плате добавлены 2 шима формирования питаний +5В,+12В схема приведена ниже )

foto_dc_motor_plata

Видео работы платы в сборе с мотором , энкодером и редуктором фирмы Dunkermotoren

И так перейдем к самой программе для PICa.

// ***************************************************************************
// File Name : pwm.c
// Version : 1.0
// Description : Pulse Width Modulation (PWM)
// Single Output, Steering Mode
// Author(s) : SDA
// Target(s) : 16F690 Board
// Compiler : HITECT PICC Version 9.60PL1
// IDE : Microchip MPLAB IDE v8.30
// Programmer : PICKit2
// Last Updated : 24 Mart 2011
// ***************************************************************************

#include

__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT \
& UNPROTECT & BORDIS & IESODIS & FCMDIS);

#define FOSC 8000000L
#define _delay_us(x) { unsigned char us; \
us = (x)/(12000000/FOSC)|1; \
while(—us != 0) continue; }

void _delay_ms(unsigned int ms)
{
unsigned char i;
if (ms == 0) return;
do {
i = 4;
do {
_delay_us(164);
} while(—i);
} while(—ms);
}

void main(void)
{
unsigned int ipwm,temp;
unsigned char direction;
OSCCON=0x70; // Установка 8 Mhz частоты
TRISC = 0x01; // Настройка порта С
TRISA = 0x03; // Настройка порта А
TRISB = 0x00; //Настройка порта В
ANSEL = 0x01; // Установить AN0 как аналоговый вход AN1-AN7 как цифровые вх./вых.
ANSELH = 0x00; // AN8 по AN11 установить как цифровые вх./вых.
PORTC = 0x00; // Сбросим PORTC
/* Инициализация PWM для Full Bridge Output */
CCP1CON=0b01001100; // Full Bridge Forward; P1A, P1C active-high; P1B, P1D active-high
CCPR1L=0; // Старт с 0 значением цикла
T2CON=0b00000101; // Делитель: 1:1, таймер Timer2=On, постделитель = 1:4
PR2=0x65; // Частота: 4.90 KHz
TMR2=0; // Обнуление счетчика
/* Инициализация АЦП */
ADCON0=0b00000000; // Выбор левого выравнивания и аналогового входа AN0
ADCON1=0b00110000; // Выбор FRC для 8 MHz
ADON=1; // Включить ADC conversion module
direction=0; // Выбор направления
ipwm=0;
for(;;) {
RB7=1;
RB6=1;
if (RA1 == 1) {
_delay_ms(1);
direction=1; // Движение в перед
P1M1=1;
P1M0=1;
}

if (RC0 == 1) {
direction=0; // Движение назад
P1M1=0;
P1M0=1;
}
GODONE=1; // Старт измерений АЦП
while(GODONE) continue; // Пауза
temp=ADRESH>>1;
ipwm = temp;
CCPR1L=ipwm; // Установить цикличность ШИМа
/* Мигание светодиода RC0 */
RC0=1; // On
_delay_ms(ipwm);
RC0=0; // Off
_delay_ms(ipwm);

}
}


Схема в формате Splan и плата SMD монтаж в layout 6.0

Файл Описание Размер файла
dcmotor2.lay Два варианта платы 1. 100 %соответствие схемы. 2. Плата с фото с питанием на борту 465 Kb
PIC16f690 Картинка PIC16f690 93 Kb
Схема в программе Splan без питания Электросхема 45 Kb

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *