![]() |
|
Tài trợ cho PIC Vietnam |
Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 8
: |
Kết nối PIC với PC thông qua MATLAB và RS232...
hiện tại thì mình đang làm đồ án về điều khiển hệ thống lò điện trở.Ban đầu yêu cầu của thầy kết nối hệ thống điều khiển và đo lường thông qua CARD chuyên dụng của IBM.Nhưng mình muốn tiếp cận bài toán theo hướng khác nên đặt ra các vấn đề cần giải quyết bằng Vi xử lý nên mình đã làm như sau:
+ Thu thập tín hiệu nhiệt độ từ 5 cặp nhiệt điện để đo nhiệt độ của lò và 4 nhiệt độ phôi diotamit. + Truyền 5 nhiệt độ lên PC thông qua chuẩn RS232. + Giao diện truyền nhận ở đây được tạo bởi MATLAB thông qua 3 công cụ: - Bằng code trong m-file. - Sử dụng GUI tạo giao diện chỉnh sửa các tham số. - Dùng toolbox Instrument để kết nối với SIMULINK. + Điều khiển nhiệt độ của vật thông qua điều khiển nhiệt độ lò bằng mạch điều khiển công suất sử dụng TRIAC: - Có thể sử dụng IC điều khiển TRIAC TCA785. - Hoặc sử dụng mạch zero-crossing và điều khiển thông qua PIC Tất nhiên cả trong 2 trường hợp trên thì bộ điều khiển nằm trong SIMULINK hoặc sử dụng m-file. Mạch PIC chỉ có tác dụng kết nối với mạch đo,truyền tín hiệu nhiệt độ và nhận tín hiệu điều khiển từ PC để mở TRIAC. Bạn nào có hứng thú trao đổi thì có thể liên lạc với mình qua mail:hoancaubk@gmail.com nhé. Thân |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 8
: |
Chào mọi người.Lâu lắm rồi mình chưa cập nhật cho thread,mà hình như không có ai thích tìm hiểu về vấn đề này với mình nhỉ.
Hiện tại thì đồ án của mình cũng đã bước vào giai đoạn cuối và đang tiến hành typing với lấy đồ thị thời gian thực nữa là okie. Mình gửi code VXL và code MATLAB cho mọi người cùng thảo luận nhé. Dưới đây là code VXL.string mình gửi từ MATLAB có dạng 'axb'.Trong đó x là giá trị duty cho pwm có dải từ 0 đến 255. Code:
/*test uart cho pic 16f877a su dung phan mem mirko & MATLAB & Rs232 */ char uart_rd; unsigned int temp,duty_cycle; volatile long int pwm_data; char temp_text0[7],temp_text1[7], *temp_text_all,*res; //ADD A CHAR ARRAY TO HOLD THE TEXT void main() { ADCON1 = 0; // All PORTA pins as analog, VDD as Vref trisa = 0xff; TRISB=0; PORTB=0; PWM1_Init(5000); // Initialize PWM1 module at 5KHz PWM1_Start(); // start PWM1 UART1_Init(9600); Delay_ms(100); temp=100; while(1){ if (UART1_Data_Ready()) // if data is received { uart_rd=UART1_Read(); if(uart_rd=='a') pwm_data=0; else { if(uart_rd!='b') { pwm_data=pwm_data*10+uart_rd-48; } else { duty_cycle=pwm_data; if(duty_cycle>255) duty_cycle=255; PWM1_Set_Duty(duty_cycle); temp = Adc_Read(0)*0.243902439; IntToStr (temp, temp_text0); //CONVERT ADC VALUE TO TEXt uart1_write_text(temp_text0); //SEND TEXT VALUE TO UARTT //temp = Adc_Read(2)*0.243902439; //IntToStr (temp, temp_text); //CONVERT ADC VALUE TO TEXt //uart1_write_text(temp_text); //SEND TEXT VALUE TO UART } } } //temp = Adc_Read(1)*0.243902439; //IntToStr (temp, temp_text1); //CONVERT ADC VALUE TO TEXt //uart1_write_text(temp_text1); //SEND TEXT VALUE TO UART //temp_text_all=strcat(temp_text0,";"); //temp_text_all=strcat(temp_text_all,temp_text1); //uart1_write_text(temp_text_all); //SEND TEXT VALUE TO UART //delay_ms(200); } } Còn đây là code MATLAB.Mọi người thấy có gì sai thì cứ thảo luận nhé Code:
% Reading of a sensor temperature % using a microcontroller PIC16F887 % Starting: April 15 , 2011 % Author's Data: hoancaubk@gmail.com % HaNoi university of Technology and Science clear all; close all; s = serial('COM1'); %assigns the object s to serial port set(s, 'InputBufferSize', 256); %number of bytes in inout buffer set(s, 'BaudRate', 9600); %set baud rate set(s, 'Parity', 'none'); % set(s, 'DataBits', 8); set(s, 'StopBit', 1); set(s, 'Timeout',0.5); %Set time out for COM1,it is very important because of % real time control fopen(s); fprintf(s,'%s','a102b'); % to active PIC16F887 by sending a value to PIC from PC i=0; while(i<20) data=Str2num(fscanf(s)) % code controller and actuator system here fprintf(s,'%s','axb') %send control signal value to PIC:axb i=i+1 end fclose(s); %close serial port Chắc tuần sau mình sẽ up final code và MATLAB gui nhé. Thân |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 8
: |
Code VXL mình viết bằng mikroe C PRO for PIC nên khác với PIC C Compiler.
Các bạn đừng thắc mắc tại sao post vào PIC C Compiler lại không build được nhé. |
![]() |
![]() |
![]() |
#4 | |
Đệ tử 3 túi
Tham gia ngày: Mar 2009
Bài gửi: 49
: |
Trích:
|
|
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 8
: |
à.Bạn phải sử dụng cả 2 byte trong matlab của hàm fscanf ấy.2 lệnh đó là lệnh s.syn... và s.byteavail...Bạn check lại chính xác lệnh trong MATLAB.Mình đang online ở quán nét.
![]() |
![]() |
![]() |
![]() |
#6 |
Nhập môn đệ tử
Tham gia ngày: Sep 2009
Bài gửi: 8
: |
Kết nói SIMULINK thì bạn phải viết 1 khối s function thôi.Hoặc có thể sử dụng C.
|
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|