Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Single Phase SPWM Inverter (Nano/UNO)
- #include <TimerOne.h>
- int outA =9;
- int outB =10;
- int total_sample =200;
- int f_sine =50;
- int f_pwm =20000;
- float sinus[200];
- float phi=3.14;
- int flag = 0;
- int sample=0;
- int potinput = A1;
- int feedbackinput = A0;
- int potinputval;
- int feedbackinputval;
- int A;
- void setup() {
- for (int sudut=0;sudut<total_sample;sudut++){
- float derajat= sudut*(180./total_sample)*phi/180;
- sinus[sudut]=sin(derajat);
- }
- float t_pwm=(1000./f_pwm)*1000;
- delay(1000);
- pinMode(potinput, INPUT);
- pinMode(feedbackinput, INPUT);
- A = 0;
- Timer1.initialize(t_pwm);
- Timer1.attachInterrupt(generate_sinus);
- }
- void loop() {
- potinputval = analogRead(potinput);
- potinputval = map(potinputval, 1023, 0, 1000, 0);
- feedbackinputval = analogRead(feedbackinput);
- feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
- while (potinputval > feedbackinputval) {
- if (A == 995) {
- potinputval = analogRead(potinput);
- potinputval = map(potinputval, 1023, 0, 1000, 0);
- feedbackinputval = analogRead(feedbackinput);
- feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
- }
- else {
- A = A + 1;
- potinputval = analogRead(potinput);
- potinputval = map(potinputval, 1023, 0, 1000, 0);
- feedbackinputval = analogRead(feedbackinput);
- feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
- }
- }
- while (potinputval < feedbackinputval) {
- if (A == 0) {
- potinputval = analogRead(potinput);
- potinputval = map(potinputval, 1023, 0, 1000, 0);
- feedbackinputval = analogRead(feedbackinput);
- feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
- }
- else {
- A = A - 1;
- potinputval = analogRead(potinput);
- potinputval = map(potinputval, 1023, 0, 1000, 0);
- feedbackinputval = analogRead(feedbackinput);
- feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
- }
- }
- }
- void generate_sinus(){
- if(sample>total_sample && flag==0){
- flag=1;
- sample=0;
- }
- if(sample>total_sample && flag==1){
- flag=0;
- sample=0;
- }
- sample++;
- if(flag==0){
- Timer1.pwm(outA,(sinus[sample]*A));
- Timer1.pwm(outB,0);
- }
- if(flag==1){
- Timer1.pwm(outB,(sinus[sample]*A));
- Timer1.pwm(outA,0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement