Forum: Analoge Elektronik und Schaltungstechnik motorsteuerung pwm über poti


von mauri (Gast)


Lesenswert?

hi

ich habe im youtube eine schaltung gesehen, mit der jemand einen motor 
gesteuert hat und zwar über einen poti.

jetzt habe ich mir gedacht, wie das gemacht wird.
ich hab mir überlegt, dass er die spannung am Poti mit dem ADC des uC 
umwandelt und je nach Wert dann ein Tastverhältnis berechnet und dieses 
dann der pwm übergibt.

ist das so zu kompliziert oder gibt es noch einen einfacheren Weg?
anders weiss ich nämlich nicht wie man das machen könnte.

: Verschoben durch Moderator
von pegel (Gast)


Lesenswert?


von mauri (Gast)


Lesenswert?

pegel schrieb:
> http://3.bp.blogspot.com/-08O-W9B5psc/UZ4oq4r4qxI/...

ok, danke
ich muss mir mal anschauen, was das für ein Teil ist.

eine Frage noch:
ich denk, der Typ hat nur einen uC verwendet, finde das video jetzt 
nicht mehr. ohne dem Teil von dir im Bild 555 mit nur einem uC würde es 
nur so funktionieren, wie ich es vermutet habe oder??

das teil 555 macht es nur einfacher?

von pegel (Gast)


Lesenswert?

Der 555 sollte sich in jeder Bauteil Wühlkiste finden lassen.
Man kann natürlich auch einen µC programmieren, kommt aber darauf an was 
man genau machen will.
Mit dem 555 Timer in der Schaltung kann man PWM im Bereich 5-95% 
erzeugen.

von Ach Du grüne Neune (Gast)


Angehängte Dateien:

Lesenswert?

Hier eine PWM-Motorsteuerung ohne µC. Der Rechteckgenerator kann, so wie 
Pegel es vorgeschlagen hat, durch einen NE555 ersetzt werden.

von pegel (Gast)


Lesenswert?


von mauri (Gast)


Lesenswert?

pegel schrieb:
> Der 555 sollte sich in jeder Bauteil Wühlkiste finden lassen.
> Man kann natürlich auch einen µC programmieren, kommt aber darauf an was
> man genau machen will.
> Mit dem 555 Timer in der Schaltung kann man PWM im Bereich 5-95%
> erzeugen.

ja eben den motor steuern.
müsste ich dann den poti mit dem adc auswerten?

von pegel (Gast)


Lesenswert?

mauri schrieb:
> müsste ich dann den poti mit dem adc auswerten?

Das ist die einfachste Möglichkeit.
Hast du schon einen µC dafür gewählt?

von Ach Du grüne Neune (Gast)


Angehängte Dateien:

Lesenswert?

mauri schrieb:
> müsste ich dann den poti mit dem adc auswerten?

Nein. Das Poti kann direkt an den 555 angeschlossen werden und muss 
nicht extra ausgewertet werden.

von Ach Du grüne Neune (Gast)


Lesenswert?

pegel schrieb:
> Hast du schon einen µC dafür gewählt?

mauri schrieb:
> ist das so zu kompliziert oder gibt es noch einen einfacheren Weg?

Ach so, Du willst also auf jeden Fall einen µC benutzen? Auch gut.

von mauri (Gast)


Lesenswert?

Ach Du grüne Neune schrieb:
> pegel schrieb:
>> Hast du schon einen µC dafür gewählt?

nein habe ich nicht.  ich möchte einfach nur theoretisch wissen, ob man 
das mit einem uC auch machen kann ohne dem 555 baustein

also potispannung auswerten mit adc und tastverhältnis berechnen??

> mauri schrieb:
>> ist das so zu kompliziert oder gibt es noch einen einfacheren Weg?
>
> Ach so, Du willst also auf jeden Fall einen µC benutzen? Auch gut.

ja

von pegel (Gast)


Lesenswert?

Wenn dein µC ein Hardware PWM hat, brauchst du nur den ADC Wert in das 
PWM Register laden, ohne zu rechnen.

