Code ในการสร้าง สัญญาณพัลส์วิดท์มอดูเลชั่น (PMW) จาก Arduino

อยากให้ปรับความถี่ได้ จากภายนอกครับ รบกวนด้วยครับ

ต้องการถึง สี่คลื่นเลยหรือครับ แบ่งเป็น สองคลื่นแบบนี้ สองคู่ได้ไหม

กระทู้ที่ผมทิ้งไว้ให้นั้นก็ได้ตามนี้เลยครับ รับ feedback จาก output ด้วย

ครับผม แต่ผมลองแก้โค๊ดดูสามารถปรับดิวตี้ไซเคิลได้ แต่ความถี่ต้องเปลี่ยนที่โค๊ดครับ
มีทางที่ผมจะปรับความถี่โดยรับได้จากภายนอกไหมครับ ปล.โค๊ดนี้ได้จากของพี่หมดเลย

#include “TimerOne.h”
int analogPin1 = A5;
int pot = 0;
float xxx;
float yyy;
unsigned long pwm1;
unsigned long pwm2;

void setup(){
pinMode(9, OUTPUT);
pinMode(10, OUTPUT); Serial.begin(9600);

TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(COM1B0) | _BV(WGM11);
TCCR1B = _BV(WGM13) | _BV(CS11);
}
void loop(){
while((analogRead(A1))<200){
}
while((analogRead(A1))>900){
OCR1A = 0;
OCR1B = 0;
}
ICR1 = 50;
pwm1 = analogRead(A1);
pwm2 = analogRead(A1);
xxx = float(pwm1); Serial.print("pwm1 = "); Serial.println(pwm1);
yyy = float(pwm2); Serial.print("pwm2 = "); Serial.println(pwm2);
xxx = xxx * ICR1;
yyy = yyy * ICR1;
xxx = xxx / 1024;
yyy = yyy / 1024;
OCR1A = int(28-(xxx/2));
OCR1B = int(23+(yyy/2));

}

ถ้าเป็นโค้ตอีกรูปแบบหนึ่งจะสามารถกเจนค่า Pwm ออกมาได้เลยสองคลื่น แต่ไม่สามารถชิพเฟสกันได้ แต่สามารถปรับความถี่ได้แค่เปลี่ยนตัวเลขในตัวแปล ถ้าไม่ยึดติดว่าต้องชิพเฟสกันในทางโปรแกรม ก็ลองใช้โค้ตสำหรับดังที่กล่าวมาแล้ว เอาไปชิพเฟสกันทางฮาร์ดแวร์ดูก็อาจจะได้เหมือนกัน

ผมไม่ฟันธงว่า code ที่ผมแชร์ไว้ให้ทำไม่ได้ แต่อาจต้องศึกษาลึกลงไปอีกณ ตอนนั้นหลายปีแล้วข้อมูลน้อยมาก ไม่แน่ว่าตอนนี้อาจจะมีข้อมูลเพิ่มขึ้นมาแล้ว ลองไปค้นคว้ามาดูครับ ได้ข้อมูลแบบไหนก็ลองเอามาคุยกันอีกที