Arduino SPWM 생성기 회로 – 코드 세부 사항 및 다이어그램

문제를 제거하기 위해 도구를 사용해보십시오





이 게시물에서는 순수한 사인파 인버터 회로 또는 유사한 장치를 만드는 데 사용할 수있는 Arduino를 통해 사인파 펄스 폭 변조 또는 SPWM을 생성하는 방법을 배웁니다.

그만큼 Arduino 코드는 저에 의해 개발되었으며 제 첫 번째 Arduino 코드입니다.



SPWM이란?

나는 이미 설명했다 opamp를 사용하여 SPWM을 생성하는 방법 이전 기사 중 하나에서 개별 구성 요소를 사용하여 생성하는 방법과 그 중요성에 대해 이해하기 위해 그것을 살펴볼 수 있습니다.

기본적으로 정현파 펄스 폭 변조를 의미하는 SPWM은 펄스를 변조하여 정현파 파형을 시뮬레이션하여 변조가 순수한 정현파의 속성을 얻을 수있는 펄스 변조의 한 유형입니다.



SPWM을 구현하기 위해 펄스는주기의 중심에서 점차 넓어지는 초기 좁은 폭으로 변조되고 마지막으로 사이클을 완료하기 위해 끝이 좁아집니다.

더 정확하게 말하면, 펄스는 가장 좁은 폭으로 시작하여 각 후속 펄스에서 점차적으로 넓어지고 중앙 펄스에서 가장 넓어집니다.이 후 시퀀스는 계속되지만 반대 변조로 펄스가 점차 좁아지기 시작합니다. 주기가 끝날 때까지.

비디오 데모

이것은 하나의 SPWM 사이클을 구성하며, 이는 애플리케이션 주파수 (일반적으로 50Hz 또는 60Hz)에 의해 결정된 특정 속도로 전체적으로 반복됩니다. 일반적으로 SPWM은 인버터 또는 컨버터의 MOSFET 또는 BJT와 같은 전력 장치를 구동하는 데 사용됩니다.

이 특수한 변조 패턴은 평탄한 구형파 사이클에서 일반적으로 볼 수있는 갑작스런 고 / 저 전압 스파이크를 발생시키는 대신 점차적으로 변화하는 평균 전압 값 (RMS 값이라고도 함)으로 주파수 사이클이 실행되도록합니다.

SPWM에서 점차적으로 수정되는 PWM은 표준 사인파 또는 사인파 파형의 지수 적으로 상승 / 하강하는 패턴을 밀접하게 복제하도록 의도적으로 적용되므로 사인파 PWM 또는 SPWM이라고합니다.

Arduino로 SPWM 생성

위에서 설명한 SPWM은 몇 개의 개별 부품을 사용하여 쉽게 구현할 수 있으며 Arduino를 사용하여 파형주기에 대해 더 많은 정확도를 얻을 수 있습니다.

다음 Arduino 코드는 주어진 애플리케이션에 대해 의도 한 SPWM을 구현하는 데 사용할 수 있습니다.

이런! 끔찍해 보이지만 단축하는 방법을 안다면 끝에서 자유롭게 할 수 있습니다.

// By Swagatam (my first Arduino Code)
void setup(){
pinMode(8, OUTPUT)
pinMode(9, OUTPUT)
}
void loop(){
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(2000)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(1250)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(750)
digitalWrite(8, LOW)
delayMicroseconds(500)
digitalWrite(8, HIGH)
delayMicroseconds(500)
digitalWrite(8, LOW)
//......
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(2000)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(1250)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(750)
digitalWrite(9, LOW)
delayMicroseconds(500)
digitalWrite(9, HIGH)
delayMicroseconds(500)
digitalWrite(9, LOW)
}
//-------------------------------------//

다음 포스트에서는 위의 Arduino 기반 SPWM 생성기를 사용하여 순수한 사인파 인버터 회로 만들기 ....계속 읽으세요!

위의 SPWM 코드는 성능 향상을 위해 Atton에 의해 더욱 개선되었습니다.

/*
This code was based on Swagatam SPWM code with changes made to remove errors. Use this code as you would use any other Swagatam’s works.
Atton Risk 2017
*/
const int sPWMArray[] = {500,500,750,500,1250,500,2000,500,1250,500,750,500,500} // This is the array with the SPWM values change them at will
const int sPWMArrayValues = 13 // You need this since C doesn’t give you the length of an Array
// The pins
const int sPWMpin1 = 10
const int sPWMpin2 = 9
// The pin switches
bool sPWMpin1Status = true
bool sPWMpin2Status = true
void setup()
{
pinMode(sPWMpin1, OUTPUT)
pinMode(sPWMpin2, OUTPUT)
}
void loop()
{
// Loop for pin 1
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin1Status)
{
digitalWrite(sPWMpin1, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = false
}
else
{
digitalWrite(sPWMpin1, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin1Status = true
}
}
// Loop for pin 2
for(int i(0) i != sPWMArrayValues i++)
{
if(sPWMpin2Status)
{
digitalWrite(sPWMpin2, HIGH)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = false
}
else
{
digitalWrite(sPWMpin2, LOW)
delayMicroseconds(sPWMArray[i])
sPWMpin2Status = true
}
}
}




너무 이른 : Joule Thief의 8X Overunity – 입증 된 디자인 다음 : 전체 프로그램 코드가있는 Arduino 순수 사인파 인버터 회로