von mauri (Gast)


Lesenswert?

pegel schrieb:
> Wenn dein µC ein Hardware PWM hat, brauchst du nur den ADC Wert in
> das
> PWM Register laden, ohne zu rechnen.


ah ok, ich denke, der stm32 hat das nicht, so einen hab ich nämlich da 
liegen. der kann glaub pwm nur über timer.

also kann ich dann so ne steuerung gleich über das bauteil ne555 machen.
gibt es sowas auch in ic smd form? also nicht dip?

von pegel (Gast)


Lesenswert?

mauri schrieb:
> pwm nur über timer

Ist das Gleiche. Braucht auch nur ein Register verändert zu werden.

mauri schrieb:
> smd form

Selbst verständlich.

von MaWin (Gast)


Lesenswert?

Ach Du grüne Neune schrieb:
> Hier eine PWM-Motorsteuerung ohne µC

Bitte nein. Die ist ja so schlecht, da rollen sich einem die Fussnägel 
hoch

mauri schrieb:
> ob man das mit einem uC auch machen kann ohne dem 555 baustein

Kommt auf die Betriebsspannung an. 12V uC sind selten, man bräuchte also 
einen Spannungsregler, und 5V MOSFETs sind begrenzt leistungsfähig, man 
braucht also manchmal einen MOSFET Treiber, da kann ein uC schnell 
unattraktiv werden.

von M. K. (sylaina)


Lesenswert?

mauri schrieb:
> ist das so zu kompliziert oder gibt es noch einen einfacheren Weg?
> anders weiss ich nämlich nicht wie man das machen könnte.

Wenn man das mit einem Mikrocontroller macht dürfte das der einfachste 
Weg sein. Die PWM stellt man dann so ein, dass sie der Auflösung des 
ADCs entspricht, dann braucht man nur den ADC-Wert an das entsprechende 
PWM-Register übergeben. So hab ich das erst die Tage gar gemacht mit 
einem AVR. PWM und ADC bei der Initialisierung des AVRs entsprechend 
eingestellt und gestartet, in der Meinloop den AVR schlafen gelegt und 
in der Interrupt-Routine des ADCs wird lediglich der ADC-Wert an die PWM 
weiter gereicht.

von pegel (Gast)


Lesenswert?

mauri schrieb:
> ich denke, der stm32 hat das nicht, so einen hab ich nämlich da

mauri schrieb:
> gibt es sowas auch in ic smd form?

Ich denke das war der Wendepunkt in der ganzen Geschichte,
was die Glaubwürdigkeit der Beiträge betrifft.

von dolf (Gast)


Lesenswert?

mauri schrieb:
> ist das so zu kompliziert oder gibt es noch einen einfacheren Weg?

ein schnöder tl494 mit passender endstufe dahinter!
schau mal hier!
http://www.atx-netzteil.de/pwm_mit_tl494.htm
mfg
frohes fest.

Beitrag #5255061 wurde von einem Moderator gelöscht.
Beitrag #5255062 wurde von einem Moderator gelöscht.
von dolf (Gast)


Angehängte Dateien:

Lesenswert?

dolf schrieb:
> ein schnöder tl494 mit passender endstufe dahinter!

dazu ne einfache platine.
ist noch ohne überstromerkennung.
das kommt noch später.
als n mos nutz ich den irf540 weil 12v vorhanden sind und der ifr in 
großer stückzahl für lau zu bekommen war.
der tl494 ist von utc (bei reichelt.de geordert).
mfg

von m.n. (Gast)


Lesenswert?


von mauri (Gast)


Lesenswert?

dolf schrieb:
> dolf schrieb:
>> ein schnöder tl494 mit passender endstufe dahinter!
>
> dazu ne einfache platine.
> ist noch ohne überstromerkennung.
> das kommt noch später.
> als n mos nutz ich den irf540 weil 12v vorhanden sind und der ifr in
> großer stückzahl für lau zu bekommen war.
> der tl494 ist von utc (bei reichelt.de geordert).
> mfg

