[ Vfdmod ] An easy VFD control over MODBUS RTU

More
4 years 7 months ago #236698 by H2B
The interesting thing is that it worked perfectly in Linux, but under Windows it would fail to negotiate an interface.

The data connection is simply 2 twisted wires (I'm using 18AWG, just because I didn't have a spare ethernet/telephone cable laying about), + to +, and - to -, and into a USB to serial adapter off amazon. Don't need to ground the signal wires at all. I did have to increase the default empty characters and time parameters in the .ini file to get it work reliably, so I'd recommend what I've already put in them in my earlier post as a starting point.

So here's what I set up, for 9600 baud, 8N1:
  1. F00.01: 2
  2. F00.06: 9
  3. F00.08: 0
  4. F00.09: 0
  5. F00.22: 9 (this was the missing piece of the puzzle for me, as I could see the H value changing, but not the P value)
  6. F13.00: 1
  7. F13.01: 5
  8. F13.02: 3
  9. F13.03: 20
  10. F13.04: 0.0
  11. F13.05: 1

That's about it! Good luck, should work for you, as long as you plug in your correct motor settings in the VFD and the .ini and .hal file properly!

Please Log in to join the conversation.

More
4 years 7 months ago #236710 by rodw
Thanks, I'll be off to Jaycar today to buy a USB RS485 converter!
I'm sure I have an issue with my TTY outputs.
The other one I found was a linkĀ  on the board to enable RS485.

Can you expand on this comment of yours?

Unfortunately this model requires a reverse command to be sent using a negative percentage to the relative frequency command, which is something I'll try to figure out at a later stage.

Please Log in to join the conversation.

More
4 years 7 months ago #236715 by H2B
So when you issue a CCW command from LinuxCNC, it sends the message across to the correct reverse command address. Problem is, Folinn messed up how they run the firmware, and you need to send aĀ negative percentageĀ command to 0x3000 for it to run in reverse.

At least, that's what I've figured out. On page 160 of the manual, for address 0x1000H, the command for reverse spindle rotation is 0x0002 (they call it reverse running). If I issue that command to the VFD, it simply runs normally at the defined speed. To get it to run in reverse, you need to send, for example, -10000 to address 0x3000H (p161, first row of bottom table, left) for it to be recognized by the VFD as a 100% counter clockwise command to the drive. I haven't tested this out, as I'll have to modify the code and didn't have the time today, but that is what I've understood and observed from the docs.

Please Log in to join the conversation.

More
4 years 7 months ago #236720 by H2B
Hey hitchhiker, this may work, but I'm not sure if your docs state the registers as hexadecimal addresses or decimal values (usually its hex).

I've added some comments in the ini file that are unique to your setup. You'll need to know the max frequency of your VFD since some calculations are based on that to convert to/from speed commands.
Code:
[Common] MaxSpeedRPM=2800 MinSpeedRPM=1 AtSpeedThreshold=0.01 [RS485] SlaveAddress=1 SerialDevice=/dev/ttyUSB0 BaudRate=9600 DataBits=8 Parity=N StopBits=2 ConnectionErrorList=5 ConnectionDelay=2000 [Control] Address=0x40009 RunForwardValue=0x0002 RunReverseValue=0x0004 FaultResetValue=0x1000 StopValue=0x0200 [SpindleRpmIn] FunctionCode=0x06 Address=0x40014 ; the multiplier and divider should result in your RPM converted into a frequency value based on your drive ; for ex, if your max freq is 400Hz and your max speed is 2800 RPM, your M=400 and D=2800 Multiplier=1 Divider=2800 [SpindleRpmOut] Address=0x40201 ; the multiplier and divider should result in your RPM converted from a frequency value reported from the drive ; for ex, if your max freq is 400Hz and your max speed is 2800 RPM, your M=2800 and D=40000 since the docs state it returns in 0.01Hz/rpm (you need to *100 to get Hz) Multiplier=2800 Divider=40000 [output-set-frequency] ; this is your requested setting, not the actual (which is SpindleRpmOut) FunctionCode=0x03 Address0x40205 PinType=float PinName=output-set-frequency ; the multiplier and divider should result in your RPM converted from a frequency value reported from the drive ; for ex, if your max freq is 400Hz and your max speed is 2800 RPM, your M=2800 and D=40000 since the docs state it returns in 0.01Hz/rpm (you need to *100 to get Hz) Multiplier=2800 Divider=40000 [output-current] FunctionCode=0x03 Address0x40202 PinType=float PinName=output-current Multiplier=100 [output-voltage] FunctionCode=0x03 Address0x40203 PinType=float PinName=output-voltage Multiplier=10

Please Log in to join the conversation.

More
4 years 7 months ago #236744 by rodw
Well thanks very much for sharing the config for the BD600 VFD. I got this going today and am very happy.
I did not see any issues with forward and reverse. M3/M4 seemed to do the right thing.
I fitted this to a belt driven machine with 12 different gearing ratios so I'm not sure how to tackle that yetĀ 
I scaled it for the fastest speed.

I did notice the frequency output was not scaled correctly. It was out by a factor of 10
Ā 

Please Log in to join the conversation.

More
4 years 7 months ago #236745 by H2B
You can play around with the multiplier/divider variables in the INI file until its exactly what you need!

From what I've understood of the vfdmod code so far, you'd have to perhaps create a custom python script to switch the values in runtime from a predefined variables file. Not trivial, but not too complicated btw. Maybe worth a feature request to the author of the mod? :dry:

I'll try running an M4 command, as I was using the CW/CCW default buttons in Axis to try the jog.

Please Log in to join the conversation.

More
4 years 7 months ago #236747 by rodw
I think it could be scaled in hal. Each gear has a defined ratio. I might write a custom component to do it but coding the GUI for the selection, I try and avoid. Maybe Lincurve would do it.

Please Log in to join the conversation.

More
4 years 7 months ago #236889 by Todd Zuercher
It is very common for VFDs to read the input for spindle speed to one decimal point. For example, you'd have to input 3000, for the drive to see 300.0hz.

Please Log in to join the conversation.

More
4 years 7 months ago #236902 by rodw

It is very common for VFDs to read the input for spindle speed to one decimal point. For example, you'd have to input 3000, for the drive to see 300.0hz.
Todd, thanks, Last night I wrote a component that lets me select the front belt and back belt and retrieve a scaling factor for the given belt combo based on some tacho data I collected earlier. Also paired it with an extension to the PYVCP panel. So I should be able to send the S command to the component which will scale it to correct Hz before sending it to the VFD.

I cheated though and hardcoded all of the ratios in the component.

Please Log in to join the conversation.

More
4 years 7 months ago #236912 by rodw
It took a bit of doing but it worked!

Attachment not found



I asked for 1590 rpm and he tacho said it was doing 1599 rpm so close enough as there are lots of rounding and truncation errors.

Please Log in to join the conversation.

Time to create page: 0.198 seconds
Powered by Kunena Forum