Thông báo

Collapse
No announcement yet.

khống chế số lượng xung điều khiển động cơ bước

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • khống chế số lượng xung điều khiển động cơ bước

    Hiện tại mình đang nghiên cứu động cơ bước. Mình dùng Atmega16. Counter0 mình đọc tín hiệu Encoder, Time1 mình dùng để phát xxung, Timer2 mình dùng để định thời đọc số xung mà Counter0 đọc được. Sau khi mình tính toán được tôc độ của encoder thì mình sẽ đi điều khiển xung cho con động cơ bước, nhưng mừ mình lại muốn khống chế số xung phát ra để động cơ bước chạy được 1 quãng đường thì phải dừng lại. Mình đang bí chỗ này, ko biết có cách nào ko. Mong mọi người giúp đỡ

  • #2
    Mình ko biết có cách nào hay hơn ko, lúc trước cần khống chế số xung phát ra thì đơn giản nhất là chọn 1 port làm output bất kì rồi lập trình On /Off thông thường để tạo xung. Dùng timer thì chuyên nghiệp hơn và bắt nó dừng ngay đúng số xung mình cần thì dùng cái ngắt của chính timer đó để đếm xung luôn là OK.
    Làm sao mà bạn dám nói là không làm được khi bạn chưa từng thử một lần nào.
    Ngay cả khi bạn đã làm 1 lần và thất bại bạn cũng không có quyền nói là không làm được vì bạn chưa làm lần thứ 2,3...

    Comment


    • #3
      Nguyên văn bởi hoang_tuan Xem bài viết
      Hiện tại mình đang nghiên cứu động cơ bước. Mình dùng Atmega16. Counter0 mình đọc tín hiệu Encoder, Time1 mình dùng để phát xxung, Timer2 mình dùng để định thời đọc số xung mà Counter0 đọc được. Sau khi mình tính toán được tôc độ của encoder thì mình sẽ đi điều khiển xung cho con động cơ bước, nhưng mừ mình lại muốn khống chế số xung phát ra để động cơ bước chạy được 1 quãng đường thì phải dừng lại. Mình đang bí chỗ này, ko biết có cách nào ko. Mong mọi người giúp đỡ
      Tính toán làm gì cho nó cao siêu, học làm gì nhiều cho đầu to mắt cận . Nghiên cứu gì ở cái motor bước quá đơn giản ? ... Motor bước phổ thông mỗi bước của motor quay 1,8 độ ... quay 1 vòng tròn 360 độ thì cần 200 bước .

      Từ góc quay tương ứng với chu vi trục ( quả lô ) thì tính ra số bước cần là quá đơn giản . Ví dụ chu vi quả lô khi gắn với trục motor là 20cm, thì cứ mỗi xung nó đi được quãng đường 20 /200 = 0,1cm ............ muốn đi được quãng đường X thì nó cần Y xung ( toán của lớp 2-3 ).

      --- Quả lô là kiểu tính trực tiếp, trong thực tế nếu là bánh răng, hộp số .v..v thì vẫn tính tỉ lệ hộp số, bước/ quãng đường theo cách tương tự .... mà chẳng cần encoder làm gì cho nó phí công dụng của motor bước.
      Nếu cần thiết phải có encoder thì cũng đếm encoder rồi so sánh với số xung xem có bị thiếu/ thừa không ( thường bị thiếu ( do trượt lực nếu motor bước quá yếu ) thì ta cấp thêm xung )) ... trong thực tế nếu motor bước quá yếu thì người ta thay bằng cái to hơn, khỏe hơn chứ chẳng mấy thằng ... làm encoder như hệ SERVO. ( trừ những trường hợp quá đặc biệt ).
      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

      Comment


      • #4
        bác queduong hiểu sai ý e rùi, không phải là e muốn tính toán 1 bước thì đi được bao nhiêu cái này chắc ai cũng tính đc mừ. Cái e hỏi là tính được ra số xung rùi vd là 500xung chẳng hạn thì làm cách nào dùng PWM của VDK mừ phát ra đúng số xung như vậy. Cái Encoder của e là đo vận tốc của 1 hệ truyền động khác, động cơ bước điều khiển 1 hệ truyền động khác. Bài toán là điều khiển cái hệ truyền động động cơ bước đó sao cho nó chuyển động tương đối so với hệ có gắn encoder kia ( có thể nhanh hay chậm hay bằng thì tùy theo người vận hành đặt giá trị tương đối)
        - Cảm ơn bạn hoahauvn2 nhé . hum qua vừa lên diễn đàn hỏi x thì ngồi đọc code tự nhiên nhìn vào cái ngắt của nó mới chợt nghĩ tới, ngày trước ko quan tâm tới cái ngắt này lém vì nó gán mỗi giá trị đểm ban đầu, mừ mình đã gán nó bằng 1 biến và biến đó mình tính toán ở main rùi.

        Comment


        • #5
          Nguyên văn bởi hoang_tuan Xem bài viết
          bác queduong hiểu sai ý e rùi, không phải là e muốn tính toán 1 bước thì đi được bao nhiêu cái này chắc ai cũng tính đc mừ. Cái e hỏi là tính được ra số xung rùi vd là 500xung chẳng hạn thì làm cách nào dùng PWM của VDK mừ phát ra đúng số xung như vậy. Cái Encoder của e là đo vận tốc của 1 hệ truyền động khác, động cơ bước điều khiển 1 hệ truyền động khác. Bài toán là điều khiển cái hệ truyền động động cơ bước đó sao cho nó chuyển động tương đối so với hệ có gắn encoder kia ( có thể nhanh hay chậm hay bằng thì tùy theo người vận hành đặt giá trị tương đối)
          - Cảm ơn bạn hoahauvn2 nhé . hum qua vừa lên diễn đàn hỏi x thì ngồi đọc code tự nhiên nhìn vào cái ngắt của nó mới chợt nghĩ tới, ngày trước ko quan tâm tới cái ngắt này lém vì nó gán mỗi giá trị đểm ban đầu, mừ mình đã gán nó bằng 1 biến và biến đó mình tính toán ở main rùi.
          Vậy PWM là cái gì vậy ?

          soxung = encoder_read();

          // ==> phát lại số xung cho motor bước
          for(i=0; i<soxung; i++)
          {
          PIN_out =1;
          Delay_us(500);
          PIN_out =0;
          Delay_us(500);
          }

          Xong !
          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

          Comment


          • #6
            chất lượng hơn dkhien có profile tăng tốc giảm tốc có thể tham khảo ở đây

            Click image for larger version

