-
Notifications
You must be signed in to change notification settings - Fork 135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problems in SRM modelling #428
Comments
Hello Ksp, from your question I guess there is no such tutorial yet? Would you mind to create a tutorial on that if I guide you through? |
Yeah, sure that would be helpful. I do have a slight idea on how to do the step functions (as SRM works on that) but I have not worked on python programming, so yeah it would be a huge help. |
Okay, then I think it would be best to start with the tutorial on FEMM simlations. There you already got individual phase currents defined as function of time. You only need to replace them.
Then with the currents you can run your simulation and check if you get the expected torque values. OT: Do you have further experiance in SRM expecially in 6 phase machines for sinewave drives? |
Ok, I have gone through the tutorial and yeah I think I need a rectangular wave form as a function of time. I just have some problem defining the rectangular waveform. I do not have much experience in SRM and 6 phase machines for sinewave drives. Also, pyleecan does not let me define more or less than 3 phases for SRM, it always gives out an error. I am also a bit confused what does pole pairs mean here? As far as I remember pole pairs meant N-S pairs, but here that does not seem to be the case |
Oh, it's even easier than I thought. There is a dedicated numpy function for rectangular signals. |
Hi @SebGue , |
For the multiphase error, I have to check if the winding generator is able to generate such winding. Anyway you can allways setup an user winding with phase count other than 3. The windings for the different pole pair numbers seem to be valid. What did you expect there? Side note: The machine with 12 pole pairs would not be used with 'normal' machines due to its low winding factor. Is this a valid pole/slot combination in SRM? If you offset the numpy rect function and use a duty cycle of 33% it should also work. Hope that help you for now. |
How do I setup phase count other than 3? Is it by changing the code in json file? Visually, the pole pairs kind of look the same. I think I am just confused in that part like, the dotted represents current going inwards and the other one outwards. If I set pole pairs to 2, then there should be only 2 N-S pairs but there seem to be 3 for each phase (like 3 dotted and 3 checkered) 12 pole pairs is not valid, I was just playing with the GUI to see different outcomes or if it gives an error. Also, I was not able to find a proper documentation on rect function |
Hi, I think there is some mismatch in terminology here. For non SRM the stator allways has a pole count other than the slot count. For SRM I guess the slot respectively tooth count is equal to the pole count?! So what is the topology you actually want to design for now, i.e. how many rotor, stator slots and how many coils/phases do you want to have? (For phase count other than 3, I would first design some similar winding with 3 phases with the generator, export the csv, edit it to my needs and import it as a user winding then.) With 'rect' I meant the rectangular signal mentioned above. |
... sorry, just saw that the rectangular signal function is not of numpy but scipy. |
As the SRM is outer rotor and for an automobile, stator slots-18, rotor slots-12, and phases -6 ( which I was not able to do due to the error shown earlier). I could share the json file but I do not know how to do it |
If you are on the website for writing comments, you just need to drag your file into the comment box. |
SRM_1_outer_rotor.zip |
Hello, you can import the attached csv on an user winding. I don't know if this is the winding arrangement you want to achive. But if you open the csv file you will see how it works and how you can setup your own winding. |
I will also update the import, so you can also import fractions of winding definition later. So repeating arrangements will be easier to setup. |
So, I was going through the csv file you sent me. I understood that in (1,2,18,6) 2 means pole pair, 18 means no of slots, 6 means- no of phases but what does 1 mean? The rad layer and tan layer mean radial and tangential layer of winding, right?
Also you mentioned a mismatch of terminology, for SRM, the number of poles on stator must be more than no of slots on rotor to prevent locking as far as I know. I read it in a research paper while I was gathering some information on them. So, how do I approach this problem to rectify the error |
SRM_1.zip |
The tuple (1, 2, 18, 6) is defining the winding matrix size. The meaning should be (no. rad. layers, no. tan. layers, no. slots, no. phases). I haven't run your code but it seems reasonable. I only would propose the following changes to rect_wav:
Atleast you have to inline 'return' with 'for'. With the 'phi' parameter you only got to define one time vector. |
Yes, the 1 based was not as I am used to MATLAB coding more so it is kind of new to me. Can you tell me what to do about the error of lamination I am getting, as I am not able to run the simulation due to it. |
Missed that error.... |
Hello, I have opened a PR related to the pole pair number for SRM: #430 For the definition of pole pair for SRM, would it be helpful to return p=rotor.Zs/stator.winding.qs ? Or should we return stator.winding.p ? (I'm not an expert of this kind of machine) We also need to define the "set_pole_pair_number". For now it would set stator.winding.p=p and rotor.Zs = 2*p. As p is required to define the winding we could add a "set_pole_pair_number" method to MachineSRM that would only set stator.winding.p (and won't change rotor.Zs). What do you think would be the best solution ? I plan to work on the release tomorrow so we should be able to include these modifications. Best regards, |
I am also not that big of an expert but I do know these points but I think you should return the "statorwinding.p" for pole pair definition. The p widget gets me confusing sometimes (like you can see in the above images #428 (comment)) , I do think it is better to add it on winding definition step. I am not sure how the code fully works but what does "set_pole_pair_number" refer to? Is it stator poles or the rotor poles. Both give different meanings so its a little vague for me. I don't think that no. of poles on stator affect Zs or slots on rotor. I have read about 12/6, 12/8 and 12/10 SRM, so I think that option is not needed. Also, a side suggestion. If possible add an option about singly salient and doubly salient construction. For the singly salient construction no. of pole pairs*2=no of slots but in doubly salient construction no. of pole pairs= no of slots. It would be easier if this is included although you may already know that. |
For most of the machine, we have to enforce the rotor and stator pole pair number matches. This is why the option to select p is set on the "Machine Type" step. The widget on this step calls "set_pole_pair_number" which differ from one machine to another. So the simplest solution is to define that "set_pole_pair_number" for MachineSRM to only set stator.winding.p. We still have to set stator.winding.p since it is required by the star of slot algorithm to generate the winding pattern.
Can you provide us with schematics/screen shots/publications... about the machines you are trying to define/simulate (if there are not confidential) ? Best regards, |
Yes exactly the frequency of pulse in each phase should be Zr*N0/60 as returned by comp_felec() since get_pole_pair_number() now returns Zr (number of rotor slots) for SRM. @Ksp-3086 The torque curve still seems very distorted in my opinion, as you said in your update the rotor initial position seems not to be the best. Assuming you have phase A on first stator tooth, and you start feeding phase A with DC current, the middle of the first rotor slot should be aligned with the middle of the first tooth. That way, the first stator tooth fed by phase A current should attract the rotor tooth coming after the first rotor slot. Concerning torque sign, it is indeed related to the rotor direction. For AC machines, rot_dir is directly deduced in motor convention by comp_rot_dir method, which calculate unit mmf of stator winding and deduce the rotation direction of the fundamental field. For your case I think it should only follow the winding phase pattern. If you feed phase A-B-C etc., the rotor should move in the direction to be successively in front of stator teeth fed by A-B-C etc. Best regards, |
Hi @EmileDvs , First I thought that a high number of rotor poles was the problem and I decreased them, only the amount of ripple is lessened and it has become negative. |
Hello Ksp, for your first point "The SRMs are not able to run ..." I don't know what you mean by that. To check the simulation I would start with a constant (DC) current in one of the phases. The result should be an alternating torque curve. There you can check if the number of periods is correct. Also if your currents phase is right. Further you can easily validate the current losses. If you still get invalid results you may disable periodicity first. Maybe there is still some issue with that for SRM? Regarding the current waveforms, I'm wondering why there is a time scale of 1 second? If you got 1500 rpm the time of one period should be way shorter. (The triangular shape is because of the sampling of the signal where you only got 32 sampling points I guess. But maybe there is some staircase type of plot for better visualization.) Seeing forward to see some results :-) Best regards, Sebastian |
I can't give you a suggestion since your torque curve suffers from aliasing. You got to set some sufficient time period and/or number of time steps first. You should have at least 4 steps per pole pair and per rotor rotation. |
Right, with your T (=qs*tau) of 0.03s you will simulate 1 electrical period, i.e. 1/2 rotor rotation which is fine. (Don't know why you want to simulate 1 s of time. That would require approx. the 30 fold number of time steps and give no additional information.) |
I did not actually choose 1 sec for any profound reason. I was just using the value for all the other designs I made and just making changes to number of time steps needed. So, you are saying that number of time steps is fine. I thought it was a bit extra. So, do you have any suggestions? |
The number of time steps depend on the details you want to resolve. But 32 for a half rotation should be okay for now to check if your simulation settings are valid. |
So the torque graph at high speeds is not favourable I am guessing something is wrong but I am unable to actually figure out what. Why does it drop to 0 at high speeds? |
Therefore you should do the 'DC current test' with e.g. 0.03 s period and 32 steps @ 1000 rpm first. After you get valid results, you can also increase speed (reduce period) and see if results stay valid. |
Yes, I have tried that. I have sent a graph of exactly the same input values you mentioned. These do not look valid to me. First some amount of torque and then 0. |
Okay, then you should attach your current files (simulation script and the machine). Have you checked your current twice? |
code.zip |
I haven't started your simulation, but what I see if I break at |
... I think the only thing to do is to fix the time1 |
So at high speeds my code is not able to compute the current. Thanks for the insight I could not have figured that out. I can try another way to get a rectangular wave. I am still using your suggestion |
I don't know what you mean by "It is not a full rectangular wave but a full time period, ..". For the high speeds you actually don't need them to be calculated, since you only got a static FEA calculation. |
... for the winding losses, they seem also valid (if you have a look at the single phase losses BTW the following code will improve the loss calculation for asymmetric currents.
|
Yeah, I did the calculations using the resistivity in the file and the length and area. I agree. I will need to increase the area and decrease the number of turns. Some questions that I have @BonneelP Some suggestions for the next update for the GUI mainly
|
Hello Sebastian, |
I set T to the 1/p-th fraction of a rotation and tau to T/qs. This is because an electrical period is the time between one pole is aligned with given phase and the next pole is aligned with this phase. |
,,, and added slight phase shift. |
Hello Sebastian, As you said I am closing this issue and opening a discussion #449 . I am going to ask you a question on your method as I am still not fully clear what I did wrong and what exactly you did? |
I have modelled an SRM in pyleecan GUI. However, I need to run the FEMM simulation to get iron and copper losses and torque results. I have the following problems as of now ( as I am new to python and pyleecan both):
The text was updated successfully, but these errors were encountered: