Jump to content
OMRON Forums

hannsx

Members
  • Posts

    102
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

hannsx's Achievements

Collaborator

Collaborator (7/14)

  • First Post
  • Collaborator Rare
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

0

Reputation

  1. For the PWM-Frequency, I had it set to 30kHz, I think. I unfortunately won't be able to investigate that matter any further as I am not going to work on that experiment any more. However, I instructed my successor about it. It could be a consequence of the problem we had in tuning the current loop. And I did not retune the current loop after having changed the the pwm-frequency multiplicator. I think that is the explanation for this problem.
  2. Hi Eric, I am sorry for not having answered earlier. I just a minute ago found out what caused the problem when tuning the motors. It is the routine for setting the hold-current of the motor. It runs in the phase routine of motor[0]. When we turn it of, the current-loop tuning is much easier and draws a nice graph in response. That has been a big problem for me and I am happy that we finally solved that. On the other hand we have not had the time to test different pwm-frequency multiplier on the setup in question. I may not be able to report on that any more because I am leaving my current company and won't be able to work with the PowerBrick any more.
  3. Hi Eric, since I have your attention and you are the most knowledgeable man on these controllers, I would like to ask about the current-loop tuning. I did not find another thread about it. I am often not able do tune the current-loop of small stepper motors apropriately with the tuning tools. In these cases I just go with trial and error. However I realize that this is far from ideal. My guess has been that it might be due to high impedances and bad wiring. But I wonder if you know anything about that problem in general and solutions to it, best regards, hannsx
  4. Hi Eric, thank you. I never payed notice to that. So if I set the value to high I run into problems like that. So does the PowerBrick then actually try to accomodate for the the value I set and makes it cause electrical problems or does it kind of rollover into another value below 30kHz?
  5. Hi Eric, thank you for your response. I made a calculation error... I will check if that's the cause and label the matter as resolved till then.
  6. Hi, I am operating a PowerBrickLV with 5/15A on all 8 Channels. I am trying to find the optimal setup for our experiment with 7 motors. I wanted to set different pwm-frequencies for the motors. When I leave the multiplier for the motor the same, but change it for other motors it affects the motor for which I have not changed it. Is that possible? This works fine for motor on Chan[2]: PowerBrick[0].Chan[0].PwmFreqMult = 1 PowerBrick[0].Chan[1].PwmFreqMult = 1 PowerBrick[0].Chan[2].PwmFreqMult = 1 PowerBrick[0].Chan[3].PwmFreqMult = 1 PowerBrick[1].Chan[0].PwmFreqMult = 1 PowerBrick[1].Chan[1].PwmFreqMult = 1 PowerBrick[1].Chan[2].PwmFreqMult = 1 PowerBrick[1].Chan[3].PwmFreqMult = 1 Now the same motor on Chan[2] doesn't work any more: PowerBrick[0].Chan[0].PwmFreqMult = 1 PowerBrick[0].Chan[1].PwmFreqMult = 1 PowerBrick[0].Chan[2].PwmFreqMult = 1 PowerBrick[0].Chan[3].PwmFreqMult = 2 PowerBrick[1].Chan[0].PwmFreqMult = 2 PowerBrick[1].Chan[1].PwmFreqMult = 2 PowerBrick[1].Chan[2].PwmFreqMult = 1 PowerBrick[1].Chan[3].PwmFreqMult = 1 Any ideas or explanations? Best, hannsx
  7. Hi, I found a problem that may bug other users as well and I wanted to share that issue. I have a project with 2 user-written phase routines and a CCISR. Out of no special reason I set up the usrcode.c-file like this: |phase routine 1 |CCISR |phase routine 2 When I wanted to declare a double-type variable I got the notice: "Double type is not allowed in this context" . I searched the manuals for explanations but could instead find examples which use double data-types. Turns out that all is fine when I change the order the routines to: |phase routine 1 |phase routine 2 |CCISR I know I am not allowed floating point math in the CCISR. But when I declare double variables there I do not even get an error - notice.
  8. Hi Eric, thank you for answering the Question. I think I stumbled upon the cause for my problem when the parameter for Gate3[0].Chan[2].EncCtrl is not being set properly at the project download. When I looked into the newest IDE-Manual out of interest I saw the recommendation for manual system setups to deactivate the download of the system.cfg-file in the project properties. I have not carefully tested it, but I suspect that has messed with some of my setups all along. Since I deactivated that property I have not experienced any 'mysterious' problems with values not being what I set up in my files.
  9. Hi, I wanted to ask how you calculate the Adress for the Gate3[0].HomeCapt[1] Register. My Problem ist that I just do not seem to get it right when I use it in the Interrupt Service Routine. Here is how I calculate it: int Gate3ZeroAdress; int *G3ZhomeCapt ; Gate3ZeroAdress = pshm -> OffsetGate3[0] ; G3ZhomeCapt = (int*)piom + ((Gate3ZeroAdress + 0x80 + 0x74) >> 2) ; 0x80 Is the Offset for Chan[1] 0x74 Is the Offset for HomeCapt The use of the Gate-Array structure volatile GateArray3 *MyFirstGate3IC; MyFirstGate3IC = GetGate3MemPtr(0); and consequently MyFirstGate3IC -> Chan[1].HomeCapt in the Interrupt Servo Routine clears the register and rearms it for the next Interrupt when I read that Register out. When I read out G3ZhomeCapt it does not rearm clear the register or rearms it. Can someone tell me why G3ZhomeCapt != MyFirstGate3IC ->Chan[1].HomeCapt ? Best regards, hannsx
  10. I found out that my main problem seems to be that I do not get the right adresses when I calculate them manually. Therefore I close this Thread.
  11. Hi, I operate a PowerPMAC BrickLV PBL8-H23-000-5E00V00. IDE version: 4.3.2.19. Firmware version: 2.3.2.5. I want to use the CCISR on the high flag from channel 2 and capture the position from that channel. I use the following commands to set up the CCISR: Gate3[0].Chan[1].CaptCtrl = 2 ; Gate3[0].Chan[1].CaptFlagChan = 1 ; Gate3[0].Chan[1].CaptFlagSel = 3 ; Gate3[0].Chan[1].TimerMode = 0 ; Gate3[0].IntCtrl = $00020000 ; //Unmasking position capture on channel 2 as source of CCISR I too have a phase_interrupt function on motor[0] controling holding current for my stepper motors. So my C-code looks like this: header.c ------------------------------------------------------------------------------------------------ #ifdef __KERNEL__ #include #else #define EXPORT_SYMBOL(x) // x #define KERN_ALERT #define printk printf #include #endif #include // Global Rt/Gp Externals and structures #include void CaptCompISR(void); EXPORT_SYMBOL(CaptCompISR); void user_phase( struct MotorData *Mptr); EXPORT_SYMBOL(user_phase); ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ usercode.c ------------------------------------------------------------------------------------------------ #include "usrcode.h" #define _PPScriptMode_ #include "../Include/pp_proj.h" void user_phase( struct MotorData *Mptr){ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(pshm->Motor[1].DesVel==0){ // Stromeinstellungen Runtersetzen pshm->Motor[1].MaxDac = Ch1PeakCur * 28378 / Ch1MaxAdc; pshm->Motor[1].I2tSet = Ch1HoldCur * 28378 / Ch1MaxAdc; pshm->Motor[1].IdCmd = (pshm->Motor[1].I2tSet)/2; pshm->Motor[1].I2tTrip = ( pow((pshm->Motor[1].MaxDac),2) - pow((pshm->Motor[1].I2tSet),2) ) * Ch1TimeAtPeak; } else{ // Stromeinstellungen hochsetzen pshm->Motor[1].MaxDac = Ch1PeakCur * 28378 / Ch1MaxAdc; pshm->Motor[1].I2tSet = Ch1ContCur * 28378 / Ch1MaxAdc; pshm->Motor[1].IdCmd = (pshm->Motor[1].I2tSet)/2; pshm->Motor[1].I2tTrip = ( pow((pshm->Motor[1].MaxDac),2) - pow((pshm->Motor[1].I2tSet),2) ) * Ch1TimeAtPeak; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } void CaptCompISR(void) { //-----------------------------------------------// // Determine IO-Pointer Adresses // //-----------------------------------------------// int MyFirstGate3Adr = pshm -> OffsetGate3[0] ; volatile int *MyFirstGate3IntCtrl = NULL ; // InCtrl direct register pointer declaration MyFirstGate3IntCtrl = ( unsigned int * ) piom + ( ( MyFirstGate3Adr + 0x224 ) >> 2 ) ; // IntCtrl register adress calculation 4bytes Per Word //-----------------------------------------------// int *UshmIntCtrl_isr ; UshmIntCtrl_isr = (int *) pushm + 18 ; *UshmIntCtrl_isr = 84 ; } ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ The phase-routine works without problems. However, when I enable the CCISR by entering {UserAlgo.CaptCompIntr=1} and trigger it by a position capturing event, my BrickLV crashes. I have only used a simple operation of writing a figure to a register which I can access in the watch-table to monitor the succesful execution of the CCISR. When I know that it works, I will use it to store the captured positions to an array in the ushm. I have made use of the CCISR two years ago and cannot remember any issues back then. I guess it might be caused by incomatible soft- and firmware or a known bug. I have not installed the newest soft- and hardware because I have run into issues several times with being able to open my legacy projects. I wanted to ask any reader to see if he sees an error in my CCISR setup, kind regards, hannsx
  12. I think I found the problem. For some reason PowerPMAC does accept me changing the value Gate3[0].Chan[0].EncCtrl from 3 to 7 at startup. When I then correct that, I can phase and jog in reversed direction. I searched for places I might mess with that parameter and set it to 7 again but I the search function does not come up with other instances of it. .... I have the same trouble with stepper motors, which is that PowerPMAC sometimes gives Motor[x].IdCmd the value 0.
  13. PowerBrickLV with 5/15A and 8 axes. Driving stage with brushless motors and using quadrature encoder signals for feedback. Hi, I wanted to reverse the jogging direction on my brushless motor. When I do that I am not able to establish the phase reference any more which worked fine before. I reversed the jogging direction according to the PowerBrickLV hardware reference manual, changing signs on Motor[x].PhaseOffset, Motor[x].PwmSf and changing PowerBrick[0].Chan[0].EncCtrl. Does anyone know a possible explanation or solution for this? Regards, hannsx
  14. When I turned to the support they pointed out that a bad adjustment of the phase-frequency to the biss-c encoder processing time may also cause some of my problems. Indeed I got rid of the wrong position offsets. However one Channel seems to be broken.
  15. PowerBrickLV, model-number: PBL8-H23-000-5E00V00 I have some problems with biss-c some Channels on two of our PowerBricks. On the one PowerBrick it's the following: Channel 1: Random absolut position but readout of change in position. Channel 4: No Readout at all. Channels 5&8: Absolut position sometimes shows zero, sometimes shows correct value. Correct readout of change in position. Other Channels are ok. On the other PowerBrick the problems are: Channels 6&7: Absolut position sometimes shows zero, sometimes shows correct value. Correct readout of change in position. Other Channels are ok. Because I do not get the same problems on both PowerBricks I gues I can rule out a wrong setup. Therefore I conclude that there is a hardware-problem. How should I proceed?
×
×
  • Create New...