Name:	0501feat1fig1.gif
Views:	1
Size:	26.5 KB
ID:	1399784
            http://www.atmel.com/images/doc8017.pdf
            Generate stepper-motor speed profiles in real time | Embedded

            Comment


            • #7
              Dùng PWM hay hơn là viết lệnh như của bác Queduong ah.
              Bị gà eng nhưng đọc qua tài liệu của bác nhatson thấy nó giống phần khai báo phát xung PTO của PLC
              Thank u nhatson nhé

              Comment


              • #8
                Cái này có hai cách:
                Cách 1: PWM có sinh ra ngắt tràn và ngắt so sánh, sử dụng 1 trong 2 ngắt ngắt trên, trong vector ngắt tăng couter, khi đủ thì disable pwm
                Cách 2: nối chân output của PWM với 1 chân dùng ngắt cạnh lên (hoặc xuống), trong vector ngắt làm giống như trên
                @xin thứ lỗi, lâu quá không chơi món này nên không nhớ rõ lắm, mà hình như nó dzậy đó

                Comment


                • #9
                  Nguyên văn bởi hoang_tuan Xem bài viết
                  Dùng PWM hay hơn là viết lệnh như của bác Queduong ah.
                  Bị gà eng nhưng đọc qua tài liệu của bác nhatson thấy nó giống phần khai báo phát xung PTO của PLC
                  Thank u nhatson nhé
                  Cậu không hiểu được bản chất PWM là cái gì ... nên thiếu sáng tạo mà thôi.
                  Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                  Comment


                  • #10
                    pp linear cũng có khiếm khuyết cao cấp hơn thì bạn có thể nghiên cứu gia tốc kiểu s shape




                    tạo xung dkhien step em thấy hay đề cập 2 pán,
                    1. là step/time
                    2. là time/step

                    more
                    http://gamedev.stackexchange.com/que...able-time-step


                    hơi bị lạc đề so với yêu cầu chủ theard, dkhien bao nhiêu xung thì sau khi phát 1 xung ta trừ đi số xung phải phát thôi ah

                    b.r
                    Last edited by nhatson.elec; 07-11-2014, 11:10.

                    Comment


                    • #11
                      Cách 1 hay hơn vanlong12345 ah, đỡ tốn mất 1 ngắt hay 1 chân

                      Comment

                      Về tác giả

                      Collapse

                      hoang_tuan Tìm hiểu thêm về hoang_tuan

                      Bài viết mới nhất

                      Collapse

                      Đang tải...
                      X