Advertisement
Dhayaik90

1 Phase SPWM Inverter

Dec 21st, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. //Single Phase SPWM Inverter (Nano/UNO)
  2.  
  3. #include <TimerOne.h>
  4.  
  5. int outA =9;
  6. int outB =10;
  7. int total_sample =200;
  8. int f_sine =50;
  9. int f_pwm =20000;
  10. float sinus[200];
  11. float phi=3.14;
  12. int flag = 0;
  13. int sample=0;
  14. int potinput = A1;
  15. int feedbackinput = A0;
  16. int potinputval;
  17. int feedbackinputval;
  18. int A;
  19.  
  20.  
  21. void setup() {
  22. for (int sudut=0;sudut<total_sample;sudut++){
  23. float derajat= sudut*(180./total_sample)*phi/180;
  24. sinus[sudut]=sin(derajat);
  25. }
  26. float t_pwm=(1000./f_pwm)*1000;
  27. delay(1000);
  28. pinMode(potinput, INPUT);
  29. pinMode(feedbackinput, INPUT);
  30. A = 0;
  31. Timer1.initialize(t_pwm);
  32. Timer1.attachInterrupt(generate_sinus);
  33. }
  34.  
  35. void loop() {
  36. potinputval = analogRead(potinput);
  37. potinputval = map(potinputval, 1023, 0, 1000, 0);
  38. feedbackinputval = analogRead(feedbackinput);
  39. feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
  40. while (potinputval > feedbackinputval) {
  41. if (A == 995) {
  42. potinputval = analogRead(potinput);
  43. potinputval = map(potinputval, 1023, 0, 1000, 0);
  44. feedbackinputval = analogRead(feedbackinput);
  45. feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
  46. }
  47. else {
  48. A = A + 1;
  49. potinputval = analogRead(potinput);
  50. potinputval = map(potinputval, 1023, 0, 1000, 0);
  51. feedbackinputval = analogRead(feedbackinput);
  52. feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
  53. }
  54. }
  55. while (potinputval < feedbackinputval) {
  56. if (A == 0) {
  57. potinputval = analogRead(potinput);
  58. potinputval = map(potinputval, 1023, 0, 1000, 0);
  59. feedbackinputval = analogRead(feedbackinput);
  60. feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
  61. }
  62. else {
  63. A = A - 1;
  64. potinputval = analogRead(potinput);
  65. potinputval = map(potinputval, 1023, 0, 1000, 0);
  66. feedbackinputval = analogRead(feedbackinput);
  67. feedbackinputval = map(feedbackinputval, 1023, 0, 1000, 0);
  68. }
  69. }
  70. }
  71.  
  72. void generate_sinus(){
  73. if(sample>total_sample && flag==0){
  74. flag=1;
  75. sample=0;
  76. }
  77. if(sample>total_sample && flag==1){
  78. flag=0;
  79. sample=0;
  80. }
  81. sample++;
  82. if(flag==0){
  83. Timer1.pwm(outA,(sinus[sample]*A));
  84. Timer1.pwm(outB,0);
  85. }
  86. if(flag==1){
  87. Timer1.pwm(outB,(sinus[sample]*A));
  88. Timer1.pwm(outA,0);
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement