Thiết kế chương trình điều khiển

Một phần của tài liệu Thiết kế, chế tạo xe lăn điều khiển đa hướng trên mọi địa hình (Trang 67 - 72)

Chương 3 : PHƯƠNG PHÁP GIẢI QUYẾT

4.10 Thiết kế chương trình điều khiển

a. Xây dựng bài tốn lập trình.

Sau khi phần cứng xong ta đi thiết lập chương trình điều khiển. Yêu cầu bài toán là sau khi hệ thống được khởi động ta chọn hai chế độ là nút nhấn hoăc giọng nói. Sau đó chọn một trong hai chế độ thì việc cịn lại là ra lệnh cho xe di chuyển đến các vị trí.

Ngơn ngữ lập trình nhóm sử dụng là lập trình bằng ngơn ngữ C. b. Xây dựng lưu đồ thuật toán.

Xây dựng lưu đồ thuật toán sẽ giúp cho việc lập trình dễ dàng hơn, tường minh hơn. Lưu đồ được chỉnh ra trên khổ giấy A3 sau.

49

50 - Chương trình điều khiển.

Những chú ý khi viết chương trình điều khiển.

Khi viết chương trình điều khiển cần chú ý đến các vấn đề:

• Tn thủ chặt chẽ thuật tốn đã đề ra trước đó, chương trình theo đúng và đủ các bước trong thuật tốn.

• Đảm bảo việc đọc các giá trị tín hiệu đúng kịp thời, tránh nhầm lẫn.

• Các chương trình con thực hiện một cách nhanh gọn chính xác.

Chương trình điều khiển bao gồm chương trình chính và 3 chương trình con:

• Chương trình xử lý sóng điện cơ.

• Chương trình đọc giữ liệu từ joystick.

• Chương trình thuật tốn PID.

51 c. Code nạp cho PIC16F876 [3]:

#include <xc.h>

#define _XTAL_FREQ 20000000 void ADC_Initialize()

{

ADCON0 = 0b01000001; //ADC ON and Fosc/16 is selected ADCON1 = 0b11000000; // Internal reference voltage is selected }

unsigned int ADC_Read(unsigned char channel) {

ADCON0 &= 0x11000101; //Clearing the Channel Selection Bits ADCON0 |= channel<<3; //Setting the required Bits

__delay_ms(2); //Acquisition time to charge hold capacitor GO_nDONE = 1; //Initializes A/D Conversion

while(GO_nDONE); //Wait for A/D Conversion to complete return ((ADRESH<<8)+ADRESL); //Returns Result

}

void main() {

//*****I/O Configuration****//

TRISC=0X00; //PORT C is used as output ports PORTC=0X00; //MAke all pins low

TRISB0=1; //RB0 is used as input //***End of I/O configuration**///

ADC_Initialize(); //Configure the ADC module while(1)

{

int joy_X = (ADC_Read(0)); //Read the X-Axis of joystick int joy_Y = (ADC_Read(1)); //Read the Y-Axis of Joystick

if (joy_X < 200) //Joy moved up {RC0=0; RC1=1;} //Glow upper LED else if (joy_X > 800) //Joy moved down {RC0=1; RC1=0;} //Glow Lower LED else //If not moved

{RC0=0; RC1=0;} //Turn off both led

52 {RC2=0; RC3=1;} //Glow left LED else if (joy_Y > 800) //Joy moved Right {RC2=1; RC3=0;} //Glow Right LED else //If not moved

{RC2=0; RC3=0;} //Turn off both LED if (RB0==1) //If Joy is pressed

RC4=1; //Glow middle LED else

RC4=0; //OFF middle LED }

53

Một phần của tài liệu Thiết kế, chế tạo xe lăn điều khiển đa hướng trên mọi địa hình (Trang 67 - 72)

Tải bản đầy đủ (PDF)

(162 trang)