
Zitat von
Christopher1

Zitat von
fhs
Du kannst sicher sein, dass eine typisches 1-2 ms Signal alle (etwa) 20 ms funktionieren wird. Wie RP6conrad schon sagte, muss das Signal beim Start des Reglers wahrscheinlich "0" sein (also 1,0 ms oder 0,9 ms), da der Regler den Motor sonst aus Sicherheitsgründen nicht aktiviert.
So hab ich zumindest den Regler zum Laufen gebracht

sooo, hab jetzt alles zusammengebaut.
nun hat das ganze aber net soo geklappt
ich berichte bzw. wiederhole meinen bisherigen aufbau:
1.) reglerspannung an 11V netzteil angeschlossen (plus und minus beachtet)
2.) 3 motorphasen an regler angeschlossen
3.) pwm beispielprogramm (siehe unten) geschrieben/kopiert für atmega32 welches von 0,9-2ms pwm-pulsdauer durchiteriert. Hab leider kein oszi zum testen da, aber das Spannungs-Mittel iterierte von 250mV(1ms)-500mV(2ms) bei VCC=5V, also sah das ganz gut aus
4.) steuerleitung angeschlossen (braun rot gelb)
weiß pinbelegung nicht
- erster Versuch nix tut sich regler wird sehr warm (braun masse; rot pwm am µC, gelb VCC)
- zweiter Versuch nix tut sich regler wird nicht mehr anfassbar heiß (masse und vcc getauscht) -> schnell abgeschalten
weitere Versuche gestoppt.
FRAGE: Wie muss die Steuerleitung zum regler beschalten werden???
PS: Glaub den ersten µC hab ich auch entschärft
, das Programm blieb unverändert, trotzdem messe ich jetzt an pwm und masse 750-1000mv, also 500mV zuviel, is so ein defekt wahrscheinlich? Stromverbrauch ist laut netzteil auch angestiegen. Programmieren geht aber alles noch supi.
Code für PWM:
Code:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define kPinInitCompleteLED PA0
#define kDelay 10000 //10000
#define kReverseDelay 300000 //300000
#define kLowerLimit 225 // Min 225 == 0.9 ms
#define kUpperLimit 500 // Max 525 == 2.1 ms
int
main()
{
volatile long d;
short dir = 1;
// Set LED output pins…
DDRA = _BV(kPinInitCompleteLED);
DDRB = 0; // Port B inputs
// Set up OCR pins (PD4, PD5) as outputs (00110000)…
DDRD = _BV(PD4) | _BV(PD5);
// Set up Timer 1. Timer 1 should reset when
// it reaches TOP = ICR1 (WGM13:0 = 1110b). On
// compare match clear output, at TOP set (COM1A1:0 = 10b).
TCCR1A = _BV(COM1A1) | !_BV(COM1A0) // Both PWM outputs set at TOP,
| _BV(COM1B1) | !_BV(COM1B0) // clear on compare match
| !_BV(FOC1A) | !_BV(FOC1B) // PWM mode, can't force output
| _BV(WGM11) | !_BV(WGM10); // Fast PWM, TOP = ICR1
TCCR1B = !_BV(ICNC1) | !_BV(ICES1) // Disable input capture noise canceler,
// edge select to negative.
| _BV(WGM13) | _BV(WGM12) // Fast PWM, TOP = ICR1
| !_BV(CS12) | _BV(CS11) | _BV(CS10); // clk(i/o) / 1024
// PWM duty cycle…
OCR1A = kLowerLimit;
OCR1B = kLowerLimit;
// PWM period…
ICR1 = 5000;
// Show initialization complete…
PORTA = _BV(kPinInitCompleteLED);
// Loop forever steering left-to-right-to-left…
OCR1A = kLowerLimit; // Min value == 0.9 ms
while (1)
{
d = kDelay;
while (d--);
OCR1A += dir;
if (OCR1A < kLowerLimit)
{
OCR1A = kLowerLimit;
dir = 1;
d = kReverseDelay;
while (d--);
}
if (OCR1A > kUpperLimit) // Max value == 2.1 ms
{
OCR1A = kUpperLimit;
dir = -1;
d = kReverseDelay;
while (d--);
}
}
return 0;
}
Danke fürs Mitgrübeln 
EDIT: ich glaube OCR1A hats wirklich entschärft... ORCA1B zeigt korrekt an... Gleich noch ein paar neue atmegas bestellen
Lesezeichen