ich bin nicht so geübt mit der Layout-Ansicht
Kannst du mir mal den Schaltplan zeigen?


Ich danke übrigens allen für die Tipps und die Hilfe

von Stefan F. (Gast)


Lesenswert?

> ich denke, der stm32 hat das nicht, so einen hab ich nämlich da liegen.

Doch hat er. Du kannst von meiner Seite die Code-Fragmente für ADC und 
PWM zusammen kopieren - fertig ist die Mühle.

http://stefanfrings.de/stm32/index.html#analog
http://stefanfrings.de/stm32/index.html#pwm

Aber du solltest dich mal entscheiden: Willst du das mit einem µC machen 
(und wenn ja mit welchem) oder lieber doch mit einem einfachen Timer IC?

von mauri (Gast)


Lesenswert?

Stefan U. schrieb:
>> ich denke, der stm32 hat das nicht, so einen hab ich nämlich da
> liegen.
>
> Doch hat er. Du kannst von meiner Seite die Code-Fragmente für ADC und
> PWM zusammen kopieren - fertig ist die Mühle.
>
> http://stefanfrings.de/stm32/index.html#analog
> http://stefanfrings.de/stm32/index.html#pwm
>
> Aber du solltest dich mal entscheiden: Willst du das mit einem µC machen
> (und wenn ja mit welchem) oder lieber doch mit einem einfachen Timer IC?

die seite habe ich mir gleich mal gespeichert..

ich hätte gemeint, ich hätte es schon unmissverständlich formuliert, was 
ich wissen möchte :P

ich wollte eigentlich nur wissen, ob man das so macht, wie ich es 
beschrieben habe im ersten post, wenn man einen uC verwendet.

aber ist auch nicht schlecht, jetzt weiss ich, dass es anders auch geht, 
sogar einfacher.

ich muss das mal aufbauen. den ne555 habe ich mir schonmal bestellt mit 
ein paar mosfets und bipolar transistoren

von Stefan F. (Gast)


Lesenswert?

Probiere die Varianten einfach aus. Jede hat gewisse Vor- und Nachteile.

von dolf (Gast)


Lesenswert?

mauri schrieb:
> ich bin nicht so geübt mit der Layout-Ansicht
> Kannst du mir mal den Schaltplan zeigen?

http://www.atx-netzteil.de/pwm_mit_tl494.htm
schaltplan 2

im on datenblatt war eine schaltung für einen sanftanlauf dabei.
dtc/pin4 -->
10k nach gnd und 10µf nach uref hab ich als werte eingesetzt.
ist auf der platine vorhanden.
beachte auch die hinweise auf der seite von hdt.
ich betreibe damit ne 100w/12v halogenlampe
mfg

von dolf (Gast)


Angehängte Dateien:

Lesenswert?

mauri schrieb:
> aber ist auch nicht schlecht, jetzt weiss ich, dass es anders auch geht,
> sogar einfacher.

hab mal im datenbestand nachgeschaut und das gefunden.
die quali ist etwas gering und den endtransi 2n3055 wird man wohl gegen 
was zeitgemäßes ersetzen.
allerdings hab ich gute erfahrungen mit dem kd503 von tesla gemacht.
der ist kein epitaxial typ und sehr robust.

von mauri (Gast)


Lesenswert?

dolf schrieb:
> mauri schrieb:
>> aber ist auch nicht schlecht, jetzt weiss ich, dass es anders auch geht,
>> sogar einfacher.
>
> hab mal im datenbestand nachgeschaut und das gefunden.
> die quali ist etwas gering und den endtransi 2n3055 wird man wohl gegen
> was zeitgemäßes ersetzen.
> allerdings hab ich gute erfahrungen mit dem kd503 von tesla gemacht.
> der ist kein epitaxial typ und sehr robust.

danke, den TL494 hab ich auch mitbestellt.
ich arbeite mich gerade durch so ein buch thema transistoren etc.
wenn ich das durch habe werde ich das mal versuchen zu verstehen und die 
schaltung aufbauen.

von MaWin (Gast)


Lesenswert?

