ใช้ดิวตี้ไซเคิลปรับค่าความเร็ว มอเตอร์ dc 24 v

อยากทราบการตั้งกำหนดค่าความถี่กับค่าดิวตี้ว่าคำนวณอย่างไรครับ

1 Likes

ตอนนี้รู้อะไร บ้าง ลองทำอะไรไปบ้างครับ อยากรู้ว่าเราเข้าใจการเขียนโปรแกรมสร้างสัญญาณ PWM ถึงไหนแล้ว ถ้าตอบว่าไม่รู้อะไรเลยพี่แนะนำ ให้ไปหาความรู้มาก่อนใน Google มีหมดครับ ถึงจะคุยกับพี่รู้เรื่องเวลาพี่บอก

1 Likes

ผมอยากทราบสูตรการตั้งความถี่อ่ะครับพี่เข้าไปอ่านหลายเว็บแล้วมันไม่ค่อยรู้เรื่องเท่าไหรครับ
ตัวนี้อ่ะครับ TCCR2A = _BV(COM2A1)|_BV(COM2B1)|_BV(WGM20)|_BV(WGM22);
TCCR2B = _BV(CS21);
OCR2A = pot;

1 Likes

ได้ลองตามไปดูที่ดาต้าชีต หรือยังครับ ว่า

TCCR2A = _BV(COM2A1)|_BV(COM2B1)|_BV(WGM20)|_BV(WGM22);
TCCR2B = _BV(CS21);
OCR2A = pot;

คืออะไรหน้าตามันเป็นอย่างไร เราอ่านแล้วเราเข้าใจแบบไหน

2 Likes

ในเบื้องต้นเอาโค้ตนี้ไปลองรันดูครับ อย่างง่ายสุดที่สามารถสร้างสัญญาณจาก Arduino

#include "TimerOne.h"

void setup()
{
  pinMode(9, OUTPUT);
  Timer1.initialize(20);         // initialize timer1, and set at 50kHz
  Timer1.pwm(9, 256);         // setup pwm on pin 9, 25% duty cycle
  Timer1.pwm(10, 256);       // setup pwm on pin 10, 25% duty cycle
}

void loop()
{
  // your program here...
}
2 Likes

เอาไปรันใน Arduino แล้วใช้สโคปจับ ถ่ายรูปลงมาให้ดูด้วยครับ ผมจะอธิบายไปทีละส่วน ถ้าสะดวกใช้โปรแกรมซิมมาได้ก็แล้วแต่ครับ

2 Likes

พี่มี facebook ไหมครับ จัได้ติดต่อได้ง่ายครับ ต้อนนี้ผมปรับความถี่ได้แล้วครับเหลือปรับค่าดิวตี้ให้เเวลู้ตามแรงดันที่จ่ายเข้าให้ครับ

2 Likes

อยากให้ติดต่อในนี้ครับ FB ผมไม่สะดวกเวลาจะอธิบาย ในนี้ถ้าใช้ pc แชทมีให้ครับ ถ้าใช้ในมือถือส่งเป็นเมล ถ้าไม่มีหัวข้อจะคุยทั่วไป ใส่ไตเติลว่า @mail แล้วส่งมาชื่อผมครับ

2 Likes

อีกอย่างผมออนในเว็บนี้มากกว่า FB ครับ ช่วงนี้งานยุ่งเลยไม่ค่อยได้ออนเลย :joy:

2 Likes

เดียวผมจะทดลองดูก่อนนะครับพี่ ถ้าได้ยังไงจะส่งให้พี่ดูนะครับ เพื่อพี่มีวิธีที่ดีกว่านี้ครับ

2 Likes

มีอะไรคืบหน้าลงในนี้เลยนะครับ ถ้าผมรู้ผมจะตอบให้ แต่ถ้าผมไม่รู้ผมจะให้ผู้รู้มาช่วยตอบให้อีกที

1 Likes


ผมเพิ่มค่าดิวตี้ ++ มันเพิ่มขึ้นถึง 100 แล้วค่าความถี่ก็เพี้นยนไปเลยครับ
ผมอยากทราบว่าเราดิวตี้++ ถึงค่าถึงแล้วให้มันหยุดได้ไหมครับ

2 Likes
#include "TimerOne.h"
int pot = 156;
float P1=127;
float P2=1;
double Vout =64;  

void setup()
{
  Serial.begin(9600);
  Timer1.initialize(40);
  OCR2A =pot;
  Timer1.pwm(10,pot);
  TCCR2A = _BV(COM2A1)|_BV(COM2B1)|_BV(WGM20)|_BV(WGM22);
  TCCR2B = _BV(CS22);
  pinMode(1,INPUT);
  pinMode(3,INPUT);
  pinMode(10,OUTPUT);
  }
void loop()
{
 
  double I = analogRead(A1);
  double V  = analogRead(A3);
  Serial.print("I=");
  Serial.print(I);
  Serial.print(" ");
  Serial.print("V=");
  Serial.print(V);
  Serial.print(" ");
  double Pk1 = I*V;
  Serial.print("Pk1 = ");
  Serial.print(Pk1);
  Serial.print(" ");
  
   if (Pk1<pot)
    {
       (Vout ++,P1 );
       
    }
    else(Vout --);
   

     
  Serial.print("Vout = ");
  Serial.println(Vout);
  analogWrite(10,Vout);
}
ตัวนี้เปลี่ยนโคตรโปรแกรมที่เขียนครับ
2 Likes

หมายถึงว่าเราจะให้ค่าดิวตี้มันถึง 100 แล้วหยุดที่ 100 ใช่ป่ะ

1 Likes

ปัญหาคือเมื่อตั้ง 100 แล้วมอสเฟตทำงานหนักเกินครับ ร้อนมากผมอยากให้มันทำงานที่ 60 -70 เปออร์เช็นแต่ยังคงสามารถแสรูตามค่าแรงดันได้อยู่ครับ

1 Likes

ความหมายคือ เวลาแรงดันเข้ามาเยอะ ดิวตี้จะลดลงครับ เมื่อแรงดันมาน้อยดิวตี้จะเยอะขึ้นครับ

1 Likes

เค้าเรียกว่าทำ feedback ป้อนกลับครับ สามารถทำได้ครับ

2 Likes

พี่พอมีแนวทางไหมครับ

1 Likes

โค้ดจะเป็นการจ่าย PWM ออกมาแบบสำเร็จรูปครับ คือ กำหนดค่า Timer1.initialize(40); เท่าไหร่มันก็จับค่าไปเจน PWM ออกมาให้เลย เราจึงไม่สามารถเข้าไปยุ่งกับโครงสร้างของสัญญาณ อ้างอิงได้ วิธีแก้คือใช้ PWM อีกรูปแบบหนึ่งที่ละเอียดขึ้นในระดับสัญญาณอ้างอิง จับ pot มาจาก Vout แล้วเอามาเข้าสมการให้ย่านแมคสุดเหลือแค่ 0 - 5 V เพราะว่าบอร์ดสามารถรับไฟ Vin ได้ไม่เกิน 5 V ถ้าจำไม่ผมถ้าเกินกว่านั้นบอร์ดพัง จากนั้นเอาค่า 0 - 5 v มาแปลงทำสัญญาณ ปรับค่าดิวตี้อีกที

2 Likes