PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

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...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 11-04-2011, 07:21 AM   #1
ganbaregenki
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
ganbaregenki vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2011, 10:00 PM   #2
ganbaregenki
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);
      }
}
Trên đây mình mới chỉ cần gửi 1 tín hiệu để MATLAB xử lý nên code vẫn chưa có đoạn đọc adc từ chân AN1.AN2,AN3 và AN5.Và lệnh gộp string+lệnh gửi string all.
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
à.Do mình sử dụng vòng while nên vấn đề plot data vẫn còn đang có lỗi.
Chắc tuần sau mình sẽ up final code và MATLAB gui nhé.
Thân
ganbaregenki vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2011, 10:02 PM   #3
ganbaregenki
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é.
ganbaregenki vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-06-2011, 12:59 AM   #4
nhanconan030789
Đệ tử 3 túi
 
Tham gia ngày: Mar 2009
Bài gửi: 49
:
Trích:
Nguyên văn bởi ganbaregenki View Post
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
mình vưà làm project môn học điêù khiển tốc độ động cơ servo,giao tiếp vơí matlab sử dụng gui,mình gặp khó khăn ở chổ cập nhật dữ liêụ liên tục,mình sử dụng GUI ,với đôí tượng serial khi nhận event BytesAvailablesFcn thì nó sẽ thực thi một hàm mà mình mong muốn,nhưng khổ nôỉ mình không biết cách nào để lưu dữ liêụ lâý được trong cái hàm này vào GUI,bạn có thể chỉ mình chổ này không,vơí lại kết nôí vơí Simulink như thế nào vâỵ bạn?
nhanconan030789 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-06-2011, 09:53 AM   #5
ganbaregenki
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.
ganbaregenki vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-06-2011, 09:54 AM   #6
ganbaregenki
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.
ganbaregenki vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 06:08 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam