Thông báo

Collapse
No announcement yet.

TỰ LÀM 600W PURESINE INVERTER 12VDC - 220VAC (Mở lại chủ đề của thanhfdc bị xóa nhầm)

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Nguyên văn bởi thanhfdc Xem bài viết
    Power Supply Unit, là bộ nguồn của thiết bị. Chắc ý bác Thường là ATX PSU. Là cái lõi BAX chính của nguồn máy tính, bổ ra quấn lại thôi.
    hì cảm ơm bạn. mình cũng đoan đoán nó là biến áp từ atx nhưng k chắc nên hỏi lại. bạn thanhfdc có biết chỗ nào mua lõi chuẩn không. mình đang muốn quấn thử cái biến áp để làm lại phần dc dc. giờ đang dùng của bo santak nhưng nó sụt áp ảo quá. để 0 tải lên 400v mà có tải cái xuống 290 ngay. nhẽ ra thì k tải hay có tải nó phải giữ dc ở 1 mức chứ vì phần dc dc của nó cũng có phản hồi rồi mà

    Comment


    • Nguyên văn bởi moto Xem bài viết
      Hnay cúp điện e lấy cái inveter ra xài quạt máy, wên dặn bà chị nên bả mở máy nước nóng thì cái quạt máy quay rề rề ko nổi đồng thời e nghe cái inveter nó kêu è...è. Hoảng wá lại tắt kịp thời.

      E ko hỉu sao con Rshunt e thiết kế cho 600w, đág lý mở máy nước nóng nó phải báo ngắt wá dòng nhưng tại sao nó ko ngắt mà nó kêu è...è và tuột áp ra ạ. E xem lại board EGS thì thấy nó thiếu con R27 như board của bác dinhthuong80, vậy đó có phải là nguyên nhân?. Các bác bắt mạch giúp e với
      như vậy mà mạch bạn chạy có vẻ ok đó. quá tải vậy mà fet phiếc không vấn đề gì. như vậy là trâu bò rồi. giờ lo nâng công suất lên là được.

      Comment


      • Nguyên văn bởi developerv Xem bài viết
        Độ phân giải pwm chỉ có 25 cho biên áp là quá thấp.
        bạn TP_Electro cái câu in đậm này mình thấy thật sự là k có ý nghĩa. timer nó tăng đến 25 thì nó xảy ra ngắt tràn timer và cập nhật giá trị bảng sin mới cho pwm. cho dù cái này có là 250 hay 1000 cũng vẫn như nhau. bởi vì ở đây bạn đấy chọn timer để ngắt cũng là tạo pwm luôn nên nếu muốn tăng tần số thì tăng khoảng chia. chứ cái con số 25 ở đây k có ý nghĩa gì cả. cái chính ảnh hưởng chỉ là tần số pwm và số khoảng chia. còn cái 25 này là bạn đấy chọn để thời gian ngắt timer nó bằng đúng 1 khoảng sin đã chia để cập nhật pwm. nếu ở đây bạn chọn click timer chia 2 chẳng hạn thì con số 25 sẽ phải là 50 và mọi thứ k hề thay đổi. tần số pwm vẫn vậy. giá trị sin vẫn là 100 khoảng. nên mình nói cái số 25 này chỉ là tính toán sao cho nó khớp thời gian cập nhật. chứ k có ý nghĩa gì khác.

        mình nghĩ bạn đang hiểu nhầm còn số này với cái gì đó. ở đây nếu nói rõ ràng thì chia nửa chu kỳ sin cho 100 như vậy là 0.1ms 1 khoảng. và theo như code này thì trong 0.1ms đó chân pwm chỉ on và off đúng 1 lần vừa khít khoảng 0.1ms đó(chu kỳ pwm =0.1ms). và sau mỗi 0.1ms thì phải cập nhật giá trị mới cho pwm khớp với bảng sin. và cái 25 này là để tính thời gian vừa khít 0.1ms để thay đổi giá trị pwm chứ ngoài ra k có ý gì khác nghĩa khác,nếu mình chọn chia tần timer khác đi thì con số 25 này nó khác đi. nhưng nó vẫn phải tính đến 0.1ms để cập nhật pwm. và đếm bao nhiêu k quan trọng quan trọng là đếm đủ đến 0,1ms.

        "Độ phân giải pwm chỉ có 25 cho biên áp là quá thấp.
        bạn cái câu in đậm này mình thấy thật sự là k có ý nghĩa. timer nó tăng đến 25 thì nó xảy ra ngắt tràn timer và cập nhật giá trị bảng sin mới cho pwm". Mình thấy bạn sai chổ này rồi. Độ phân giải duty nó quyết định biên độ áp (sin) có mịn hay không rồi mới tính đến lấy bao nhiêu mẫu trong bảng sin để tao ra sin có biên độ "mịn" tối đa là = độ phân giải, chúng ta có thể lấy mẫu thấp hơn so với độ phân giải được. Câu đó mà bạn nói không có nghĩa thì mình cũng ko biết nói sao. Để mình nói để bạn hiểu. Mình tạm gọi thanh ghi chưa giá trị tao chu kì cho pwm là AR(thanh ghi này được nạp qua bộ đếm) và thanh ghi so sánh chứa giá trị để tạo %duty cho pwm là BR. Nói theo trường họp của bạn kia thì để tạo được spwm có 100 xung pwm (có thể gọi là 100 mẫu áp/1/2chu ki sin) mà nằm trọn trong 10ms thì đương nhiên mỗi chu kì pwm hết 100us. Nhưng mỗi chu kì pwm này được taọ nên bởi việc đếm lên giá trị bộ đếm cho đến bằng giá trị nạp vào thanh ghi AR, ở đây là 25 vì 25x4us =100us của 1 chu kì pwm(khoảng thời gian 1 ngắt pwm xảy ra). Do đó, độ phân giải là 100%duty biên đô áp tương ứng với tối đa 25 bậc(quá bé chứ còn gì nữa bạn). Ở đây bạn tính ra được Fpwm là 10khz. Nếu bạn nói giá trị nạp vào thanh ghi AR không có nghĩa thì bây giờ giả sử mình nạp vào 250, tức có nghĩa bộ đếm tốn thòi gian 250x4us = 1ms cho một chu kì pwm cho nên Fpwm nó giảm chứ sao không mà bạn nói ko có nghĩa? Thanh ghi so sánh tạo duty không liên quan đến chu kì pwm ở đây. Giá trị nó ở đây Max là 25 ( nếu trong non-inverting Compare Output mode) thì ngỏ ra pwm gần như luôn mưc cao và để có bậc áp ra 50% thì giá trị nạp vào là 12.5. Chỉ có thể tao sin tối ra 25 bậc cho áp 310vdc thì độ phân giải không phải quá bé còn là gì. Mỗi bậc áp cách nhau đến 12.4v quá xa.

        Tóm lại, việc bạn dùng 1 timer tạo duty pwm và update bảng sin(giá trị thanh ghi BR, AR luôn ko đổi) sau mỗi chu kì pwm (khi có ngắt tràn BR), thì nội dung thanh ghi AR lớn hay bé đều ảnh hưởng đến trước tiên đến quyết định số lần tạo mẫu sin max cho bảng sin và tần số pwm. Giá trị thanh ghi AR nhỏ thì có thể tạo được tần số Fpwm cao hơn nhưng hạn chế độ phân giải khi tạo bản sin, giá trị thanh ghi AR lớn thì tạo được tần số Fpwm thấp hơn nhưng dải lấy mẫu cho bản sin rộng hơn, có thể lấy được nhiều mẫu hơn.
        Tất cả các ý trên đều quy chung cho cùng 1 Fsin.

        Comment


        • Nguyên văn bởi developerv Xem bài viết

          như vậy mà mạch bạn chạy có vẻ ok đó. quá tải vậy mà fet phiếc không vấn đề gì. như vậy là trâu bò rồi. giờ lo nâng công suất lên là được.
          Fet không bị gì chắc có thể là nhờ phần DC nó sụt áp. Mạch dò dòng ko tác động có thể bạn đặt ngưởng công suất cao quá so với cs phần DC-DC.

          Mình dùng mos cầu H loại 23n50 không tản nhiệt nhưng chạy 1 cái bóng tròn 60w + 2 cái quạt mà cũng ko nóng.

          Comment


          • Nguyên văn bởi developerv Xem bài viết

            Hì bạn cho mình hỏi ngu cái là lõi pssu là lõi gì nhỉ.mình cũng chuẩn bị làm lại phần dc dc vì hiện tại đang dùng dc dc của bo santak.khi có tại nó sụt xuống còn 290v kể cả thay trở hồi tiếp.áp nó chỉ co khi không tải.cứ có tải là về 290v mới khó chịu chứ
            Quấn thêm cho nó 10-15 vòng nữa đi, vì nó có 80 vòng/3x3vòng nên áp bình 11V là ra còn 290V à. Mình lấy lõi BAX nguồn PC bình thường thôi.

            Comment


            • Nguyên văn bởi developerv Xem bài viết
              Code:
              /*
              * gpio.c
              *
              * Created: 7/22/2016 7:49:10 PM
              * Author : Duy-Muoi
              */
              
              #include <avr/io.h>
              #define F_CPU 16000000UL // 1 MHz
              #include <util/delay.h>
              #include <avr/interrupt.h>
              
              
              
              volatile unsigned char chuyentt=0; //bi?n chuyen trang thai chan ra sin
              volatile unsigned char valtsin=0; //chay bang sin
              
              unsigned char bangsin[]={3,6,9,12,15,18,21,24,27,30,34,37,40,43,46,49,52,55,58,60,63,66,69,72,75,78,81,84,87,90,92,95,98,101,104,106,109,112,114,117,120,122,125,128,130,133,135,138,140,143,145,148,150,153,155,157,160,162,164,166,169,171,173,175,177,179,181,183,185,187,189,191,193,195,197,199,200,202,204,205,207,209,210,212,213,215,216,217,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,236,237,238,238,239,239,240,240,241,241,242,242,242,243,243,243,243,243,243,243,243,243,243,243,243,243,242,242,242,241,241,240,240,239,239,238,238,237,236,236,235,234,233,232,231,230,229,228,227,226,225,224,223,221,220,219,217,216,215,213,212,210,209,207,205,204,202,200,199,197,195,193,191,189,187,185,183,181,179,177,175,173,171,169,166,164,162,160,157,155,153,150,148,145,143,140,138,135,133,130,128,125,122,120,117,114,112,109,106,104,101,98,95,92,90,87,84,81,78,75,72,69,66,63,60,58,55,52,49,46,43,40,37,34,30,27,24,21,18,15,12,9,6,3,0};
              
              
              
              ISR (TIMER2_COMPA_vect){
              OCR0A = bangsin[valtsin];// set PWM for 50% duty cycle
              valtsin ++;
              if(chuyentt==1){//chan 1 và 3
              PORTC = 0b101;//101 chan pc0 va pc2
              }
              if(chuyentt==2){
              PORTC = 0b1010;//1010 chan pc1 va pc3
              chuyentt = 0;
              }
              if(valtsin == 250){
              chuyentt++;
              valtsin=0;//t?t chân ra ?? ch?ng deathtime
              //tat het chan ra
              PORTC = 0x00;
              }
              
              }
              int main(void)
              {
              //pwm cho timer 0
              
              TCCR0A = (1<<COM0A1)|(1<<WGM01)|(1<<WGM00);
              TCCR0B = (1<<CS00); //khong chia tan
              DDRD |=(1<<DDD6);
              
              //setup timer 2
              TIMSK2 = (1<<OCIE2A);//cho phép ng?t timer 2
              TCCR2A |= (1<<WGM21);
              TCCR2B |= (1<<CS22);
              OCR2A = 9;//tang t? 1->9 t??ng ???ng v?i 10ms ()
              TCNT2 = 0;
              sei();//cho phep ngat toan cục
              
              DDRC = 0xff;
              PORTC = 0x00;
              DDRB = 0b11110000;
              PORTB = 0x00;
              /* Replace with your application code */
              
              while (1)
              {
              
              
              }
              }
              Mình xin giải thích sơ qua code sau nha. giờ k kịp viết. nhưng sơ sơ là timer0 tạo pwm nếu mà mình tính toán timer0 có thời gian ngắt = với khoảng sin đã chia thì sẽ k cần timer 2 để cập nhật bảng sin nữa. nhưng mình ngại tính toán lại nên hiện tại timer0 này chạy từ 0 đến 255 xung sẽ tràn và reset pwm (hết 1 chu kỳ pwm).OCR0A này chính là giá trị mà ghi thanh ghi timer 0 = giá trị nàyy thì nó lật trạng thái chân PWM. cái này cập nhật giá trị bảng sin vào.
              hiện tại mình dùng thạch anh 16mhz nên 1us sẽ chạy dc 16 chu kỳ máy. và 256 chu kỳ máy thì hết 16us như vậy là chu kỳ của pwm là 16us.
              giờ mình dùng timer 2 để cập nhật giá trị cho pwm. thời gian cập nhật giá trị bảng sin phải bằng thời gian mình đã chia nửa chu kỳ sin. ở đây mình chia thành 250 đoạn. và mình tính toán timer2 khi nó ngắt sao cho thời gian tràn của nó bằng đúng khoảng thời gian đoạn sin mình chia để cập nhật bảng sin
              OCR0A = bangsin[valtsin];
              valtsin :
              cái này nó mỗi lần cập nhật bảng sin nó tăng lên 1 và như vậy lần lượt giá trị sin dc đưa vào pwm theo đúng thời gian đã chia.
              khi đủ 250 lần có nghĩa hết chu kỳ sin thì reset lại biến đếm. và mình tắt hết các chân để tạo deathtime luôn. thật ra thì trong bảng sin đoạn 250 này nó cũng bằng 0 và mình tắt như vậy k bị trái.
              Code:
              if(valtsin == 250){
              chuyentt++;
              valtsin=0;//t?t chân ra ?? ch?ng deathtime
              //tat het chan ra
              PORTC = 0x00;
              }
              ở trên mình dùng 4 chân của port c để đảo trạng thái. có 2 chân thì mình sử dụng 4066 kết hợp với chân pwm để tạo ra 2 chân pwm như mình nói trước đó. như vậy là 4 chân ra sẽ có 2 chân pwm và 2 chân đảo trạng thái mỗi nửa chu kỳ.
              giừo buồn ngủ có thể viết không chuẩn lắm nhưng sơ sơ là vậy. có gì bạn cứ hỏi mình sẽ giải thích rõ hơn về code của mình
              --
              thêm chút ở đây mình có biến chuyentt biến này là để khi chạy hết 1 lượt bảng sin có nghĩa hết nửa chu kỳ thì mình sẽ đổi sang 2 chân khác(1 chân pwm 1 chân luôn mở - mở hết 1 nửa chu kỳ lại off để sang 2 chân kia ) .và chạy hêt nửa chu kỳ nữa lại đảo về 2 chân đầu. chứ xen kẽ vậy
              Bạn cho mình hỏi về truy cập bảng dữ liệu giống của bạn như trên nhưng là 16 bít có nghĩa là kiểu unsigned int thì làm sao để lấy ra nữa thấp và nữa cao riêng của dữ liệu được vậy bạn.
              vd: unsigned int bangsin[]=....

              isr
              OCR0A = bangsin[valtsin]; ????lệnh này giờ như thế nào khi bảng data chứa giá trị 2byte nhỉ?
              thanhks.

              Comment


              • Cứu mình với, hôm qua thay tụ dầu của quạt cho đúng 2.2uF rồi cắm cái máy đo hạ áp bằng tụ vào để đo hiệu suất thế là nghe è è rồi toi mất mạch EGS và mấy con 740!

                Mình soi sóng thì thấy các chân vào IR2110 vẫn có tín hiệu SPWM 5V nhưng chỉ một chân số 1 của một con là có SPWM12V, vậy là chết 2 con IR2110 rồi phải không, mua mới thay là chạy phải không nhỉ?

                Tiếc quá đi mất, bộ pure sin đầu tay của mình, hu hu!!!!!
                Attached Files

                Comment


                • Lúc trước tớ cũng bị tèo 2 bo EGS, kiểm tra thấy con IR2113S nằm gần con EG8010 bị chết, thay con khác vào chạy được luôn.

                  Comment


                  • Nguyên văn bởi TP_Electro Xem bài viết
                    Không nhầm đâu bạn. Mình cũng nói là chỉ sử dụng 1 timer và ngắt tràn TOP của nó để update duty. Bạn ấy chia 100 khoảng trong 10ms tức mỗi khoảng chỉ có 0,1ms = 100us <=> Fspwm = 10khz. mà clock timer chọn là chia 16Mhz/64 = 0,25Mhz => Ttimer clock = 4us. Vậy cứ 4us là tăng được 1 giá trị mà mỗi khoảng chỉ có 100us nên dutyMAX = 100/4 = 25. Vậy nạp vào ICR1 là 25 và Fspwm chỉ được có 10khz. Độ phân giải pwm chỉ có 25 cho biên áp là quá thấp.
                    Em nghĩ theo cách này để tạo xung pwm
                    TP_Electro thế cần chia như thế nào để đạt được như ý vậy bác ??? (việc tăng lên thì không khó nhưng ko biết như nào là đủ )
                    Nếu e để clock=16Mhz và vẫn chia 100 khoảng lúc này ICR1=1600 đã được chưa bác ???
                    developerv cái deadtime tính sao bác ??? e thử với cái code e viết ở trên với điện áp 20v(sac laptop) thì FET nóng mà ko thu được j cả

                    TP_Electro developerv thank 2 bác đã đọc code lởm của e .Cuối tuần về quê lên không theo dõi được.

                    Comment


                    • Nguyên văn bởi TP_Electro Xem bài viết


                      "Độ phân giải pwm chỉ có 25 cho biên áp là quá thấp.
                      bạn cái câu in đậm này mình thấy thật sự là k có ý nghĩa. timer nó tăng đến 25 thì nó xảy ra ngắt tràn timer và cập nhật giá trị bảng sin mới cho pwm". Mình thấy bạn sai chổ này rồi. Độ phân giải duty nó quyết định biên độ áp (sin) có mịn hay không rồi mới tính đến lấy bao nhiêu mẫu trong bảng sin để tao ra sin có biên độ "mịn" tối đa là = độ phân giải, chúng ta có thể lấy mẫu thấp hơn so với độ phân giải được. Câu đó mà bạn nói không có nghĩa thì mình cũng ko biết nói sao. Để mình nói để bạn hiểu. Mình tạm gọi thanh ghi chưa giá trị tao chu kì cho pwm là AR(thanh ghi này được nạp qua bộ đếm) và thanh ghi so sánh chứa giá trị để tạo %duty cho pwm là BR. Nói theo trường họp của bạn kia thì để tạo được spwm có 100 xung pwm (có thể gọi là 100 mẫu áp/1/2chu ki sin) mà nằm trọn trong 10ms thì đương nhiên mỗi chu kì pwm hết 100us. Nhưng mỗi chu kì pwm này được taọ nên bởi việc đếm lên giá trị bộ đếm cho đến bằng giá trị nạp vào thanh ghi AR, ở đây là 25 vì 25x4us =100us của 1 chu kì pwm(khoảng thời gian 1 ngắt pwm xảy ra). Do đó, độ phân giải là 100%duty biên đô áp tương ứng với tối đa 25 bậc(quá bé chứ còn gì nữa bạn). Ở đây bạn tính ra được Fpwm là 10khz. Nếu bạn nói giá trị nạp vào thanh ghi AR không có nghĩa thì bây giờ giả sử mình nạp vào 250, tức có nghĩa bộ đếm tốn thòi gian 250x4us = 1ms cho một chu kì pwm cho nên Fpwm nó giảm chứ sao không mà bạn nói ko có nghĩa? Thanh ghi so sánh tạo duty không liên quan đến chu kì pwm ở đây. Giá trị nó ở đây Max là 25 ( nếu trong non-inverting Compare Output mode) thì ngỏ ra pwm gần như luôn mưc cao và để có bậc áp ra 50% thì giá trị nạp vào là 12.5. Chỉ có thể tao sin tối ra 25 bậc cho áp 310vdc thì độ phân giải không phải quá bé còn là gì. Mỗi bậc áp cách nhau đến 12.4v quá xa.

                      Tóm lại, việc bạn dùng 1 timer tạo duty pwm và update bảng sin(giá trị thanh ghi BR, AR luôn ko đổi) sau mỗi chu kì pwm (khi có ngắt tràn BR), thì nội dung thanh ghi AR lớn hay bé đều ảnh hưởng đến trước tiên đến quyết định số lần tạo mẫu sin max cho bảng sin và tần số pwm. Giá trị thanh ghi AR nhỏ thì có thể tạo được tần số Fpwm cao hơn nhưng hạn chế độ phân giải khi tạo bản sin, giá trị thanh ghi AR lớn thì tạo được tần số Fpwm thấp hơn nhưng dải lấy mẫu cho bản sin rộng hơn, có thể lấy được nhiều mẫu hơn.
                      Tất cả các ý trên đều quy chung cho cùng 1 Fsin.

                      nhìn đến đây có thể thấy mình hiểu nhầm ý bạn chút. đúng là bạn đó chọn 25 xugn ngắt timer và 4us 1 lần đếm như vậy là không ổn.mình k để ý đến cái vấn đề ở 4us này mà mình lại nói tập trung vào con số 25 này. nói đơn giản ở trường hợp này mỗi lần đếm lên 4us như vậy đếm đến 25 thì quá ngắn. vì trong quá trình đếm từ 0->25 sẽ có khoảng thời gian để đổi trạng thái chân pwm như vậy nếu 100 mẫu mà ở đây đếm có 25 thì chỉ dc tối đa 25 mẫu vì có nhiều mẫu bị trùng nhau . nên ở đây tối thiểu chia cho 100 thì phải chọn ít nhất đếm đến 100 là hết 1 chu kỳ thì sẽ hợp lý hơn.

                      Comment


                      • Nguyên văn bởi developerv Xem bài viết


                        nhìn đến đây có thể thấy mình hiểu nhầm ý bạn chút. đúng là bạn đó chọn 25 xugn ngắt timer và 4us 1 lần đếm như vậy là không ổn.mình k để ý đến cái vấn đề ở 4us này mà mình lại nói tập trung vào con số 25 này. nói đơn giản ở trường hợp này mỗi lần đếm lên 4us như vậy đếm đến 25 thì quá ngắn. vì trong quá trình đếm từ 0->25 sẽ có khoảng thời gian để đổi trạng thái chân pwm như vậy nếu 100 mẫu mà ở đây đếm có 25 thì chỉ dc tối đa 25 mẫu vì có nhiều mẫu bị trùng nhau . nên ở đây tối thiểu chia cho 100 thì phải chọn ít nhất đếm đến 100 là hết 1 chu kỳ thì sẽ hợp lý hơn.
                        Đúng rồi đó bạn, Nó chỉ có tối đa được 25 bậc cho nữa chu kì sin vậy 1 sườn dốc chỉ có 12,5 thì quá thưa cho áp 310vdc.

                        Comment


                        • TP_Electro bạn dùng timer 16 bit chi cho cực. cứ tính 8 bit cho lành. chia tần sao cho hợp lý đếm đến 255 ngắt là vừa. như vậy bạn chia sin ra tầm 255 luôn hoặc 250 khoảng vẫn ok.đấy là tính cho cách dùng 1 timer. còn nếu làm 2 timer thì 1 timer 0 để pwm và timer 1 hoặc 2 để cập nhật giá ttrị pwm thì nhàn hơn vì tần số pwm chọn thoải mái pwm chạy riêng còn timer cập nhật pwm riêng.k phải tính toán nhiều

                          Comment


                          • Không đc đâu bạn. Vì atmega8 clock of timer nó chỉ có chia 1,8,64,... nên nó quá nhanh hoặc quá chậm nếu dùng chỉ 1 timer. Nếu bạnk dùng scaler chi 1 nếu dùng đếm 8bit tạo chu ki pwm thì nó quá nhanh cho 200 khoảng trong 10ms, tức ko thể nào tạo đc 200 chu ki pwm mà nó tạo lớn hơn rất nhiều trong 10ms đó. Và ngược lại bạn chọn scaler lớn thì ko thể tạo được số khoảng nhiều trong 10ms đó. Số khoảng này tỉ lệ thuận với tần số pwm nhé bạn. Ko tin bạn thử xem có dc ko là biết. Hơn nữa mình chọn giá trị thanh ghi ICRx càng lớn và tần số Fpwm nhỏ thì khoảng ngắt mình có thời gian nhiều để code xử lí nhiều hơn.

                            ​Mình đã viết xong code chạy Fpwm 22khz chỉ dùng timer1 với giá trị 727 với bảng sin 220 giá trị OCRx cho 10ms. Giờ đang học đến phần ADC để dò hồi tiếp cũng gần xong chỉ còn giao diện giữa hai phần là coi như xong. Ta 16Mhz. scaler chia 1.

                            Comment


                            • Nguyên văn bởi TP_Electro Xem bài viết
                              Không đc đâu bạn. Vì atmega8 clock of timer nó chỉ có chia 1,8,64,... nên nó quá nhanh hoặc quá chậm nếu dùng chỉ 1 timer. Nếu bạnk dùng scaler chi 1 nếu dùng đếm 8bit tạo chu ki pwm thì nó quá nhanh cho 200 khoảng trong 10ms, tức ko thể nào tạo đc 200 chu ki pwm mà nó tạo lớn hơn rất nhiều trong 10ms đó. Và ngược lại bạn chọn scaler lớn thì ko thể tạo được số khoảng nhiều trong 10ms đó. Số khoảng này tỉ lệ thuận với tần số pwm nhé bạn. Ko tin bạn thử xem có dc ko là biết. Hơn nữa mình chọn giá trị thanh ghi ICRx càng lớn và tần số Fpwm nhỏ thì khoảng ngắt mình có thời gian nhiều để code xử lí nhiều hơn.

                              ​Mình đã viết xong code chạy Fpwm 22khz chỉ dùng timer1 với giá trị 727 với bảng sin 220 giá trị OCRx cho 10ms. Giờ đang học đến phần ADC để dò hồi tiếp cũng gần xong chỉ còn giao diện giữa hai phần là coi như xong. Ta 16Mhz. scaler chia 1.

                              Bác cho e xem code của bác với chứ e loay hoay mà chẳng biết làm ntn cho đúng cả

                              Comment


                              • Nguyên văn bởi TP_Electro Xem bài viết
                                Không đc đâu bạn. Vì atmega8 clock of timer nó chỉ có chia 1,8,64,... nên nó quá nhanh hoặc quá chậm nếu dùng chỉ 1 timer. Nếu bạnk dùng scaler chi 1 nếu dùng đếm 8bit tạo chu ki pwm thì nó quá nhanh cho 200 khoảng trong 10ms, tức ko thể nào tạo đc 200 chu ki pwm mà nó tạo lớn hơn rất nhiều trong 10ms đó. Và ngược lại bạn chọn scaler lớn thì ko thể tạo được số khoảng nhiều trong 10ms đó. Số khoảng này tỉ lệ thuận với tần số pwm nhé bạn. Ko tin bạn thử xem có dc ko là biết. Hơn nữa mình chọn giá trị thanh ghi ICRx càng lớn và tần số Fpwm nhỏ thì khoảng ngắt mình có thời gian nhiều để code xử lí nhiều hơn.

                                ​Mình đã viết xong code chạy Fpwm 22khz chỉ dùng timer1 với giá trị 727 với bảng sin 220 giá trị OCRx cho 10ms. Giờ đang học đến phần ADC để dò hồi tiếp cũng gần xong chỉ còn giao diện giữa hai phần là coi như xong. Ta 16Mhz. scaler chia 1.
                                Vậy tạm thời dùng 2 timer như mìnhvđi.dạo nạy bận cv nhậu nhèm suốt nên chưa thử chuyển sang 1 timer.như hiện tại tính ra mình dùng 2 tiner pwm mình chia tần cho 4 và tính ra thì 1 khoảng sin sẽ có 2.5 lânf pwm. Nếu nghĩ sơ sơ thì sẽ k chuầnr nhưng mình vẽ ra giấy rồi tuy 2.5 k tròn nhưng k hề làm ảnh hưởng đến bậc sin.mình chia 250 bậc thì vẫn chuẩn 250 bậc nên anh rm hoàn toàn yên tâm về cách pwm chạy 1 nẻo còn timer cập nhật pwm chạy 1 nẻo( ở đây vẫn phải lưu ý là tần số pwm phải bằng hoặc cao hơn tânf số khi đã chia ra bậc sin.mình k biết gọi là gì cho chuẩn nữa.nhưng vơi avr chọn pwm 8 bit k chia tầm thì bảng sin có thể chia thoái mái trên dưới 500 bậc

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X