1. Chú ý: Các bạn nên tham khảo Nội quy trước khi viết bài (click vào liên kết bên dưới).
    * Nội quy và Thông báo diễn đàn CNCProVN.com
    * Nếu bạn thấy hứng thú với bài viết. Hãy dùng chức năng Share to facebook để chia sẻ bài viết lên facebook.

          
Trang 3 của 3 Đầu tiênĐầu tiên 123
Kết quả 41 đến 55 của 55

Chủ đề: Arduino - Mỗi ngày một ví dụ, từ dễ tới khó - Arduino UNO R3

  1. #41
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,263 lần
           ở 2,038 bài viết
    Trích dẫn Gửi bởi CKD Xem bài viết
    Mà cụ Gà.. cái lão elm-chan đó bảo có kỹ thuật đọc encoder với tốc độ x2 lần tần số quét là thế nào nhỉ.. trình tiếng anh gà quá, đọc cái http://elm-chan.org/works/smc/report_e.html của lão không hiểu hết ý được.
    Làm cách nào đọc được encoder tới 52kHz.. trong khi chu kỳ tính PID đã mất 92us, chạy với thạch anh 10MHz

    Đính kèm 6410

    Chơi DC servo dù biết là nó cũ, khã năng ứng dụng so với giá có thể mua được cũng không được khã thi cho lắm. Nhưng DC servo có cái lợi là không cần thuật toán điều khiển gì cả. Rất đơn giản, dễ tiếp cận.. muốn điều khiển được DC motor chỉ cần làm được mấy chuyện:
    - Chiều dòng điện cấp cho motor ---> sẽ quyết định chiều quay của motor.
    - Cường độ dòng điện (đương nhiên phải dính tới áp).. quyết định tốc độ và moment.
    * mọi thông số phải <= định mức của motor.. nếu không muốn nó chạy xíu rồi xì khói.

    Ngoài ra.. em tạm ngưng vì tạm thời đã hiểu sơ sơ thế nào là PID.. cũng như các tham số và tác động của nó.

    ;----------------------------------------------------------;
    ; 83kHz Position capture and servo operation interrupt

    background:
    push T0L
    pushw Z
    in T0L, SREG ;Save flags

    mov ZL, _PvEnc ;ZL[1:0] = previous A/B signal
    in _PvEnc, PIND ;Sample A/B signal into _PvEnc[1:0]
    swap _PvEnc ;/
    ldi ZH, 1 ;Convert it to sequencial number.
    sbrc _PvEnc, 1 ;
    eor _PvEnc, ZH ;/
    sub ZL, _PvEnc ;Decode motion
    andi ZL, 3 ;/
    breq enc_zr ;-> Not moved
    cpi ZL, 3 ;
    breq enc_rev ;-> -1 count
    cpi ZL, 1 ;
    breq enc_fwd ;-> +1 count
    mov ZL, _PvDir ;-> Missing code recovery:
    mov ZH, _PvDir ; double count for previous direction
    lsl ZL ;
    asr ZH ;/
    rjmp enc_add
    enc_rev:ldiw Z, -1
    rjmp PC+3
    enc_fwd:ldiw Z, 1
    mov _PvDir, ZL
    enc_add:addw _Pos, Z
    adc _PosX, ZH
    enc_zr:
    dec _CtDiv ;Decrement 1/83 divider
    rjne bgnd_exit ;If not overflow, exit interrupt routine.

    em chưa check code, nhưng khả năng là encoder có 4 trạng thái cho 1 chu kì, ta có thể bắt xung ở trạng thái thứ 1 và thứ 4 = +4 > tương đương bắt được xung gấp 2 lần tần số quét
    Lần sửa cuối bởi nhatson, ngày 07-03-2015 lúc 08:22:36 AM.

  2. Thành viên đã cám ơn nhatson cho bài viết hữu ích này:

    CKD

  3. #42
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    À, nhắc mới nhớ, xin hỏi các cao thủ luôn:

    1. Mấy chú Tây làm bằng cách nào mà có thể cắt nhôm sắt hộp chính xác ta? Độ chính xác là bao nhiêu? Mình có thể DIY được ko?

    2. Cắt dây & cắt tia nước thì ưu nhược điểm ra sao?
    Lần sửa cuối bởi Gamo, ngày 07-03-2015 lúc 08:30:46 AM.

  4. #43
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,263 lần
           ở 2,038 bài viết
    Trích dẫn Gửi bởi Gamo Xem bài viết
    À, nhắc mới nhớ, xin hỏi các cao thủ luôn:

    1. Mấy chú Tây làm bằng cách nào mà có thể cắt nhôm sắt hộp chính xác ta? Độ chính xác là bao nhiêu? Mình có thể DIY được ko?

    2. Cắt dây & cắt tia nước thì ưu nhược điểm ra sao?
    1.chính xác thì em nghĩ cắt bằng cưa vòng, ko thì cắt bằng đá rồi để lên máy phay lấy kích thước

    2. cắt dây để cắt mí cái dạng có chiều sâu+ góc cạnh, cắt tia nươc có tác dụng lớn với inox dầy + đá hoa cuông, với inox mòng em e tia nước ko xử lí được

  5. Thành viên đã cám ơn nhatson cho bài viết hữu ích này:


  6. #44
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,263 lần
           ở 2,038 bài viết
    Trích dẫn Gửi bởi cuong Xem bài viết
    - ặc em mới là "gà mờ" nè "hu hu". ngu điện tử, tự động, lập trình mà còn đu đeo, thôi theo step tiếp vậy, một loạt khái niệm mới thế em đu theo không nổi, trên máy mà em tính làm theo là cnc panel saw. cho nghề gỗ (đã có lần hỏi bác Linh qua điện thoại), bọn nó dùng plc để điều khiển ac servo hay sao ý, cơ mà trong tủ điện có tới hai cái biến tần, có khi nào biến tần điều khiển vị trí cho acservo không các bác?. plc thì em cũng ngu luôn nên mới chuyển qua arduino. vì lúc bác CKD giới thiệu thì em có hỏi cụ gg cụ cho một loạt ví dụ về step, nghĩ là bí quá thì dùng step, nên mới đu theo hihih. cho em hỏi ngu một tý : có con step nào có thông số tương đương ac servo 1,2kw không ạ
    nếu chỉ cần dkhien vị trí tới lui, ko yêu cầu cao về profile, aduino có thư viện stepper controller, dùng chung step/servo chạy step dir được hết ah

  7. Thành viên đã cám ơn nhatson cho bài viết hữu ích này:


  8. #45
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,321 lần
           ở 2,595 bài viết
    @nhatson
    Cái source của elm-chan thì có xem qua, nhưng là ASM, mà môn này thì gà quá nên vẫn không hiểu. Tất cả các phát triển từ nguồn elm-chan đều dùng ASM. Phải chi dùng C hay gì đó thì hay biết mấy.
    Ngoài ra nó còn có cascade pid nữa. Nói chung không chuyên nên khó xơi hehe.

    @cuong
    Nếu ứng dụng của bạn chỉ dùng để chỉnh cữ, giữ phôi.. trong cưa tự động thì không quá khó.
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  9. Thành viên đã cám ơn CKD cho bài viết hữu ích này:


  10. #46
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    Trích dẫn Gửi bởi nhatson Xem bài viết
    1.chính xác thì em nghĩ cắt bằng cưa vòng, ko thì cắt bằng đá rồi để lên máy phay lấy kích thước

    2. cắt dây để cắt mí cái dạng có chiều sâu+ góc cạnh, cắt tia nươc có tác dụng lớn với inox dầy + đá hoa cuông, với inox mòng em e tia nước ko xử lí được
    Ủa, cắt bằng đá là sao hả bác?

  11. #47
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    Ủa, cắt dây có phải cắt EDM ko? Hay là cắt bằng dây kim cương?
    Lần sửa cuối bởi Gamo, ngày 07-03-2015 lúc 05:14:23 PM.

  12. #48
    Thợ cả
    Ngày tham gia
    Nov 2013
    Bài viết
    5,915
    Cám ơn
    2,195
    Được cám ơn 3,263 lần
           ở 2,038 bài viết
    Trích dẫn Gửi bởi Gamo Xem bài viết
    Ủa, cắt dây có phải cắt EDM ko? Hay là cắt bằng dây kim cương?
    cụ hỏi em cắt dây vs water jet giờ quay ra hỏi em cắt dây phải là EDM ko , nghi ngờ cụ qua

  13. #49
    Spam killer Gamo's Avatar
    Ngày tham gia
    Apr 2014
    Bài viết
    7,149
    Cám ơn
    3,898
    Được cám ơn 1,518 lần
           ở 1,162 bài viết
    Hehe, tại đang tính đi cắt dây/water jet. Thế rồi lại té ngửa ra là có 2 pp cắt dây lận

  14. #50
    Thợ bậc 6
    Ngày tham gia
    Nov 2013
    Bài viết
    382
    Cám ơn
    313
    Được cám ơn 37 lần
           ở 32 bài viết
    cảm ơn bác linh và các CKD, em bị chứng ì tâm lý huhu,hihi. Làm cho step chạy rồi thì đấu ac driver vô chân tương tự như đấu vô step driver thôi đúng không các bác?hihihi.
    em mới vừa lòi ra câu hỏi. trong đoạn chương trình này:

    // Define a stepper and the pins it will use
    AccelStepper stepper(AccelStepper:RIVER, 13, 12); // 13-PUL,12-DIR

    void setup()
    {
    stepper.setAcceleration(8000);
    stepper.setCurrentPosition(0);
    stepper.setMaxSpeed(1000);
    }
    long current_position;
    void loop()
    {
    current_position = stepper.currentPosition();
    if(current_position>=50000){
    stepper.moveTo(0);
    }
    if(current_position<=0){
    stepper.moveTo(-500);
    }
    stepper.run();
    }

    đoạn nào tính tỉ số xung và vòng quay vậy các bác, để cần biết mô tơ quay chính xác một vòng cần bao nhieu xung. ttrên step em cài :400 fulse/rev, full curent

  15. #51
    Thợ bậc 7 huanpt's Avatar
    Ngày tham gia
    Nov 2013
    Đang ở
    Gò Vấp - Sài Gòn
    Bài viết
    953
    Cám ơn
    277
    Được cám ơn 319 lần
           ở 205 bài viết
    Em mới tham gia lớp học arduino dành cho trẻ em và các cụ ông.
    Em muốn đọc nội dung từ file text, từng dòng từng dòng, mà đọc mãi chẳng thấy hàm nào readln cả. Em thuộc nhóm cao tuổi, lười nghĩ mẹo nên lên đây hỏi trước.

    Cụ CKD giúp với, em làm mẹo cũng được, nhưng dự là sẽ test ra được 1 đống lỗi (em đang làm QA :-s)

  16. #52
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,321 lần
           ở 2,595 bài viết
    Trích dẫn Gửi bởi huanpt Xem bài viết
    Em mới tham gia lớp học arduino dành cho trẻ em và các cụ ông.
    Em muốn đọc nội dung từ file text, từng dòng từng dòng, mà đọc mãi chẳng thấy hàm nào readln cả. Em thuộc nhóm cao tuổi, lười nghĩ mẹo nên lên đây hỏi trước.

    Cụ CKD giúp với, em làm mẹo cũng được, nhưng dự là sẽ test ra được 1 đống lỗi (em đang làm QA :-s)
    Chưa thử nhưng với cái ex từ arduino.cc thì nó đọc từ từ.
    Mã:
    /*
      SD card read/write
    
     This example shows how to read and write data to and from an SD card file
     The circuit:
     * SD card attached to SPI bus as follows:
     ** MOSI - pin 11
     ** MISO - pin 12
     ** CLK - pin 13
     ** CS - pin 4
    
     created   Nov 2010
     by David A. Mellis
     modified 9 Apr 2012
     by Tom Igoe
    
     This example code is in the public domain.
    
     */
    
    #include <SPI.h>
    #include <SD.h>
    
    File myFile;
    
    void setup() {
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    
    
      Serial.print("Initializing SD card...");
    
      if (!SD.begin(4)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
    
      // open the file. note that only one file can be open at a time,
      // so you have to close this one before opening another.
      myFile = SD.open("test.txt", FILE_WRITE);
    
      // if the file opened okay, write to it:
      if (myFile) {
        Serial.print("Writing to test.txt...");
        myFile.println("testing 1, 2, 3.");
        // close the file:
        myFile.close();
        Serial.println("done.");
      } else {
        // if the file didn't open, print an error:
        Serial.println("error opening test.txt");
      }
    
      // re-open the file for reading:
      myFile = SD.open("test.txt");
      if (myFile) {
        Serial.println("test.txt:");
    
        // read from the file until there's nothing else in it:
        while (myFile.available()) {
          Serial.write(myFile.read());
        }
        // close the file:
        myFile.close();
      } else {
        // if the file didn't open, print an error:
        Serial.println("error opening test.txt");
      }
    }
    
    void loop() {
      // nothing happens after setup
    }
    https://www.arduino.cc/en/Tutorial/ReadWrite

    Mã:
        while (myFile.available()) {
          Serial.write(myFile.read());
        }
    Chưa làm qua, nhung có 2 giả thuyết.
    1. Mỗi lần nó đọc 1 byte. Vậy muốn biết nó hết 1 dòng chưa thì phải dò ký tự return.
    2. Nếu mỗi lần nó đọc 1 dòng thì quá tuyệt rồi.
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  17. Thành viên đã cám ơn CKD cho bài viết hữu ích này:


  18. #53
    Thợ bậc 7 huanpt's Avatar
    Ngày tham gia
    Nov 2013
    Đang ở
    Gò Vấp - Sài Gòn
    Bài viết
    953
    Cám ơn
    277
    Được cám ơn 319 lần
           ở 205 bài viết
    myFile.read() nó đọc cả file mới đau.

  19. #54
    Thợ bậc 6 CKD's Avatar
    Ngày tham gia
    Nov 2013
    Bài viết
    6,680
    Cám ơn
    1,733
    Được cám ơn 5,321 lần
           ở 2,595 bài viết
    Lệnh
    myFfile.read() là nó đọc từng byte (char) một.

    Vậy muốn nó đọc hết một dòng mới thôi thì có thể đọc kiểu này.
    Mã:
    char thisByte;
    String str = "";
    while (myFile.available())
    {
      thisByte = myFile.read();
      if (thisByte != 10) 'kiểm tra nếu thấy char 10 (line feed) thì ngừng
      {
        str =str + thisByte;
      }
      else
      {
        Serial.print("New line: ");
        Serial.println(str);
        str = "";
      }
    }
    DT: O7837277II - CKD's Youtube Channel - Facebook - Tổng hợp chủ đề
    17 ds 3, Thạnh Mỹ Lợi, Q2, tp.HCM

  20. #55
    Thợ bậc 7 huanpt's Avatar
    Ngày tham gia
    Nov 2013
    Đang ở
    Gò Vấp - Sài Gòn
    Bài viết
    953
    Cám ơn
    277
    Được cám ơn 319 lần
           ở 205 bài viết
    Đã chạy OK. Thks cụ CKD.

    Click vào ảnh để xem ảnh lớn hơn. 

Name:	ArduinoSdcard_pulse_generate.PNG 
Views:	3 
Size:	44.4 KB 
ID:	23206

  21. Thành viên đã cám ơn huanpt cho bài viết hữu ích này:


Trang 3 của 3 Đầu tiênĐầu tiên 123

Các Chủ đề tương tự

  1. DIY - Arduino tiny board
    Bởi CKD trong diễn đàn Arduino
    Trả lời: 22
    Bài viết cuối: 23-09-2016, 04:22:51 AM
  2. CKD - Fun - Hãy thư giản sau mỗi ngày làm việc.
    Bởi CKD trong diễn đàn Góc nhiếp ảnh
    Trả lời: 137
    Bài viết cuối: 16-06-2016, 02:30:16 PM
  3. DIY - Arduino LCD shield
    Bởi CKD trong diễn đàn Arduino
    Trả lời: 11
    Bài viết cuối: 28-04-2016, 04:55:31 PM
  4. CKD - Arduino DC motor PID position controller DEMO Ver
    Bởi CKD trong diễn đàn Arduino
    Trả lời: 67
    Bài viết cuối: 04-09-2015, 08:02:08 PM
  5. Trả lời: 5
    Bài viết cuối: 06-01-2015, 01:27:36 PM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •