Exemplo do circuito de testes
Os exemplos abaixo são utilizados para controle de motor DC, são 5 exemplos que demonstram diversas maneiras de controle.
Códigos:
EXEMPLO 1
//**********************************************************
/// Daniel Wagner
/// 29/06/2014
//Exemplo 1 Motor.c : Controlling Direction of MotorA and MotorB
#include <18f4550.h> // Header file
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay (clock = 20M)
// Pin Definition
#define MOTORA_1 PIN_B0 //IN1
#define MOTORA_2 PIN_B1 //IN2
#define MOTORB_1 PIN_B2 //IN3
#define MOTORB_2 PIN_B3 //IN4
void main(){
//Set PORTB as output
set_tris_b(0x00);
//Configure PWM Pinout
setup_timer_2(T2_DIV_BY_4,254,1);//PWM OUTPUT CONFIGURATION
setup_ccp1(ccp_pwm); //PWM 1 DUTY CYCLE CONFIGURATION
setup_ccp2(ccp_pwm); //PWM 2 DUTY CYCLE CONFIGURATION
while(true){
//Turn On Motor A CW
output_high(MOTORA_1);
output_low(MOTORA_2);
//Turn On Motor B CCW
output_low(MOTORB_1);
output_high(MOTORB_2);
}
}
//*************************************************************
EXEMPLO 2
//**********************************************************
/// Daniel Wagner
/// 29/06/2014
/// Daniel Wagner
/// 29/06/2014
//Exemplo 2 Motor.c : Controlling Speed of MotorA and MotorB
#include <18f4550.h7gt; // Header file
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay (clock = 20M)
// Pin Definition
#define MOTORA_1 PIN_B0 //IN1
#define MOTORA_2 PIN_B1 //IN2
#define MOTORB_1 PIN_B2 //IN3
#define MOTORB_2 PIN_B3 //IN4
void main(){
//Set PORTB as output
set_tris_b(0x00);
//Configure PWM Pinout
setup_timer_2(T2_DIV_BY_4,254,1);//PWM OUTPUT CONFIGURATION
setup_ccp1(ccp_pwm); //PWM 1 DUTY CYCLE CONFIGURATION
setup_ccp2(ccp_pwm); //PWM 2 DUTY CYCLE CONFIGURATION
while(true){
//Turn On Motor A CW
output_high(MOTORA_1);
output_low(MOTORA_2);
set_pwm1_duty(200); //Speed of MotorA
//Turn On Motor B CCW
output_low(MOTORB_1);
output_high(MOTORB_2);
set_pwm2_duty(150); //Speed of MotorB
}
}
//*************************************************************
EXEMPLO 3
//**********************************************************
/// Daniel Wagner
/// 29/06/2014
/// Daniel Wagner
/// 29/06/2014
//Exemplo 3 Motor.c : Controlling Motor using Buttons
#include <18f4550.h> // Header file
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay (clock = 20M)
#include <lcd.c >
//Pin Definition for LCD
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
//Pin Definition for Buttons
#define BUTTON1 PIN_B4
#define BUTTON2 PIN_B5
// Pin Definition For Motor
#define MOTORA_1 PIN_B0 //IN1
#define MOTORA_2 PIN_B1 //IN2
#define MOTORB_1 PIN_B2 //IN3
#define MOTORB_2 PIN_B3 //IN4
void main(){
//Set PINB0-PINB3 as output PINB4-PINB7 as input
set_tris_b(0xF0);
lcd_init();
//Configure PWM Pinout
setup_timer_2(T2_DIV_BY_4,254,1);//PWM OUTPUT CONFIGURATION
setup_ccp1(ccp_pwm); //PWM 1 DUTY CYCLE CONFIGURATION
setup_ccp2(ccp_pwm); //PWM 2 DUTY CYCLE CONFIGURATION
while(true){
if(!input(BUTTON1)){
//Turn On Motor A MotorB turn Off
output_high(MOTORA_1);
output_low(MOTORA_2);
output_high(MOTORB_1);
output_high(MOTORB_2);
set_pwm1_duty(100); //Speed of MotorA
printf(lcd_putc,”\fMOTORA Move\nMOTORB Stop”);
delay_ms(100);
}
else if(!input(BUTTON2)){
output_high(MOTORA_1);
output_high(MOTORA_2);
output_high(MOTORB_1);
output_low(MOTORB_2);
set_pwm2_duty(100);
printf(lcd_putc,”\fMOTORA Stop\nMOTORB Move”);
delay_ms(100);
}
else {
output_high(MOTORA_1);
output_high(MOTORA_2);
output_high(MOTORB_1);
output_high(MOTORB_2);
printf(lcd_putc,”\fMOTORA Stop\nMOTORB Stop”);
delay_ms(100);
}
}
}
//*************************************************************
EXEMPLO 4
//**********************************************************
/// Daniel Wagner
/// 29/06/2014
/// Daniel Wagner
/// 29/06/2014
//Exemplo4 Motor.c : Controlling Speed of Motor using Buttons
#include <18f4550.h> // Header file
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay (clock = 20M)
#include <lcd.c>
//Pin Definition for LCD
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
//Pin Definition for Buttons
#define BUTTON1 PIN_B4
#define BUTTON2 PIN_B5
// Pin Definition For Motor
#define MOTORA_1 PIN_B0 //IN1
#define MOTORA_2 PIN_B1 //IN2
#define MOTORB_1 PIN_B2 //IN3
#define MOTORB_2 PIN_B3 //IN4
void main(){
int32 speed=50; //Speed of motor
//Set PINB0-PINB3 as output PINB4-PINB7 as input
set_tris_b(0xF0);
lcd_init();
//Configure PWM Pinout
setup_timer_2(T2_DIV_BY_4,254,1);//PWM OUTPUT CONFIGURATION
setup_ccp1(ccp_pwm); //PWM 1 DUTY CYCLE CONFIGURATION
setup_ccp2(ccp_pwm); //PWM 2 DUTY CYCLE CONFIGURATION
while(true){
if(!input(BUTTON1)){
speed++;
output_high(MOTORA_1);
output_low(MOTORA_2);
output_high(MOTORB_1);
output_low(MOTORB_2);
set_pwm1_duty(speed); //Speed of MotorA
set_pwm2_duty(speed);
printf(lcd_putc,”\fSpeed = %ld”,speed);
delay_ms(100);
}
else if(!input(BUTTON2)){
speed--;
output_high(MOTORA_1);
output_low(MOTORA_2);
output_high(MOTORB_1);
output_low(MOTORB_2);
set_pwm1_duty(speed); //Speed of MotorA
set_pwm2_duty(speed);
printf(lcd_putc,”\fSpeed = %ld”,speed);
delay_ms(100);
}
if(speed>=200){
speed=200;
}
else if(speed<=20){
speed=20;
}
}
}
//**********************************************************EXEMPLO 5
//**********************************************************
/// Daniel Wagner
/// 29/06/2014
/// Daniel Wagner
/// 29/06/2014
//Exemplo5Motor.c : Controlling Speed of Motor using Potentiometer
#include <18f4550.h> // Header file
#fuses HS, NOWDT, NOPROTECT, NOLVP
#device ADC=10
#use delay (clock = 20M)
#include <lcd.c>
//Pin Definition for LCD
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
//Pin Definition for Buttons
#define BUTTON1 PIN_B4
#define BUTTON2 PIN_B5
// Pin Definition For Motor
#define MOTORA_1 PIN_B0 //IN1
#define MOTORA_2 PIN_B1 //IN2
#define MOTORB_1 PIN_B2 //IN3
#define MOTORB_2 PIN_B3 //IN4
void main(){
int32 speed=250; //Speed of motor
int32 value;
//Set PINB0-PINB3 as output PINB4-PINB7 as input
set_tris_b(0xF0);
lcd_init();
//Configure Analog Input
setup_adc_ports (ALL_ANALOG);
setup_adc (ADC_CLOCK_INTERNAL);
//Configure PWM Pinout
setup_timer_2(T2_DIV_BY_4,254,1);//PWM OUTPUT CONFIGURATION
setup_ccp1(ccp_pwm); //PWM 1 DUTY CYCLE CONFIGURATION
setup_ccp2(ccp_pwm); //PWM 2 DUTY CYCLE CONFIGURATION
while(true){
set_adc_channel(2);
value=read_adc();
value=value*100/1023;
if(value>=80)
{
speed = speed+10;
delay_ms(100);
}
else if (value<=30)
{
speed = speed-10;
delay_ms(100);
}
if (speed >= 100)
{
speed = 100;
}
else if(speed<=2)
{
speed=2;
}
output_high(MOTORA_1);
output_low(MOTORA_2);
output_high(MOTORB_1);
output_low(MOTORB_2);
set_pwm1_duty(speed);
set_pwm2_duty(speed);
printf(lcd_putc,"\fSPEED %ld",speed);
printf(lcd_putc,"\nPercentage=%d%%",(int)value);
delay_ms(10);
}
}
Nenhum comentário:
Postar um comentário