Select Page

Partial Code and instructions found in attachment. lecture_12_lab_4.pdfProject Objective

In this project, A DC motor need to run according to the following time
schedule:
1.
2.
3.
4.
5.
6.
7.
The motor runs in the forward direction for 4 seconds @ 70% duty cycle
The motor stops for 1 second
The motor runs in the reverse direction for 3 seconds @ 50% duty cycle
Motor stops for 2 second.
The motor runs in the forwards direction for 3 seconds @ 40% duty cycle
Motor stops for 1 second
The motor runs in the forward direction for 5 seconds @ 20% duty cycle
DC Motor
• When the DC current is
perpendicular to the
magnetic field, an
electromagnetic force
(Lorenz Force) is exerted on
the armature (coil) making
it rotating.
• The total power delivered
to the motor is
– = = +
PWM to Control DC Motor
• The coil of the motor is a large inductor where its voltage is
defined by:

– =
– If > 0 the current is increasing, if < 0 the current is decreasing • The current can be controlled using PWM technique – Apply rectangular pulse with varying duty cycle – = + − H-Bridge • H-Bridge is used with PWM to control DC Motor – The voltage across the motor is inverted according to the duty cycle • PMOD HB5 is H-Bridge module that is provided by DIGILENT – It takes the direction and the digital pwm pulse that controls the motor. – It also provides two current sensors Software Development • Configure the system clock at 80MHz, and the peripheral clock at 10MHz. • User Timer 1 for pulsing the PWM with a giving duty cycle. • Use Timer 2 for measuring the motor run time • Define three functions – Forward(RunTime, Duty_Cycle); – Stop(RunTime); – Backward(RunTime, Duty_Cycle); Clocks Configuration IOs & Timers Configurations Wait on Btn1 Run Motor Forward Stop Motor Run Motor Backward ⁞ End Initializaing The System Clock 8MHz ÷2 FPLLIDIV=2 4MHz × 20 80 MHz FPLLMUL=20 #include //Configure the clock #pragma config FNOSC = PRI #pragma config FPLLIDIV = DIV_2 #pragma config FPLLMUL = MUL_20 #pragma config FPLLODIV = DIV_1 #pragma config FPBDIV = DIV_8 void main(){ // enter your code } ÷1 80MHz FPLLODIV=1 // Oscillator Selection Bits (Primary Osc (XT,HS,EC)) // PLL Input Divider (2x Divider) // PLL Multiplier (20x Multiplier) // System PLL Output Clock Divider (PLL Divide by 1) // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/8) Main void main(){ // Setting up PIC modules such as Timers, IOs OCs,Interrupts, ... InitializeIO(); InitializeLEDs(); InitializeTimers(); while(1) // endless loop { WaitOnBtn1(); Forward(4.0,70); Stop(1.0); Backward(3.0,50); Stop(2); Forward(3.0,40); Stop(1.0); Backward(2.0,20); LEDsOFF(); } return; } Initialize IOs & Timers void InitializeIO(){ TRISAbits.TRISA6 = 1; TRISAbits.TRISA7 = 1; TRISGbits.TRISG12 = 0; TRISGbits.TRISB13 = 0; LATGbits.LATB12 = 0; LATGbits.LATB13 = 0; return; } void InitializeTimers(){ // Initialize Timer1 T1CON = 0x0000; // Set Timer1 Control to zeros T1CONbits.TCKPS=3; // prescale by 256 T1CONbits.ON = 1; // Turn on Timer PR1= 0xFFFF; // Period of Timer1 to be full TMR1 = 0; // Initialize Timer1 to zero // Initialize Timer2 T2CON = 0; T2CONbits.TCKPS = 7; // prescale by 256 T2CONbits.T32 = 1; // use 32 bits timer T2CONbits.ON = 1; PR2 = 0xFFFFFFFF; // Period is set for 32 bits TMR2 = 0; } WaitOnBtn1() & Forward() void WaitOnBtn1(){ // wait on Btn1 indefinitely while(PORTAbits.RA6 == 0) ; // Turn On LED1 indicating it is Btn1 is Pushed LATBbits.LATB10 = 1; return; } void Forward(float Sec, int D){ int RunTime = (int)(Sec*39000); // convert the total time to number of Tics TMR2 = 0; //LEDs LATGbits.LATG12 = 1; // forward Direction LATBbits.LATB12 = 0; LATBbits.LATB13 = 0; LATBbits.LATB11 = 1; // Keep on firing the PWM as long as Run time is not elapsed while (TMR2 < RunTime){ PWM(D); } return; } WaitOnBtn1() & Forward() void PWM(int D){ TMR1 = 0; int Period = 400; while (TMR1< Period) { if (TMR1 < Period*D/100){ LATGbits.LATG13 = 1; } else{ LATGbits.LATG13 = 0; } } Purchase answer to see full attachment

#### Why Choose Us

• 100% non-plagiarized Papers
• Affordable Prices
• Any Paper, Urgency, and Subject
• Will complete your papers in 6 hours
• On-time Delivery
• Money-back and Privacy guarantees
• Unlimited Amendments upon request
• Satisfaction guarantee

#### How it Works

• Click on the “Place Order” tab at the top menu or “Order Now” icon at the bottom and a new page will appear with an order form to be filled.
• Fill in your paper’s requirements in the "PAPER DETAILS" section.