dolf schrieb:
> hab mal im datenbestand nachgeschaut und das gefunden

Autsch, dein Datenbestand ist wohl aus den 70ger, bevor MOSFETs erfunden 
wurden.
Der TL494 ist im Prinzip gut, wenn man neben der PWM auch einen 
Maximalstrom überwachen will.
Aber der 2N3055 und dazu 0.47uF an der Basis sind verboten langsam und 
fürchterlich uneffektiv.
Das stammt aus dem Halbleiterpleistozän, das baut man heute nicht mehr 
so.

von dolf (Gast)


Lesenswert?

MaWin schrieb:
> Aber der 2N3055 und dazu 0.47uF an der Basis sind verboten langsam und
> fürchterlich uneffektiv.
> Das stammt aus dem Halbleiterpleistozän, das baut man heute nicht mehr
> so.
aber man kann so man will.
wie man die endstufe auslegt ist jedermann selbst überlassen.
tja mosfet waren damals noch nicht so in.
hab nur nach tl494 /494 suchen lassen.
wer will kann ja nen passenden mosfet einpflegen.

von dolf (Gast)


Lesenswert?

mauri schrieb:
> den TL494 hab ich auch mitbestellt.

die utc 494er funktionieren.
vorher war in der hier eingesetzten schaltung ein tl494 von ti drin.
der utc 494 verhält sich ein klein wenig anders als der tl494 von ti.
der utc tl494 kommt näher an die 100% ran als der von ti.
das ist aber auch schon alles.

von mauri (Gast)


Lesenswert?

dolf schrieb:
> mauri schrieb:
>> den TL494 hab ich auch mitbestellt.
>
> die utc 494er funktionieren.
> vorher war in der hier eingesetzten schaltung ein tl494 von ti drin.
> der utc 494 verhält sich ein klein wenig anders als der tl494 von ti.
> der utc tl494 kommt näher an die 100% ran als der von ti.
> das ist aber auch schon alles.

das sind feinheiten und details, die mich als einsteiger sowieso noch 
nicht interessieren.
ich habe von der ganzen schaltung keine ahnung (noch), das sind mir 
tastverhältnisse von 5-95% schnurz ;P

ich will elektronik verstehen.




MaWin schrieb:
> dolf schrieb:
>> hab mal im datenbestand nachgeschaut und das gefunden
>
> Autsch, dein Datenbestand ist wohl aus den 70ger, bevor MOSFETs erfunden
> wurden.
> Der TL494 ist im Prinzip gut, wenn man neben der PWM auch einen
> Maximalstrom überwachen will.
> Aber der 2N3055 und dazu 0.47uF an der Basis sind verboten langsam und
> fürchterlich uneffektiv.
> Das stammt aus dem Halbleiterpleistozän, das baut man heute nicht mehr
> so.

hi MaWin
kannst du mal erklären warum?
ich finde das zwar immer interessant, deine meinungen zu lesen, aber ich 
versteh nur bahnhof.
bitte erklären warum das schlecht ist.

von mauri (Gast)


Lesenswert?

Hallo

Also ich habe mal versucht mit dem stm32l476rg, also dem Nucleo Board, 
das ich habe, eine PWM erzeugt, jedoch aber mit dem STMCUBEMX.
Das funktioniert soweit auch. Dann habe ich im main und vor main 
folgendes drin:

Ich habe das mal über polling versucht, aber wenn ich am Poti drehe, 
muss ich jedes mal resetten, warum nur? Ich habe das doch in der while..
Ich bin jetzt schon 1.5h an der Fehlersuche, weil ich zuerst dachte, es 
sei etwas Anderes.

