111156 (ท๊อป ไหน’น) September 26, 2020, 6:13pm #1
การปรับค่าดิวตี้จาก 0-100 % ของสัญญาณ PWM ความถี่16 kHz โดยใช้ตัวต้านทานปรับค่าได้ จาก Arduino ช่วยแนะนำโค้ดโปรแกรมหน่อยครับ
111156 (ท๊อป ไหน’น) September 26, 2020, 6:18pm #2
มาจากนี้ครับ แบบชิฟเฟต แต่ผมต้องการใช้แค่เฟสเดียวครับ PWM 16kHz ใช้ R ปรับค่าได้แบบละเอียด แนะนำหน่อยครับ
111156 (ท๊อป ไหน’น) September 26, 2020, 6:24pm #3
//โค้ตตัวอย่าง
float xxx;
float yyy;
unsigned long pwm1;
unsigned long pwm2;
void setup(){
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(COM1B0) | _BV(WGM11);
TCCR1B = _BV(WGM13) | _BV(CS11);
}
void loop(){
while((analogRead(A1))<250){
}
while((analogRead(A1))>900){
OCR1A = 0;
OCR1B = 0;
}
ICR1 = 50;
pwm1 = analogRead(A1);
pwm2 = analogRead(A1);
xxx = float(pwm1);
yyy = float(pwm2);
xxx = xxx * ICR1;
yyy = yyy * ICR1;
xxx = xxx / 1024;
yyy = yyy / 1024;
OCR1A = int(28-(xxx/2));
OCR1B = int(23+(yyy/2));
}
Remy_Martin (Permpol Thanapunnamas) September 27, 2020, 12:23pm #4
จริงๆ ผมเขียนวิธีการหาค่าความถี่ตามที่เราต้องการไว้ให้แล้วนะ ครับ เราอ่านบทความหลักแล้วเข้าใจว่าอย่างไรบ้าง
ถ้ายังงงก็เริ่มอ่านที่คอมเมนนี้
1 Like
111156 (ท๊อป ไหน’น) September 28, 2020, 1:27am #5
อ่านแล้วครับ มีสูตรคำนวณความถี่ และหาค่าTop
f=1/T ,T=1/f : 16khz หา T= 1/16000 = 62.5uS
และมีโค้ดที่ใส่ค่า T แล้วได้ความถี่ออกมา
แล้วแบบเฟสเดียวทำยังไงครับ ที่ใช้Rปรับค่าปรับความกว้างของ pwm 16khz ได้ 0%-100% Preformatted text
Remy_Martin (Permpol Thanapunnamas) September 28, 2020, 1:31am #6
ถ้า เหสเดียวมันจะง่ายขึ้นหนึ่ง มันสามารถใช้คำสั่งเดียว pwm. อะไรสักยอย่าง ผมจำไม่ได้ ลองหามาคุยกันหน่อยครับ
1 Like
111156 (ท๊อป ไหน’น) September 28, 2020, 5:39am #7
ยังไงครับพี่
Remy_Martin (Permpol Thanapunnamas) September 28, 2020, 12:44pm #8
ลองหาโค้ต pwm ที่ใช้คำสั่งเดียว สร้าง ให้ผมหน่อยครับ เอามาคุยกัน
1 Like
111156 (ท๊อป ไหน’น) September 28, 2020, 6:38pm #9
111156 (ท๊อป ไหน’น) September 28, 2020, 6:40pm #10
#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...
}
1 Like
Remy_Martin (Permpol Thanapunnamas) September 28, 2020, 11:05pm #11
ใช้ครับ อันนี้แหละลองแล้วเป็นไงบ้าง
1 Like
111156 (ท๊อป ไหน’น) September 29, 2020, 7:10am #12
แล้วใช้ R ปรับดิวตี้ยังไงครับ
Remy_Martin (Permpol Thanapunnamas) September 29, 2020, 8:42am #13
คำสั่งไหนคือกำหนด ดิวตี้ไซเคิบครับ
1 Like
111156 (ท๊อป ไหน’น) September 29, 2020, 6:27pm #14
Timer1.pwm(9, 256); // setup pwm on pin 9, 25% duty cycle
Timer1.pwm(10, 256); // setup pwm on pin 10, 25% duty cycle
}
Remy_Martin (Permpol Thanapunnamas) September 30, 2020, 1:43am #15
ตรงไหนที่ เปลี่ยนแล้วค่า ดิวตี้ไซเคิ้ลจะเปลี่ยนตามครับ
1 Like
PUYIOT September 30, 2020, 3:05am #16
ขอลักษณะการนำไปใช้งานหน่อยครับ ว่าสามารถนำไปใช้อะไรได้บ้าง
1 Like
111156 (ท๊อป ไหน’น) September 30, 2020, 12:25pm #17
เลข ดิจิทัล ครับ
111156 (ท๊อป ไหน’น) September 30, 2020, 12:28pm #18
นำสัญญาณไปขับมอสเฟสครับ
Remy_Martin (Permpol Thanapunnamas) September 30, 2020, 5:01pm #19
ตรงไหนที่เราเปลี่ยนแล้ว duty เปลี่ยนตาม เราตั้งตัวแปรมาใหม่ แล้วแทนมันลงไปครับ จากนั้น ก็ใช้ map() ฟังก์ชัน แปลงค่าสูงสุดต่ำสุดเอาครับ
1 Like
111156 (ท๊อป ไหน’น) September 30, 2020, 10:01pm #20
แปลงยังไงครับ😅