From 82cf0cff2ddbb1d0b7c1ab301970e0f1966983f9 Mon Sep 17 00:00:00 2001 From: "Tom, DL7BJ" Date: Fri, 9 Jun 2023 16:40:44 +0200 Subject: [PATCH] =?UTF-8?q?Python=20Script=20f=C3=BCr=20Berechnung=20der?= =?UTF-8?q?=20Sinus-Tabelle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 ++++ Tools/pwm_sinewave.py | 63 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 .gitignore create mode 100644 Tools/pwm_sinewave.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c8bccb4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*~ +.*.swp +Audio +External +Source diff --git a/Tools/pwm_sinewave.py b/Tools/pwm_sinewave.py new file mode 100644 index 0000000..b961cb4 --- /dev/null +++ b/Tools/pwm_sinewave.py @@ -0,0 +1,63 @@ +#!/usr/bin/python +# +# pwm_sinewave +# +# Calculate values for generate a PWM table for a Sinewave +# Used on a AVR ATMEGA 328 +# +# 2013-02-24 tom@dl7bj.de Tom, DL7BJ +# +frequency = 488 +cpuclock = 8000000 +pwmbit = 32 +maxdutycycle = 98 +mindutycycle = 2 + +def compute_sinewave(pwmbit, fpeaktopeak, zerobeat): + t = 1 + ul = [] + tl = [] + while t <= pwmbit: + u = sin(2*pi*t/pwmbit) + u = u * fpeaktopeak/2 + u = u + zerobeat + u = int(round(u)) + print(' ',u,',\t//',t) + ul.append(u) + tl.append(t) + t = t + 1 + return ul,tl + +import sys +from math import pi, sin +from scitools.std import * + + + +if maxdutycycle <= mindutycycle: + print("Error - maxdutycycle must be greater than mindutycycle") + +if maxdutycycle == 100: + maxamplitude = pwmbit - 1 +else: + maxamplitude = int((round(pwmbit * maxdutycycle/100.0))) + +if mindutycycle == 0: + minamplitude = 1 +else: + minamplitude = int((round(pwmbit * mindutycycle/100.0))) + +peaktopeak = maxamplitude - minamplitude +print("Amplitude from ", minamplitude, " to ", maxamplitude, "(", peaktopeak," Schritte)") + +zerobeat = int(round((minamplitude + maxamplitude)/2.0)) +print("Zerobeat on PWM step ", zerobeat) + +fpeaktopeak = float(peaktopeak) + +ulist,tlist = compute_sinewave(pwmbit,fpeaktopeak,zerobeat) +plot(tlist,ulist) + +savefig('tmp.eps') + +print("Ready.")