Ausserdem gefällt mir nicht, dass mir der ADC mit 12bit Auflösung nur 
einen Maximalwert von
0x0F7A zeigt, also 3962 statt 4096?? Warum?
1
/* Includes ------------------------------------------------------------------*/
2
#include "main.h"
3
#include "stm32l4xx_hal.h"
4
5
/* USER CODE BEGIN Includes */
6
7
/* USER CODE END Includes */
8
9
/* Private variables ---------------------------------------------------------*/
10
ADC_HandleTypeDef hadc1;
11
12
TIM_HandleTypeDef htim1;
13
14
/* USER CODE BEGIN PV */
15
/* Private variables ---------------------------------------------------------*/
16
uint16_t adcValue; 
17
/* USER CODE END PV */
18
19
/* Private function prototypes -----------------------------------------------*/
20
void SystemClock_Config(void);
21
static void MX_GPIO_Init(void);
22
static void MX_TIM1_Init(void);
23
static void MX_ADC1_Init(void);
24
                                    
25
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
26
                                
27
28
/* USER CODE BEGIN PFP */
29
/* Private function prototypes -----------------------------------------------*/
30
31
/* USER CODE END PFP */
32
33
/* USER CODE BEGIN 0 */
34
35
/* USER CODE END 0 */
36
37
int main(void)
38
{
39
40
  /* USER CODE BEGIN 1 */
41
42
  /* USER CODE END 1 */
43
44
  /* MCU Configuration----------------------------------------------------------*/
45
46
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
47
  HAL_Init();
48
49
  /* USER CODE BEGIN Init */
50
51
  /* USER CODE END Init */
52
53
  /* Configure the system clock */
54
  SystemClock_Config();
55
56
  /* USER CODE BEGIN SysInit */
57
58
  /* USER CODE END SysInit */
59
60
  /* Initialize all configured peripherals */
61
  MX_GPIO_Init();
62
  MX_TIM1_Init();
63
  MX_ADC1_Init();
64
65
  /* USER CODE BEGIN 2 */
66
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
67
  ADC_Enable(&hadc1);
68
  HAL_ADC_Start(&hadc1);
69
70
  /* USER CODE END 2 */
71
72
  /* Infinite loop */
73
  /* USER CODE BEGIN WHILE */
74
  while (1)
75
  {
76
    if(HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)
77
    {
78
      adcValue = HAL_ADC_GetValue(&hadc1);
79
      TIM1->CCR1 = adcValue;
80
    }
81
   
82
  /* USER CODE END WHILE */
83
84
  /* USER CODE BEGIN 3 */
85
86
  }
87
  /* USER CODE END 3 */
88
89
}

von mauri (Gast)


Lesenswert?

Ach ja der ADC noch, habe aber wie ich sehe den Continuous mode drin..? 
Oder muss da noch etwas anderes rein?
1
static void MX_ADC1_Init(void)
2
{
3
4
  ADC_MultiModeTypeDef multimode;
5
  ADC_ChannelConfTypeDef sConfig;
6
7
    /**Common config 
8
    */
9
  hadc1.Instance = ADC1;
10
  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
11
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
12
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
13
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
14
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
15
  hadc1.Init.LowPowerAutoWait = DISABLE;
16
  hadc1.Init.ContinuousConvMode = ENABLE;
17
  hadc1.Init.NbrOfConversion = 1;
18
  hadc1.Init.DiscontinuousConvMode = DISABLE;
19
  hadc1.Init.NbrOfDiscConversion = 1;
20
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
21
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
22
  hadc1.Init.DMAContinuousRequests = DISABLE;
23
  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
24
  hadc1.Init.OversamplingMode = DISABLE;
25
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
26
  {
27
    _Error_Handler(__FILE__, __LINE__);
28
  }
29
30
    /**Configure the ADC multi-mode 
31
    */
32
  multimode.Mode = ADC_MODE_INDEPENDENT;
33
  if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
34
  {
35
    _Error_Handler(__FILE__, __LINE__);
36
  }
37
38
    /**Configure Regular Channel 
39
    */
40
  sConfig.Channel = ADC_CHANNEL_1;
41
  sConfig.Rank = 1;
42
  sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
43
  sConfig.SingleDiff = ADC_SINGLE_ENDED;
44
  sConfig.OffsetNumber = ADC_OFFSET_NONE;
45
  sConfig.Offset = 0;
46
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
47
  {
48
    _Error_Handler(__FILE__, __LINE__);
49
  }
50
51
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.