Open dmnewman3 opened 11 months ago
@npetersen2 @elsevers @Anvar-Khamitov @wchan29 @noguchi-takahiro
Please respond with your thoughts here. I'd like to get a plan in place before any action is started to address this issue.
@dmnewman3 I am also building an analyzer to do this inductance calculations for my project... it is working using FEMM for my buried PM rotor design using 6-phase multi-phase winding.
It seems like we should be able to use the same analyzer for both our needs.. But that means it will need to be more general... not sure if it is really worth it at this point.
@npetersen2 That is good to know, I have things split up and the only thing I am getting caught up on is avoiding hard-coding the 3 phases. Are you hard coding the 6 phases into yours or are you doing it another way?
Yeah the phase number is tricky... One possible way is as follows: The user specifies three things:
num_of_phases
ph1, ph2, ph3
etc.alpha-beta-zero
vectorThese are general and apply to 3 phase, 6 phase, etc.
Then, the flux linkage analyzer excites each phase in the list, gets the flux linkages, and returns the vector. The inductance analyzer uses the transform to convert to alpha-beta
form and gives inductance matrix. It can also post process the alpha-beta inductance matrix into DQ values, etc.
Yeah, I think this looks good. The user could specify key-value parameters in the form of a dictionary. Including phase names, the following may be the inputs:
The analyzer can then open the file, create a new study, set speed and simulation settings, excite one terminal at a time, and extract flux linkages.
@npetersen2 @Anvar-Khamitov @elsevers I am putting the finishing touches on this and will require a review shortly. I ended up only being able to make this for a 3-phase machine, as adding additional phases proved too complicated. Please speak up if you strongly object to this, if not I will be asking for a review shortly.
Hmm. It would be very nice if this could work for an arbitrary number of phases. I see Nathan outlines a plan for this above -- I am not sure where this is at as a trade-off between complexity and usefulness.
Hmm. It would be very nice if this could work for an arbitrary number of phases. I see Nathan outlines a plan for this above -- I am not sure where this is at as a trade-off between complexity and usefulness.
@elsevers I don't think the complexity outweighs the usefulness. I think if this is ever needed for another machine type (6-phase, bearingless, etc.) it can be adapted and included by someone who needs it. The basics are very easy to understand, but the implementation for more complex machines is beyond my capacity.
Hmm. It would be very nice if this could work for an arbitrary number of phases. I see Nathan outlines a plan for this above -- I am not sure where this is at as a trade-off between complexity and usefulness.
@elsevers I don't think the complexity outweighs the usefulness. I think if this is ever needed for another machine type (6-phase, bearingless, etc.) it can be adapted and included by someone who needs it. The basics are very easy to understand, but the implementation for more complex machines is beyond my capacity.
The beauty of the approach @npetersen2 is proposing is that you don't need to be an expert in high phase machine types. You just need to structure your analyzer so that you allow the user to specify the Clarke transform that is used to go to $\alpha-\beta$
@elsevers I am going to upload what I have and we can maybe have a discussion with the group. This PR is only intended to restructure what is already in eMach, not necessarily to change the way any of its physical calculations are done. I have a lot to get done and I can't fit redoing this in. If @npetersen2 wants to change any of what I have, we can make this a feature branch instead of a user branch, which I am happy to do.
@elsevers Re: a conversation I had with @npetersen2 last week, my plan for the (2) analyzers is now as follows:
Flux Linkage Analyzer:
Inductance Analyzer
@elsevers Please confirm this is a setup you are comfortable with. @npetersen2 Please include if I am missing anything, but I believe this is what we had decided on.
Per 5/31 call:
Key points:
Flux linkage analyzer should be able to call these functions in the problem class
delete_all_op()
NewOperatingPoint()
SetPhaseCurrents(operatingPoint, phaseNumber, CurrentValue)
GetFluxLinkage(operatingPoint, phaseNumber)
Run
run all studies -- let the problem class decide how to do the running (like... in parallel or sequential, whatever it wants).# code called by analyzer.analyze()
prob.delete_all_op()
# 1. Create all operating points! One per phase + 0 current case
while m < phaseNum + 1
op(m) = prob.newOperatingPoint()
while i < phaseNum
if i = m
prob.SetPhaseCurrent(op(m), i, 1)
else
prob.SetPhaseCurrent(op(m), i, 0)
end
end
# 2. Run analyses
Run()
# 3. Extract results
while m < phaseNum
while i < phaseNum
flux_link(m,i) = prob.GetFluxLinkage(op(m),i)
end
end
Inductance analyzer should be restructured to the following two analyzers:
The flux linkage analyzer should take a JMAG FEA-drawn machine as the problem and analyze it to result in flux linkage
The inductance/saliency analyzer should effectively post-process the flux linkage data to result in Ld, Lq, and saliency ratio.